improved support empty statements and oca camt parser

This commit is contained in:
Luc De Meyer 2019-03-08 15:40:45 +01:00
parent a608b033e0
commit 5aaefaf0fc
9 changed files with 80 additions and 15 deletions

View File

@ -1,9 +1,9 @@
# 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).
{ {
'name': 'EBICS banking protocol', 'name': 'EBICS banking protocol',
'version': '11.0.1.5.0', 'version': '11.0.1.6.0',
'license': 'AGPL-3', 'license': 'AGPL-3',
'author': 'Noviat', 'author': 'Noviat',
'category': 'Accounting & Finance', 'category': 'Accounting & Finance',

View File

@ -1,4 +1,4 @@
# 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).
""" """
@ -288,7 +288,7 @@ class EbicsConfig(models.Model):
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)

View File

@ -1,4 +1,4 @@
# 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).
import logging import logging
@ -136,7 +136,7 @@ class EbicsFile(models.Model):
def _check_import_module(self, module): def _check_import_module(self, module):
mod = self.env['ir.module.module'].search( mod = self.env['ir.module.module'].search(
[('name', '=', module), [('name', '=like', module),
('state', '=', 'installed')]) ('state', '=', 'installed')])
if not mod: if not mod:
raise UserError(_( raise UserError(_(
@ -207,14 +207,15 @@ class EbicsFile(models.Model):
@staticmethod @staticmethod
def _process_camt053(self): def _process_camt053(self):
import_module = 'account_bank_statement_import_camt' import_module = 'account_bank_statement_import_camt%'
self._check_import_module(import_module) self._check_import_module(import_module)
wiz_model = 'account.bank.statement.import' wiz_model = 'account.bank.statement.import'
wiz_vals = { wiz_vals = {
'data_file': self.data, 'data_file': self.data,
'filename': self.name, 'filename': self.name,
} }
wiz = self.env[wiz_model].create(wiz_vals) ctx = dict(self.env.context, active_model='ebics.file')
wiz = self.env[wiz_model].with_context(ctx).create(wiz_vals)
res = wiz.import_file() res = wiz.import_file()
if res.get('res_model') \ if res.get('res_model') \
== 'account.bank.statement.import.journal.creation': == 'account.bank.statement.import.journal.creation':

View File

@ -1,4 +1,4 @@
# 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).
import logging import logging
@ -32,7 +32,7 @@ except RuntimeError as e:
else: else:
_logger.error(e.message) _logger.error(e.message)
fintech.register() fintech.register()
except: except Exception:
msg = "fintech.register error" msg = "fintech.register error"
tb = ''.join(format_exception(*exc_info())) tb = ''.join(format_exception(*exc_info()))
msg += '\n%s' % tb msg += '\n%s' % tb

View File

@ -64,6 +64,7 @@
type="object" type="object"
groups="account.group_account_manager" groups="account.group_account_manager"
help="Process the EBICS File"/> help="Process the EBICS File"/>
<button name="set_to_done" states="draft" string="Set to Done" type="object" groups="account.group_account_manager"/>
<field name="state" widget="statusbar"/> <field name="state" widget="statusbar"/>
</header> </header>
<group colspan="4" col="4"> <group colspan="4" col="4">

View File

@ -1,2 +1,3 @@
from . import account_bank_statement_import
from . import ebics_change_passphrase from . import ebics_change_passphrase
from . import ebics_xfer from . import ebics_xfer

View File

@ -0,0 +1,62 @@
# Copyright 2009-2019 Noviat.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging
from odoo import models, _
_logger = logging.getLogger(__name__)
class AccountBankStatementImport(models.TransientModel):
_inherit = 'account.bank.statement.import'
def _check_parsed_data(self, stmts_vals):
""" Basic and structural verifications """
if self.env.context.get('active_model') == 'ebics.file':
message = False
if len(stmts_vals) == 0:
message = _('This file doesn\'t contain any statement.')
if not message:
no_st_line = True
for vals in stmts_vals:
if vals['transactions'] and len(vals['transactions']) > 0:
no_st_line = False
break
if no_st_line:
message = _('This file doesn\'t contain any transaction.')
if message:
log_msg = _(
"Error detected while processing and EBICS File"
) + ':\n' + message
_logger.warn(log_msg)
return
super()._check_parsed_data(stmts_vals)
def _create_bank_statements(self, stmts_vals):
"""
Return error message to ebics.file when handling empty camt.
Remarks/TODO:
We could add more info to the message (e.g. date, balance, ...)
and write this to the ebics.file, note field.
We could also create empty bank statement (in state done) to clearly
show days without transactions via the bank statement list view.
"""
if self.env.context.get('active_model') == 'ebics.file':
transactions = False
for st_vals in stmts_vals:
if st_vals.get('transactions'):
transactions = True
break
if not transactions:
message = _('This file doesn\'t contain any transaction.')
statement_ids = []
notifications = {
'type': 'warning',
'message': message,
'details': ''
}
return statement_ids, [notifications]
return super()._create_bank_statements(stmts_vals)

View File

@ -1,4 +1,4 @@
# 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).
import logging import logging

View File

@ -1,4 +1,4 @@
# 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).
""" """
@ -199,7 +199,7 @@ class EbicsXfer(models.TransientModel):
self.note += _("Warning:") self.note += _("Warning:")
self.note += '\n' self.note += '\n'
self.note += e.message self.note += e.message
except: except Exception:
self.note += '\n' self.note += '\n'
self.note += _("Unknown Error") self.note += _("Unknown Error")
tb = ''.join(format_exception(*exc_info())) tb = ''.join(format_exception(*exc_info()))
@ -321,7 +321,7 @@ class EbicsXfer(models.TransientModel):
self.note += _("EBICS Verification Error:") self.note += _("EBICS Verification Error:")
self.note += '\n' self.note += '\n'
self.note += _("The EBICS response could not be verified.") self.note += _("The EBICS response could not be verified.")
except: except Exception:
self.note += '\n' self.note += '\n'
self.note += _("Unknown Error") self.note += _("Unknown Error")
tb = ''.join(format_exception(*exc_info())) tb = ''.join(format_exception(*exc_info()))
@ -359,7 +359,7 @@ class EbicsXfer(models.TransientModel):
try: try:
client = EbicsClient( client = EbicsClient(
bank, user, version=self.ebics_config_id.ebics_version) bank, user, version=self.ebics_config_id.ebics_version)
except: except Exception:
self.note += '\n' self.note += '\n'
self.note += _("Unknown Error") self.note += _("Unknown Error")
tb = ''.join(format_exception(*exc_info())) tb = ''.join(format_exception(*exc_info()))