Beispiel #1
0
    def _lookup_report(self, name):
        """
        Look up a report definition.
        """
        import operator
        import os
        opj = os.path.join

        # First lookup in the deprecated place, because if the report definition
        # has not been updated, it is more likely the correct definition is there.
        # Only reports with custom parser specified in Python are still there.
        if 'report.' + name in odoo.report.interface.report_int._reports:
            new_report = odoo.report.interface.report_int._reports['report.' + name]
            if not isinstance(new_report, WebKitParser):
                new_report = None
        else:
            self.env.cr.execute("SELECT * FROM ir_act_report_xml WHERE report_name=%s and report_type=%s", (name, 'webkit'))
            r = self.env.cr.dictfetchone()
            if r:
                if r['parser']:
                    parser = operator.attrgetter(r['parser'])(odoo.addons)
                    kwargs = {'parser': parser}
                else:
                    kwargs = {}

                new_report = WebKitParser('report.' + r['report_name'],
                    r['model'], opj('addons', r['report_rml'] or '/'),
                    header=r['header'], register=False, **kwargs)
            else:
                new_report = None

        if new_report:
            return new_report
        else:
            return super(IrActionsReportXml, self)._lookup_report(name)
Beispiel #2
0
def register_report(name, model, tmpl_path, parser=rml_parse):
    """Register the report into the services"""
    name = 'report.%s' % name
    if netsvc.Service._services.get(name, False):
        service = netsvc.Service._services[name]
        if isinstance(service, WebKitParser):
            #already instantiated properly, skip it
            return
        if hasattr(service, 'parser'):
            parser = service.parser
        del netsvc.Service._services[name]
    WebKitParser(name, model, tmpl_path, parser=parser)