summaryrefslogtreecommitdiff
path: root/archaeological_operations/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_operations/forms.py')
-rw-r--r--archaeological_operations/forms.py88
1 files changed, 88 insertions, 0 deletions
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py
index 18534fe9d..eab5de15b 100644
--- a/archaeological_operations/forms.py
+++ b/archaeological_operations/forms.py
@@ -1876,3 +1876,91 @@ class QAOperationFormMulti(QAForm):
return ""
return value
+
+class QAOperationDuplicateForm(IshtarForm):
+ qa_code_patriarche = forms.CharField(
+ max_length=500, widget=OAWidget, label=_("Code PATRIARCHE"),
+ required=False)
+ qa_year = forms.IntegerField(label=_("Year"), required=False,
+ validators=[validators.MinValueValidator(1000),
+ validators.MaxValueValidator(2100)])
+ qa_common_name = forms.CharField(label=_("Generic name"), required=False,
+ max_length=500, widget=forms.Textarea)
+ qa_operation_type = forms.ChoiceField(label=_("Operation type"), choices=[])
+
+ TYPES = [
+ FieldType('qa_operation_type', models.OperationType),
+ ]
+
+ def __init__(self, *args, **kwargs):
+ self.user = None
+ if 'user' in kwargs:
+ self.user = kwargs.pop('user')
+ if hasattr(self.user, 'ishtaruser'):
+ self.user = self.user.ishtaruser
+ self.operation = kwargs.pop('items')[0]
+ super(QAOperationDuplicateForm, self).__init__(*args, **kwargs)
+
+ self.fields['qa_year'].initial = self.operation.year
+ self.fields['qa_common_name'].initial = self.operation.common_name
+
+ self.fields["qa_operation_type"].initial = \
+ self.operation.operation_type.pk
+
+ def clean_qa_code_patriarche(self):
+ code = self.cleaned_data['qa_code_patriarche']
+ if models.Operation.objects \
+ .filter(code_patriarche=code).count():
+ raise forms.ValidationError(_("This code already exists."))
+ return code
+
+ def save(self):
+ data = {"operation_code": None}
+ for k in ("code_patriarche", "common_name", "year"):
+ data[k] = self.cleaned_data.get("qa_" + k, None)
+ try:
+ data["operation_type"] = models.OperationType.objects.get(
+ pk=self.cleaned_data["qa_operation_type"], available=True
+ )
+ except models.OperationType.DoesNotExist:
+ return
+ operation = self.operation.duplicate(self.user, data=data)
+ # clear associated sites
+ operation.archaeological_sites.clear()
+ operation.skip_history_when_saving = True
+ operation._cached_label_checked = False
+ operation._search_updated = False
+ operation._no_move = True
+ operation.save() # regen of labels
+ return operation
+
+
+class QAArchaeologicalSiteDuplicateForm(IshtarForm):
+ qa_reference = forms.CharField(label=_("Reference"), max_length=200)
+ qa_name = forms.CharField(label=_("Name"), max_length=200, required=False)
+
+ def __init__(self, *args, **kwargs):
+ self.user = None
+ if 'user' in kwargs:
+ self.user = kwargs.pop('user')
+ if hasattr(self.user, 'ishtaruser'):
+ self.user = self.user.ishtaruser
+ self.site = kwargs.pop('items')[0]
+ super(QAArchaeologicalSiteDuplicateForm, self).__init__(*args, **kwargs)
+
+ self.fields['qa_reference'].initial = (
+ self.site.reference or "") + str(_(" - duplicate"))
+ self.fields['qa_name'].initial = self.site.name
+
+ def clean_qa_reference(self):
+ reference = self.cleaned_data['qa_reference']
+ if models.ArchaeologicalSite.objects \
+ .filter(reference=reference).count():
+ raise forms.ValidationError(_("This reference already exists."))
+ return reference
+
+ def save(self):
+ data = {}
+ for k in ("name", "reference"):
+ data[k] = self.cleaned_data.get("qa_" + k, None)
+ return self.site.duplicate(self.user, data=data)