summaryrefslogtreecommitdiff
path: root/archaeological_warehouse/forms.py
diff options
context:
space:
mode:
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
commit3bba23e35348744b58809a2068d6a8536b6c02e1 (patch)
tree93817496eadc13648680de8c70e7052ce06cb8df /archaeological_warehouse/forms.py
parent3176e8cecfbf8e0e4dbcff9d5f8c19f164198010 (diff)
downloadIshtar-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.py79
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?")