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'))]}" /> +