From 548e0ba239b2d56282eee3378680b534fce7f413 Mon Sep 17 00:00:00 2001 From: Olivier Colson Date: Fri, 30 Mar 2018 15:41:08 +0200 Subject: [PATCH] [IMP] l10n_ch: allow manual value for postal bank accounts Previously, the ISR reference was computed from the iban number but it seems some banks (for example UBS) use arbitrary ISR references that needs to be manually set. Was task: 40975 Was PR #22931 --- addons/l10n_ch/models/__init__.py | 1 + addons/l10n_ch/models/account_journal.py | 47 ++++++++++++++++++++++++ addons/l10n_ch/models/res_bank.py | 16 ++++---- addons/l10n_ch/views/res_bank_view.xml | 22 +++++++++++ 4 files changed, 78 insertions(+), 8 deletions(-) create mode 100644 addons/l10n_ch/models/account_journal.py diff --git a/addons/l10n_ch/models/__init__.py b/addons/l10n_ch/models/__init__.py index cf7550fd368..cabbe1ea2b8 100644 --- a/addons/l10n_ch/models/__init__.py +++ b/addons/l10n_ch/models/__init__.py @@ -3,6 +3,7 @@ from . import res_config_settings from . import account_invoice +from . import account_journal from . import mail_template from . import res_bank from . import res_company diff --git a/addons/l10n_ch/models/account_journal.py b/addons/l10n_ch/models/account_journal.py new file mode 100644 index 00000000000..4ad11b5d84c --- /dev/null +++ b/addons/l10n_ch/models/account_journal.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models, fields, api + +from odoo.exceptions import ValidationError + +from odoo.addons.base_iban.models.res_partner_bank import validate_iban +from odoo.addons.base.models.res_bank import sanitize_account_number + + +class AccountJournal(models.Model): + _inherit = 'account.journal' + + # creation of bank journals by giving the account number, allow craetion of the + l10n_ch_postal = fields.Char(related='bank_account_id.l10n_ch_postal') + + @api.model + def create(self, vals): + rslt = super(AccountJournal, self).create(vals) + + # The call to super() creates the related bank_account_id field + if 'l10n_ch_postal' in vals: + rslt.l10n_ch_postal = vals['l10n_ch_postal'] + return rslt + + def write(self, vals): + rslt = super(AccountJournal, self).write(vals) + + # The call to super() creates the related bank_account_id field if necessary + if 'l10n_ch_postal' in vals: + for record in self: + record.bank_account_id.l10n_ch_postal = vals['l10n_ch_postal'] + return rslt + + @api.onchange('bank_acc_number') + def _onchange_set_l10n_ch_postal(self): + try: + validate_iban(self.bank_acc_number) + is_iban = True + except ValidationError: + is_iban = False + + if is_iban: + self.l10n_ch_postal = self.env['res.partner.bank']._retrieve_l10n_ch_postal(sanitize_account_number(self.bank_acc_number)) + else: + self.l10n_ch_postal = self.bank_acc_number diff --git a/addons/l10n_ch/models/res_bank.py b/addons/l10n_ch/models/res_bank.py index 52c24f79d81..c54ba162bf3 100644 --- a/addons/l10n_ch/models/res_bank.py +++ b/addons/l10n_ch/models/res_bank.py @@ -29,7 +29,7 @@ class ResPartnerBank(models.Model): _inherit = 'res.partner.bank' acc_type = fields.Selection(selection_add=[("postal", "Postal")]) - l10n_ch_postal = fields.Char(help='The ISR number of the company within the bank', compute='_compute_l10n_ch_postal') + l10n_ch_postal = fields.Char(string='ISR reference', help='The ISR number of the company within the bank') @api.depends('acc_number') def _compute_acc_type(self): @@ -42,14 +42,14 @@ class ResPartnerBank(models.Model): else: super(ResPartnerBank, record)._compute_acc_type() - @api.depends('acc_number') - def _compute_l10n_ch_postal(self): - for record in self: - if record.acc_type == 'iban': - record.l10n_ch_postal = record._retrieve_l10n_ch_postal(record.sanitized_acc_number) - else: - record.l10n_ch_postal = record.sanitized_acc_number + @api.onchange('acc_number') + def _onchange_set_l10n_ch_postal(self): + if self.acc_type == 'iban': + self.l10n_ch_postal = self._retrieve_l10n_ch_postal(self.sanitized_acc_number) + else: + self.l10n_ch_postal = self.sanitized_acc_number + @api.model def _retrieve_l10n_ch_postal(self, iban): """ Reads a swiss postal account number from a an IBAN and returns it as a string. Returns None if no valid postal account number was found, or diff --git a/addons/l10n_ch/views/res_bank_view.xml b/addons/l10n_ch/views/res_bank_view.xml index cd7e4ae0267..2acae9d76e5 100644 --- a/addons/l10n_ch/views/res_bank_view.xml +++ b/addons/l10n_ch/views/res_bank_view.xml @@ -12,5 +12,27 @@ + + + l10n_ch.res.partner.bank.form + res.partner.bank + + + + + + + + + + l10n_ch.bank.journal.form + account.journal + + + + + + + \ No newline at end of file