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