diff options
Diffstat (limited to 'archaeological_operations/forms.py')
-rw-r--r-- | archaeological_operations/forms.py | 88 |
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) |