Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion report_aeroo/report_aeroo.py
Original file line number Diff line number Diff line change
Expand Up @@ -574,10 +574,29 @@ def create_aeroo_report(self, cr, uid, ids, data, report_xml, context=None, outp
basic.Serializer.add_custom_property(module_info['website'], 'URL')
basic.Serializer.add_creation_date(time.strftime('%Y-%m-%dT%H:%M:%S'))

# stream filter function for translation
def _translate_stream(stream):
for kind, data, pos in stream:
result = (kind, data, pos)
if kind == 'TEXT' and len(data) > 3:
result = (
kind,
pool.get('ir.translation')._get_source(
cr, uid, report_xml.report_name,
report_xml.report_type,
oo_parser.localcontext.get(
'lang',
oo_parser.localcontext['user_lang']),
data),
pos)
yield result

try:
if deferred:
deferred.set_status(_('Generate document'))
data = basic.generate(**oo_parser.localcontext).render().getvalue()
data = basic.generate(**oo_parser.localcontext)\
.filter(_translate_stream)\
.render().getvalue()
except osv.except_osv, e:
raise
except Exception, e:
Expand Down
26 changes: 26 additions & 0 deletions report_aeroo/translate.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@
from openerp.tools import misc
from openerp.tools import osutil
from babel.messages import extract
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
from aeroolib.plugins.opendocument import Template, OOSerializer
import base64
import openerp

_logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -169,6 +175,26 @@ def get_root_view(xml_id):
trans_ids = trans_obj.search(cr, uid, [('type', '=', 'report'),('res_id', '=', obj.id)])
for t in trans_obj.read(cr, uid, trans_ids, ['name','src']):
push_translation(module, "report", t['name'], xml_name, t['src'].encode('UTF-8'))
if obj.in_format in ['oo-odt', 'oo-ods']\
and obj.report_sxw_content:
template_io = StringIO()
template_io.write(
base64.decodestring(obj.report_sxw_content))
serializer = OOSerializer(template_io)
basic = Template(source=template_io, serializer=serializer)

def push_oo_translations(nodes):
for node in nodes:
if not isinstance(node, tuple):
continue
if node[0] == 'TEXT':
push_translation(
module, obj.report_type, name, 0,
node[1].encode('UTF-8'), [str(node[2][2])])
if node[0] == 'SUB':
for n in node[1]:
push_oo_translations(n)
push_oo_translations(basic.stream)
##############################
else:
if obj.report_rml:
Expand Down