~unifield-team/unifield-wm/us-826

« back to all changes in this revision

Viewing changes to spreadsheet_xml/spreadsheet_xml_write.py

  • Committer: jf
  • Date: 2014-06-18 08:26:21 UTC
  • Revision ID: jfb@tempo-consulting.fr-20140618082621-cptq430pbwqo6z1t
Tags: pilot3.1b2
UFTP-249 [FIX] Reference field not imported in Unifield when importing register lines
lp:~unifield-team/unifield-wm/UFTP-78 2000..2001

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
from osv import osv
8
8
from report_webkit.webkit_report import WebKitParser
9
9
from report import report_sxw
10
 
 
 
10
import os
 
11
import netsvc
 
12
import pooler
11
13
from mako.template import Template
12
14
from mako import exceptions
 
15
from mako.runtime import Context
 
16
 
13
17
from tools.misc import file_open
14
18
import pooler
 
19
import addons
 
20
import time
 
21
import zipfile
 
22
import tempfile
 
23
import codecs
15
24
 
16
25
class SpreadsheetReport(WebKitParser):
17
26
    _fields_process = {
32
41
        if not default_name:
33
42
            default_name = 'Sheet %s' % (self.total_sheet_number, )
34
43
 
35
 
        default_name = default_name[0:sheet_max_size]
 
44
        default_name = default_name[0:sheet_max_size].replace('/','_')
36
45
 
37
46
        if default_name in self.sheet_name_used:
38
47
            default_name = '%s %s'% (default_name[0:sheet_max_size - len('%s' % self.total_sheet_number) - 1], self.total_sheet_number)
42
51
        return default_name
43
52
 
44
53
    def create_single_pdf(self, cr, uid, ids, data, report_xml, context=None):
 
54
        if context is None:
 
55
            context = {}
 
56
        if report_xml.report_type != 'webkit':
 
57
            return super(WebKitParser,self).create_single_pdf(cr, uid, ids, data, report_xml, context=context)
 
58
 
 
59
        self.report_xml = report_xml
 
60
        self.parser_instance = self.parser(cr, uid, self.name2, context=context)
 
61
        self.pool = pooler.get_pool(cr.dbname)
 
62
 
 
63
        if not context.get('splitbrowse'):
 
64
            objs = self.getObjects(cr, uid, ids, context)
 
65
        else:
 
66
            objs = []
 
67
            self.parser_instance.localcontext['ids'] = ids
 
68
            self.parser_instance.localcontext['context'] = context
 
69
        self.parser_instance.set_context(objs, data, ids, report_xml.report_type)
 
70
 
 
71
        template = False
 
72
        if report_xml.report_file:
 
73
            path = addons.get_module_resource(report_xml.report_file)
 
74
            if path and os.path.exists(path):
 
75
                template = file(path).read()
 
76
 
45
77
        if self.tmpl:
46
78
            f = file_open(self.tmpl)
47
 
            report_xml.report_webkit_data = f.read()
48
 
            report_xml.report_file = None
49
 
        report_xml.webkit_debug = 1
50
 
        report_xml.header= " "
51
 
        report_xml.webkit_header.html = "${_debug or ''|n}"
52
 
        return super(SpreadsheetReport, self).create_single_pdf(cr, uid, ids, data, report_xml, context)
 
79
            template = f.read()
 
80
            f.close()
 
81
 
 
82
        if not template:
 
83
            raise osv.except_osv(_('Error!'), _('Webkit Report template not found !'))
 
84
 
 
85
        self.localcontext.update({'lang': context.get('lang')})
 
86
        self.parser_instance.localcontext.update({'setLang':self.setLang})
 
87
        self.parser_instance.localcontext.update({'formatLang':self.formatLang})
 
88
 
 
89
 
 
90
        null, tmpname = tempfile.mkstemp()
 
91
        fileout = codecs.open(tmpname, 'wb', 'utf8')
 
92
        body_mako_tpl = Template(template, input_encoding='utf-8', default_filters=['unicode'])
 
93
        try:
 
94
            mako_ctx = Context(fileout, _=self.translate_call, **self.parser_instance.localcontext)
 
95
            body_mako_tpl.render_context(mako_ctx)
 
96
            fileout.close()
 
97
        except Exception, e:
 
98
            msg = exceptions.text_error_template().render()
 
99
            netsvc.Logger().notifyChannel('Webkit render', netsvc.LOG_ERROR, msg)
 
100
            raise osv.except_osv(_('Webkit render'), msg)
 
101
 
 
102
        # circular reference on parse_instance, force memory free
 
103
        del self.parser_instance
 
104
 
 
105
        if context.get('zipit'):
 
106
            null1, tmpzipname = tempfile.mkstemp()
 
107
            zf = zipfile.ZipFile(tmpzipname, 'w')
 
108
            zf.write(tmpname, 'export_result.xls', zipfile.ZIP_DEFLATED)
 
109
            zf.close()
 
110
            out = file(tmpzipname, 'rb').read()
 
111
            os.close(null1)
 
112
            os.close(null)
 
113
            os.unlink(tmpzipname)
 
114
            os.unlink(tmpname)
 
115
            return (out, 'zip')
 
116
 
 
117
        out = file(tmpname, 'rb').read()
 
118
        os.close(null)
 
119
        os.unlink(tmpname)
 
120
        return (out, 'xls')
53
121
 
54
122
    def getObjects(self, cr, uid, ids, context):
55
123
        table_obj = pooler.get_pool(cr.dbname).get(self.table)
60
128
 
61
129
    def create(self, cr, uid, ids, data, context=None):
62
130
        a = super(SpreadsheetReport, self).create(cr, uid, ids, data, context)
63
 
        return (a[0], 'xls')
64
 
 
65
 
 
 
131
        # This permit to test XLS report generation with tools.tests_reports without given some warning
 
132
        # Cf. tools/tests_reports.py:89
 
133
        if context and context.get('from_yml', False) and context.get('from_yml') is True:
 
134
            return (a[0], 'foobar')
 
135
        return a
66
136
 
67
137
class SpreadsheetCreator(object):
68
138
    def __init__(self, title, headers, datas):