From ccf9d3bc6b064732b6932b637a20644321893256 Mon Sep 17 00:00:00 2001 From: Akim Juillerat Date: Tue, 6 Jun 2023 19:06:57 +0200 Subject: [PATCH] account_payment_partner: Fix computation of partner_bank_id The computation of partner_bank_id has not been migrated properly since the move from account.invoice to account.move. Before, we had an onchange on partner_id that did the following: - If no partner or no company, remove payment mode - If type = in_invoice, remove partner_bank_id as well - If partner and company, - If type = in_invoice, set payment mode from partner - if payment mode's payment method has bank account required, set the partner_bank_id to the commercial partner's bank - else set partner_bank_id to False - If type = out_invoice, set payment mode from partner and do not assign partner_bank_id We also had an onchange on payment_mode_id that did the following: - If payment mode and its payment_type=outbound and its payment method has bank account required, set partner_bank_id to False - If no payment mode, set partner_bank_id to False Now that partner_bank_id is a computed field, we shouldn't set its value to False if the move is not a vendor bill or doesn't have a payment mode. The computation of partner_bank_id must instead reflect the conditions we used to have, that is: - If we don't have a payment_mode, set value to False - If we have a payment mode - If type=in_invoice and payment mode's payment method has not bank account required, set partner_bank_id to False (as setting the bank account from the partner is done in the call to super) - If type=out_invoice - if payment mode's payment method has bank account required - set partner_bank_id to the bank account linked to the fixed journal of payment mode if defined - do not set anything if that isn't the case since setting the bank account from the company is done in the call to super) - if payment mode's payment method does not have bank account required, set partner_bank_id to False Closes: #1091 --- .../models/account_move.py | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/account_payment_partner/models/account_move.py b/account_payment_partner/models/account_move.py index c6b4ac2e1..5462b181a 100644 --- a/account_payment_partner/models/account_move.py +++ b/account_payment_partner/models/account_move.py @@ -90,12 +90,29 @@ class AccountMove(models.Model): def _compute_partner_bank_id(self): res = super()._compute_partner_bank_id() for move in self: - # No bank account assignation is done for out_invoice as this is only - # needed for printing purposes and it can conflict with - # SEPA direct debit payments. Current report prints it. - if move.move_type != "in_invoice" or not move.payment_mode_id: + payment_mode = move.payment_mode_id + if payment_mode: + if ( + move.move_type == "in_invoice" + and payment_mode.payment_type == "outbound" + and not payment_mode.payment_method_id.bank_account_required + ): + move.partner_bank_id = False + continue + elif move.move_type == "out_invoice": + if payment_mode.payment_method_id.bank_account_required: + if ( + payment_mode.bank_account_link == "fixed" + and payment_mode.fixed_journal_id.bank_account_id + ): + move.partner_bank_id = ( + payment_mode.fixed_journal_id.bank_account_id + ) + continue + else: + move.partner_bank_id = False + else: move.partner_bank_id = False - continue return res @api.depends("line_ids.matched_credit_ids", "line_ids.matched_debit_ids")