diff options
author | Étienne Loks <etienne.loks@proxience.com> | 2014-12-12 23:21:45 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@proxience.com> | 2014-12-12 23:21:45 +0100 |
commit | 00b2c7e6d225fa97567bab088b9c8deef76dda62 (patch) | |
tree | 9203d4e291c65caae20c72870e5eb0e5f9702c40 | |
parent | 982bface0b1d11c614f457a40bffb7c84d987cc7 (diff) | |
download | Ishtar-00b2c7e6d225fa97567bab088b9c8deef76dda62.tar.bz2 Ishtar-00b2c7e6d225fa97567bab088b9c8deef76dda62.zip |
Better management of document generation form (refs #2132)
* check if the document template is compatible with the selected object
* remove dead code (old document generation form)
-rw-r--r-- | archaeological_files/views.py | 14 | ||||
-rw-r--r-- | archaeological_operations/forms.py | 26 | ||||
-rw-r--r-- | archaeological_operations/views.py | 20 |
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: |