diff --git a/sale_order_type/models/account_move.py b/sale_order_type/models/account_move.py index b1140908df8..1f4d0203cae 100644 --- a/sale_order_type/models/account_move.py +++ b/sale_order_type/models/account_move.py @@ -48,6 +48,11 @@ def _compute_sale_type_id(self): ) if sale_type: record.sale_type_id = sale_type + # Add manually field to compute, as using api.depends on its compute function would + # trigger unwanted recomputation of partner_bank_id on vendor bills + self.env.add_to_compute( + self.env["account.move"]._fields["journal_id"], record + ) @api.depends("sale_type_id") def _compute_invoice_payment_term_id(self): @@ -56,9 +61,8 @@ def _compute_invoice_payment_term_id(self): move.invoice_payment_term_id = move.sale_type_id.payment_term_id return res - @api.depends("sale_type_id") - def _compute_journal_id(self): - res = super()._compute_journal_id() - for move in self.filtered("sale_type_id.journal_id"): - move.journal_id = move.sale_type_id.journal_id - return res + def _search_default_journal(self): + sale_type_journal = self.sale_type_id.journal_id + if sale_type_journal: + return sale_type_journal + return super()._search_default_journal() diff --git a/sale_order_type/tests/test_sale_order_type.py b/sale_order_type/tests/test_sale_order_type.py index 3e4e3ac7c16..f129613d94e 100644 --- a/sale_order_type/tests/test_sale_order_type.py +++ b/sale_order_type/tests/test_sale_order_type.py @@ -263,3 +263,40 @@ def test_sequence_default(self): def test_res_partner_copy_data(self): new_partner = self.partner.copy() self.assertEqual(self.partner.sale_type, new_partner.sale_type) + + def test_avoid_bank_recomputation(self): + first_bank_account = ( + self.env["res.partner.bank"] + .search([], limit=1) + .copy({"partner_id": self.partner.id}) + ) + second_bank_account = first_bank_account.copy( + { + "acc_number": first_bank_account.acc_number.replace("1", "2"), + "sequence": first_bank_account.sequence + 10, + } + ) + inv_form = Form( + self.env["account.move"].with_context(default_move_type="in_invoice") + ) + inv_form.partner_id = self.partner + inv_form.invoice_date = fields.Date.today() + with inv_form.invoice_line_ids.new() as inv_line: + inv_line.product_id = self.product + inv_line.quantity = 1.0 + inv_line.price_unit = 10.0 + vendor_bill = inv_form.save() + self.assertEqual(vendor_bill.partner_bank_id, first_bank_account) + vendor_bill.partner_bank_id = second_bank_account + vendor_bill.action_post() + register_payment_action = vendor_bill.action_register_payment() + register_payment_wiz_form = Form( + self.env[register_payment_action["res_model"]].with_context( + **register_payment_action["context"] + ) + ) + self.assertEqual(register_payment_wiz_form.partner_bank_id, second_bank_account) + register_payment_wiz = register_payment_wiz_form.save() + payment_action = register_payment_wiz.action_create_payments() + payment = self.env[payment_action["res_model"]].browse(payment_action["res_id"]) + self.assertEqual(payment.partner_bank_id, second_bank_account)