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