Browse Source

Merge 01fd78c360 into 09ea7e6e78

pull/95/merge
Giedrius Slavinskas 6 years ago
committed by GitHub
parent
commit
1b77ac7c26
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 47
      account_bank_statement_import_mt940_uk_hsbc/README.rst
  2. 110
      account_bank_statement_import_mt940_uk_hsbc/__init__.py
  3. 31
      account_bank_statement_import_mt940_uk_hsbc/__openerp__.py

47
account_bank_statement_import_mt940_uk_hsbc/README.rst

@ -0,0 +1,47 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:alt: License: AGPL-3
Import MT940 UK HSBC Bank Statements
=====================================
This module allows you to import the MT940 files from the UK HSBC bank
in Odoo as bank statements.
Known issues / Roadmap
======================
* None
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/bank-statement-import/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed feedback
`here <https://github.com/OCA/bank-statement-import/issues/new?body=module:%20account_bank_statement_import%0Aversion:%208.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Credits
=======
Contributors
------------
* Giedrius Slavinskas <giedrius@inovera.lt>
Maintainer
----------
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
To contribute to this module, please visit http://odoo-community.org.
This module should make it easy to migrate bank statement import
modules written for earlies versions of Odoo/OpenERP.

110
account_bank_statement_import_mt940_uk_hsbc/__init__.py

@ -0,0 +1,110 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (C) 2017 Giedrius Slavinskas <giedrius@inovera.lt>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import re
import logging
from openerp import models
from openerp.addons.account_bank_statement_import_mt940_base.mt940 import (
MT940, str2amount)
logger = logging.getLogger(__name__)
tag_61_regex = re.compile(
r'^(?P<date>\d{6})(?P<line_date>\d{0,4})?'
r'(?P<sign>[CD])(?P<currency>[A-Z])?(?P<amount>\d+,\d{2})N'
r'(?P<type>.{3})(?P<reference>.{16})//(?P<bankref>.{16})(?P<info>.*)'
)
class MT940Parser(MT940):
"""Parser for ing MT940 bank statement import files."""
def __init__(self):
"""Initialize parser - override at least header_regex."""
super(MT940Parser, self).__init__()
self.mt940_type = 'UK HSBC'
self.header_lines = 0
self.header_regex = '^:20:\d{6}'
self.footer_regex = '^:62F:'
def handle_tag_20(self, data):
"""get bank statment file reference"""
super(MT940Parser, self).handle_header(data, None)
self.current_statement.ref = data.strip()
def handle_tag_25(self, data):
"""parse local bank account number of the bank statment"""
data = data.strip()
self.current_statement.local_account = ' '.join([data[:6],
data[6:].zfill(8)])
def handle_tag_28C(self, data):
"""get bank statment file number"""
self.current_statement.number = data.strip()
def handle_tag_61(self, data):
"""get transaction values"""
super(MT940Parser, self).handle_tag_61(data)
match = tag_61_regex.match(data)
if not match:
raise ValueError("Cannot parse %s" % data)
res = match.groupdict()
transaction = self.current_transaction
transaction.transferred_amount = str2amount(res['sign'], res['amount'])
transaction.transfer_type = res['type']
res['reference'] = res['reference'].strip()
if res['reference'] and res['reference'] != 'NONREF':
transaction.eref = res['reference']
def handle_tag_86(self, data):
"""set additional info"""
self.current_transaction.message = ' '.join(data.split())
def handle_header(self, dummy_line, iterator):
pass
def handle_footer(self, dummy_line, dummy_iterator):
self.handle_record(dummy_line)
statement = self.current_statement
statement.statement_id = '%s-%s-%s' % (
statement.ref, statement.local_account, statement.number
)
super(MT940Parser, self).handle_footer(dummy_line, dummy_iterator)
class AccountBankStatementImport(models.TransientModel):
"""Add parsing of mt940 files to bank statement import."""
_inherit = 'account.bank.statement.import'
def _parse_file(self, cr, uid, data_file, context=None):
"""Parse a MT940 UK HSBC file."""
parser = MT940Parser()
try:
logger.debug("Try parsing with MT940 UK HSBC.")
return parser.parse(data_file)
except ValueError:
# Returning super will call next candidate:
logger.debug("Statement file was not a MT940 UK HSBC file.",
exc_info=True)
return super(AccountBankStatementImport, self)._parse_file(
cr, uid, data_file, context=context)

31
account_bank_statement_import_mt940_uk_hsbc/__openerp__.py

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (C) 2017 Giedrius Slavinskas <giedrius@inovera.lt>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': 'MT940 UK HSBC Format Bank Statements Import',
'version': '8.0.0.0.0',
'license': 'AGPL-3',
'author': 'Giedrius Slavinskas',
'website': 'https://github.com/OCA/bank-statement-import',
'category': 'Banking addons',
'depends': [
'account_bank_statement_import_mt940_base'
],
'installable': True,
}
Loading…
Cancel
Save