diff options
| -rw-r--r-- | archaeological_files/views.py | 25 | ||||
| -rw-r--r-- | archaeological_operations/forms.py | 4 | ||||
| -rw-r--r-- | archaeological_operations/urls.py | 3 | ||||
| -rw-r--r-- | archaeological_operations/views.py | 27 | ||||
| -rw-r--r-- | archaeological_operations/wizards.py | 55 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/wizard/confirm_wizard.html | 7 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/wizard/wizard_done.html | 5 | 
7 files changed, 94 insertions, 32 deletions
| diff --git a/archaeological_files/views.py b/archaeological_files/views.py index 456926600..699335a56 100644 --- a/archaeological_files/views.py +++ b/archaeological_files/views.py @@ -18,12 +18,10 @@  # See the file COPYING for details.  import json -import os  from django.db.models import Q  from django.http import HttpResponse  from django.shortcuts import render_to_response -from django.template.defaultfilters import slugify  from django.utils.translation import ugettext_lazy as _  from ishtar_common.views import get_item, show_item, revert_item @@ -36,6 +34,8 @@ from ishtar_common.forms_common import TownFormset  from archaeological_operations.forms import ParcelFormSet  from forms import * +from archaeological_operations.views import generatedoc_administrativeactop +  def autocomplete_file(request):      if not request.user.has_perm('ishtar_common.view_file', models.File) and \         not request.user.has_perm('ishtar_common.view_own_file', models.File) \ @@ -163,25 +163,8 @@ def file_administrativeactfile_document(request):      if request.POST:          dct['search_form'] = AdministrativeActFileFormSelection(request.POST)          if dct['search_form'].is_valid(): -            try: -                act_file = AdministrativeAct.objects.get( -                                   pk=dct['search_form'].cleaned_data.get('pk')) -                doc = act_file.publish() -            except AdministrativeAct.DoesNotExist: -                doc = None -            if doc: -                MIMES = {'odt':'application/vnd.oasis.opendocument.text', -                         'ods':'application/vnd.oasis.opendocument.spreadsheet'} -                ext = doc.split('.')[-1] -                doc_name = slugify(doc.split(os.path.sep)[-1][:-len(ext)])+ "."\ -                                                                          + ext -                mimetype = 'text/csv' -                if ext in MIMES: -                    mimetype = MIMES[ext] -                response = HttpResponse(open(doc), mimetype=mimetype) -                response['Content-Disposition'] = 'attachment; filename=%s' % \ -                                                                        doc_name -                return response +            return generatedoc_administrativeactop(request, +                        dct['search_form'].cleaned_data.get('pk'))      else:          dct['search_form'] = AdministrativeActFileFormSelection()      return render_to_response('ishtar/administrativeact_document.html', dct, diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index 50a5e7f5f..955b2f825 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -613,3 +613,7 @@ class FinalAdministrativeActDeleteForm(FinalForm):      confirm_msg = " "      confirm_end_msg = _(u"Would you like to delete this administrative act?") +class GenerateDocForm(forms.Form): +    form_label = _("Doc generation") +    doc_generation = forms.BooleanField(required=False, +                        label=_(u"Generate the associated doc?")) diff --git a/archaeological_operations/urls.py b/archaeological_operations/urls.py index 13a2c5c35..4453b10ed 100644 --- a/archaeological_operations/urls.py +++ b/archaeological_operations/urls.py @@ -71,6 +71,9 @@ urlpatterns += patterns('archaeological_operations.views',             'show_operation', name='show-historized-operation'),       url(r'get-administrativeactop/(?P<type>.+)?$',             'get_administrativeactop', name='get-administrativeactop'), +     url(r'generatedoc-administrativeactop/(?P<pk>.+)?$', +           'generatedoc_administrativeactop', +           name='generatedoc-administrativeactop'),       url(r'get-operationsource/(?P<type>.+)?$',             'get_operationsource', name='get-operationsource'),       url(r'dashboard_operation/$', 'dashboard_operation', diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py index 97446b635..92ac0373b 100644 --- a/archaeological_operations/views.py +++ b/archaeological_operations/views.py @@ -18,10 +18,12 @@  # See the file COPYING for details.  import json +import os  from django.db.models import Q  from django.http import HttpResponse  from django.shortcuts import render_to_response +from django.template.defaultfilters import slugify  from django.utils.translation import ugettext_lazy as _  from ishtar_common.views import get_item, show_item, revert_item @@ -258,3 +260,28 @@ operation_administrativeactop_deletion_wizard = \      label=_(u"Operation: administrative act deletion"),      url_name='operation_administrativeactop_deletion',) +def generatedoc_administrativeactop(request, pk): +    if (not request.user.has_perm('ishtar_common.view_operation', +                                  models.Operation) +        and not request.user.has_perm('ishtar_common.view_own_operation', +                                      models.Operation)): +        return HttpResponse(mimetype='text/plain') +    try: +        act_file = models.AdministrativeAct.objects.get(pk=pk) +        doc = act_file.publish() +    except models.AdministrativeAct.DoesNotExist: +        doc = None +    if doc: +        MIMES = {'odt':'application/vnd.oasis.opendocument.text', +                 'ods':'application/vnd.oasis.opendocument.spreadsheet'} +        ext = doc.split('.')[-1] +        doc_name = slugify(doc.split(os.path.sep)[-1][:-len(ext)])+ "."\ +                                                                  + ext +        mimetype = 'text/csv' +        if ext in MIMES: +            mimetype = MIMES[ext] +        response = HttpResponse(open(doc), mimetype=mimetype) +        response['Content-Disposition'] = 'attachment; filename=%s' % \ +                                                                doc_name +        return response +    return HttpResponse(mimetype='text/plain') diff --git a/archaeological_operations/wizards.py b/archaeological_operations/wizards.py index 07c8844b9..86af26351 100644 --- a/archaeological_operations/wizards.py +++ b/archaeological_operations/wizards.py @@ -19,6 +19,7 @@  from django.conf import settings  from django.core.exceptions import ObjectDoesNotExist +from django.core.urlresolvers import reverse  from django.db.models import Max  from django.shortcuts import render_to_response  from django.template import RequestContext @@ -27,7 +28,7 @@ from django.utils.translation import ugettext_lazy as _  from ishtar_common.wizards import Wizard, ClosingWizard, DeletionWizard, \                                    SourceWizard  import models -from forms import ParcelForm +from forms import ParcelForm, GenerateDocForm  class OperationWizard(Wizard):      model = models.Operation @@ -267,18 +268,27 @@ class OperationAdministrativeActWizard(OperationWizard):          dct['history_modifier'] = self.request.user          return dct +    def get_context_data(self, form, **kwargs): +        # manage document generation +        context = super(OperationAdministrativeActWizard, self +                                      ).get_context_data(form, **kwargs) +        step = self.steps.current +        if step.startswith('final-'): +            general_form_key = 'administrativeact-' + self.url_name +            try: +                act_type = models.ActType.objects.get( +                    pk=self.session_get_value(general_form_key, "act_type")) +            except models.ActType.DoesNotExist: +                pass +            if act_type and act_type.associated_template.count(): +                context['extra_form'] = GenerateDocForm() +        return context +      def get_associated_item(self, dct):          return self.get_current_object()      def save_model(self, dct, m2m, whole_associated_models, form_list,                     return_object): -        associated_item = self.get_associated_item(dct) -        if not associated_item: -            return self.render(form_list[-1]) -        if isinstance(associated_item, models.File): -            dct['associated_file'] = associated_item -        elif isinstance(associated_item, models.Operation): -            dct['operation'] = associated_item          dct['history_modifier'] = self.request.user          if 'pk' in dct:              dct.pop('pk') @@ -288,10 +298,35 @@ class OperationAdministrativeActWizard(OperationWizard):                  if hasattr(admact, k):                      setattr(admact, k, dct[k])          else: +            associated_item = self.get_associated_item(dct) +            if not associated_item: +                return self.render(form_list[-1]) +            if isinstance(associated_item, models.File): +                dct['associated_file'] = associated_item +            elif isinstance(associated_item, models.Operation): +                dct['operation'] = associated_item              admact = models.AdministrativeAct(**dct)          admact.save() -        res = render_to_response('ishtar/wizard/wizard_done.html', {}, -                                  context_instance=RequestContext(self.request)) +        dct['item'] = admact + +        # check if a doc generation is required +        keys = [self.storage.prefix, 'step_data', 'final-' + self.url_name, +                'doc_generation'] +        level = 0 +        r = self.request.session +        for k in keys: +            if k in r and r[k]: +                level += 1 +                r = r[k] +            else: +                break +        if level == len(keys): # the whole tree as been traversed +            # redirect to the generated doc +            dct['redirect'] = reverse('generatedoc-administrativeactop', +                                      args=[admact.pk]) + +        res = render_to_response('ishtar/wizard/wizard_done.html', dct, +                                 context_instance=RequestContext(self.request))          return res  class OperationEditAdministrativeActWizard(OperationAdministrativeActWizard): diff --git a/ishtar_common/templates/ishtar/wizard/confirm_wizard.html b/ishtar_common/templates/ishtar/wizard/confirm_wizard.html index 76877a716..f67eb5c1e 100644 --- a/ishtar_common/templates/ishtar/wizard/confirm_wizard.html +++ b/ishtar_common/templates/ishtar/wizard/confirm_wizard.html @@ -28,9 +28,14 @@      {{ wizard.form.as_table }}     </table>    {%endif%} -  <p>{%if confirm_end_msg %}{{confirm_end_msg|safe}}{%else%}{% trans "Would you like to save them?" %}{%endif%}</p>    <input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />    {{ previous_fields|safe }} +  {% if extra_form %} +  <table> +  {{ extra_form }} +  </table> +  {% endif %} +  <p>{%if confirm_end_msg %}{{confirm_end_msg|safe}}{%else%}{% trans "Would you like to save them?" %}{%endif%}</p>    <input type="submit" value="{% trans "Validate" %}"/>  </div>  </form> diff --git a/ishtar_common/templates/ishtar/wizard/wizard_done.html b/ishtar_common/templates/ishtar/wizard/wizard_done.html index a7068bbab..7de3edfce 100644 --- a/ishtar_common/templates/ishtar/wizard/wizard_done.html +++ b/ishtar_common/templates/ishtar/wizard/wizard_done.html @@ -2,5 +2,10 @@  {% load i18n %}  {% block content %}  <p>{%trans "Item successfully saved"%}</p> +{% if redirect %} +<script type='text/javascript' language='javascript'> +window.location.href = "{{redirect}}"; +</script> +{% endif %}  </div>  {% endblock %} | 
