From 25f157efc02aeb82103d55c5f1fa8f35f287cd9a Mon Sep 17 00:00:00 2001 From: Florian Gilbert Date: Thu, 16 Apr 2020 09:41:02 +0000 Subject: [PATCH] [IMP] account: Verify if res_partner_bank exists in set_bank_account. When creating or writing on a account.journal model, it is possible to pass a char representing the bank account number into bank_acc_number instead of passing directly a res.partner.bank. In case we pass bank_acc_number the system will try to create automatically a new res.partner.bank for us, however if a res.partner.bank already exists with the same account number it will result in an error as we have a unicity constraint for that. Therefore it is best to first seach for such an existing res.partner.bank before trying to create it. The search is done on the sanitized_account_number field as the unicity constraint is on that field. closes odoo/odoo#49637 Signed-off-by: Cedric Snauwaert (csn) --- addons/account/models/account_journal.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/addons/account/models/account_journal.py b/addons/account/models/account_journal.py index 68d72456151..354e43bb0d7 100644 --- a/addons/account/models/account_journal.py +++ b/addons/account/models/account_journal.py @@ -2,6 +2,7 @@ from odoo import api, fields, models, _ from odoo.osv import expression from odoo.exceptions import UserError, ValidationError +from odoo.addons.base.models.res_bank import sanitize_account_number class AccountJournalGroup(models.Model): @@ -486,15 +487,20 @@ class AccountJournal(models.Model): return journal def set_bank_account(self, acc_number, bank_id=None): - """ Create a res.partner.bank and set it as value of the field bank_account_id """ + """ Create a res.partner.bank (if not exists) and set it as value of the field bank_account_id """ self.ensure_one() - self.bank_account_id = self.env['res.partner.bank'].create({ - 'acc_number': acc_number, - 'bank_id': bank_id, - 'company_id': self.company_id.id, - 'currency_id': self.currency_id.id, - 'partner_id': self.company_id.partner_id.id, - }).id + res_partner_bank = self.env['res.partner.bank'].search([('sanitized_acc_number', '=', sanitize_account_number(acc_number)), + ('company_id', '=', self.company_id.id)], limit=1) + if res_partner_bank: + self.bank_account_id = res_partner_bank.id + else: + self.bank_account_id = self.env['res.partner.bank'].create({ + 'acc_number': acc_number, + 'bank_id': bank_id, + 'company_id': self.company_id.id, + 'currency_id': self.currency_id.id, + 'partner_id': self.company_id.partner_id.id, + }).id def name_get(self): res = []