summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_files/views.py25
-rw-r--r--archaeological_operations/forms.py4
-rw-r--r--archaeological_operations/urls.py3
-rw-r--r--archaeological_operations/views.py27
-rw-r--r--archaeological_operations/wizards.py55
-rw-r--r--ishtar_common/templates/ishtar/wizard/confirm_wizard.html7
-rw-r--r--ishtar_common/templates/ishtar/wizard/wizard_done.html5
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 %}