diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-09-17 11:10:30 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-09-17 11:29:18 +0200 |
commit | 9430e8577cff4995c310f5675ea5d2a619554ccf (patch) | |
tree | e809cc61d746115afa703042591e8f7cc696bfdb /archaeological_operations/forms.py | |
parent | 0e22d62ec2cacfe501bdb7a4f3afde9081366d55 (diff) | |
download | Ishtar-9430e8577cff4995c310f5675ea5d2a619554ccf.tar.bz2 Ishtar-9430e8577cff4995c310f5675ea5d2a619554ccf.zip |
✨ Operations: remove form from the wizard to put in a specific form
Diffstat (limited to 'archaeological_operations/forms.py')
-rw-r--r-- | archaeological_operations/forms.py | 68 |
1 files changed, 17 insertions, 51 deletions
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index d3c797ff2..9cc73e63b 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -20,6 +20,7 @@ """ Operations forms definitions """ +from copy import copy import datetime from collections import OrderedDict from itertools import groupby @@ -371,12 +372,13 @@ class ParcelFormSet(FormSet): class RecordRelationsForm(ManageOldType): base_model = 'right_relation' - ERROR_MISSING = _("You should select an operation.") current_model = models.RelationType current_related_model = models.Operation - associated_models = {'right_record': models.Operation, 'relation_type': models.RelationType} + ERROR_MISSING = _("You should select an operation.") + ERROR_SAME = _("An operation cannot be related to herself.") + pk = forms.IntegerField(required=False, widget=forms.HiddenInput) relation_type = forms.ChoiceField(label=_("Relation type"), choices=[], required=False) @@ -391,23 +393,20 @@ class RecordRelationsForm(ManageOldType): self.left_record = None if 'left_record' in kwargs: self.left_record = kwargs.pop('left_record') + if "data" in kwargs: + kwargs["data"] = copy(kwargs["data"]) + # clean data if not "real" data + prefix_value = kwargs['prefix'] + '-relation_type' + if not [k for k in kwargs['data'].keys() + if k.startswith(prefix_value) and kwargs['data'][k]]: + kwargs.pop('data') + if 'files' in kwargs: + kwargs.pop('files') super().__init__(*args, **kwargs) self.fields['relation_type'].choices = \ self.current_model.get_types( initial=self.init_data.get('relation_type')) - @classmethod - def _format_lst(cls, current): - nc = [] - for rel, ope in sorted(current): - if not nc or nc[-1][0] != rel: - nc.append([rel, []]) - nc[-1][1].append(ope) - rendered = ";".join( - ["{}{} {}".format(rel, _(":"), " ; ".join(opes)) - for rel, opes in nc]) - return rendered - def clean(self): cleaned_data = self.cleaned_data if (cleaned_data.get('relation_type', None) and @@ -420,42 +419,9 @@ class RecordRelationsForm(ManageOldType): if self.left_record and \ str(cleaned_data.get('right_record', None)) == str( self.left_record.pk): - raise forms.ValidationError( - _("An operation cannot be related to herself.")) + raise forms.ValidationError(self.ERROR_SAME) return cleaned_data - @classmethod - def get_formated_datas(cls, cleaned_datas): - result, current, deleted = [], [], [] - for data in cleaned_datas: - if not data: - continue - try: - relation_type = cls.current_model.objects.get( - pk=data.get('relation_type')) - except cls.current_model.DoesNotExist: - continue - try: - right_record = cls.current_related_model.objects.get( - pk=data.get('right_record')) - except cls.current_related_model.DoesNotExist: - continue - values = [str(relation_type), right_record.reference] - if data.get('DELETE'): - deleted.append(values) - else: - current.append(values) - if current: - nc = [] - for rel, ope in sorted(current): - if not nc or nc[-1][0] != rel: - nc.append([rel, []]) - nc[-1][1].append(ope) - result.append((_("Current relations"), cls._format_lst(current))) - if deleted: - result.append((_("Deleted relations"), " ; ".join(deleted))) - return result - class RecordRelationsFormSetBase(FormSet): delete_widget = forms.CheckboxInput @@ -478,9 +444,9 @@ class RecordRelationsFormSetBase(FormSet): RecordRelationsFormSet = formset_factory( RecordRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase) -RecordRelationsFormSet.form_label = _("Relations") -RecordRelationsFormSet.form_admin_name = _("Operation - 080 - Relations") -RecordRelationsFormSet.form_slug = "operation-080-relations" +RecordRelationsFormSet.form_label = _("Operations - Relations") +RecordRelationsFormSet.form_admin_name = _("Operation - Relations") +RecordRelationsFormSet.form_slug = "operation-relations" class OperationSelect(GeoItemSelect): |