diff options
Diffstat (limited to 'archaeological_warehouse/forms.py')
| -rw-r--r-- | archaeological_warehouse/forms.py | 38 | 
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) | 
