如何在Odoo12中的销售模块中添加智能按钮



我想在Odoo 12中的销售模块上添加一个智能按钮,当我单击它时,它显示该客户的逾期发票

我已经尝试通过继承销售模块来做到这一点,但它不起作用

首先您需要继承伙伴视图并添加智能按钮:

<record model="ir.ui.view" id="partner_view_buttons">
        <field name="name">partner.view.buttons</field>
        <field name="model">res.partner</field>
        <field name="inherit_id" ref="base.view_partner_form" />
        <field name="arch" type="xml">
            <div name="button_box" position="inside">
                <button type="object" class="oe_stat_button" icon="fa-pencil-square-o" name="action_view_partner_overdue_invoices"
                    attrs="{'invisible': [('customer', '=', False)]}" context="{'default_partner_id': active_id}">
                    <div class="o_form_field o_stat_info">
                        <span class="o_stat_value">
                            <field name="total_overdue" widget='monetary' options="{'currency_field': 'currency_id'}"/>
                        </span>
                        <span class="o_stat_text">Total Overdue</span>
                    </div>
                </button>
            </div>
          </field>
        </record>

继承res.partner模型并添加action_view_partner_overdue_invoices方法,该方法返回带有域的操作以滤发发票

添加一个计算的字段total_overdue以显示总的逾期。

以下代码计算客户的发票数并显示其计费列表,它可以帮助您显示智能按钮并测试您的功能:

在XML中:

<record model="ir.ui.view" id="partner_view_buttons">
    <field name="name">partner.view.inherit</field>
    <field name="model">res.partner</field>
    <field name="inherit_id" ref="base.view_partner_form" />
        <field name="arch" type="xml">
            <div name="button_box" position="inside">
             <button name="act_show_invoice" type="object" icon="fa-usd" class="oe_stat_button"
                help="courriel">
                <field name="invoice_count" widget="statinfo"/>
             </button>
            </div>
    </field>
</record>

在Python中:

invoice_count = fields.Integer(string='Nbr Facture', compute='_compute_invoice_count',)

获取计数的计算方法

def _compute_invoice_count(self):
    invoice_data = self.env['account.invoice'].read_group(domain=[('partner_id', 
                'child_of', self.ids)],fields=['partner_id'], groupby=['partner_id'])
    partner_child_ids = self.read(['child_ids'])
    mapped_data = dict([(m['partner_id'][0], m['partner_id_count']) for m in 
                                                                     invoice_data])
    for partner in self:
        # let's obtain the partner id and all its child ids from the read up there
        item = next(p for p in partner_child_ids if p['id'] == partner.id)
        partner_ids = [partner.id] + item.get('child_ids')
        # then we can sum for all the partner's child
        partner.invoice_count = sum(mapped_data.get(child, 0) for child in 
        partner_ids)

对于"树视图"或"相关记录"的导航

 def act_show_invoice(self):
    self.ensure_one()
    res = self.env['ir.actions.act_window'].for_xml_id(
        'account', 'action_invoice_tree1')
    res.update(
        context=dict(
            self.env.context,
            search_default_partner_id=self.id,
        ),
    )
    return res

我希望它可以帮助您

最新更新