[IMP] report: use openerp.report.render_report() instead of LocalService().create().
bzr revid: vmt@openerp.com-20130222124801-zhhbw2bgghhf6rg6
This commit is contained in:
parent
0cb53890df
commit
729d969fd9
|
@ -6,6 +6,8 @@ Changelog
|
|||
`trunk`
|
||||
-------
|
||||
|
||||
- Almost removed ``LocalService()``. For reports,
|
||||
``openerp.report.render_report()`` can be used.
|
||||
- Added the :ref:`Long polling <longpolling-worker>` worker type.
|
||||
- Added :ref:`orm-workflows` to the ORM.
|
||||
- Added :ref:`routing-decorators` to the RPC and WSGI stack.
|
||||
|
|
|
@ -109,6 +109,39 @@ class report_xml(osv.osv):
|
|||
opj('addons',r['report_xml']),
|
||||
r['report_xsl'] and opj('addons',r['report_xsl']))
|
||||
|
||||
def render_report(self, cr, uid, ids, name, data, context=None):
|
||||
"""
|
||||
Look up a report definition and render the report for the provided IDs.
|
||||
"""
|
||||
import openerp
|
||||
import operator
|
||||
import os
|
||||
opj = os.path.join
|
||||
|
||||
cr.execute("SELECT * FROM ir_act_report_xml WHERE report_name=%s", (name,))
|
||||
new_report = None
|
||||
for r in cr.dictfetchall():
|
||||
if r['report_rml'] or r['report_rml_content_data']:
|
||||
if r['parser']:
|
||||
kwargs = { 'parser': operator.attrgetter(r['parser'])(openerp.addons) }
|
||||
else:
|
||||
kwargs = {}
|
||||
new_report = report_sxw('report.'+r['report_name'], r['model'],
|
||||
opj('addons',r['report_rml'] or '/'), header=r['header'], register=False, **kwargs)
|
||||
elif r['report_xsl']:
|
||||
new_report = report_rml('report.'+r['report_name'], r['model'],
|
||||
opj('addons',r['report_xml']),
|
||||
r['report_xsl'] and opj('addons',r['report_xsl']), register=False)
|
||||
else:
|
||||
# TODO:
|
||||
# Temporarily, we look reports up the _reports dict.
|
||||
# raise Exception, "Unhandled report type: %s" % r
|
||||
pass
|
||||
if new_report is None:
|
||||
new_report = interface.report_int._reports['report.' + name]
|
||||
|
||||
return new_report.create(cr, uid, ids, data, context)
|
||||
|
||||
_name = 'ir.actions.report.xml'
|
||||
_inherit = 'ir.actions.actions'
|
||||
_table = 'ir_act_report_xml'
|
||||
|
|
|
@ -82,6 +82,7 @@
|
|||
<group string="Miscellaneous">
|
||||
<field name="multi"/>
|
||||
<field name="auto"/>
|
||||
<field name="parser"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
|
|
|
@ -46,37 +46,10 @@ import openerp
|
|||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
# TODO LocalService is deprecated.
|
||||
def LocalService(name, cursor=None):
|
||||
# Special case for addons support, will be removed in a few days when addons
|
||||
# are updated to directly use openerp.osv.osv.service.
|
||||
if name == 'workflow':
|
||||
return openerp.workflow
|
||||
|
||||
if cursor is None: # TODO temporary, while refactoring
|
||||
registered_report = openerp.report.interface.report_int._reports[name]
|
||||
print ">>> Oh noes no cursor."
|
||||
return registered_report
|
||||
else:
|
||||
from openerp.report.report_sxw import report_sxw, report_rml
|
||||
cr = cursor
|
||||
opj = os.path.join
|
||||
cr.execute("SELECT * FROM ir_act_report_xml WHERE report_name=%s", (name[len('report.'):],))
|
||||
result = cr.dictfetchall()
|
||||
for r in result:
|
||||
if r['report_rml'] or r['report_rml_content_data']:
|
||||
if r['parser']:
|
||||
kwargs = { 'parser': operator.attrgetter(r['parser'])(openerp.addons) }
|
||||
else:
|
||||
kwargs = {}
|
||||
new_report = report_sxw('report.'+r['report_name'], r['model'],
|
||||
opj('addons',r['report_rml'] or '/'), header=r['header'], register=False, **kwargs)
|
||||
elif r['report_xsl']:
|
||||
new_report = report_rml('report.'+r['report_name'], r['model'],
|
||||
opj('addons',r['report_xml']),
|
||||
r['report_xsl'] and opj('addons',r['report_xsl']), register=False)
|
||||
else:
|
||||
raise Exception, "Unhandled report type: %s" % r
|
||||
return new_report
|
||||
assert name == 'workflow'
|
||||
return openerp.workflow
|
||||
|
||||
BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, _NOTHING, DEFAULT = range(10)
|
||||
#The background is set with 40 plus the number of the color, and the foreground with 30
|
||||
|
|
|
@ -31,5 +31,14 @@ import report_sxw
|
|||
import printscreen
|
||||
|
||||
|
||||
def render_report(cr, uid, ids, name, data, context=None):
|
||||
"""
|
||||
Helper to call ``ir.actions.report.xml.render_report()``.
|
||||
"""
|
||||
import openerp
|
||||
registry = openerp.modules.registry.RegistryManager.get(cr.dbname)
|
||||
return registry['ir.actions.report.xml'].render_report(cr, uid, ids, name, data, context)
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ import threading
|
|||
|
||||
import openerp.netsvc
|
||||
import openerp.pooler
|
||||
import openerp.report
|
||||
from openerp import tools
|
||||
|
||||
import security
|
||||
|
@ -51,8 +52,7 @@ def exp_render_report(db, uid, object, ids, datas=None, context=None):
|
|||
|
||||
cr = openerp.pooler.get_db(db).cursor()
|
||||
try:
|
||||
obj = openerp.netsvc.LocalService('report.'+object)
|
||||
(result, format) = obj.create(cr, uid, ids, datas, context)
|
||||
result, format = openerp.report.render_report(cr, uid, ids, object, datas, context)
|
||||
if not result:
|
||||
tb = sys.exc_info()
|
||||
self_reports[id]['exception'] = openerp.exceptions.DeferredException('RML is not available at specified location or not enough data to print!', tb)
|
||||
|
@ -90,8 +90,7 @@ def exp_report(db, uid, object, ids, datas=None, context=None):
|
|||
def go(id, uid, ids, datas, context):
|
||||
cr = openerp.pooler.get_db(db).cursor()
|
||||
try:
|
||||
obj = openerp.netsvc.LocalService('report.'+object, cursor=cr)
|
||||
(result, format) = obj.create(cr, uid, ids, datas, context)
|
||||
result, format = openerp.report.render_report(cr, uid, ids, object, datas, context)
|
||||
if not result:
|
||||
tb = sys.exc_info()
|
||||
self_reports[id]['exception'] = openerp.exceptions.DeferredException('RML is not available at specified location or not enough data to print!', tb)
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
"""
|
||||
|
||||
import openerp.netsvc as netsvc
|
||||
import openerp.report
|
||||
import openerp.tools as tools
|
||||
import logging
|
||||
import openerp.pooler as pooler
|
||||
|
@ -50,7 +51,7 @@ def try_report(cr, uid, rname, ids, data=None, context=None, our_module=None):
|
|||
else:
|
||||
rname_s = rname
|
||||
_logger.log(netsvc.logging.TEST, " - Trying %s.create(%r)", rname, ids)
|
||||
res = netsvc.LocalService(rname, cursor=cr).create(cr, uid, ids, data, context)
|
||||
res = openerp.report.render_report(cr, uid, ids, rname_s, data, context)
|
||||
if not isinstance(res, tuple):
|
||||
raise RuntimeError("Result of %s.create() should be a (data,format) tuple, now it is a %s" % \
|
||||
(rname, type(res)))
|
||||
|
|
Loading…
Reference in New Issue