From 61b5dd38033c8379faa5fc2226f360c4da8c6b4b Mon Sep 17 00:00:00 2001 From: "Thomas Lefebvre (thle)" <thle@odoo.com> Date: Mon, 7 Aug 2023 08:53:19 +0000 Subject: [PATCH] [FIX] membership: add payment terms on the invoice Versions: --------- - 14.0 - 15.0 Steps to reproduce: ------------------- - in Members app, add a membership product; - add a "Payment Terms" on a contact (Sales & Purchase tab); - in Membership tab click on "Buy Membership"; - add the membership product and invoice; Issue: ------ There is no payment term on the invoice. Cause: ------ In the invoice creation flow, the following logic is not triggered: ```py if self.is_sale_document(include_receipts=True) and self.partner_id: self.invoice_payment_term_id = self.partner_id.property_payment_term_id or self.invoice_payment_term_id ``` Consequently, we have no invoice_payment_term_id. Solution: --------- Specify `invoice_payment_term_id` in the values used for invoice creation. Note: ----- This FIX solution only handles the invoice creation from the membership module, to be as non-invasive as possible. In version 16.0, this is handled by the account module, which has made the `invoice_payment_term_id` field computed and dependent on `partner_id`. opw-3382398 closes odoo/odoo#130998 Signed-off-by: Andrea Grazioso (agr) <agr@odoo.com> --- addons/membership/models/partner.py | 1 + addons/membership/tests/test_membership.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/addons/membership/models/partner.py b/addons/membership/models/partner.py index 30de29f7e2d2..4e23daae713f 100644 --- a/addons/membership/models/partner.py +++ b/addons/membership/models/partner.py @@ -109,6 +109,7 @@ class Partner(models.Model): invoice_vals_list.append({ 'move_type': 'out_invoice', 'partner_id': partner.id, + 'invoice_payment_term_id': partner.property_payment_term_id.id, 'invoice_line_ids': [ (0, None, {'product_id': product.id, 'quantity': 1, 'price_unit': amount, 'tax_ids': [(6, 0, product.taxes_id.ids)]}) ] diff --git a/addons/membership/tests/test_membership.py b/addons/membership/tests/test_membership.py index 957ca2df8cbc..cb559dda9d5b 100644 --- a/addons/membership/tests/test_membership.py +++ b/addons/membership/tests/test_membership.py @@ -158,3 +158,23 @@ class TestMembership(TestMembershipCommon): self.partner_1._compute_membership_state() self.assertEqual(invoice.state, 'cancel') self.assertEqual(self.partner_1.membership_state, 'canceled') + + def test_apply_payment_term(self): + """ + Check if the payment term defined on the partner is applied to the invoice + """ + pay_term_15_days_after_today = self.env['account.payment.term'].create({ + 'name': '15 days after today', + 'line_ids': [ + (0, 0, { + 'value': 'balance', + 'days': 15, + 'option': 'day_after_invoice_date', + }), + ], + }) + self.partner_1.write({ + 'property_payment_term_id': pay_term_15_days_after_today.id, + }) + 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) -- GitLab