summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_finds/forms.py28
-rw-r--r--ishtar_common/forms.py57
2 files changed, 59 insertions, 26 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index fff378ff0..75b61cd37 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -330,10 +330,11 @@ class QAFindFormMulti(QAForm):
MULTI = True
REPLACE_FIELDS = [
- 'qa_manufacturing_place', 'qa_checked_type', 'qa_check_date'
+ 'qa_ue', 'qa_manufacturing_place', 'qa_checked_type', 'qa_check_date'
]
HEADERS = {
+ 'qa_ue': FormHeader(_(u"Context record")),
'qa_label': FormHeader(_(u"Identification")),
'qa_description': FormHeader(_(u"Description")),
'qa_checked_type': FormHeader(_(u"Sheet"))
@@ -344,10 +345,16 @@ class QAFindFormMulti(QAForm):
'qa_get_first_base_find__excavation_id', 'qa_museum_id',
'qa_seal_number', 'qa_mark'
]
+ qa_ue = forms.IntegerField(
+ label=_(u"Context record"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-contextrecord'),
+ associated_model=ContextRecord),
+ validators=[valid_id(ContextRecord)], required=False)
qa_label = forms.CharField(
label=_(u"Free ID"),
- validators=[validators.MaxLengthValidator(60)])
+ validators=[validators.MaxLengthValidator(60)], required=False)
qa_denomination = forms.CharField(label=_(u"Denomination"), required=False)
qa_previous_id = forms.CharField(label=_("Previous ID"), required=False)
qa_get_first_base_find__excavation_id = forms.CharField(
@@ -394,6 +401,23 @@ class QAFindFormMulti(QAForm):
FieldType('qa_checked_type', models.CheckedType),
]
+ def _get_qa_ue(self, value):
+ try:
+ value = ContextRecord.objects.get(pk=value).cached_label
+ except ContextRecord.DoesNotExist:
+ return ""
+ return value
+
+ def _set_qa_ue(self, item, user):
+ ue = self.cleaned_data['qa_ue']
+ if not ue:
+ return
+ cr = ContextRecord.objects.get(pk=ue)
+ bf = item.get_first_base_find()
+ bf.context_record = cr
+ bf.history_modifier = user
+ bf.save()
+
class QAFindFormSingle(QAFindFormMulti):
MULTI = False
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py
index 13586e203..4bf9e4bd9 100644
--- a/ishtar_common/forms.py
+++ b/ishtar_common/forms.py
@@ -664,10 +664,13 @@ class QAForm(CustomForm, ManageOldType):
self.fields[k].widget = forms.MultipleHiddenInput()
else:
self.fields[k].widget = forms.HiddenInput()
- if hasattr(self.fields[k], "choices") \
- and k in kwargs['data'] and kwargs['data'][k]:
- self.fields[k].rendered_value = dict(
- self.fields[k].choices)[int(kwargs['data'][k])]
+ if k in kwargs['data'] and kwargs['data'][k]:
+ if hasattr(self, "_get_" + k):
+ self.fields[k].rendered_value = getattr(
+ self, "_get_" + k)(kwargs['data'][k])
+ elif hasattr(self.fields[k], "choices"):
+ self.fields[k].rendered_value = dict(
+ self.fields[k].choices)[int(kwargs['data'][k])]
if k not in self.REPLACE_FIELDS:
self.fields[k].label = unicode(self.fields[k].label) + \
unicode(u" - append to existing")
@@ -675,30 +678,36 @@ class QAForm(CustomForm, ManageOldType):
self.fields[k].label = unicode(self.fields[k].label) + \
unicode(u" - replace")
+ def _set_value(self, item, base_key):
+ value = self.cleaned_data[base_key]
+ if not value:
+ return
+ key = base_key[len("qa_"):]
+ field = item._meta.get_field(key)
+ if getattr(field, 'related_model', None):
+ if type(value) == list:
+ value = [field.related_model.objects.get(pk=v)
+ for v in value]
+ else:
+ value = field.related_model.objects.get(pk=value)
+ if getattr(field, 'many_to_many', None):
+ for v in value:
+ getattr(item, key).add(v)
+ else:
+ if base_key not in self.REPLACE_FIELDS:
+ if getattr(item, key):
+ value = getattr(item, key) + u"\n" + value
+ setattr(item, key, value)
+
def save(self, items, user):
for item in items:
for base_key in self.cleaned_data:
- value = self.cleaned_data[base_key]
- if not value:
- continue
- key = base_key[len("qa_"):]
- field = item._meta.get_field(key)
- if getattr(field, 'related_model', None):
- if type(value) == list:
- value = [field.related_model.objects.get(pk=v)
- for v in value]
- else:
- value = field.related_model.objects.get(pk=value)
- if getattr(field, 'many_to_many', None):
- for v in value:
- getattr(item, key).add(v)
+ if hasattr(self, '_set_' + base_key):
+ getattr(self, '_set_' + base_key)(item, user)
else:
- if base_key not in self.REPLACE_FIELDS:
- if getattr(item, key):
- value = getattr(item, key) + u"\n" + value
- setattr(item, key, value)
- item.history_modifier = user
- item.save()
+ self._set_value(item, base_key)
+ item.history_modifier = user
+ item.save()
class DocumentGenerationForm(forms.Form):