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
This commit is contained in:
Akim Juillerat
2023-06-06 19:06:57 +02:00
parent 56d568d0e9
commit ccf9d3bc6b

View File

@@ -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")