From 15acca47e9ae1bb370a1a79b80930abd56828869 Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Wed, 3 Apr 2024 09:38:10 +0200 Subject: [PATCH] [IMP] account_payment_sale: Add payment mode in invoicing grouping criteria --- account_payment_sale/models/sale_order.py | 11 +++++++++++ account_payment_sale/tests/test_sale_order.py | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/account_payment_sale/models/sale_order.py b/account_payment_sale/models/sale_order.py index 5a931e655..ab66f7b49 100644 --- a/account_payment_sale/models/sale_order.py +++ b/account_payment_sale/models/sale_order.py @@ -41,3 +41,14 @@ class SaleOrder(models.Model): vals = super()._prepare_invoice() self._get_payment_mode_vals(vals) return vals + + @api.model + def _get_invoice_grouping_keys(self) -> list: + """ + When several sale orders are generating invoices, + we want to add the payment mode in grouping criteria. + """ + keys = super()._get_invoice_grouping_keys() + if "payment_mode_id" not in keys: + keys.append("payment_mode_id") + return keys diff --git a/account_payment_sale/tests/test_sale_order.py b/account_payment_sale/tests/test_sale_order.py index 40a4fc2f0..70ee0d725 100644 --- a/account_payment_sale/tests/test_sale_order.py +++ b/account_payment_sale/tests/test_sale_order.py @@ -95,3 +95,22 @@ class TestSaleOrder(CommonTestCase): self.assertEqual(len(invoice), 1) self.assertEqual(invoice.payment_mode_id, self.payment_mode_2) self.assertFalse(invoice.partner_bank_id) + + def test_several_sale_to_invoice_payment_mode(self): + """ + Data: + A partner with a specific payment_mode + A sale order created with the payment_mode of the partner + A sale order created with another payment mode + Test case: + Create the invoice from the sale orders + Expected result: + Two invoices should be generated + """ + payment_mode_2 = self.env.ref("account_payment_mode.payment_mode_outbound_dd1") + order_1 = self.create_sale_order() + order_2 = self.create_sale_order(payment_mode_2) + orders = order_1 | order_2 + orders.action_confirm() + invoices = orders._create_invoices() + self.assertEqual(2, len(invoices))