Odoo — вызвать функцию python из отчета qweb

<tbody>
  <tr t-foreach="o.line_ids.filtered(lambda line: line.appears_on_payslip)" t-as="line">
    <t t-if="line.code in ('BASIC','OT','DED','GROSS','NET')">
       <td><span t-field="line.code"/></td>
       <td><span t-field="line.name"/></td>
       <td><span t-field="line.quantity"/></td>
       <td><span t-field="line.amount" t-esc-options='{"widget": "monetary", "display_currency": o.company_id.currency_id}'/></td>
       <td><span t-field="line.total" t-esc-options='{"widget": "monetary", "display_currency": o.company_id.currency_id}'/></td>
    </t>
  </tr>
</tbody> 

Приведенный выше код является телом таблицы в отчете qweb. Вместо «line.quantity» я хочу вызвать функцию Python «o.compute_overtime()» и написать так:

<t t-if="line.code=='OT'">
 <td><span t-esc="i['ot_total']"/></td>
</t>

Как я могу вызвать функцию только для 1 поля?


person Aiswarya    schedule 11.07.2017    source источник


Ответы (1)


Вам нужно создать один класс парсера, и в нем вам нужно определить одну функцию, к которой вы можете получить доступ из ее отчета.

from openerp import models
from openerp.report import report_sxw

class report_invoice_parser(report_sxw.rml_parse):
    def __init__(self, cr, uid, name, context=None):
        super(report_invoice_parser, self).__init__(cr,uid,name,context=context)
        self.localcontext.update({ 
                'get_name':self._get_name,
                })
        self.context=context

    def _get_name(self,line):

        if line.invoice_id.write_description == True:
            return line.name

        if line.product_id:
            if line.product_id.default_code:
                return "[%s] %s"%(line.product_id.default_code,line.product_id.name)
            else:
                return line.product_id.name
        else:
            line.name

class report_invoice(models.TransientModel):
    _name = "report.account.report_invoice"
    _inherit ="report.abstract_report"
    _template="account.report_invoice"
    _wrapped_report_class =report_invoice_parser

И в xml вам нужно вызвать его следующим образом.

<tr t-foreach="o.invoice_line" t-as="l">
    <td><span t-esc="get_name(l)"/></td>
</tr>

Вам нужно настроить свою бизнес-логику в действии, я только что поделился идеей здесь. Таким образом, вы можете вызвать свой метод вместо поля, вы можете отобразить результат функции.

person Emipro Technologies Pvt. Ltd.    schedule 11.07.2017