summaryrefslogtreecommitdiff
path: root/archaeological_context_records/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_context_records/forms.py')
-rw-r--r--archaeological_context_records/forms.py86
1 files changed, 63 insertions, 23 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py
index df074c768..36f6ea516 100644
--- a/archaeological_context_records/forms.py
+++ b/archaeological_context_records/forms.py
@@ -43,7 +43,6 @@ from archaeological_context_records import models
from ishtar_common.forms import (
FinalForm,
- FormSet,
reverse_lazy,
get_form_selection,
ManageOldType,
@@ -512,28 +511,6 @@ class RecordFormGeneral(CustomForm, ManageOldType):
return cleaned_data
-class DatingForm(ManageOldType, forms.Form):
- form_label = _("Dating")
- base_model = "dating"
- associated_models = {
- "dating_type": models.DatingType,
- "quality": models.DatingQuality,
- "period": models.Period,
- }
- period = forms.ChoiceField(label=_("Chronological period"), choices=[])
- start_date = forms.IntegerField(label=_("Start date"), required=False)
- end_date = forms.IntegerField(label=_("End date"), required=False)
- quality = forms.ChoiceField(label=_("Quality"), required=False, choices=[])
- dating_type = forms.ChoiceField(label=_("Dating type"), required=False, choices=[])
- precise_dating = forms.CharField(label=_("Precise on this dating"), required=False)
-
- TYPES = [
- FieldType("dating_type", models.DatingType),
- FieldType("quality", models.DatingQuality),
- FieldType("period", models.Period),
- ]
-
-
class RecordFormInterpretation(CustomForm, ManageOldType):
HEADERS = {}
form_label = _("Interpretation")
@@ -921,3 +898,66 @@ 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 = forms.ChoiceField(label=_("Chronological period"), choices=[],
+ required=False)
+ 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']
+ 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)