summaryrefslogtreecommitdiff
path: root/archaeological_warehouse/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_warehouse/forms.py')
-rw-r--r--archaeological_warehouse/forms.py38
1 files changed, 28 insertions, 10 deletions
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)