[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
This commit is contained in:
Nicolas Martinelli
2018-08-21 13:39:16 +02:00
committed by Nicolas Martinelli
parent b8161ec806
commit f46761caa8
2 changed files with 15 additions and 4 deletions
@@ -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'
+6 -4
View File
@@ -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