← Back to team overview

banking-addons-team team mailing list archive

[Merge] lp:~igor-cota/banking-addons/banking-addons into lp:banking-addons/6.0

 

Igor Cota has proposed merging lp:~igor-cota/banking-addons/banking-addons into lp:banking-addons/6.0.

Requested reviews:
  Banking Addons Team (banking-addons-team)

For more details, see:
https://code.launchpad.net/~igor-cota/banking-addons/banking-addons/+merge/114666

Initial support for Raiffeisenbank Croatia. Statements import works nicely. First time using Python / bzr as dev so please be gentle. :)
-- 
https://code.launchpad.net/~igor-cota/banking-addons/banking-addons/+merge/114666
Your team Banking Addons Team is requested to review the proposed merge of lp:~igor-cota/banking-addons/banking-addons into lp:banking-addons/6.0.
=== added directory 'account_banking_hr_rba'
=== added file 'account_banking_hr_rba/__init__.py'
--- account_banking_hr_rba/__init__.py	1970-01-01 00:00:00 +0000
+++ account_banking_hr_rba/__init__.py	2012-07-12 15:42:47 +0000
@@ -0,0 +1,31 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Copyright (C) 2012 Igor Cota (<http://www.codexapertus.hr>).
+#    Copyright (C) 2010 Sami Haahtinen (<http://ressukka.net>).
+#    Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
+#    All Rights Reserved
+#
+#    WARNING: This program as such is intended to be used by professional
+#    programmers who take the whole responsability of assessing all potential
+#    consequences resulting from its eventual inadequacies and bugs
+#    End users who are looking for a ready-to-use solution with commercial
+#    garantees and support are strongly adviced to contract EduSense BV
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU 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 General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+import rba
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== added file 'account_banking_hr_rba/__terp__.py'
--- account_banking_hr_rba/__terp__.py	1970-01-01 00:00:00 +0000
+++ account_banking_hr_rba/__terp__.py	2012-07-12 15:42:47 +0000
@@ -0,0 +1,43 @@
+##############################################################################
+#
+#    Copyright (C) 2012 Igor Cota (<http://www.codexapertus.hr>).
+#    Copyright (C) 2010 Sami Haahtinen (<http://ressukka.net>).
+#    Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
+#    All Rights Reserved
+#
+#    WARNING: This program as such is intended to be used by professional
+#    programmers who take the whole responsability of assessing all potential
+#    consequences resulting from its eventual inadequacies and bugs
+#    End users who are looking for a ready-to-use solution with commercial
+#    garantees and support are strongly adviced to contract EduSense BV
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU 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 General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+{
+    'name': 'Account Banking RBA Croatia module',
+    'version': '0.1',
+    'license': 'GPL-3',
+    'author': 'Igor Cota',
+    'website': 'http://www.codexapertus.hr',
+    'category': 'Account Banking',
+    'depends': ['account_banking'],
+    'description': '''
+    Module for importing Raiffeisen Bank Croatia XML bank statements.
+
+    This modules contains no logic, just an import filter for account_banking.
+    ''',
+    'active': False,
+    'installable': True,
+}

=== added directory 'account_banking_hr_rba/i18n'
=== added file 'account_banking_hr_rba/rba.py'
--- account_banking_hr_rba/rba.py	1970-01-01 00:00:00 +0000
+++ account_banking_hr_rba/rba.py	2012-07-12 15:42:47 +0000
@@ -0,0 +1,125 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Copyright (C) 2012 Igor Cota (<http://www.codexapertus.hr>).
+#	 Special thanks to Pythonic code stylist Thomas Perl (<http://thp.io>)
+#
+#    Copyright (C) 2010 Sami Haahtinen (<http://ressukka.net>).
+#    Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
+#    All Rights Reserved
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU 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 General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+'''
+This parser implements the Raiffeisenbank Croatia XML format support.
+'''
+from account_banking.parsers import models
+from tools.translate import _
+import xml, datetime, time
+from xml.dom.minidom import parseString
+
+__all__ = ['parser']
+
+def get_first_node(dom, *args):	
+    '''
+    Function to go down DOM hierarchy. Made for brevity.
+    '''
+    node = None
+    for arg in args:
+        if node == None:
+            node = dom.getElementsByTagName(args[0])[0]
+        else:
+            node = node.getElementsByTagName(arg)[0]
+    
+    return node
+
+class transaction(models.mem_bank_transaction):
+    '''
+    Implementation of transaction communication class for account_banking.
+    '''
+    def __init__(self, transaction_dom, *args, **kwargs):
+        '''
+        Parse specific transaction DOM and set attributes.
+        '''
+        iidd = get_first_node(transaction_dom, "BrojTransakcije").firstChild.nodeValue
+        execution_date = datetime.datetime.strptime(get_first_node(transaction_dom, "DatumValute").firstChild.nodeValue, '%d.%m.%Y')
+        effective_date = datetime.datetime.strptime(get_first_node(transaction_dom, "DatumKnjizenja").firstChild.nodeValue, '%d.%m.%Y')
+        
+        owner_string = get_first_node(transaction_dom, "DuznikPrimatelj_1").firstChild.nodeValue
+        remote_owner = ' '.join(owner_string.split()) # Way too much random whitespace
+        
+        transferred_amount = 0. # Assume float
+        
+        if get_first_node(transaction_dom, 'Promet', 'Tip').firstChild.nodeValue == 'P':
+			transferred_amount = float(get_first_node(transaction_dom, 'Promet', 'Iznos').firstChild.nodeValue.replace(',',''))
+        else:
+			transferred_amount = -float(get_first_node(transaction_dom, 'Promet', 'Iznos').firstChild.nodeValue.replace(',',''))
+			
+        super(transaction, self).__init__(*args, **kwargs) 
+        
+        self.id = iidd
+        self.execution_date = execution_date
+        self.effective_date = effective_date
+        self.remote_owner = remote_owner
+        self.transferred_amount = transferred_amount
+
+    def is_valid(self):
+        return True # Everything is fine. Trust me.
+
+class statement(models.mem_bank_statement):
+    '''
+    Implementation of bank_statement communication class of account_banking
+    '''
+    def __init__(self, dom, *args, **kwargs):
+        '''
+        Parse DOM and set general statement attributes
+        '''
+        super(statement, self).__init__(*args, **kwargs)
+        
+        year = get_first_node(dom, "GodinaIzvoda").firstChild.nodeValue
+        serial = get_first_node(dom, "BrojIzvoda").firstChild.nodeValue
+        
+        self.id = 'BNK/' + year + '/' + serial[1:]
+        
+        self.local_account = '2484008-' + get_first_node(dom, "Racun").firstChild.nodeValue # Prepend RBA VDBI
+        self.local_currency = 'HRK' # Hardcoded HRK
+        
+        self.start_balance = float(get_first_node(dom, "Grupe", "Grupa", "ZaglavljeGrupe", "PocetnoStanje").firstChild.nodeValue.replace(',',''))      
+        self.end_balance = float(get_first_node(dom, "Grupe", "Grupa", "ProknjizenoStanje", "Iznos").firstChild.nodeValue.replace(',',''))
+        
+        self.date = datetime.datetime.strptime(get_first_node(dom, "DatumIzvoda").firstChild.nodeValue, '%d.%m.%Y')
+
+class parser(models.parser):
+    code = 'HRRBA'
+    country_code = 'hr'
+    name = _('RBA statement format')
+    doc = _('''RBA XML format defines one statement per file. This parser
+will parse the file and import to OpenERP
+''')
+
+    def parse(self, data):
+        result = []
+        stmnt = None        
+        dom = xml.dom.minidom.parseString(data)
+     
+        stmnt = statement(dom) # We have just the one statement per file
+
+        for i in get_first_node(dom, 'Grupa', 'Stavke').getElementsByTagName('Stavka'):
+			trnsact = transaction(i)
+			stmnt.transactions.append(trnsact)
+			
+        result.append(stmnt)
+        return result