summaryrefslogtreecommitdiff
path: root/archaeological_finds/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_finds/forms.py')
-rw-r--r--archaeological_finds/forms.py75
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
"""
####################################