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