diff --git a/account_payment_order_notification/tests/test_account_payment_order_notification.py b/account_payment_order_notification/tests/test_account_payment_order_notification.py index 3edf787c3..2ee102552 100644 --- a/account_payment_order_notification/tests/test_account_payment_order_notification.py +++ b/account_payment_order_notification/tests/test_account_payment_order_notification.py @@ -8,8 +8,14 @@ class TestAccountPaymentOrderNotification(common.SavepointCase): def setUpClass(cls): super().setUpClass() cls.payment_mode = cls.env.ref("account_payment_mode.payment_mode_inbound_dd1") - cls.partner_a = cls.env["res.partner"].create( - {"name": "Test partner A", "email": "partner-a@test.com"} + cls.partner_a = cls.env["res.partner"].create({"name": "Test partner A"}) + cls.partner_a_child = cls.env["res.partner"].create( + { + "name": "Invoice", + "type": "invoice", + "email": "partner-a@test.com", + "parent_id": cls.partner_a.id, + } ) cls.partner_b = cls.env["res.partner"].create( {"name": "Test partner B", "email": "partner-b@test.com"} @@ -30,17 +36,18 @@ class TestAccountPaymentOrderNotification(common.SavepointCase): line_form.product_id = self.product return invoice_form.save() - def _test_notification_from_partner(self, po, partner): + def _test_notification_from_partner(self, po, partner, total): notification = po.notification_ids.filtered(lambda x: x.partner_id == partner) + self.assertEqual(len(notification.payment_line_ids), total) self.assertIn(partner, notification.mapped("message_follower_ids.partner_id")) self.assertIn(self.mt_comment, notification.mapped("message_ids.subtype_id")) def test_wizard_account_payment_order_notification(self): - self._create_invoice(self.partner_a) - self._create_invoice(self.partner_a) + self._create_invoice(self.partner_a_child) + self._create_invoice(self.partner_a_child) self._create_invoice(self.partner_b) self._create_invoice(self.partner_c) - partners = self.partner_a + self.partner_b + self.partner_c + partners = self.partner_a_child + self.partner_b + self.partner_c invoices = self.env["account.move"].search([("partner_id", "in", partners.ids)]) invoices.action_post() wizard = ( @@ -61,8 +68,10 @@ class TestAccountPaymentOrderNotification(common.SavepointCase): .create({"mail_template_id": self.env.ref(template_xml_id).id}) ) self.assertEqual(len(wizard.line_ids), 3) - line_a = wizard.line_ids.filtered(lambda x: x.partner_id == self.partner_a) - self.assertEqual(line_a.email, self.partner_a.email) + line_a = wizard.line_ids.filtered( + lambda x: x.partner_id == self.partner_a_child + ) + self.assertEqual(line_a.email, self.partner_a_child.email) self.assertTrue(line_a.to_send) line_b = wizard.line_ids.filtered(lambda x: x.partner_id == self.partner_b) self.assertEqual(line_b.email, self.partner_b.email) @@ -71,8 +80,8 @@ class TestAccountPaymentOrderNotification(common.SavepointCase): self.assertFalse(line_c.email) self.assertFalse(line_c.to_send) wizard.action_process() - self._test_notification_from_partner(payment_order, self.partner_a) - self._test_notification_from_partner(payment_order, self.partner_b) + self._test_notification_from_partner(payment_order, self.partner_a_child, 2) + self._test_notification_from_partner(payment_order, self.partner_b, 1) self.assertNotIn( self.partner_c, payment_order.mapped("notification_ids.partner_id") ) diff --git a/account_payment_order_notification/wizard/wizard_account_payment_order_notification.py b/account_payment_order_notification/wizard/wizard_account_payment_order_notification.py index c5795b591..d87eda53f 100644 --- a/account_payment_order_notification/wizard/wizard_account_payment_order_notification.py +++ b/account_payment_order_notification/wizard/wizard_account_payment_order_notification.py @@ -32,7 +32,11 @@ class WizardAccountPaymentOrderNotification(models.TransientModel): ) if po: line_ids = [] - for partner in po.payment_line_ids.mapped("partner_id"): + # We need to transfer invoice partner so that the email is sent to the + # correct partner (not parent) + for partner in po.payment_line_ids.mapped( + lambda x: x.move_line_id.move_id.partner_id or x.partner_id + ): line_ids += [ ( 0, @@ -61,7 +65,7 @@ class WizardAccountPaymentOrderNotification(models.TransientModel): notifications = [] for item in self.line_ids.filtered("to_send"): payment_line_ids = self.order_id.payment_line_ids.filtered( - lambda x: x.partner_id == item.partner_id + lambda x: x.partner_id == item.partner_id.commercial_partner_id ) data = { "partner_id": item.partner_id.id,