summaryrefslogtreecommitdiff
path: root/archaeological_context_records
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_context_records')
-rw-r--r--archaeological_context_records/forms.py23
-rw-r--r--archaeological_context_records/urls.py12
-rw-r--r--archaeological_context_records/views.py34
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