Приведенный ниже код рассчитывает количество счетов-фактур для клиента и отображает его список счетов, он может помочь вам отобразить умную кнопку и проверить вашу функцию:
В 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>
В питоне:
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
Я надеюсь, что это может помочь вам