【问题标题】:Odoo DIN5008 append or change information_block via XPATHOdoo DIN5008 通过 XPATH 附加或更改信息块
【发布时间】:2022-11-02 01:28:30
【问题描述】:

我处于类似的情况,例如:

Odoo DIN5008 append or change information_block

我想在报价和发票 PDF 报告中向 DIN5008 information_block 添加一些字段(例如客户编号),但我只想通过 QWeb 继承来完成,即不修补 python 代码。但是,我似乎根本无法通过 XPATH 访问information_block,既不是通过<xpath expr="//t[@t-foreach='template_data']" position="after">(取自源模板)也不是通过<xpath expr="//div[@class='information_block'] position=after>(取自呈现给客户端的代码)。

我认为这是由于模板与我通过从report_saleorder_document 继承所获得的文件不同。

我不知道如何从external_layout_din5008 继承,即使我知道了,我将如何区分当前呈现的文档类型?

【问题讨论】:

    标签: xpath odoo qweb odoo-15


    【解决方案1】:

    您可以使用 inherit_id 模板属性,用于就地更改现有模板。

    例子:

    <template id="external_layout_din5008" inherit_id="l10n_de.external_layout_din5008">
        <xpath expr="//t[@t-foreach='template_data']" position="after">
            <tr><td>Mobile:</td><td><t t-esc="o.partner_id.mobile"/></td></tr>
        </xpath>
    </template>  
    

    您可以使用o._name 获取模型名称(以下示例中为purchase.order),但最好通过在模型中定义以下三个字段来自定义每个文档的信息块:l10n_de_template_data、l10n_de_document_title 和l10n_de_addresses

    例子:

    
    class PurchaseOrder(models.Model):
        _inherit = 'purchase.order'
    
        l10n_de_template_data = fields.Binary(compute='_compute_l10n_de_template_data')
        l10n_de_document_title = fields.Char(compute='_compute_l10n_de_document_title')
        l10n_de_addresses = fields.Binary(compute='_compute_l10n_de_addresses')
    
        def _compute_l10n_de_template_data(self):
            for record in self:
                record.l10n_de_template_data = data = []
                if record.state == 'draft':
                    data.append((_("Request for Quotation No."), record.name))
                elif record.state in ['sent', 'to approve', 'purchase', 'done']:
                    data.append((_("Purchase Order No."), record.name))
                elif record.state == 'cancel':
                    data.append((_("Cancelled Purchase Order No."), record.name))
    
                if record.user_id:
                    data.append((_("Purchase Representative"), record.user_id.name))
                if record.partner_ref:
                    data.append((_("Order Reference"), record.partner_ref))
                if record.date_order:
                    data.append((_("Order Date"), format_date(self.env, record.date_order)))
                if record.incoterm_id:
                    data.append((_("Incoterm"), record.incoterm_id.code))
    
    
    
        def _compute_l10n_de_document_title(self):
            for record in self:
                if record.state in ['draft', 'sent', 'to approve']:
                    record.l10n_de_document_title = _("Request for Quotation")
                elif record.state in ['purchase', 'done']:
                    record.l10n_de_document_title = _("Purchase Order")
                elif record.state == 'cancel':
                    record.l10n_de_document_title = _("Cancelled Purchase Order")
    
        def _compute_l10n_de_addresses(self):
            for record in self:
                record.l10n_de_addresses = data = []
                if record.dest_address_id:
                    data.append((_("Shipping Address:"), record.dest_address_id))
                elif 'picking_type_id' in record._fields and record.picking_type_id.warehouse_id:
                    data.append((_("Shipping Address:"), record.picking_type_id.warehouse_id.partner_id))
        
    

    示例取自l10n_de_purchase

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 2018-10-13
      • 2019-12-30
      相关资源
      最近更新 更多