186 lines
7.0 KiB
Python
186 lines
7.0 KiB
Python
# -*- encoding: utf-8 -*-
|
|
##############################################################################
|
|
#
|
|
# Copyright (c) 2013 ZestyBeanz Technologies Pvt. Ltd.
|
|
# (http://wwww.zbeanztech.com)
|
|
# contact@zbeanztech.com
|
|
# prajul@zbeanztech.com
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
##############################################################################
|
|
|
|
try:
|
|
import json
|
|
except ImportError:
|
|
import simplejson as json
|
|
import openerp.addons.web.http as openerpweb
|
|
from openerp.addons.web.controllers.main import ExcelExport
|
|
from openerp.addons.web.controllers.main import Export
|
|
import re
|
|
from cStringIO import StringIO
|
|
from lxml import etree
|
|
import trml2pdf
|
|
import time, os
|
|
import locale
|
|
import openerp.tools as tools
|
|
try:
|
|
import xlwt
|
|
except ImportError:
|
|
xlwt = None
|
|
|
|
class ZbExcelExport(ExcelExport):
|
|
_cp_path = '/web/export/zb_excel_export'
|
|
|
|
def from_data(self, fields, rows):
|
|
workbook = xlwt.Workbook()
|
|
worksheet = workbook.add_sheet('Sheet 1')
|
|
style = xlwt.easyxf('align: wrap yes')
|
|
font = xlwt.Font()
|
|
font.bold = True
|
|
style.font = font
|
|
ignore_index = []
|
|
count = 0
|
|
for i, fieldname in enumerate(fields):
|
|
if fieldname.get('header_data_id', False):
|
|
field_name = fieldname.get('header_name', '')
|
|
worksheet.write(0, i-count, field_name, style)
|
|
worksheet.col(i).width = 8000
|
|
else:
|
|
count += 1
|
|
ignore_index.append(i)
|
|
style = xlwt.easyxf('align: wrap yes')
|
|
bold_style = xlwt.easyxf('align: wrap yes')
|
|
font = xlwt.Font()
|
|
font.bold = True
|
|
bold_style.font = font
|
|
for row_index, row in enumerate(rows):
|
|
count = 0
|
|
for cell_index, cell_value in enumerate(row):
|
|
if cell_index not in ignore_index:
|
|
cell_style = style
|
|
if cell_value.get('bold', False):
|
|
cell_style = bold_style
|
|
cellvalue = cell_value.get('data', '')
|
|
if isinstance(cellvalue, basestring):
|
|
cellvalue = re.sub("\r", " ", cellvalue)
|
|
if cell_value.get('number', False) and cellvalue:
|
|
cellvalue = float(cellvalue)
|
|
if cellvalue is False: cellvalue = None
|
|
worksheet.write(row_index + 1, cell_index - count, cellvalue, cell_style)
|
|
else:
|
|
count += 1
|
|
fp = StringIO()
|
|
workbook.save(fp)
|
|
fp.seek(0)
|
|
data = fp.read()
|
|
fp.close()
|
|
return data
|
|
|
|
@openerpweb.httprequest
|
|
def index(self, req, data, token):
|
|
data = json.loads(data)
|
|
return req.make_response(
|
|
self.from_data(data.get('headers', []), data.get('rows', [])),
|
|
headers=[
|
|
('Content-Disposition', 'attachment; filename="%s"'
|
|
% data.get('model', 'Export.xls')),
|
|
('Content-Type', self.content_type)
|
|
],
|
|
cookies={'fileToken': token}
|
|
)
|
|
|
|
class ExportPdf(Export):
|
|
_cp_path = '/web/export/zb_pdf'
|
|
fmt = {
|
|
'tag': 'pdf',
|
|
'label': 'PDF',
|
|
'error': None
|
|
}
|
|
|
|
@property
|
|
def content_type(self):
|
|
return 'application/pdf'
|
|
|
|
def filename(self, base):
|
|
return base + '.pdf'
|
|
|
|
def from_data(self, uid, fields, rows, company_name):
|
|
pageSize=[210.0,297.0]
|
|
new_doc = etree.Element("report")
|
|
config = etree.SubElement(new_doc, 'config')
|
|
def _append_node(name, text):
|
|
n = etree.SubElement(config, name)
|
|
n.text = text
|
|
_append_node('date', time.strftime(str(locale.nl_langinfo(locale.D_FMT).replace('%y', '%Y'))))
|
|
_append_node('PageSize', '%.2fmm,%.2fmm' % tuple(pageSize))
|
|
_append_node('PageWidth', '%.2f' % (pageSize[0] * 2.8346,))
|
|
_append_node('PageHeight', '%.2f' %(pageSize[1] * 2.8346,))
|
|
_append_node('PageFormat', 'a4')
|
|
_append_node('header-date', time.strftime(str(locale.nl_langinfo(locale.D_FMT).replace('%y', '%Y'))))
|
|
_append_node('company', company_name)
|
|
l = []
|
|
t = 0
|
|
temp = []
|
|
tsum = []
|
|
skip_index = []
|
|
header = etree.SubElement(new_doc, 'header')
|
|
i = 0
|
|
for f in fields:
|
|
if f.get('header_data_id', False):
|
|
value = f.get('header_name', "")
|
|
field = etree.SubElement(header, 'field')
|
|
field.text = tools.ustr(value)
|
|
else:
|
|
skip_index.append(i)
|
|
i += 1
|
|
lines = etree.SubElement(new_doc, 'lines')
|
|
for row_lines in rows:
|
|
node_line = etree.SubElement(lines, 'row')
|
|
j = 0
|
|
for row in row_lines:
|
|
if not j in skip_index:
|
|
para = "yes"
|
|
tree = "no"
|
|
value = row.get('data', '')
|
|
if row.get('bold', False):
|
|
para = "group"
|
|
if row.get('number', False):
|
|
tree = "float"
|
|
col = etree.SubElement(node_line, 'col', para=para, tree=tree)
|
|
col.text = tools.ustr(value)
|
|
j += 1
|
|
transform = etree.XSLT(
|
|
etree.parse(os.path.join(tools.config['root_path'],
|
|
'addons/base/report/custom_new.xsl')))
|
|
rml = etree.tostring(transform(new_doc))
|
|
self.obj = trml2pdf.parseNode(rml, title='Printscreen')
|
|
return self.obj
|
|
|
|
class ZbPdfExport(ExportPdf):
|
|
_cp_path = '/web/export/zb_pdf_export'
|
|
|
|
@openerpweb.httprequest
|
|
def index(self, req, data, token):
|
|
data = json.loads(data)
|
|
uid = data.get('uid', False)
|
|
return req.make_response(self.from_data(uid, data.get('headers', []), data.get('rows', []),
|
|
data.get('company_name','')),
|
|
headers=[('Content-Disposition',
|
|
'attachment; filename=PDF Export'),
|
|
('Content-Type', self.content_type)])
|
|
# cookies={'fileToken': long(token)})
|
|
|
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|