Zoro
Zoro

Reputation: 57

How To Edit PDF Report In Odoo 15

i want to update pdf report to replace the customer address and name with customer email and phone.

i have inherited the sale_report_templates.xml located in addons/sale/report in odoo 15 source code

i create new xml file called sale_report_inherited.xml :

<?xml version="1.0" encoding="utf-8" ?>
<odoo>
 <template id="sale_report_inherit_template" inherit_id="report_saleorder_document">
 <xpath expr="//div[@t-field='doc.partner_id']" position="replace">

 <div t-field="doc.partner_id"
 t-options='{"widget": "contact", "fields": ["email", "phone"], "no_marker": True}' />
 </xpath>
 </template>
</odoo>

i updated the manifest

data : [
         report/sale_report_inherited.xml',
       ]

my code looks good, but when i tried to update the app i got this error :

Traceback (most recent call last): File "/opt/odoo/odoo/tools/cache.py", line 85, in lookup r = d[key] File "/opt/odoo/odoo/tools/func.py", line 71, in wrapper return func(self, *args, **kwargs) File "/opt/odoo/odoo/tools/lru.py", line 34, in getitem a = self.d[obj] KeyError: ('ir.model.data', <function IrModelData._xmlid_lookup at 0x7f9c9d49b250>, 'om_company.report_saleorder_document')

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/opt/odoo/odoo/tools/convert.py", line 680, in _tag_root f(rec) File "/opt/odoo/odoo/tools/convert.py", line 658, in _tag_template return self._tag_record(record) File "/opt/odoo/odoo/tools/convert.py", line 567, in _tag_record f_val = self.id_get(f_ref) File "/opt/odoo/odoo/tools/convert.py", line 663, in id_get res = self.model_id_get(id_str, raise_if_not_found) File "/opt/odoo/odoo/tools/convert.py", line 669, in model_id_get return self.env['ir.model.data']._xmlid_to_res_model_res_id(id_str, raise_if_not_found=raise_if_not_found) File "/opt/odoo/odoo/addons/base/models/ir_model.py", line 1943, in _xmlid_to_res_model_res_id return self._xmlid_lookup(xmlid)[1:3] File "", line 2, in _xmlid_lookup File "/opt/odoo/odoo/tools/cache.py", line 90, in lookup value = d[key] = self.method(*args, **kwargs) File "/opt/odoo/odoo/addons/base/models/ir_model.py", line 1936, in _xmlid_lookup raise ValueError('External ID not found in the system: %s' % xmlid) ValueError: External ID not found in the system: om_company.report_saleorder_document

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "/opt/odoo/odoo/addons/base/models/ir_http.py", line 237, in _dispatch result = request.dispatch() File "/opt/odoo/odoo/http.py", line 687, in dispatch result = self._call_function(**self.params) File "/opt/odoo/odoo/http.py", line 359, in _call_function return checked_call(self.db, *args, **kwargs) File "/opt/odoo/odoo/service/model.py", line 94, in wrapper return f(dbname, *args, **kwargs) File "/opt/odoo/odoo/http.py", line 348, in checked_call result = self.endpoint(*a, **kw) File "/opt/odoo/odoo/http.py", line 916, in call return self.method(*args, **kw) File "/opt/odoo/odoo/http.py", line 535, in response_wrap response = f(*args, **kw) File "/opt/odoo/addons/web/controllers/main.py", line 1346, in call_button action = self._call_kw(model, method, args, kwargs) File "/opt/odoo/addons/web/controllers/main.py", line 1334, in _call_kw return call_kw(request.env[model], method, args, kwargs) File "/opt/odoo/odoo/api.py", line 464, in call_kw result = _call_kw_multi(method, model, args, kwargs) File "/opt/odoo/odoo/api.py", line 451, in _call_kw_multi result = method(recs, *args, **kwargs) File "", line 2, in button_immediate_upgrade File "/opt/odoo/odoo/addons/base/models/ir_module.py", line 74, in check_and_log return method(self, *args, **kwargs) File "/opt/odoo/odoo/addons/base/models/ir_module.py", line 662, in button_immediate_upgrade return self._button_immediate_function(type(self).button_upgrade) File "/opt/odoo/odoo/addons/base/models/ir_module.py", line 600, in _button_immediate_function registry = modules.registry.Registry.new(self._cr.dbname, update_module=True) File "/opt/odoo/odoo/modules/registry.py", line 87, in new odoo.modules.load_modules(registry, force_demo, status, update_module) File "/opt/odoo/odoo/modules/loading.py", line 470, in load_modules processed_modules += load_marked_modules(cr, graph, File "/opt/odoo/odoo/modules/loading.py", line 363, in load_marked_modules loaded, processed = load_module_graph( File "/opt/odoo/odoo/modules/loading.py", line 222, in load_module_graph load_data(cr, idref, mode, kind='data', package=package) File "/opt/odoo/odoo/modules/loading.py", line 69, in load_data tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind) File "/opt/odoo/odoo/tools/convert.py", line 745, in convert_file convert_xml_import(cr, module, fp, idref, mode, noupdate) File "/opt/odoo/odoo/tools/convert.py", line 811, in convert_xml_import obj.parse(doc.getroot()) File "/opt/odoo/odoo/tools/convert.py", line 731, in parse self._tag_root(de) File "/opt/odoo/odoo/tools/convert.py", line 693, in _tag_root raise ParseError('while parsing %s:%s, somewhere inside\n%s' % ( Exception

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "/opt/odoo/odoo/http.py", line 643, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/opt/odoo/odoo/http.py", line 301, in _handle_exception raise exception.with_traceback(None) from new_cause odoo.tools.convert.ParseError: while parsing None:3, somewhere inside

        <div t-field="doc.partner_id" t-options="{&quot;widget&quot;: &quot;contact&quot;,

"fields": ["email", "phone"], "no_marker": True}"/>

if you notice what i did wrong,i'll be greatful for your help

Upvotes: 0

Views: 374

Answers (1)

Kenly
Kenly

Reputation: 26678

When the full xml id is not provided (MODULE_NAME.TEMPLATE_ID), Odoo will try to use the current module name as the MODULE_NAME

def model_id_get(self, id_str, raise_if_not_found=True):
        if '.' not in id_str:
            id_str = '%s.%s' % (self.module, id_str)
        return self.env['ir.model.data']._xmlid_to_res_model_res_id(id_str, raise_if_not_found=raise_if_not_found)

Use sale.report_saleorder_document instead

Upvotes: 0

Related Questions