summaryrefslogtreecommitdiff
path: root/ishtar/furnitures/views.py
diff options
context:
space:
mode:
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
commit8301e4705fccdf557d5d9e57eb32f9ba66c663b8 (patch)
tree5b761be14e420b8fb41ccaf55773f2f7d0f85611 /ishtar/furnitures/views.py
parentcfe087f98169570c8ace3c1ecaa47c6f6e661f54 (diff)
downloadIshtar-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.py62
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')