init cycle - usability improvements

This commit is contained in:
Luc De Meyer 2019-04-08 12:54:26 +02:00
parent b183462b46
commit ee6c1c24dc
3 changed files with 29 additions and 10 deletions

View File

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

View File

@ -223,11 +223,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')
@ -279,10 +279,14 @@ 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(
@ -296,9 +300,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 = {
@ -351,10 +361,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, mode=0o700) os.makedirs(tmp_dir, mode=0o700)
@ -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"/>