diff options
Diffstat (limited to 'archaeological_finds/forms.py')
-rw-r--r-- | archaeological_finds/forms.py | 75 |
1 files changed, 73 insertions, 2 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py index 9fdf2ddf2..997773761 100644 --- a/archaeological_finds/forms.py +++ b/archaeological_finds/forms.py @@ -283,6 +283,58 @@ class FindMultipleFormSelection(forms.Form): return self.cleaned_data +def check_exist(form_name, key): + def func(self): + request = self.request + storage = self.storage + if storage.prefix not in request.session or \ + 'step_data' not in request.session[storage.prefix] or \ + form_name not in request.session[storage.prefix]['step_data'] or\ + form_name + '-' + key not in \ + request.session[storage.prefix]['step_data'][form_name]: + return False + try: + val = request.session[storage.prefix][ + 'step_data'][form_name][form_name + '-' + key] + if val and len(val) > 0: + val = val[0] + return bool(val) + except ValueError: + return False + return func + + +def check_not_exist(form_name, key): + def func(self): + return not check_exist(form_name, key)(self) + return func + + +def check_type_field(form_name, key, model, field): + def func(self): + request = self.request + storage = self.storage + if storage.prefix not in request.session or \ + 'step_data' not in request.session[storage.prefix] or \ + form_name not in request.session[storage.prefix]['step_data'] or\ + form_name + '-' + key not in \ + request.session[storage.prefix]['step_data'][form_name]: + return False + try: + val = model.objects.get(pk=request.session[storage.prefix][ + 'step_data'][form_name][form_name + '-' + key][0]) + return bool(getattr(val, field)) + except (ValueError, model.DoesNotExist): + return False + return func + + +def check_type_not_field(form_name, key, model, field): + def func(self): + return not check_type_field(form_name, key, model, field)(self) + return func + + def check_treatment(form_name, type_key, type_list=[], not_type_list=[]): type_list = [models.TreatmentType.objects.get(txt_idx=tpe).pk for tpe in type_list] @@ -299,8 +351,8 @@ def check_treatment(form_name, type_key, type_list=[], not_type_list=[]): request.session[storage.prefix]['step_data'][form_name]: return False try: - tpe = request.session[storage.prefix]['step_data']\ - [form_name][form_name + '-' + type_key] + tpe = request.session[storage.prefix][ + 'step_data'][form_name][form_name + '-' + type_key] if not tpe: return False type = int(tpe[0]) @@ -342,6 +394,10 @@ class FindDeletionForm(FinalForm): class UpstreamFindFormSelection(FindFormSelection): form_label = _(u"Upstream find") + def __init__(self, *args, **kwargs): + super(UpstreamFindFormSelection, self).__init__(*args, **kwargs) + self.fields['pk'].required = True + ############################################# # Source management for archaelogical finds # ############################################# @@ -482,6 +538,21 @@ class BaseTreatmentForm(SelectFindBasketForm): exclude=['packaging']) self.fields['treatment_type'].help_text = \ models.TreatmentType.get_help(exclude=['packaging']) + self.fields['basket'].required = False + self.fields['basket'].help_text = \ + _(u"Leave it blank if you want to select a single item") + + def clean(self, *args, **kwargs): + try: + treatment = models.TreatmentType.objects.get( + pk=self.cleaned_data['treatment_type'], available=True) + except models.TreatmentType.DoesNotExist: + raise forms.ValidationError(_(u"This treatment type is not " + u"available.")) + if treatment.upstream_is_many and \ + not self.cleaned_data.get('basket'): + raise forms.ValidationError(_(u"This treatment needs a basket.")) + return self.cleaned_data """ #################################### |