diff options
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')  | 
