Skip to Content
Menu
This question has been flagged

Hello, i am trying to create a custom customer statement template in odoo17 by inheriting the exosting customer statement but i keep getting this error in the terminal whenever i click to print, i have reviewed my code, given it to AI and still nothing but the same error:


File "<2191>", line 570, in template_2191

odoo.addons.base.models.ir_qweb.QWebException: Error while render the template

TypeError: 'NoneType' object is not subscriptable

Template: zra_smart_invoice.report_customer_statement_aged

Path: /t/t/t/t/div/div[2]/table/thead/tr/th[5]/span

Node: <span t-out="env.company.currency_id.symbol"/>



in odoo but i need help


here is the custom XML code


        <!-- Customer Statement Report -->
   <record id="action_print_customer_statement_aged" model="ir.actions.report">
    <field name="name">Print Aged Statement</field>
    <field name="model">res.partner</field>
    <field name="report_type">qweb-pdf</field>
    <field name="report_name">zra_smart_invoice.report_customer_statement_aged</field>
    <field name="report_file">zra_smart_invoice.report_customer_statement_aged</field>
    <field name="print_report_name">'Statement - %s' % (object.name)</field>
    <field name="binding_model_id" ref="model_res_partner"/>
    <field name="binding_type">report</field>
</record>



<template id="report_customer_statement_aged" inherit_id="l10n_account_customer_statements.customer_statements">
    <xpath expr="//h2[contains(text(), 'CUSTOMER STATEMENTS')]" position="replace">
        <h2 style="font-size: 16px;">Customer Statement</h2>
    </xpath>

    <xpath expr="//div[contains(@class, 'row') and .//label[@for='balance_due']]" position="after">
        <div class="row mt32">
            <div class="col-12">
                <strong style="font-size: 1.1em;">Aging Analysis</strong>
                <table class="table table-sm mt8">
                    <thead>
                        <tr>
                            <th class="text-right">Current</th>
                            <th class="text-right">1-30 Days</th>
                            <th class="text-right">31-60 Days</th>
                            <th class="text-right">61-90 Days</th>
                            <th class="text-right">Over 90 Days</th>
                            <th class="text-right">Total Due</th>
                        </tr>
                    </thead>
                    <tbody>
                        <t t-set="aging_data" t-value="p._get_aging_data()"/>
                        <tr>
                            <td class="text-right">
                                <span t-esc="aging_data.get('current', 0.0)"
                                      t-options="{'widget': 'monetary', 'display_currency': env.company.currency_id}"/>
                            </td>
                            <td class="text-right">
                                <span t-esc="aging_data.get('1-30', 0.0)"
                                      t-options="{'widget': 'monetary', 'display_currency': env.company.currency_id}"/>
                            </td>
                            <td class="text-right">
                                <span t-esc="aging_data.get('31-60', 0.0)"
                                      t-options="{'widget': 'monetary', 'display_currency': env.company.currency_id}"/>
                            </td>
                            <td class="text-right">
                                <span t-esc="aging_data.get('61-90', 0.0)"
                                      t-options="{'widget': 'monetary', 'display_currency': env.company.currency_id}"/>
                            </td>
                            <td class="text-right">
                                <span t-esc="aging_data.get('over_90', 0.0)"
                                      t-options="{'widget': 'monetary', 'display_currency': env.company.currency_id}"/>
                            </td>
                            <td class="text-right">
                                <span t-esc="aging_data.get('total_due', 0.0)"
                                      t-options="{'widget': 'monetary', 'display_currency': env.company.currency_id}"/>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </xpath>

    <xpath expr="//th[contains(., 'Balance') and span[contains(@t-out, 'currency_id')]]" position="replace">
        <th class="text-end">Balance <span t-out="env.company.currency_id.symbol"/></th>
    </xpath>
</template>

Avatar
Discard
Best Answer

Hi,


This error usually happens when the QWeb template tries to access the currency symbol using env.company.currency_id.symbol, but currency_id is missing or not properly loaded.



Solution


1- Ensure the currency symbol is properly added in the company.


2- Try with the code.


* Use 'request.env' for safer access in QWeb

<xpath expr="//th[contains(., 'Balance') and span[contains(@t-out, 'currency_id')]]" position="replace">
<th class="text-end">Balance <span t-out="request.env.company.currency_id.symbol"/></th>
</xpath>

OR


Add a condition to prevent template crash

<xpath expr="//th[contains(., 'Balance') and span[contains(@t-out, 'currency_id')]]" position="replace">
<t t-if="env.company.currency_id.symbol">
<th class="text-end">Balance <span t-out="env.company.currency_id.symbol"/></th>
</t>
</xpath>

Hope it helps

Avatar
Discard
Related Posts Replies Views Activity
1
Sep 24
1026
1
Sep 24
912
0
Sep 24
565
1
Jan 25
1252
2
Jun 25
425