diff --git a/src/c3nav/editor/models/changeset.py b/src/c3nav/editor/models/changeset.py index 0b96e515..2c01953a 100644 --- a/src/c3nav/editor/models/changeset.py +++ b/src/c3nav/editor/models/changeset.py @@ -173,7 +173,8 @@ class ChangeSet(models.Model): return self.author_id == request.user.pk and self.state in ('proposed', 'reproposed') def can_commit(self, request): - return self.can_edit(request) and not self.proposed and self.changes and self.can_review(request) + return (self.can_edit(request) and self.can_review(request) + and not self.proposed and self.changes and not self.problems.any) def has_space_access_on_all_objects(self, request, force=False): # todo: reimplement this @@ -266,6 +267,9 @@ class ChangeSet(models.Model): def can_end_review(self, request): return self.can_review(request) and self.state == 'review' and self.assigned_to == request.user + def can_apply(self, request): + return self.can_end_review(request) and not self.problems.any + def can_unreject(self, request): return (self.can_review(request) and self.state in ('rejected', 'finallyrejected') and self.assigned_to == request.user) @@ -332,6 +336,8 @@ class ChangeSet(models.Model): self.save() def apply(self, user): + if self.problems.any: + raise ValueError("Can't apply if there's still problems!") with MapUpdate.lock(): # todo: reimplement update = self.updates.create(user=user, state='applied') diff --git a/src/c3nav/editor/templates/editor/changeset.html b/src/c3nav/editor/templates/editor/changeset.html index f41e826b..2389b8bd 100644 --- a/src/c3nav/editor/templates/editor/changeset.html +++ b/src/c3nav/editor/templates/editor/changeset.html @@ -143,7 +143,7 @@ {% endif %} {% if can_end_review %} - + {% endif %} {% endif %} {% if can_start_review %} diff --git a/src/c3nav/editor/views/changes.py b/src/c3nav/editor/views/changes.py index 46dff553..7a4ec576 100644 --- a/src/c3nav/editor/views/changes.py +++ b/src/c3nav/editor/views/changes.py @@ -219,6 +219,7 @@ def changeset_detail(request, pk): 'can_unpropose': changeset.can_unpropose(request), 'can_start_review': changeset.can_start_review(request), 'can_end_review': changeset.can_end_review(request), + 'can_apply': changeset.can_apply(request), 'can_unreject': changeset.can_unreject(request), 'active': active, }