diff --git a/account_payment_partner/models/account_move.py b/account_payment_partner/models/account_move.py
index d140a033b..949435ec3 100644
--- a/account_payment_partner/models/account_move.py
+++ b/account_payment_partner/models/account_move.py
@@ -22,6 +22,7 @@ class AccountMove(models.Model):
ondelete="restrict",
readonly=False,
check_company=True,
+ tracking=True,
)
bank_account_required = fields.Boolean(
related="payment_mode_id.payment_method_id.bank_account_required", readonly=True
diff --git a/account_payment_partner/models/account_move_line.py b/account_payment_partner/models/account_move_line.py
index 0664d80f5..1284e93b2 100644
--- a/account_payment_partner/models/account_move_line.py
+++ b/account_payment_partner/models/account_move_line.py
@@ -13,9 +13,10 @@ class AccountMoveLine(models.Model):
store=True,
ondelete="restrict",
index=True,
+ readonly=False,
)
- @api.depends("move_id.payment_mode_id")
+ @api.depends("move_id", "move_id.payment_mode_id")
def _compute_payment_mode(self):
for line in self:
if line.move_id.is_invoice() and line.account_internal_type in (
@@ -25,3 +26,18 @@ class AccountMoveLine(models.Model):
line.payment_mode_id = line.move_id.payment_mode_id
else:
line.payment_mode_id = False
+
+ def write(self, vals):
+ """Propagate up to the move the payment mode if applies."""
+ if "payment_mode_id" in vals:
+ for record in self:
+ move = (
+ self.env["account.move"].browse(vals.get("move_id", 0))
+ or record.move_id
+ )
+ if (
+ move.payment_mode_id.id != vals["payment_mode_id"]
+ and move.is_invoice()
+ ):
+ move.payment_mode_id = vals["payment_mode_id"]
+ return super().write(vals)
diff --git a/account_payment_partner/tests/test_account_payment_partner.py b/account_payment_partner/tests/test_account_payment_partner.py
index 5da34c978..6f2acd5a6 100644
--- a/account_payment_partner/tests/test_account_payment_partner.py
+++ b/account_payment_partner/tests/test_account_payment_partner.py
@@ -294,6 +294,10 @@ class TestAccountPaymentPartner(SavepointCase):
lambda l: l.account_id.user_type_id == self.acct_type_payable
)
self.assertEqual(invoice.payment_mode_id, aml[0].payment_mode_id)
+ # Test payment mode change on aml
+ mode = self.supplier_payment_mode.copy()
+ aml.payment_mode_id = mode
+ self.assertEqual(invoice.payment_mode_id, mode)
def test_invoice_create_out_invoice(self):
invoice = self._create_invoice(
diff --git a/account_payment_partner/views/account_move_line.xml b/account_payment_partner/views/account_move_line.xml
index a56d67039..4c00e72ef 100644
--- a/account_payment_partner/views/account_move_line.xml
+++ b/account_payment_partner/views/account_move_line.xml
@@ -14,9 +14,34 @@
position="after"
>
-
+
+
+
+
+ account.move.line.tree - Add payment mode
+ account.move.line
+
+
+
+
+
+
+
+
+