diff --git a/account_payment_partner/models/account_move.py b/account_payment_partner/models/account_move.py
index 949435ec3..9c4ee6112 100644
--- a/account_payment_partner/models/account_move.py
+++ b/account_payment_partner/models/account_move.py
@@ -33,6 +33,10 @@ class AccountMove(models.Model):
ondelete="restrict",
readonly=False,
)
+ has_reconciled_items = fields.Boolean(
+ help="Technical field for supporting the editability of the payment mode",
+ compute="_compute_has_reconciled_items",
+ )
@api.depends("move_type")
def _compute_payment_mode_filter_type_domain(self):
@@ -83,6 +87,17 @@ class AccountMove(models.Model):
partner.supplier_payment_mode_id.refund_payment_mode_id
)
+ @api.depends("line_ids.matched_credit_ids", "line_ids.matched_debit_ids")
+ def _compute_has_reconciled_items(self):
+ for record in self:
+ lines_to_consider = record.line_ids.filtered(
+ lambda x: x.account_id.internal_type in ("receivable", "payable")
+ )
+ record.has_reconciled_items = bool(
+ lines_to_consider.matched_credit_ids
+ + lines_to_consider.matched_debit_ids
+ )
+
@api.onchange("partner_id")
def _onchange_partner_id(self):
"""Force compute because the onchange chain doesn't call
diff --git a/account_payment_partner/tests/test_account_payment_partner.py b/account_payment_partner/tests/test_account_payment_partner.py
index 6f2acd5a6..bdf4d0204 100644
--- a/account_payment_partner/tests/test_account_payment_partner.py
+++ b/account_payment_partner/tests/test_account_payment_partner.py
@@ -298,6 +298,10 @@ class TestAccountPaymentPartner(SavepointCase):
mode = self.supplier_payment_mode.copy()
aml.payment_mode_id = mode
self.assertEqual(invoice.payment_mode_id, mode)
+ # Test payment mode editability on account move
+ self.assertFalse(invoice.has_reconciled_items)
+ invoice.payment_mode_id = self.supplier_payment_mode
+ self.assertEqual(aml.payment_mode_id, self.supplier_payment_mode)
def test_invoice_create_out_invoice(self):
invoice = self._create_invoice(
diff --git a/account_payment_partner/views/account_move_view.xml b/account_payment_partner/views/account_move_view.xml
index 46d0e6aca..a65636ebe 100644
--- a/account_payment_partner/views/account_move_view.xml
+++ b/account_payment_partner/views/account_move_view.xml
@@ -28,8 +28,9 @@
name="payment_mode_id"
domain="[('payment_type', '=', payment_mode_filter_type_domain), ('company_id', '=', company_id)]"
widget="selection"
- attrs="{'readonly': [('state', '!=', 'draft')], 'invisible': [('move_type', 'not in', ('out_invoice','out_refund','in_invoice','in_refund'))]}"
+ attrs="{'readonly': [('has_reconciled_items', '=', True)], 'invisible': [('move_type', 'not in', ('out_invoice','out_refund','in_invoice','in_refund'))]}"
/>
+