Skip to content
Closed
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
12 changes: 12 additions & 0 deletions account_payment_order/models/account_payment.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# Copyright 2022 Tecnativa - Pedro M. Baeza
# Copyright 2023 Noviat
# Copyright 2024 Tecnativa - Víctor Martínez
# Copyright 2024 FactorLibre - Aritz Olea
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import _, api, fields, models
Expand Down Expand Up @@ -87,3 +88,14 @@ def _prepare_move_line_default_vals(self, write_off_line_vals=None):
for vals in vals_list:
vals["date_maturity"] = self.payment_line_ids[0].date
return vals_list

def _compute_available_partner_bank_ids(self):
"""Overrides available_partner_bank_ids compute method for payments which
belong to a payment order. Without this override, in case compute method is
triggered, these payments' bank value is replaced by an incorrect value."""
order_pays = self.filtered(lambda p: p.payment_order_id and p.payment_line_ids)
for pay in order_pays:
pay.available_partner_bank_ids = pay.payment_line_ids[0].partner_bank_id
return super(
AccountPayment, self - order_pays
)._compute_available_partner_bank_ids()
23 changes: 23 additions & 0 deletions account_payment_order/tests/test_payment_order_inbound.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ def setUpClass(cls, chart_template_ref=None):
cls.partner = cls.env["res.partner"].create(
{
"name": "Test Partner",
"bank_ids": [(0, 0, {"acc_number": "XX15001559627230"})],
}
)
cls.inbound_mode = cls.env["account.payment.mode"].create(
Expand Down Expand Up @@ -208,3 +209,25 @@ def test_creation_transfer_move_date_02(self):
payment_move.line_ids.mapped("date_maturity"),
[date(2024, 6, 1), date(2024, 6, 1)],
)

def test_payment_partner_bank_value(self):
payment_order = self.inbound_order
self.assertEqual(len(payment_order.ids), 1)
payment_order.write({"journal_id": self.journal.id})
self.assertEqual(len(payment_order.payment_line_ids), 1)
self.assertFalse(payment_order.payment_ids)
# Open payment order
payment_order.draft2open()
self.assertEqual(len(payment_order.payment_ids), 1)
payment = payment_order.payment_ids[0]
self.assertEqual(len(payment.payment_line_ids), 1)
payment_line = payment.payment_line_ids[0]
self.assertEqual(payment.partner_bank_id, payment_line.partner_bank_id)
# Force payment's available banks compute to check parner_bank_id
# fields value doesn't change
self.assertEqual(payment.state, "draft")
with Form(payment) as payment_form:
payment_form.is_internal_transfer = True
payment_form.is_internal_transfer = False
payment_form.save()
self.assertEqual(payment.partner_bank_id, payment_line.partner_bank_id)
28 changes: 28 additions & 0 deletions account_payment_order/tests/test_payment_order_outbound.py
Original file line number Diff line number Diff line change
Expand Up @@ -566,3 +566,31 @@ def test_action_open_business_document(self):
self.assertEqual(invoice_action["res_id"], self.invoice.id)
manual_line_action = order.payment_line_ids[1].action_open_business_doc()
self.assertFalse(manual_line_action)

def test_payment_partner_bank_value(self):
# Open invoice
self.invoice.action_post()
# Add to payment order using the wizard
self.env["account.invoice.payment.line.multi"].with_context(
active_model="account.move", active_ids=self.invoice.ids
).create({}).run()
payment_order = self.env["account.payment.order"].search(self.domain)
self.assertEqual(len(payment_order.ids), 1)
payment_order.write({"journal_id": self.bank_journal.id})
self.assertEqual(len(payment_order.payment_line_ids), 1)
self.assertFalse(payment_order.payment_ids)
# Open payment order
payment_order.draft2open()
self.assertEqual(len(payment_order.payment_ids), 1)
payment = payment_order.payment_ids[0]
self.assertEqual(len(payment.payment_line_ids), 1)
payment_line = payment.payment_line_ids[0]
self.assertEqual(payment.partner_bank_id, payment_line.partner_bank_id)
# Force payment's available banks compute to check parner_bank_id
# fields value doesn't change
self.assertEqual(payment.state, "draft")
with Form(payment) as payment_form:
payment_form.is_internal_transfer = True
payment_form.is_internal_transfer = False
payment_form.save()
self.assertEqual(payment.partner_bank_id, payment_line.partner_bank_id)
Loading