From 7660d5924b7e0d2913460d75a398da1e3a7a3a70 Mon Sep 17 00:00:00 2001 From: Carlos Dauden Date: Thu, 8 Jul 2021 18:50:08 +0200 Subject: [PATCH] [FIX] account_payment_partner: _compute_invoice_partner_bank isn't executed - When value is set from SO _prepare_invoice method - When partner_id changes TT30875 --- account_payment_partner/__manifest__.py | 2 +- .../models/account_move.py | 20 +++++++++++++++++++ .../tests/test_account_payment_partner.py | 12 ++++++++++- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/account_payment_partner/__manifest__.py b/account_payment_partner/__manifest__.py index 807cd0d39..1fd742cea 100644 --- a/account_payment_partner/__manifest__.py +++ b/account_payment_partner/__manifest__.py @@ -6,7 +6,7 @@ { "name": "Account Payment Partner", - "version": "14.0.1.2.0", + "version": "14.0.1.2.1", "category": "Banking addons", "license": "AGPL-3", "summary": "Adds payment mode on partners and invoices", diff --git a/account_payment_partner/models/account_move.py b/account_payment_partner/models/account_move.py index 0b0faee12..a213a4fe0 100644 --- a/account_payment_partner/models/account_move.py +++ b/account_payment_partner/models/account_move.py @@ -80,6 +80,15 @@ class AccountMove(models.Model): partner.supplier_payment_mode_id.refund_payment_mode_id ) + @api.onchange("partner_id") + def _onchange_partner_id(self): + """Force compute because the onchange chain doesn't call + ``_compute_partner_bank``. + """ + res = super()._onchange_partner_id() + self._compute_partner_bank() + return res + @api.depends("partner_id", "payment_mode_id") def _compute_partner_bank(self): for move in self: @@ -131,3 +140,14 @@ class AccountMove(models.Model): ) # Return this as empty recordset return self.partner_bank_id + + @api.model + def create(self, vals): + """Force compute partner_bank_id when invoice is created from SO + to avoid that odoo _prepare_invoice method value will be set. + """ + if self.env.context.get("active_model") == "sale.order": # pragma: no cover + virtual_move = self.new(vals) + virtual_move._compute_partner_bank() + vals["partner_bank_id"] = virtual_move.partner_bank_id + return super().create(vals) diff --git a/account_payment_partner/tests/test_account_payment_partner.py b/account_payment_partner/tests/test_account_payment_partner.py index e0002d360..11481e2bf 100644 --- a/account_payment_partner/tests/test_account_payment_partner.py +++ b/account_payment_partner/tests/test_account_payment_partner.py @@ -173,7 +173,7 @@ class TestAccountPaymentPartner(SavepointCase): cls.journal_bank = cls.env["res.partner.bank"].create( { "acc_number": "GB95LOYD87430237296288", - "partner_id": cls.env.user.company_id.id, + "partner_id": cls.env.user.company_id.partner_id.id, } ) cls.journal = cls.env["account.journal"].create( @@ -228,6 +228,16 @@ class TestAccountPaymentPartner(SavepointCase): self.payment_mode_model, ) + def test_partner_id_changes_compute_partner_bank(self): + # Test _compute_partner_bank is executed when partner_id changes + move_form = Form( + self.env["account.move"].with_context(default_move_type="out_invoice") + ) + self.assertFalse(move_form.partner_bank_id) + move_form.partner_id = self.customer + self.assertEqual(move_form.payment_mode_id, self.customer_payment_mode) + self.assertFalse(move_form.partner_bank_id) + def test_out_invoice_onchange(self): # Test the onchange methods in invoice invoice = self.move_model.new(