diff options
Diffstat (limited to 'archaeological_context_records')
| -rw-r--r-- | archaeological_context_records/forms.py | 23 | ||||
| -rw-r--r-- | archaeological_context_records/urls.py | 12 | ||||
| -rw-r--r-- | archaeological_context_records/views.py | 34 |
3 files changed, 49 insertions, 20 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py index 36f6ea516..75b6d71ef 100644 --- a/archaeological_context_records/forms.py +++ b/archaeological_context_records/forms.py @@ -935,17 +935,18 @@ class QADating(ManageOldType, forms.Form): def clean(self): data = self.cleaned_data reference = data['reference'] - q_attr = { - "reference": reference, - self.dating_model.CURRENT_MODEL_ATTR + "_id": self.current_item.pk - } - q = self.dating_model.objects.filter(**q_attr) - if data.get("pk", None): - q = q.exclude(pk=data["pk"]) - if q.count(): - raise forms.ValidationError( - _("This reference already exists for this item.") - ) + if reference: + q_attr = { + "reference": reference, + self.dating_model.CURRENT_MODEL_ATTR + "_id": self.current_item.pk + } + q = self.dating_model.objects.filter(**q_attr) + if data.get("pk", None): + q = q.exclude(pk=data["pk"]) + if q.count(): + raise forms.ValidationError( + _("This reference already exists for this item.") + ) if any(1 for k in self.cleaned_data if self.cleaned_data[k]): return data raise forms.ValidationError(_("No data provided.")) diff --git a/archaeological_context_records/urls.py b/archaeological_context_records/urls.py index ec529deeb..fe2b6bde1 100644 --- a/archaeological_context_records/urls.py +++ b/archaeological_context_records/urls.py @@ -161,14 +161,22 @@ urlpatterns = [ ), name="context-record-relation-modify", ), - re_path( - r"^context-record-dating/(?P<pk>.+)/$", + path( + "context-record-dating/<int:pk>/", check_permissions(["archaeological_context_records.change_contextrecord", "archaeological_context_records.change_own_contextrecord"])( views.context_record_dating_add ), name="context-record-dating-add", ), + path( + "context-record-dating/<int:pk>/<int:dating_pk>/", + check_permissions(["archaeological_context_records.change_contextrecord", + "archaeological_context_records.change_own_contextrecord"])( + views.context_record_dating_modify + ), + name="context-record-dating-modify", + ), re_path( r"^operation-qa-contextrecord/(?P<pks>[0-9]+)/$", check_permissions(["archaeological_context_records.add_contextrecord"])( diff --git a/archaeological_context_records/views.py b/archaeological_context_records/views.py index 28fb6b18f..057e3ab61 100644 --- a/archaeological_context_records/views.py +++ b/archaeological_context_records/views.py @@ -195,8 +195,8 @@ context_record_modify_relations = get_relation_modify( ) -def get_dating_form(model, dating_model, url_name, action='add'): - def _dating_add(request, pk, current_right=None): +def get_dating_form(model, dating_model, url_name): + def _dating_form(request, pk, dating_pk=None, current_right=None): try: item = model.objects.get(pk=pk) except model.DoesNotExist: @@ -207,6 +207,18 @@ def get_dating_form(model, dating_model, url_name, action='add'): elif current_right: if not request.user.has_perm(current_right): raise PermissionDenied() + initial = {} + if dating_pk: + try: + dating_item = dating_model.objects.get(pk=dating_pk) + initial = dict( + (attr, getattr(dating_item, attr)) + for attr in [ + "pk", "reference", "period_id", "start_date", "end_date", + "quality_id", "dating_type_id", "precise_dating"] + ) + except dating_model.DoesNotExist: + raise Http404() if request.method == 'POST': form = forms.QADating(request.POST, dating_model=dating_model, current_item=item) @@ -215,9 +227,12 @@ def get_dating_form(model, dating_model, url_name, action='add'): return HttpResponseRedirect(reverse("success")) else: form = forms.QADating(dating_model=dating_model, - current_item=item) - button_name = _("Add") if action == "add" else _("Modify") - icon = "fa fa-plus" if action == "add" else "fa fa-pencil" + current_item=item, initial=initial) + button_name = _("Add") if not dating_pk else _("Modify") + icon = "fa fa-plus" if not dating_pk else "fa fa-pencil" + url_args = [pk] + if dating_pk: + url_args.append(dating_pk) return render( request, "ishtar/forms/qa_form.html", { @@ -225,9 +240,9 @@ def get_dating_form(model, dating_model, url_name, action='add'): "icon": icon, "action_name": button_name, "form": form, - "url": reverse(url_name, args=[pk]) + "url": reverse(url_name, args=url_args) }) - return _dating_add + return _dating_form context_record_dating_add = get_dating_form( @@ -235,6 +250,11 @@ context_record_dating_add = get_dating_form( ) +context_record_dating_modify = get_dating_form( + models.ContextRecord, models.ContextRecordDating, "context-record-dating-modify" +) + + class GenerateRelationImage(IshtarMixin, LoginRequiredMixin, RedirectView): upper_model = models.Operation model = models.ContextRecord |
