From a3c3cd68329935896e4ebb1e853824de2009e16b Mon Sep 17 00:00:00 2001 From: jbw Date: Mon, 24 May 2021 13:40:00 +0000 Subject: [PATCH] [IMP] account: Right payment journal based on bank account on invoice On an invoice, we have the possiblity to set the bank account where the client's payment has to be done. If our company has two payment journal with 2 differents bank accounts (bank A & bank B) set on each of the journal (journal A & journal B), if I create an invoice and set bank B as bank account, after clicking on "Register Payment", the journal A will be automatically selected. With this PR the payment journal linked to the bank account set on the invoice is automatically selected closes odoo/odoo#71191 Task: 2524441 Signed-off-by: Quentin De Paoli (qdp) --- .../wizard/account_payment_register.py | 44 ++++++++++++++----- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/addons/account/wizard/account_payment_register.py b/addons/account/wizard/account_payment_register.py index 84117880c67..6ecb14284a7 100644 --- a/addons/account/wizard/account_payment_register.py +++ b/addons/account/wizard/account_payment_register.py @@ -124,7 +124,7 @@ class AccountPaymentRegister(models.TransientModel): will be grouped together. :return: A python dictionary. ''' - return { + res = { 'partner_id': line.partner_id.id, 'account_id': line.account_id.id, 'currency_id': (line.currency_id or line.company_currency_id).id, @@ -133,6 +133,29 @@ class AccountPaymentRegister(models.TransientModel): 'payment_type': 'inbound' if line.balance > 0.0 else 'outbound', } + if line.move_id.partner_bank_id and line.move_id.is_inbound(): + journal = self._search_journal(line.move_id.company_id.id, res['currency_id'], line.move_id.partner_bank_id.id,) + if journal: + res['journal_id'] = journal.id + + return res + + def _search_journal(self, company_id, currrency_id, partner_bank_id=None): + domain = [('company_id', '=', company_id)] + + if partner_bank_id: + domain += [('bank_account_id', '=', partner_bank_id), ('type', '=', 'bank')] + else: + domain += [('type', 'in', ('bank', 'cash'))] + + journal = None + if currrency_id: + journal = self.env['account.journal'].search(domain + [('currency_id', '=', currrency_id)], limit=1) + if not journal: + journal = self.env['account.journal'].search(domain, limit=1) + + return journal + def _get_batches(self): ''' Group the account.move.line linked to the wizard together. :return: A list of batches, each one containing: @@ -177,7 +200,7 @@ class AccountPaymentRegister(models.TransientModel): else: source_amount_currency = abs(sum(lines.mapped('amount_residual_currency'))) - return { + res = { 'company_id': company.id, 'partner_id': key_values['partner_id'], 'partner_type': key_values['partner_type'], @@ -186,6 +209,9 @@ class AccountPaymentRegister(models.TransientModel): 'source_amount': source_amount, 'source_amount_currency': source_amount_currency, } + if key_values.get('journal_id'): + res['journal_id'] = key_values['journal_id'] + return res # ------------------------------------------------------------------------- # COMPUTE METHODS @@ -243,16 +269,10 @@ class AccountPaymentRegister(models.TransientModel): @api.depends('company_id', 'source_currency_id') def _compute_journal_id(self): for wizard in self: - domain = [ - ('type', 'in', ('bank', 'cash')), - ('company_id', '=', wizard.company_id.id), - ] - journal = None - if wizard.source_currency_id: - journal = self.env['account.journal'].search(domain + [('currency_id', '=', wizard.source_currency_id.id)], limit=1) - if not journal: - journal = self.env['account.journal'].search(domain, limit=1) - wizard.journal_id = journal + if wizard.journal_id: + wizard.journal_id = wizard.journal_id + else: + wizard.journal_id = self._search_journal(wizard.company_id.id, wizard.source_currency_id.id) @api.depends('journal_id') def _compute_currency_id(self):