From ca98a99c8543fb820e5052839d82b02ad302de9a Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Sat, 24 Dec 2016 13:17:23 +0100 Subject: Container creation form (refs #3392) --- archaeological_warehouse/forms.py | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) (limited to 'archaeological_warehouse/forms.py') diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py index 846e7cb46..5932fc7aa 100644 --- a/archaeological_warehouse/forms.py +++ b/archaeological_warehouse/forms.py @@ -178,6 +178,7 @@ class ContainerForm(ManageOldType, forms.Form): class ContainerModifyForm(ContainerForm): + pk = forms.IntegerField(required=False, widget=forms.HiddenInput) index = forms.IntegerField(_(u"Index")) def __init__(self, *args, **kwargs): @@ -186,6 +187,20 @@ class ContainerModifyForm(ContainerForm): self.fields.keyOrder.insert( self.fields.keyOrder.index("location") + 1, 'index') + def clean(self): + # manage unique ID + cleaned_data = self.cleaned_data + index = cleaned_data.get("index") + warehouse = cleaned_data.get("location") + q = models.Container.objects.filter( + index=index, location__pk=warehouse) + if 'pk' in cleaned_data and cleaned_data['pk']: + q = q.exclude(pk=int(cleaned_data['pk'])) + if q.count(): + raise forms.ValidationError(_(u"This ID already exists for " + u"this warehouse.")) + return cleaned_data + class ContainerSelect(TableSelect): location = get_warehouse_field() @@ -236,18 +251,21 @@ class LocalisationForm(forms.Form): form_label = _(u"Localisation") def __init__(self, *args, **kwargs): - container = kwargs.pop('container') + container, warehouse = None, None + if 'warehouse' in kwargs: + warehouse = kwargs.pop('warehouse') + if 'container' in kwargs: + container = kwargs.pop('container') super(LocalisationForm, self).__init__(*args, **kwargs) - if not container: + if not warehouse: return - for divlink in container.location.warehousedivisionlink_set.order_by( + for divlink in warehouse.warehousedivisionlink_set.order_by( 'order').all(): - initial = None - q = models.ContainerLocalisation.objects.filter( - division=divlink, container=container) - if q.count(): - initial = q.all()[0].reference - else: - initial = u"-" + initial = u"-" + if container: + q = models.ContainerLocalisation.objects.filter( + division=divlink, container=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) -- cgit v1.2.3