From 0e75b263b97d713145b1d8bbd751ddd6ea1ac0c5 Mon Sep 17 00:00:00 2001 From: Hugo Trentesaux <hugo@le-filament.com> Date: Tue, 10 Jun 2025 11:09:09 +0200 Subject: [PATCH] add filter on active guarantee counter --- models/res_partner.py | 19 +++++++++++++++---- views/res_partner.xml | 18 ++++++++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/models/res_partner.py b/models/res_partner.py index 378e684..9d3b18f 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -1,7 +1,9 @@ # Copyright 2023- Le Filament (https://le-filament.com) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) -from odoo import fields, models +from collections import Counter + +from odoo import api, fields, models class ResPartner(models.Model): @@ -16,8 +18,14 @@ class ResPartner(models.Model): string="Contrats de garanties", ) financial_contract_guarantee_count = fields.Integer( + string="Nombre de garanties actives", + compute="_compute_financial_contract_guarantee_count", + store=True, + ) + financial_contract_guarantee_total_count = fields.Integer( + string="Nombre de garanties total (quel que soit l'état)", compute="_compute_financial_contract_guarantee_count", - store=True + store=True, ) guarantee_amount_ongoing = fields.Float( string="En cours de garantie", compute="_compute_ongoing_guarantee" @@ -51,11 +59,14 @@ class ResPartner(models.Model): # ------------------------------------------------------ # Computed fields / Search Fields # ------------------------------------------------------ + @api.depends("financial_contract_guarantee_ids") def _compute_financial_contract_guarantee_count(self): for partner in self: - partner.financial_contract_guarantee_count = ( - partner.financial_contract_guarantee_ids.__len__() + partner.financial_contract_guarantee_total_count = len( + partner.financial_contract_guarantee_ids ) + c = Counter(partner.financial_contract_guarantee_ids.mapped("state")) + partner.financial_contract_guarantee_count = c["paid"] + c["litigation"] def _compute_ongoing_guarantee(self): for partner in self: diff --git a/views/res_partner.xml b/views/res_partner.xml index 5793931..738a569 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -62,4 +62,22 @@ </xpath> </field> </record> + + + <!-- Search View --> + <record id="res_partner_guarantee_search" model="ir.ui.view"> + <field name="name">res.partner.guarantee.search</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="financial_partner.res_partner_financial_search" /> + <field name="arch" type="xml"> + <!-- Search --> + <!-- Filters --> + <xpath expr="//filter[@name='dead_coop']" position="after"> + <separator /> + <filter string="A des garanties en cours" name="has_active_guarantee" domain="[('financial_contract_guarantee_count', '>', 0)]" /> + </xpath> + <!-- Group --> + </field> + </record> + </odoo> -- GitLab