From f46761caa8b815aea7c3089f928dcc494f124b08 Mon Sep 17 00:00:00 2001 From: Nicolas Martinelli Date: Tue, 21 Aug 2018 11:41:54 +0200 Subject: [PATCH] [FIX] membership: change partner on invoice - Go to a contact C1 > Membership tab > Buy membership - Create an invoice with the membership => It creates a membership line on C1 - Change the partner on the invoice to C2 The membership line and the membership status is not transfered to C2. We first need to recompute on C1, and we also need to explicitly write the new partner C2 on the membership lines. opw-1875673 --- addons/membership/models/account_invoice.py | 9 +++++++++ addons/membership/models/partner.py | 10 ++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/addons/membership/models/account_invoice.py b/addons/membership/models/account_invoice.py index 85b158e4959..90423ab571f 100644 --- a/addons/membership/models/account_invoice.py +++ b/addons/membership/models/account_invoice.py @@ -22,6 +22,15 @@ class Invoice(models.Model): ]).write({'date_cancel': fields.Date.today()}) return super(Invoice, self).action_cancel() + @api.multi + def write(self, vals): + '''Change the partner on related membership_line''' + if 'partner_id' in vals: + self.env['membership.membership_line'].search([ + ('account_invoice_line', 'in', self.mapped('invoice_line_ids').ids) + ]).write({'partner': vals['partner_id']}) + return super(Invoice, self).write(vals) + class AccountInvoiceLine(models.Model): _inherit = 'account.invoice.line' diff --git a/addons/membership/models/partner.py b/addons/membership/models/partner.py index 2ec6a64f32a..a5ec46f701f 100644 --- a/addons/membership/models/partner.py +++ b/addons/membership/models/partner.py @@ -40,6 +40,7 @@ class Partner(models.Model): 'member_lines.account_invoice_line.invoice_id.invoice_line_ids', 'member_lines.account_invoice_line.invoice_id.payment_ids', 'member_lines.account_invoice_line.invoice_id.payment_move_line_ids', + 'member_lines.account_invoice_line.invoice_id.partner_id', 'free_member', 'member_lines.date_to', 'member_lines.date_from', 'associate_member.membership_state') @@ -105,12 +106,16 @@ class Partner(models.Model): if partner.membership_stop and today > partner.membership_stop: res[partner.id] = 'free' if partner.free_member else 'old' continue + if partner.associate_member: + res_state = partner.associate_member._membership_state() + res[partner.id] = res_state[partner.associate_member.id] + continue s = 4 if partner.member_lines: for mline in partner.member_lines: if (mline.date_to or '0000-00-00') >= today and (mline.date_from or '0000-00-00') <= today: - if mline.account_invoice_line.invoice_id: + if mline.account_invoice_line.invoice_id.partner_id == partner: mstate = mline.account_invoice_line.invoice_id.state if mstate == 'paid': s = 0 @@ -145,9 +150,6 @@ class Partner(models.Model): res[partner.id] = 'none' if partner.free_member and s != 0: res[partner.id] = 'free' - if partner.associate_member: - res_state = partner.associate_member._membership_state() - res[partner.id] = res_state[partner.associate_member.id] return res @api.one