diff --git a/models/res_partner.py b/models/res_partner.py index c653572f746eb6fa7514aad4fdb49b6fa51e3c00..3eabbe072cf6c703d4f48b3f845acffa9c1e98cb 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -46,6 +46,11 @@ class ResPartner(models.Model): ) is_membership_archived = fields.Boolean("Membre archivé") + last_membership_invoice_date = fields.Date( + string="Date de dernière facture d'adhésion", + compute='_compute_last_membership_invoice_date' + ) + # ------------------------------------------------------ # SQL Constraints # ------------------------------------------------------ @@ -96,6 +101,15 @@ class ResPartner(models.Model): if partner.parent_id and not partner.is_company: partner.membership_state = partner.parent_id.membership_state + @api.depends('member_lines') + def _compute_last_membership_invoice_date(self): + for partner in self: + invoices = partner.member_lines.filtered( + lambda line: line.state == 'invoiced' or 'paid' + ).mapped("date") + last_invoice_date = max(invoices, default=False) + partner.last_membership_invoice_date = last_invoice_date + # ------------------------------------------------------ # Onchange / Constraints # ------------------------------------------------------ diff --git a/views/res_partner.xml b/views/res_partner.xml index eefa0109fde91c8cfc8c99d36b3079d24f7a561c..42eea96ec536bb706dc428efa2ae7e6ebb140588 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -136,6 +136,13 @@ > <field name="is_membership_archived" widget="boolean_toggle" /> </xpath> + <xpath expr="//field[@name='membership_start']" position="after"> + <field + name="last_membership_invoice_date" + readonly="1" + attrs="{'invisible':[('last_membership_invoice_date','=',False)]}" + /> + </xpath> <xpath expr="//field[@name='member_lines']" position="before"> <hr /> <group>