summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_files/views.py14
-rw-r--r--archaeological_operations/forms.py26
-rw-r--r--archaeological_operations/views.py20
3 files changed, 39 insertions, 21 deletions
diff --git a/archaeological_files/views.py b/archaeological_files/views.py
index bd91c1040..ba640a785 100644
--- a/archaeological_files/views.py
+++ b/archaeological_files/views.py
@@ -206,17 +206,3 @@ file_administrativeactfile_deletion_wizard = \
label=_(u"File: administrative act deletion"),
url_name='file_administrativeactfile_deletion',)
-def file_administrativeactfile_document(request):
- dct = {}
- if request.POST:
- dct['search_form'] = AdministrativeActFileFormSelection(request.POST)
- dct['template_form'] = DocumentGenerationAdminActForm(request.POST)
- if dct['search_form'].is_valid() and dct['template_form'].is_valid():
- return generatedoc_administrativeactop(request,
- dct['search_form'].cleaned_data.get('pk'),
- dct['template_form'].cleaned_data.get('document_template'))
- else:
- dct['search_form'] = AdministrativeActFileFormSelection()
- dct['template_form'] = DocumentGenerationAdminActForm()
- return render_to_response('ishtar/administrativeact_document.html', dct,
- context_instance=RequestContext(request))
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py
index bb743372d..aa5f789a2 100644
--- a/archaeological_operations/forms.py
+++ b/archaeological_operations/forms.py
@@ -809,14 +809,34 @@ class DocumentGenerationAdminActForm(forms.Form):
document_template = forms.ChoiceField(label=_("Template"), choices=[])
def __init__(self, *args, **kwargs):
- document_type = 'O'
+ self.document_type = 'O'
if 'operation' in kwargs:
- document_type = 'O' if kwargs.pop('operation') else 'F'
+ self.document_type = 'O' if kwargs.pop('operation') else 'F'
+ self.obj = None
+ if 'obj' in kwargs:
+ self.obj = kwargs.pop('obj')
super(DocumentGenerationAdminActForm, self).__init__(*args, **kwargs)
self.fields['document_template'].choices = DocumentTemplate.get_tuples(
dct={'associated_object_name':
'archaeological_operations.models.AdministrativeAct',
- 'acttypes__intented_to':document_type})
+ 'acttypes__intented_to':self.document_type})
+
+ def clean(self):
+ if not self.obj:
+ raise forms.ValidationError(_(u"You should select an administrative"
+ " act."))
+ cleaned_data = self.cleaned_data
+ try:
+ dt = DocumentTemplate.objects.get(
+ pk=self.cleaned_data['document_template'])
+ except DocumentTemplate.DoesNotExist:
+ raise forms.ValidationError(_(u"This document is not intended for "
+ u"this type of act."))
+ if self.obj.act_type.pk not in [act_type.pk
+ for act_type in dt.acttypes.all()]:
+ raise forms.ValidationError(_(u"This document is not intended for "
+ u"this type of act."))
+ return cleaned_data
def save(self, object_pk):
try:
diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py
index 182ae115e..ba66a724a 100644
--- a/archaeological_operations/views.py
+++ b/archaeological_operations/views.py
@@ -357,10 +357,22 @@ def administrativeactfile_document(request, operation=True):
dct = {}
if request.POST:
dct['search_form'] = search_form(request.POST)
- dct['template_form'] = DocumentGenerationAdminActForm(request.POST,
- operation=operation)
- if dct['search_form'].is_valid() and dct['template_form'].is_valid():
- return generatedoc_administrativeactop(request,
+ dct['template_form'] = DocumentGenerationAdminActForm(
+ operation=operation)
+ c_object = None
+ try:
+ if dct['search_form'].is_valid():
+ c_object = \
+ DocumentGenerationAdminActForm._associated_model.objects.get(
+ pk=dct['search_form'].cleaned_data.get('pk'))
+ except DocumentGenerationAdminActForm._associated_model.DoesNotExist:
+ pass
+ if c_object:
+ dct['template_form'] = DocumentGenerationAdminActForm(request.POST,
+ operation=operation,
+ obj=c_object)
+ if dct['template_form'].is_valid():
+ return generatedoc_administrativeactop(request,
dct['search_form'].cleaned_data.get('pk'),
dct['template_form'].cleaned_data.get('document_template'))
else: