M.E.
M.E.

Reputation: 5495

Get a database value in QWeb PDF report (Odoo 10)

I would like to retrieve a config parameter from database in a custom QWeb Report.

What shall I do?

Specifically, I want to get the equivalent (in the model):

self.env['ir.config_parameter'].get_param('my_param', '')

Could someone highlight where to start?


As additional information, the report I am trying to use inherits report.minimal_layout:

<?xml version="1.0"?>
<odoo>
    <data>

        <template id="report_saleorder_css" inherit_id="report.minimal_layout">
            <xpath expr="html/head/*[position() = last()]" position="after">
                <style>
                    body {
                        color: <t t-esc="color"/>;
                    }

                </style>
            </xpath>
        </template>

    </data>
</odoo>

And this is the custom render function I have tried:

class CustomReport(models.AbstractModel):
    _name = 'report.mymodule.report_saleorder_css'
    @api.model
    def render_html(self, data=None):
        report_obj = self.env['report']
        report = report_obj._get_report_from_name('mymodule.report_saleorder_css')
        docargs = {
            'doc_ids': self._ids,
            'doc_model': report.model,
            'docs': self,
            'color': 'red'
        }
        return report_obj.render('mymodule.report_saleorder_css', docargs)

without success

Upvotes: 0

Views: 1953

Answers (2)

Alpesh Valaki
Alpesh Valaki

Reputation: 1631

In simple word you want to retrieve a config parameter whenever you print qweb report.

we can not directly use self.env in qweb report, but we can call a function which do that operation and return config parameter value. To do that first create python function in your model.

@api.model
def get_system_para(self):
    para_value = self.env['ir.config_parameter'].get_param('web.base.url','')
    return para_value

Now call this function in your qweb report

<span t-esc="docs.get_system_para()"/>

Upvotes: 1

gdaramouskas
gdaramouskas

Reputation: 3747

You have to retrieve the value beforehand and pass it to your template for usage.

You can do this by defining your own parser for your report, check the documentation.

See under Custom Reports on how you can create your own parser (Python class) and how you can use the docargs. Basically within the render_html method you search for your value, insert it on docargs and then pass it on the render method. Then you can use it from your template like: <t t-esc="my_param" />

Upvotes: 0

Related Questions