summaryrefslogtreecommitdiff
path: root/archaeological_context_records
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_context_records')
-rw-r--r--archaeological_context_records/forms.py65
-rw-r--r--archaeological_context_records/views.py79
2 files changed, 3 insertions, 141 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py
index bd59ddb8d..93ff65c25 100644
--- a/archaeological_context_records/forms.py
+++ b/archaeological_context_records/forms.py
@@ -898,68 +898,3 @@ class QAContextRecordFormMulti(QAForm):
def _set_qa_relation_type(self, item, __):
pass
-
-
-class QADating(ManageOldType, forms.Form):
- form_label = _("Dating")
- associated_models = {
- "dating_type_id": models.DatingType,
- "quality_id": models.DatingQuality,
- "period_id": models.Period,
- }
- pk = forms.IntegerField(required=False, widget=forms.HiddenInput)
- reference = forms.CharField(
- label=_("Reference"), validators=[validators.MaxLengthValidator(400)],
- required=False
- )
- period_id = widgets.Select2SimpleField(
- label=_("Period"), required=False, modal="modal-dynamic-form"
- )
- start_date = forms.IntegerField(label=_("Start date"), required=False)
- end_date = forms.IntegerField(label=_("End date"), required=False)
- quality_id = forms.ChoiceField(label=_("Quality"), required=False, choices=[])
- dating_type_id = forms.ChoiceField(label=_("Dating type"), required=False, choices=[])
- precise_dating = forms.CharField(label=_("Precise on this dating"), required=False,
- widget=forms.Textarea)
-
- TYPES = [
- FieldType("dating_type_id", models.DatingType),
- FieldType("quality_id", models.DatingQuality),
- FieldType("period_id", models.Period),
- ]
-
- def __init__(self, *args, **kwargs):
- self.dating_model = kwargs.pop("dating_model")
- self.current_item = kwargs.pop("current_item")
- return super().__init__(*args, **kwargs)
-
- def clean(self):
- data = self.cleaned_data
- reference = data['reference']
- 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."))
-
- def save(self):
- data = copy(self.cleaned_data)
- data[self.dating_model.CURRENT_MODEL_ATTR + "_id"] = self.current_item.pk
- for attr in ['period_id', 'quality_id', 'dating_type_id']:
- if not data.get(attr, None):
- data[attr] = None
- if data.get("pk", None):
- pk = data.pop("pk")
- self.dating_model.objects.filter(pk=pk).update(**data)
- return
- self.dating_model.objects.create(**data)
diff --git a/archaeological_context_records/views.py b/archaeological_context_records/views.py
index 0bc11031d..df7e83141 100644
--- a/archaeological_context_records/views.py
+++ b/archaeological_context_records/views.py
@@ -19,10 +19,9 @@
import json
-from django.core.exceptions import PermissionDenied
from django.db.models import Q
from django.http import HttpResponse, HttpResponseRedirect, Http404
-from django.shortcuts import redirect, render
+from django.shortcuts import redirect
from django.urls import reverse
from ishtar_common.utils import gettext_lazy as _
from django.views.generic import RedirectView
@@ -35,6 +34,8 @@ from archaeological_operations.views import site_extra_context, get_relation_mod
from archaeological_context_records import forms
from ishtar_common.views import (
+ get_dating_delete,
+ get_dating_form,
IshtarMixin,
LoginRequiredMixin,
QAItemForm,
@@ -194,58 +195,6 @@ context_record_modify_relations = get_relation_modify(
filter_operations=True
)
-
-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:
- raise Http404()
- # permission not provided
- if not current_right:
- raise PermissionDenied()
- # specificaly check permission for own item, otherwise already checked
- if "_own_" in current_right:
- if not request.user.has_perm(current_right, item):
- 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)
- if form.is_valid():
- form.save()
- return HttpResponseRedirect(reverse("success"))
- else:
- form = forms.QADating(dating_model=dating_model,
- 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", {
- "page_name": _("Dating"),
- "icon": icon,
- "action_name": button_name,
- "form": form,
- "url": reverse(url_name, args=url_args)
- })
- return _dating_form
-
-
context_record_dating_add = get_dating_form(
models.ContextRecord, models.ContextRecordDating, "context-record-dating-add"
)
@@ -256,28 +205,6 @@ context_record_dating_modify = get_dating_form(
)
-def get_dating_delete(model, dating_model, url_name):
- def _dating_form(request, dating_pk, current_right=None):
- try:
- dating_item = dating_model.objects.get(pk=dating_pk)
- except dating_model.DoesNotExist:
- raise Http404()
- pk = getattr(dating_item, dating_model.CURRENT_MODEL_ATTR + "_id")
- try:
- item = model.objects.get(pk=pk)
- except model.DoesNotExist:
- raise Http404()
- if "_own_" in current_right:
- if not request.user.has_perm(current_right, item):
- raise PermissionDenied()
- elif current_right:
- if not request.user.has_perm(current_right):
- raise PermissionDenied()
- dating_item.delete()
- return HttpResponseRedirect(reverse("success"))
- return _dating_form
-
-
context_record_dating_delete = get_dating_delete(
models.ContextRecord, models.ContextRecordDating, "context-record-dating-delete"
)