diff options
Diffstat (limited to 'ishtar_common/forms.py')
| -rw-r--r-- | ishtar_common/forms.py | 31 | 
1 files changed, 31 insertions, 0 deletions
| diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py index 5be5deafe..973a61228 100644 --- a/ishtar_common/forms.py +++ b/ishtar_common/forms.py @@ -384,6 +384,37 @@ class CustomFormSearch(forms.Form):              self.fields['pk'].widget.user = user +class LockForm(object): +    associated_models = {} + +    def clean(self): +        cleaned_data = self.cleaned_data +        pk_key = None +        if hasattr(self, "pk_key"): +            pk_key = self.pk_key +        elif len(self.associated_models.keys()) == 1: +            pk_key = list(self.associated_models.keys())[0] +        if not pk_key: +            raise NotImplementedError("pk_key must be set") +        if pk_key not in cleaned_data or not cleaned_data[pk_key]: +            raise forms.ValidationError(_(u"You should select an item.")) +        model = self.associated_models[pk_key] +        pks = self.cleaned_data[pk_key] +        if isinstance(pks, int): +            pks = [pks] +        else: +            pks = pks.split(",") +        for pk in pks: +            try: +                item = model.objects.get(pk=pk) +            except model.DoesNotExist: +                raise forms.ValidationError(_("Invalid selection.")) +            if item.locked: +                raise forms.ValidationError(_("This item is locked " +                                              "for edition.")) +        return self.cleaned_data + +  class MultiSearchForm(CustomFormSearch):      SEARCH_AND_SELECT = True      pk_key = 'pks' | 
