diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2020-04-10 17:11:20 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-02-28 12:15:20 +0100 |
commit | 3bba23e35348744b58809a2068d6a8536b6c02e1 (patch) | |
tree | 93817496eadc13648680de8c70e7052ce06cb8df /archaeological_warehouse/forms.py | |
parent | 3176e8cecfbf8e0e4dbcff9d5f8c19f164198010 (diff) | |
download | Ishtar-3bba23e35348744b58809a2068d6a8536b6c02e1.tar.bz2 Ishtar-3bba23e35348744b58809a2068d6a8536b6c02e1.zip |
Container: adapt forms for the new container management
Diffstat (limited to 'archaeological_warehouse/forms.py')
-rw-r--r-- | archaeological_warehouse/forms.py | 79 |
1 files changed, 29 insertions, 50 deletions
diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py index 83289819e..3e754b84a 100644 --- a/archaeological_warehouse/forms.py +++ b/archaeological_warehouse/forms.py @@ -61,17 +61,17 @@ def get_warehouse_field(label=_("Warehouse"), required=True): class SelectedDivisionForm(ManageOldType, forms.Form): form_label = _("Division") base_model = 'associated_division' - associated_models = {'division': models.WarehouseDivision, + associated_models = {'division': models.ContainerType, 'associated_division': models.WarehouseDivisionLink} division = forms.ChoiceField( - label=_("Division"), choices=(), - validators=[valid_id(models.WarehouseDivision)]) + label=_("Container type"), choices=(), + validators=[valid_id(models.ContainerType)]) order = forms.IntegerField(label=_("Order"), min_value=0, required=False) def __init__(self, *args, **kwargs): super(SelectedDivisionForm, self).__init__(*args, **kwargs) self.fields['division'].choices = \ - models.WarehouseDivision.get_types( + models.ContainerType.get_types( initial=self.init_data.get('division') ) @@ -263,32 +263,27 @@ class ContainerForm(CustomForm, ManageOldType, forms.Form): extra_form_modals = ["warehouse", "organization", "person", "container"] associated_models = {'container_type': models.ContainerType, 'location': models.Warehouse, - 'parent': models.Container, - 'responsible': models.Warehouse} + 'parent': models.Container} reference = forms.CharField(label=_("Ref."), max_length=200) old_reference = forms.CharField(label=_("Old reference"), required=False, max_length=200) container_type = forms.ChoiceField(label=_("Container type"), choices=[]) + location = forms.IntegerField( + label=_("Current location (warehouse)"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-warehouse'), + associated_model=models.Warehouse, new=True), + validators=[valid_id(models.Warehouse)]) parent = forms.IntegerField( label=_("Parent container"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-container'), - associated_model=models.Container, new=True), + associated_model=models.Container, new=True, + tips="-" + ), validators=[valid_id(models.Container)], required=False ) - responsible = forms.IntegerField( - label=_("Responsible warehouse"), - widget=widgets.JQueryAutoComplete( - reverse_lazy('autocomplete-warehouse'), - associated_model=models.Warehouse, new=True), - validators=[valid_id(models.Warehouse)]) - location = forms.IntegerField( - label=_("Current location (warehouse)"), - widget=widgets.JQueryAutoComplete( - reverse_lazy('autocomplete-warehouse'), - associated_model=models.Warehouse, new=True), - validators=[valid_id(models.Warehouse)]) comment = forms.CharField(label=_("Comment"), widget=forms.Textarea, required=False) TYPES = [ @@ -303,6 +298,18 @@ class ContainerForm(CustomForm, ManageOldType, forms.Form): kwargs.pop('limits') super(ContainerForm, self).__init__(*args, **kwargs) + def _clean_parent(self): + if not self.cleaned_data.get("parent", None): + return + warehouse_id = self.cleaned_data.get("location") + q = models.Container.objects.filter( + pk=self.cleaned_data["parent"], + location_id=warehouse_id) + if not q.count(): + raise forms.ValidationError( + _("The parent container is not attached to the same " + "warehouse.")) + def clean(self): cleaned_data = self.cleaned_data warehouse = cleaned_data.get("location") @@ -324,7 +331,6 @@ class ContainerForm(CustomForm, ManageOldType, forms.Form): dct['container_type'] = models.ContainerType.objects.get( pk=dct['container_type']) dct['location'] = models.Warehouse.objects.get(pk=dct['location']) - dct['responsible'] = models.Warehouse.objects.get(pk=dct['responsible']) new_item = models.Container(**dct) new_item.save() return new_item @@ -340,7 +346,7 @@ class ContainerModifyForm(ContainerForm): idx = self.fields.pop('index') for key, value in self.fields.items(): fields[key] = value - if key == 'location': + if key == 'container_type': fields['index'] = idx self.fields = fields @@ -348,9 +354,9 @@ class ContainerModifyForm(ContainerForm): # manage unique ID cleaned_data = super(ContainerModifyForm, self).clean() index = cleaned_data.get("index", None) - warehouse = cleaned_data.get("responsible") + warehouse = cleaned_data.get("location") if not index: - q = models.Container.objects.filter(responsible__pk=warehouse) + q = models.Container.objects.filter(location__pk=warehouse) if not q.count(): cleaned_data["index"] = 1 else: @@ -539,33 +545,6 @@ class FindPackagingFormSelection(FindMultipleFormSelection): form_label = _("Packaged finds") -class LocalisationForm(CustomForm, forms.Form): - form_admin_name = _("Container - 020 - Localisation") - form_slug = "container-020-localisation" - form_label = _("Localisation") - - def __init__(self, *args, **kwargs): - self.container, self.warehouse = None, None - if 'warehouse' in kwargs: - self.warehouse = kwargs.pop('warehouse') - if 'container' in kwargs: - self.container = kwargs.pop('container') - super(LocalisationForm, self).__init__(*args, **kwargs) - if not self.warehouse: - return - for divlink in self.warehouse.divisions.order_by('order').all(): - initial = "-" - if self.container: - q = models.ContainerLocalisation.objects.filter( - division__division=divlink.division, - container=self.container) - if q.count(): - initial = q.all()[0].reference - self.fields['division_{}'.format(divlink.pk)] = forms.CharField( - label=str(divlink.division), max_length=200, initial=initial, - ) - - class ContainerDeletionForm(FinalForm): confirm_msg = _("Would you like to delete this container?") confirm_end_msg = _("Would you like to delete this container?") |