diff --git a/account_banking_sepa_credit_transfer/models/account_payment_order.py b/account_banking_sepa_credit_transfer/models/account_payment_order.py index 7d5dc046b..2a9bf707b 100644 --- a/account_banking_sepa_credit_transfer/models/account_payment_order.py +++ b/account_banking_sepa_credit_transfer/models/account_payment_order.py @@ -83,11 +83,8 @@ class AccountPaymentOrder(models.Model): priority = payment_line.priority local_instrument = payment_line.local_instrument categ_purpose = payment_line.category_purpose - # The field line.date is the requested payment date - # taking into account the 'date_prefered' setting - # cf account_banking_payment_export/models/account_payment.py - # in the inherit of action_open() - key = (line.date, priority, local_instrument, categ_purpose) + # The field line.payment_line_date is the requested payment date + key = (line.payment_line_date, priority, local_instrument, categ_purpose) if key in lines_per_group: lines_per_group[key].append(line) else: diff --git a/account_banking_sepa_direct_debit/models/account_payment_order.py b/account_banking_sepa_direct_debit/models/account_payment_order.py index 8ee79aa7a..6bce8cd0a 100644 --- a/account_banking_sepa_direct_debit/models/account_payment_order.py +++ b/account_banking_sepa_direct_debit/models/account_payment_order.py @@ -93,11 +93,8 @@ class AccountPaymentOrder(models.Model): ) % payment_line.mandate_id.unique_mandate_reference ) - # The field line.date is the requested payment date - # taking into account the 'date_preferred' setting - # cf account_banking_payment_export/models/account_payment.py - # in the inherit of action_open() - key = (line.date, priority, categ_purpose, seq_type, scheme) + # The field line.payment_line_date is the requested payment date + key = (line.payment_line_date, priority, categ_purpose, seq_type, scheme) if key in lines_per_group: lines_per_group[key].append(line) else: diff --git a/account_payment_order/models/account_payment.py b/account_payment_order/models/account_payment.py index 6bdbde725..f3757d7b5 100644 --- a/account_payment_order/models/account_payment.py +++ b/account_payment_order/models/account_payment.py @@ -11,6 +11,7 @@ class AccountPayment(models.Model): payment_order_id = fields.Many2one(comodel_name="account.payment.order") payment_line_ids = fields.Many2many(comodel_name="account.payment.line") + payment_line_date = fields.Date(compute="_compute_payment_line_date") # Compatibility with previous approach for returns - To be removed on v16 old_bank_payment_line_name = fields.Char() @@ -45,6 +46,11 @@ class AccountPayment(models.Model): ) return res + @api.depends("payment_line_ids", "payment_line_ids.date") + def _compute_payment_line_date(self): + for item in self: + item.payment_line_date = item.payment_line_ids[:1].date + def _prepare_move_line_default_vals(self, write_off_line_vals=None): """Overwrite date_maturity of the move_lines that are generated when related to a payment order. diff --git a/account_payment_order/tests/test_payment_order_inbound.py b/account_payment_order/tests/test_payment_order_inbound.py index 228571d33..25385809e 100644 --- a/account_payment_order/tests/test_payment_order_inbound.py +++ b/account_payment_order/tests/test_payment_order_inbound.py @@ -145,11 +145,13 @@ class TestPaymentOrderInbound(TestPaymentOrderInboundBase): self.assertEqual(len(self.payment_order_obj.search(self.domain)), 0) @freeze_time("2024-04-01") - def test_creation_transfer_move_date(self): + def test_creation_transfer_move_date_01(self): self.inbound_order.date_prefered = "fixed" self.inbound_order.date_scheduled = "2024-06-01" self.inbound_order.draft2open() - payment_move = self.inbound_order.payment_ids.move_id + payment = self.inbound_order.payment_ids + self.assertEqual(payment.payment_line_date, date(2024, 6, 1)) + payment_move = payment.move_id self.assertEqual(payment_move.date, date(2024, 4, 1)) # now self.assertEqual( payment_move.line_ids.mapped("date_maturity"), @@ -159,7 +161,35 @@ class TestPaymentOrderInbound(TestPaymentOrderInboundBase): self.inbound_order.open2generated() self.inbound_order.generated2uploaded() self.assertEqual(self.inbound_order.state, "uploaded") - payment_move = self.inbound_order.payment_ids.move_id + payment = self.inbound_order.payment_ids + self.assertEqual(payment.payment_line_date, date(2024, 6, 1)) + payment_move = payment.move_id + self.assertEqual(payment_move.date, date(2024, 4, 1)) # now + self.assertEqual( + payment_move.line_ids.mapped("date_maturity"), + [date(2024, 6, 1), date(2024, 6, 1)], + ) + + @freeze_time("2024-04-01") + def test_creation_transfer_move_date_02(self): + # Simulate that the invoice had a different due date + self.inbound_order.payment_line_ids.ml_maturity_date = "2024-06-01" + self.inbound_order.draft2open() + payment = self.inbound_order.payment_ids + self.assertEqual(payment.payment_line_date, date(2024, 6, 1)) + payment_move = payment.move_id + self.assertEqual(payment_move.date, date(2024, 4, 1)) # now + self.assertEqual( + payment_move.line_ids.mapped("date_maturity"), + [date(2024, 6, 1), date(2024, 6, 1)], + ) + self.assertEqual(self.inbound_order.payment_count, 1) + self.inbound_order.open2generated() + self.inbound_order.generated2uploaded() + self.assertEqual(self.inbound_order.state, "uploaded") + payment = self.inbound_order.payment_ids + self.assertEqual(payment.payment_line_date, date(2024, 6, 1)) + payment_move = payment.move_id self.assertEqual(payment_move.date, date(2024, 4, 1)) # now self.assertEqual( payment_move.line_ids.mapped("date_maturity"),