init cycle - usability improvements

This commit is contained in:
Luc De Meyer 2019-04-08 12:56:51 +02:00
parent bbd53ca746
commit fecae6246e
3 changed files with 31 additions and 12 deletions

View File

@ -4,7 +4,7 @@
{ {
'name': 'EBICS banking protocol', 'name': 'EBICS banking protocol',
'version': '10.0.1.5.0', 'version': '10.0.1.6.0',
'license': 'AGPL-3', 'license': 'AGPL-3',
'author': 'Noviat', 'author': 'Noviat',
'category': 'Accounting & Finance', 'category': 'Accounting & Finance',

View File

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright 2009-2018 Noviat. # Copyright 2009-2019 Noviat.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
""" """
@ -224,11 +224,11 @@ class EbicsConfig(models.Model):
'mykeys']) 'mykeys'])
@api.multi @api.multi
@api.depends('ebics_keys')
def _compute_ebics_keys_found(self): def _compute_ebics_keys_found(self):
for cfg in self: for cfg in self:
if cfg.ebics_keys: cfg.ebics_keys_found = (
dirname = os.path.dirname(self.ebics_keys) cfg.ebics_keys and os.path.isfile(cfg.ebics_keys))
self.ebics_keys_found = os.path.exists(dirname)
@api.multi @api.multi
@api.constrains('order_number') @api.constrains('order_number')
@ -280,16 +280,20 @@ class EbicsConfig(models.Model):
raise UserError( raise UserError(
_("Set state to 'draft' before Bank Key (re)initialisation.")) _("Set state to 'draft' before Bank Key (re)initialisation."))
if not self.ebics_passphrase:
raise UserError(
_("Set a passphrase."))
try: try:
keyring = EbicsKeyRing( keyring = EbicsKeyRing(
keys=self.ebics_keys, keys=self.ebics_keys,
passphrase=self.ebics_passphrase or None) passphrase=self.ebics_passphrase)
bank = EbicsBank( bank = EbicsBank(
keyring=keyring, hostid=self.ebics_host, url=self.ebics_url) keyring=keyring, hostid=self.ebics_host, url=self.ebics_url)
user = EbicsUser( user = EbicsUser(
keyring=keyring, partnerid=self.ebics_partner, keyring=keyring, partnerid=self.ebics_partner,
userid=self.ebics_user) userid=self.ebics_user)
except: except Exception:
exctype, value = exc_info()[:2] exctype, value = exc_info()[:2]
error = _("EBICS Initialisation Error:") error = _("EBICS Initialisation Error:")
error += '\n' + str(exctype) + '\n' + str(value) error += '\n' + str(exctype) + '\n' + str(value)
@ -297,9 +301,15 @@ class EbicsConfig(models.Model):
self._check_ebics_keys() self._check_ebics_keys()
if not os.path.isfile(self.ebics_keys): if not os.path.isfile(self.ebics_keys):
try:
user.create_keys( user.create_keys(
keyversion=self.ebics_key_version, keyversion=self.ebics_key_version,
bitlength=self.ebics_key_bitlength) bitlength=self.ebics_key_bitlength)
except Exception:
exctype, value = exc_info()[:2]
error = _("EBICS Initialisation Error:")
error += '\n' + str(exctype) + '\n' + str(value)
raise UserError(error)
if self.ebics_key_x509: if self.ebics_key_x509:
dn_attrs = { dn_attrs = {
@ -352,10 +362,13 @@ class EbicsConfig(models.Model):
self._update_order_number(OrderID) self._update_order_number(OrderID)
# Create an INI-letter which must be printed and sent to the bank. # Create an INI-letter which must be printed and sent to the bank.
lang = self.env.user.lang[:2]
cc = self.bank_id.bank_id.country.code cc = self.bank_id.bank_id.country.code
if cc in ['FR', 'DE']: if cc in ['FR', 'DE']:
lang = cc lang = cc
else:
lang = self.env.user.lang or \
self.env['res.lang'].search([])[0].code
lang = lang[:2]
tmp_dir = os.path.normpath(self.ebics_files + '/tmp') tmp_dir = os.path.normpath(self.ebics_files + '/tmp')
if not os.path.isdir(tmp_dir): if not os.path.isdir(tmp_dir):
os.makedirs(tmp_dir, 0700) os.makedirs(tmp_dir, 0700)
@ -488,6 +501,11 @@ class EbicsConfig(models.Model):
"EBICS Keys Directory '%s' is not available." "EBICS Keys Directory '%s' is not available."
"\nPlease contact your system administrator.") "\nPlease contact your system administrator.")
% dirname) % dirname)
if os.path.isdir(self.ebics_keys):
raise UserError(_(
"Configuration Error.\n"
"The 'EBICS Keys' parameter should be a full path "
"(directory + filename) not a directory name."))
def _check_ebics_files(self): def _check_ebics_files(self):
dirname = self.ebics_files or '' dirname = self.ebics_files or ''

View File

@ -71,7 +71,8 @@
<group col="4" name="ebics_key"> <group col="4" name="ebics_key">
<field name="ebics_keys"/> <field name="ebics_keys"/>
<field name="ebics_keys_found" invisible="1"/> <field name="ebics_keys_found" invisible="1"/>
<field name="ebics_passphrase" password="True" attrs="{'invisible': [('ebics_keys_found', '!=', False)]}"/> <field name="ebics_passphrase" password="True"
attrs="{'required': [('state', '=', 'draft')], 'invisible': [('ebics_keys_found', '=', True)]}"/>
<newline/> <newline/>
<field name="ebics_key_version"/> <field name="ebics_key_version"/>
<field name="ebics_key_bitlength"/> <field name="ebics_key_bitlength"/>