Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 27 additions & 33 deletions addons/membership/models/account_move.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,22 @@ def write(self, vals):
class AccountMoveLine(models.Model):
_inherit = 'account.move.line'

def _prepare_membership_line_data(self):
self.ensure_one()
date_from = self.product_id.membership_date_from
date_to = self.product_id.membership_date_to
if (date_from and date_from < (self.move_id.invoice_date or date.min) < (date_to or date.min)):
date_from = self.move_id.invoice_date
return {
'partner': self.move_id.partner_id.id,
'membership_id': self.product_id.id,
'member_price': self.price_unit,
'date': fields.Date.today(),
'date_from': date_from,
'date_to': date_to,
'account_invoice_line': self.id,
}

def write(self, vals):
# OVERRIDE
res = super(AccountMoveLine, self).write(vals)
Expand All @@ -54,28 +70,18 @@ def write(self, vals):

existing_memberships = self.env['membership.membership_line'].search([
('account_invoice_line', 'in', to_process.ids)])
to_process = to_process - existing_memberships.mapped('account_invoice_line')

# All memberships already exist, break.
if not to_process:
return res
to_create = to_process - existing_memberships.mapped('account_invoice_line')

memberships_vals = []
for line in to_process:
date_from = line.product_id.membership_date_from
date_to = line.product_id.membership_date_to
if (date_from and date_from < (line.move_id.invoice_date or date.min) < (date_to or date.min)):
date_from = line.move_id.invoice_date
memberships_vals.append({
'partner': line.move_id.partner_id.id,
'membership_id': line.product_id.id,
'member_price': line.price_unit,
'date': fields.Date.today(),
'date_from': date_from,
'date_to': date_to,
'account_invoice_line': line.id,
})
self.env['membership.membership_line'].create(memberships_vals)
for line in to_create:
memberships_vals.append(line._prepare_membership_line_data())

if memberships_vals:
self.env['membership.membership_line'].create(memberships_vals)

for membership in existing_memberships:
membership.write(membership.account_invoice_line._prepare_membership_line_data())

return res

@api.model_create_multi
Expand All @@ -98,18 +104,6 @@ def create(self, vals_list):

memberships_vals = []
for line in to_process:
date_from = line.product_id.membership_date_from
date_to = line.product_id.membership_date_to
if (date_from and date_from < (line.move_id.invoice_date or date.min) < (date_to or date.min)):
date_from = line.move_id.invoice_date
memberships_vals.append({
'partner': line.move_id.partner_id.id,
'membership_id': line.product_id.id,
'member_price': line.price_unit,
'date': fields.Date.today(),
'date_from': date_from,
'date_to': date_to,
'account_invoice_line': line.id,
})
memberships_vals.append(line._prepare_membership_line_data())
self.env['membership.membership_line'].create(memberships_vals)
return lines
8 changes: 8 additions & 0 deletions addons/membership/tests/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,14 @@ def setUpClass(cls, chart_template_ref=None):
super().setUpClass(chart_template_ref=chart_template_ref)

# Test memberships
cls.membership = cls.env['product.product'].create({
'membership': True,
'membership_date_from': datetime.date.today() + relativedelta(months=-1),
'membership_date_to': datetime.date.today() + relativedelta(days=-2),
'name': 'Basic Limited',
'type': 'service',
'list_price': 90.00,
})
cls.membership_1 = cls.env['product.product'].create({
'membership': True,
'membership_date_from': datetime.date.today() + relativedelta(days=-2),
Expand Down
36 changes: 35 additions & 1 deletion addons/membership/tests/test_membership.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

import time
from odoo.addons.membership.tests.common import TestMembershipCommon
from odoo.tests import tagged
from odoo.tests import tagged, Form
from odoo import fields


Expand Down Expand Up @@ -178,3 +178,37 @@ def test_apply_payment_term(self):
})
invoice = self.partner_1.create_membership_invoice(self.membership_1, 100.0)
self.assertEqual(invoice.invoice_payment_term_id, pay_term_15_days_after_today)

def test_change_membership_on_account_move_line(self):
invoice = self.partner_1.create_membership_invoice(
self.membership, self.membership.list_price
)
with Form(invoice) as invoice_form:
line_form = invoice_form.invoice_line_ids.edit(0)
line_form.product_id = self.membership_1
line_form.save()

invoice_line = invoice.invoice_line_ids[0]
self.assertEqual(
invoice_line.price_unit,
self.membership_1.list_price
)
membership_line = self.env["membership.membership_line"].search(
[("account_invoice_line", "=", invoice_line.id)]
)
self.assertEqual(
membership_line.membership_id,
self.membership_1
)
self.assertEqual(
membership_line.member_price,
self.membership_1.list_price
)
self.assertEqual(
membership_line.date_from,
self.membership_1.membership_date_from
)
self.assertEqual(
membership_line.date_to,
self.membership_1.membership_date_to
)