summaryrefslogtreecommitdiff
path: root/archaeological_operations/forms.py
diff options
context:
space:
mode:
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
commit9430e8577cff4995c310f5675ea5d2a619554ccf (patch)
treee809cc61d746115afa703042591e8f7cc696bfdb /archaeological_operations/forms.py
parent0e22d62ec2cacfe501bdb7a4f3afde9081366d55 (diff)
downloadIshtar-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.py68
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):