diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2026-03-31 18:45:10 +0200 |
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2026-04-01 10:58:30 +0200 |
| commit | 32f5c7fc925e0dce5dfcca35383dd52ae766bfee (patch) | |
| tree | ad4d9fc64d2bd6ba0508e2da473e5ead00cc7144 /archaeological_context_records | |
| parent | 1e2c6c872a49890657b21f4e313e303f7715c2b8 (diff) | |
| download | Ishtar-32f5c7fc925e0dce5dfcca35383dd52ae766bfee.tar.bz2 Ishtar-32f5c7fc925e0dce5dfcca35383dd52ae766bfee.zip | |
✨ sites - datings: manage datings (forms, sheet)
Diffstat (limited to 'archaeological_context_records')
| -rw-r--r-- | archaeological_context_records/forms.py | 65 | ||||
| -rw-r--r-- | archaeological_context_records/views.py | 79 |
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" ) |
