diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-02-25 15:58:32 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-02-25 15:58:32 +0100 |
commit | 8301e4705fccdf557d5d9e57eb32f9ba66c663b8 (patch) | |
tree | 5b761be14e420b8fb41ccaf55773f2f7d0f85611 /ishtar/furnitures/views.py | |
parent | cfe087f98169570c8ace3c1ecaa47c6f6e661f54 (diff) | |
download | Ishtar-8301e4705fccdf557d5d9e57eb32f9ba66c663b8.tar.bz2 Ishtar-8301e4705fccdf557d5d9e57eb32f9ba66c663b8.zip |
Work on file sheet and odt export (refs #227)
Diffstat (limited to 'ishtar/furnitures/views.py')
-rw-r--r-- | ishtar/furnitures/views.py | 62 |
1 files changed, 58 insertions, 4 deletions
diff --git a/ishtar/furnitures/views.py b/ishtar/furnitures/views.py index 8511022a4..34d5c4655 100644 --- a/ishtar/furnitures/views.py +++ b/ishtar/furnitures/views.py @@ -24,9 +24,12 @@ Furnitures views import csv import json import datetime +import optparse +from tempfile import NamedTemporaryFile from django.http import HttpResponse, Http404 -from django.template import RequestContext +from django.template import RequestContext, loader +from django.template.defaultfilters import slugify from django.shortcuts import render_to_response, redirect from django.utils.translation import ugettext, ugettext_lazy as _ from django.core.exceptions import ObjectDoesNotExist @@ -35,6 +38,11 @@ from django.db.models import Q from django.core import serializers from ishtar import settings +if settings.XHTML2ODT_PATH: + import sys + sys.path.append(settings.XHTML2ODT_PATH) + from xhtml2odt import xhtml2odt + from menus import menu import forms as ishtar_forms import models @@ -190,7 +198,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[]): for data in datas: res = {'id':data[0], 'link':link_template % reverse('show-'+default_name, - args=[data[0]])} + args=[data[0], ''])} for idx, value in enumerate(data[1:]): if value: res[model.TABLE_COLS[idx].split('.')[-1]] = value @@ -229,9 +237,55 @@ def show_item(model, name): item = model.objects.get(pk=pk) except ObjectDoesNotExist: return HttpResponse(None) + doc_type = 'type' in dct and dct.pop('type') dct['item'] = item - return render_to_response('sheet_%s.html' % name, dct, - context_instance=RequestContext(request)) + context_instance = RequestContext(request) + context_instance.update(dct) + if doc_type == "odt" and settings.XHTML2ODT_PATH and \ + settings.ODT_TEMPLATE: + tpl = loader.get_template('sheet_%s.html' % name) + content = tpl.render(context_instance) + try: + ht, odt = NamedTemporaryFile(), NamedTemporaryFile() + ht.write(content.encode('utf-8')) + options = optparse.Values() + options.input = ht.name + options.output = odt.name + options.template = settings.ODT_TEMPLATE + options.with_network = True + for k, v in (('input', ht.name), + ('output', None), + ('template', settings.ODT_TEMPLATE), + ('with_network', True), + ('top_header_level', 1), + ('img_width', '8cm'), + ('img_height', '6cm'), + ('verbose', False), + ('replace_keyword', 'ODT-INSERT'), + ('cut_start', 'ODT-CUT-START'), + ('htmlid', None), + ('url', "#")): + setattr(options, k, v) + htmlfile = xhtml2odt.HTMLFile(options) + htmlfile.read() + odtfile = xhtml2odt.ODTFile(options) + odtfile.open() + odtfile.import_xhtml(htmlfile.html) + hop = odtfile.save() + except xhtml2odt.ODTExportError, ex: + return HttpResponse(content, content_type="application/xhtml") + response = HttpResponse( + mimetype='application/vnd.oasis.opendocument.text') + n = datetime.datetime.now() + filename = u'%s_%s_%s.odt' % (name, slugify(unicode(item)), + n.strftime('%Y%m%d-%H%M%S')) + response['Content-Disposition'] = 'attachment; filename=%s'%filename + response.write(hop) + return response + else: + tpl = loader.get_template('sheet_%s_window.html' % name) + content = tpl.render(context_instance) + return HttpResponse(content, content_type="application/xhtml") return func get_file = get_item(models.File, 'get_file', 'file') |