summaryrefslogtreecommitdiff
path: root/archaeological_operations/forms.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-10-10 13:42:18 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2024-10-14 16:48:37 +0200
commit435797a54e4d322a46711f303c2fc1fd5286330e (patch)
tree7c209135a17fe9b12fa2e2e844f345debed45d97 /archaeological_operations/forms.py
parent69df0a88eeaafeee81d76a3307e79fe5cad8ecf8 (diff)
downloadIshtar-435797a54e4d322a46711f303c2fc1fd5286330e.tar.bz2
Ishtar-435797a54e4d322a46711f303c2fc1fd5286330e.zip
✨ site and operation relations forms refactoring
Diffstat (limited to 'archaeological_operations/forms.py')
-rw-r--r--archaeological_operations/forms.py70
1 files changed, 45 insertions, 25 deletions
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py
index 433f3fd54..1a41503d4 100644
--- a/archaeological_operations/forms.py
+++ b/archaeological_operations/forms.py
@@ -425,30 +425,59 @@ class RecordRelationsForm(ManageOldType):
class RecordRelationsFormSetBase(FormSet):
delete_widget = forms.CheckboxInput
- # passing left_record should be nicely done with form_kwargs with Django 1.9
- # with no need of all these complications
-
- def __init__(self, *args, **kwargs):
- self.left_record = None
- if 'left_record' in kwargs:
- self.left_record = kwargs.pop('left_record')
- super().__init__(*args, **kwargs)
-
- def _construct_forms(self):
- # instantiate all the forms and put them in self.forms
- self.forms = []
- for i in range(self.total_form_count()):
- self.forms.append(self._construct_form(
- i, left_record=self.left_record))
RecordRelationsFormSet = formset_factory(
- RecordRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase)
+ RecordRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase,
+ extra=3
+)
RecordRelationsFormSet.form_label = _("Operations - Relations")
RecordRelationsFormSet.form_admin_name = _("Operation - Relations")
RecordRelationsFormSet.form_slug = "operation-relations"
+class OpeSiteRelationsForm(ManageOldType):
+ associated_models = {'right_record': models.ArchaeologicalSite}
+
+ right_record = forms.IntegerField(
+ label="Site",
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-archaeologicalsite'),
+ associated_model=models.ArchaeologicalSite),
+ validators=[valid_id(models.ArchaeologicalSite)], required=False)
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.fields["right_record"].label = get_current_profile().get_site_label()
+
+OpeSiteRelationsFormSet = formset_factory(
+ OpeSiteRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase,
+ extra=3
+)
+OpeSiteRelationsFormSet.form_label = _("Operations - Sites relations")
+OpeSiteRelationsFormSet.form_admin_name = _("Operation - Sites - relations")
+OpeSiteRelationsFormSet.form_slug = "operation-site-relations"
+
+
+class SiteOpeRelationsForm(ManageOldType):
+ associated_models = {'right_record': models.Operation}
+
+ right_record = forms.IntegerField(
+ label=_("Operation"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-operation'),
+ associated_model=models.Operation),
+ validators=[valid_id(models.Operation)], required=False)
+
+SiteOpeRelationsFormSet = formset_factory(
+ SiteOpeRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase,
+ extra=3
+)
+SiteOpeRelationsFormSet.form_label = _("Sites - Operations relations")
+SiteOpeRelationsFormSet.form_admin_name = _("Sites - Operation relations")
+SiteOpeRelationsFormSet.form_slug = "siteoperation-relations"
+
+
class OperationSelect(GeoItemSelect):
_model = models.Operation
form_admin_name = _("Operation - 001 - Search")
@@ -671,7 +700,6 @@ class OperationFormGeneral(CustomForm, ManageOldType):
'collaborator': Person,
'remain': models.RemainType,
'period': models.Period,
- 'archaeological_site': models.ArchaeologicalSite,
'town': Town,
}
HEADERS['code_patriarche'] = FormHeader(_("General"))
@@ -691,9 +719,6 @@ class OperationFormGeneral(CustomForm, ManageOldType):
label=_("Towns"),
model=Town,
required=False, remote=True)
- archaeological_site = widgets.Select2MultipleField(
- model=models.ArchaeologicalSite,
- required=False, remote=True)
year = forms.IntegerField(label=_("Year"),
initial=lambda: datetime.datetime.now().year,
validators=[validators.MinValueValidator(1000),
@@ -845,15 +870,10 @@ class OperationFormGeneral(CustomForm, ManageOldType):
if not profile.underwater:
self._remove_fields(("drassm_code",))
data = kwargs.get("data", {}) or kwargs.get("initial", {})
- has_site = any(1 for k, v in data.items() if v and k.split("-")[-1] == "archaeological_site")
- if not has_site and not profile.archaeological_site:
- self._remove_fields(("archaeological_site",))
if 'collaborator' in self.fields:
self.fields['collaborator'].widget.attrs['full-width'] = True
if towns and towns != -1:
self.fields['town'].choices = [('', '--')] + towns
- if 'archaeological_site' in self.fields:
- self.fields['archaeological_site'].label = get_current_profile().get_site_label()
def clean(self):
cleaned_data = self.cleaned_data