From 0df147b637d86c6de56cbcd78b51c4fee5eda1c2 Mon Sep 17 00:00:00 2001 From: "qdp-launchpad@tinyerp.com" <> Date: Fri, 21 May 2010 16:48:21 +0200 Subject: [PATCH] [ADD] account_coda bzr revid: qdp-launchpad@tinyerp.com-20100521144821-vn6x44vvmrq31z8i --- addons/account_coda/__init__.py | 25 ++ addons/account_coda/__openerp__.py | 39 ++ addons/account_coda/coda.py | 50 +++ addons/account_coda/coda_demo.xml | 5 + addons/account_coda/coda_view.xml | 63 ++++ addons/account_coda/coda_wizard.xml | 13 + addons/account_coda/i18n/account_coda.pot | 163 +++++++++ addons/account_coda/i18n/fr_BE.po | 163 +++++++++ .../account_coda/security/ir.model.access.csv | 3 + addons/account_coda/statement_coda.txt | 10 + addons/account_coda/wizard/__init__.py | 25 ++ addons/account_coda/wizard/coda_import.py | 339 ++++++++++++++++++ 12 files changed, 898 insertions(+) create mode 100644 addons/account_coda/__init__.py create mode 100644 addons/account_coda/__openerp__.py create mode 100644 addons/account_coda/coda.py create mode 100644 addons/account_coda/coda_demo.xml create mode 100644 addons/account_coda/coda_view.xml create mode 100644 addons/account_coda/coda_wizard.xml create mode 100644 addons/account_coda/i18n/account_coda.pot create mode 100644 addons/account_coda/i18n/fr_BE.po create mode 100644 addons/account_coda/security/ir.model.access.csv create mode 100644 addons/account_coda/statement_coda.txt create mode 100644 addons/account_coda/wizard/__init__.py create mode 100644 addons/account_coda/wizard/coda_import.py diff --git a/addons/account_coda/__init__.py b/addons/account_coda/__init__.py new file mode 100644 index 00000000000..af866f5dc70 --- /dev/null +++ b/addons/account_coda/__init__.py @@ -0,0 +1,25 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (). +# +# 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 . +# +############################################################################## + +import coda +import wizard +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/account_coda/__openerp__.py b/addons/account_coda/__openerp__.py new file mode 100644 index 00000000000..306098d137b --- /dev/null +++ b/addons/account_coda/__openerp__.py @@ -0,0 +1,39 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (). +# +# 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 . +# +############################################################################## + +{ + "name":"Account CODA - import bank statements from coda file", + "version":"1.0", + "author":"Tiny", + "category":"Account CODA", + "description":"""Module provides functionality to import + bank statements from coda files. + """, + "depends":["base", "account"], + "demo_xml":["coda_demo.xml"], + "init_xml":[], + "update_xml" : ["security/ir.model.access.csv","coda_wizard.xml","coda_view.xml"], + "active":False, + "installable":True, + +} +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/account_coda/coda.py b/addons/account_coda/coda.py new file mode 100644 index 00000000000..f37b563c245 --- /dev/null +++ b/addons/account_coda/coda.py @@ -0,0 +1,50 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (). +# +# 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 . +# +############################################################################## + +import time +from osv import osv,fields + +class account_coda(osv.osv): + _name = "account.coda" + _description = "coda for an Account" + _columns = { + 'name': fields.binary('Coda file', readonly=True), + 'statement_ids': fields.one2many('account.bank.statement','coda_id','Generated Bank Statement', readonly=True), + 'note': fields.text('Import log', readonly=True), + 'journal_id': fields.many2one('account.journal','Bank Journal', readonly=True,select=True), + 'date': fields.date('Import Date', readonly=True,select=True), + 'user_id': fields.many2one('res.users','User', readonly=True, select=True), + } + _defaults = { + 'date': lambda *a: time.strftime('%Y-%m-%d'), + 'user_id': lambda self,cr,uid,context: uid, + } +account_coda() + +class account_bank_statement(osv.osv): + _inherit = "account.bank.statement" + _columns = { + 'coda_id':fields.many2one('account.coda','Coda'), + } +account_bank_statement() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/account_coda/coda_demo.xml b/addons/account_coda/coda_demo.xml new file mode 100644 index 00000000000..f91d34d4cbc --- /dev/null +++ b/addons/account_coda/coda_demo.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/addons/account_coda/coda_view.xml b/addons/account_coda/coda_view.xml new file mode 100644 index 00000000000..3813fe40bf0 --- /dev/null +++ b/addons/account_coda/coda_view.xml @@ -0,0 +1,63 @@ + + + + + + account.coda.form + account.coda + form + +
+ + + + + + + + + + + + + + +
+ + + + account.coda.tree + account.coda + tree + + + + + + + + + + + Coda import + ir.actions.act_window + account.coda + form + tree,form + + + + + + + + +
+
diff --git a/addons/account_coda/coda_wizard.xml b/addons/account_coda/coda_wizard.xml new file mode 100644 index 00000000000..ecd8eb65913 --- /dev/null +++ b/addons/account_coda/coda_wizard.xml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/addons/account_coda/i18n/account_coda.pot b/addons/account_coda/i18n/account_coda.pot new file mode 100644 index 00000000000..348fb035c0d --- /dev/null +++ b/addons/account_coda/i18n/account_coda.pot @@ -0,0 +1,163 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * account_coda +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 5.0.6\n" +"Report-Msgid-Bugs-To: support@openerp.com\n" +"POT-Creation-Date: 2009-11-24 13:11:29+0000\n" +"PO-Revision-Date: 2009-11-24 13:11:29+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: account_coda +#: field:account.coda,journal_id:0 +#: wizard_field:account.coda_import,init,journal_id:0 +msgid "Bank Journal" +msgstr "" + +#. module: account_coda +#: constraint:ir.model:0 +msgid "The Object name must start with x_ and not contain any special character !" +msgstr "" + +#. module: account_coda +#: wizard_field:account.coda_import,extraction,note:0 +msgid "Log" +msgstr "" + +#. module: account_coda +#: wizard_button:account.coda_import,extraction,open:0 +msgid "_Open Statement" +msgstr "" + +#. module: account_coda +#: model:ir.module.module,shortdesc:account_coda.module_meta_information +msgid "Account CODA" +msgstr "" + +#. module: account_coda +#: field:account.coda,name:0 +msgid "Coda file" +msgstr "" + +#. module: account_coda +#: wizard_view:account.coda_import,init:0 +msgid "Clic on 'New' to select your file :" +msgstr "" + +#. module: account_coda +#: model:ir.actions.wizard,name:account_coda.wizard_account_coda_import +msgid "Import Coda File" +msgstr "" + +#. module: account_coda +#: constraint:ir.actions.act_window:0 +msgid "Invalid model name in the action definition." +msgstr "" + +#. module: account_coda +#: field:account.coda,note:0 +msgid "Import log" +msgstr "" + +#. module: account_coda +#: wizard_field:account.coda_import,init,def_receivable:0 +msgid "Default receivable Account" +msgstr "" + +#. module: account_coda +#: model:ir.module.module,description:account_coda.module_meta_information +msgid "Module provides functionality to import\n" +" bank statements from .csv file.\n" +" Import coda file wizard is used to import bank statements." +msgstr "" + +#. module: account_coda +#: wizard_button:account.coda_import,extraction,end:0 +msgid "_Close" +msgstr "" + +#. module: account_coda +#: field:account.coda,statement_id:0 +msgid "Generated Bank Statement" +msgstr "" + +#. module: account_coda +#: view:account.coda:0 +#: model:ir.actions.act_window,name:account_coda.act_account_payment_account_bank_statement +#: model:ir.actions.act_window,name:account_coda.action_account_coda +msgid "Coda import" +msgstr "" + +#. module: account_coda +#: field:account.coda,user_id:0 +msgid "User" +msgstr "" + +#. module: account_coda +#: constraint:ir.ui.view:0 +msgid "Invalid XML for View Architecture!" +msgstr "" + +#. module: account_coda +#: model:ir.model,name:account_coda.model_account_coda +msgid "coda for an Account" +msgstr "" + +#. module: account_coda +#: wizard_field:account.coda_import,init,def_payable:0 +msgid "Default Payable Account" +msgstr "" + +#. module: account_coda +#: model:ir.ui.menu,name:account_coda.menu_account_coda +msgid "Coda Statements" +msgstr "" + +#. module: account_coda +#: model:ir.ui.menu,name:account_coda.menu_account_coda_wizard +msgid "Import Coda Statements" +msgstr "" + +#. module: account_coda +#: wizard_button:account.coda_import,init,extraction:0 +msgid "_Ok" +msgstr "" + +#. module: account_coda +#: wizard_view:account.coda_import,extraction:0 +#: wizard_view:account.coda_import,init:0 +msgid "Import Coda Statement" +msgstr "" + +#. module: account_coda +#: field:account.bank.statement,coda_id:0 +msgid "Coda" +msgstr "" + +#. module: account_coda +#: wizard_view:account.coda_import,extraction:0 +msgid "Results :" +msgstr "" + +#. module: account_coda +#: wizard_field:account.coda_import,init,coda:0 +msgid "Coda File" +msgstr "" + +#. module: account_coda +#: field:account.coda,date:0 +msgid "Import Date" +msgstr "" + +#. module: account_coda +#: wizard_view:account.coda_import,init:0 +msgid "Select your bank journal :" +msgstr "" + diff --git a/addons/account_coda/i18n/fr_BE.po b/addons/account_coda/i18n/fr_BE.po new file mode 100644 index 00000000000..348fb035c0d --- /dev/null +++ b/addons/account_coda/i18n/fr_BE.po @@ -0,0 +1,163 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * account_coda +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 5.0.6\n" +"Report-Msgid-Bugs-To: support@openerp.com\n" +"POT-Creation-Date: 2009-11-24 13:11:29+0000\n" +"PO-Revision-Date: 2009-11-24 13:11:29+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: account_coda +#: field:account.coda,journal_id:0 +#: wizard_field:account.coda_import,init,journal_id:0 +msgid "Bank Journal" +msgstr "" + +#. module: account_coda +#: constraint:ir.model:0 +msgid "The Object name must start with x_ and not contain any special character !" +msgstr "" + +#. module: account_coda +#: wizard_field:account.coda_import,extraction,note:0 +msgid "Log" +msgstr "" + +#. module: account_coda +#: wizard_button:account.coda_import,extraction,open:0 +msgid "_Open Statement" +msgstr "" + +#. module: account_coda +#: model:ir.module.module,shortdesc:account_coda.module_meta_information +msgid "Account CODA" +msgstr "" + +#. module: account_coda +#: field:account.coda,name:0 +msgid "Coda file" +msgstr "" + +#. module: account_coda +#: wizard_view:account.coda_import,init:0 +msgid "Clic on 'New' to select your file :" +msgstr "" + +#. module: account_coda +#: model:ir.actions.wizard,name:account_coda.wizard_account_coda_import +msgid "Import Coda File" +msgstr "" + +#. module: account_coda +#: constraint:ir.actions.act_window:0 +msgid "Invalid model name in the action definition." +msgstr "" + +#. module: account_coda +#: field:account.coda,note:0 +msgid "Import log" +msgstr "" + +#. module: account_coda +#: wizard_field:account.coda_import,init,def_receivable:0 +msgid "Default receivable Account" +msgstr "" + +#. module: account_coda +#: model:ir.module.module,description:account_coda.module_meta_information +msgid "Module provides functionality to import\n" +" bank statements from .csv file.\n" +" Import coda file wizard is used to import bank statements." +msgstr "" + +#. module: account_coda +#: wizard_button:account.coda_import,extraction,end:0 +msgid "_Close" +msgstr "" + +#. module: account_coda +#: field:account.coda,statement_id:0 +msgid "Generated Bank Statement" +msgstr "" + +#. module: account_coda +#: view:account.coda:0 +#: model:ir.actions.act_window,name:account_coda.act_account_payment_account_bank_statement +#: model:ir.actions.act_window,name:account_coda.action_account_coda +msgid "Coda import" +msgstr "" + +#. module: account_coda +#: field:account.coda,user_id:0 +msgid "User" +msgstr "" + +#. module: account_coda +#: constraint:ir.ui.view:0 +msgid "Invalid XML for View Architecture!" +msgstr "" + +#. module: account_coda +#: model:ir.model,name:account_coda.model_account_coda +msgid "coda for an Account" +msgstr "" + +#. module: account_coda +#: wizard_field:account.coda_import,init,def_payable:0 +msgid "Default Payable Account" +msgstr "" + +#. module: account_coda +#: model:ir.ui.menu,name:account_coda.menu_account_coda +msgid "Coda Statements" +msgstr "" + +#. module: account_coda +#: model:ir.ui.menu,name:account_coda.menu_account_coda_wizard +msgid "Import Coda Statements" +msgstr "" + +#. module: account_coda +#: wizard_button:account.coda_import,init,extraction:0 +msgid "_Ok" +msgstr "" + +#. module: account_coda +#: wizard_view:account.coda_import,extraction:0 +#: wizard_view:account.coda_import,init:0 +msgid "Import Coda Statement" +msgstr "" + +#. module: account_coda +#: field:account.bank.statement,coda_id:0 +msgid "Coda" +msgstr "" + +#. module: account_coda +#: wizard_view:account.coda_import,extraction:0 +msgid "Results :" +msgstr "" + +#. module: account_coda +#: wizard_field:account.coda_import,init,coda:0 +msgid "Coda File" +msgstr "" + +#. module: account_coda +#: field:account.coda,date:0 +msgid "Import Date" +msgstr "" + +#. module: account_coda +#: wizard_view:account.coda_import,init:0 +msgid "Select your bank journal :" +msgstr "" + diff --git a/addons/account_coda/security/ir.model.access.csv b/addons/account_coda/security/ir.model.access.csv new file mode 100644 index 00000000000..9c1e0a486dc --- /dev/null +++ b/addons/account_coda/security/ir.model.access.csv @@ -0,0 +1,3 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_account_coda","account.coda","model_account_coda","account.group_account_user",1,0,0,0 +"access_account_coda_manager","account.coda","model_account_coda","account.group_account_manager",1,1,1,1 \ No newline at end of file diff --git a/addons/account_coda/statement_coda.txt b/addons/account_coda/statement_coda.txt new file mode 100644 index 00000000000..44fe70220ca --- /dev/null +++ b/addons/account_coda/statement_coda.txt @@ -0,0 +1,10 @@ +0000006060712505 00000CPH CODA TINY 0047747270100477472701 00000 1 +1 049126201326907 EUR0BE 0000000015632900050607TINY COMPTE COURANT ORDINAIRE 049 +2100010000 0000000001150000060607001500000INVOICE OF 2006-12-19 0606070020100 +2200010000 EUR000000001150000 100 +2300010000301915554082 PROLIBRE SARL CAROUGE GE 000 +2100020000 0000000000500000060607001500000CONTRACT PARTNER ERREUR ECART YEA 0606070030100 +2200020000RTY CONTRACT PARTNER EUR000000000500000 100 +2300020000050000000017 SEDNACOM 43 ALLEE DES FOUGERES 9522 0 HERBLAY 000 +8049126201326907 0000000017282900060607 +9 000008000000000000000000000001650000 2 diff --git a/addons/account_coda/wizard/__init__.py b/addons/account_coda/wizard/__init__.py new file mode 100644 index 00000000000..72d3b950cf7 --- /dev/null +++ b/addons/account_coda/wizard/__init__.py @@ -0,0 +1,25 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (). +# +# 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 . +# +############################################################################## + +import coda_import + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/account_coda/wizard/coda_import.py b/addons/account_coda/wizard/coda_import.py new file mode 100644 index 00000000000..5e1ffa365e8 --- /dev/null +++ b/addons/account_coda/wizard/coda_import.py @@ -0,0 +1,339 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (). +# +# 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 . +# +############################################################################## + +import pooler +import time +import datetime +import wizard +import netsvc +import base64 +from osv import osv +from tools.translate import _ + +codawiz_form = """ +
+ + + + + + + + + +""" + +codawiz_fields = { + 'journal_id' : { + 'string':'Bank Journal', + 'type':'many2one', + 'relation':'account.journal', + 'required':True, + + }, + 'coda' : { + 'string':'Coda File', + 'type':'binary', + 'required':True, + }, + 'def_payable' : { + 'string' : 'Default Payable Account', + 'type' : 'many2one', + 'relation': 'account.account', + 'required':True, + 'domain':[('type','=','payable')], + 'help': 'Set here the payable account that will be used, by default, if the partner is not found', + }, + 'def_receivable' : { + 'string' : 'Default receivable Account', + 'type' : 'many2one', + 'relation': 'account.account', + 'required':True, + 'domain':[('type','=','receivable')], + 'help': 'Set here the receivable account that will be used, by default, if the partner is not found', + }, + 'awaiting_account' : { + 'string' : 'Default Account for Unrecognized Movement', + 'type' : 'many2one', + 'relation': 'account.account', + 'required':True, + 'help': 'Set here the default account that will be used, if the partner is found but does not have the bank account , or if he is domiciled', + + } + +} + +result_form = """ +
+ + + +""" + +result_fields = { + + 'note' : {'string':'Log','type':'text'} + +} + + +def _coda_parsing(self, cr, uid, data, context): + pool = pooler.get_pool(cr.dbname) + codafile = data['form']['coda'] + journal_code = pool.get('account.journal').browse(cr, uid, data['form']['journal_id'], context).code + def_pay_acc = data['form']['def_payable'] + def_rec_acc = data['form']['def_receivable'] + + str_log = "" + err_log = "Errors:\n------\n" + nb_err=0 + std_log='' + str_log1 = "Coda File is Imported : " + str_not='' + str_not1='' + + bank_statements=[] + recordlist = base64.decodestring(codafile).split('\n') + recordlist.pop() + for line in recordlist: + if line[0] == '0': + # header data + bank_statement = {} + bank_statement["bank_statement_line"]={} + bank_statement_lines = {} + bank_statement['date'] = str2date(line[5:11]) + bank_statement['journal_id']=data['form']['journal_id'] + period_id = pool.get('account.period').search(cr,uid,[('date_start','<=',time.strftime('%Y-%m-%d',time.strptime(bank_statement['date'],"%y/%m/%d"))),('date_stop','>=',time.strftime('%Y-%m-%d',time.strptime(bank_statement['date'],"%y/%m/%d")))]) + bank_statement['period_id'] = period_id[0] + bank_statement['state']='draft' + elif line[0] == '1': + # old balance data + bal_start = list2float(line[43:58]) + if line[42] == '1': + bal_start = - bal_start + bank_statement["balance_start"]= bal_start + bank_statement["acc_number"]=line[5:17] + bank_statement["acc_holder"]=line[64:90] + bank_statement['name'] = journal_code + ' ' + str(line[2:5]) + + elif line[0]=='2': + # movement data record 2 + if line[1]=='1': + # movement data record 2.1 + if bank_statement_lines.has_key(line[2:6]): + continue + st_line = {} + st_line['extra_note'] = '' + st_line['statement_id']=0 + st_line['ref'] = line[2:10] + st_line['date'] = time.strftime('%Y-%m-%d',time.strptime(str2date(line[115:121]),"%y/%m/%d")), + st_line_amt = list2float(line[32:47]) + + if line[61]=='1': + st_line['toreconcile'] = True + st_line['name']=line[65:77] + else: + st_line['toreconcile'] = False + st_line['name']=line[62:115] + + st_line['free_comm'] = st_line['name'] + st_line['val_date']=time.strftime('%Y-%m-%d',time.strptime(str2date(line[47:53]),"%y/%m/%d")), + st_line['entry_date']=time.strftime('%Y-%m-%d',time.strptime(str2date(line[115:121]),"%y/%m/%d")), + st_line['partner_id']=0 + if line[31] == '1': + st_line_amt = - st_line_amt + st_line['account_id'] = def_pay_acc + else: + st_line['account_id'] = def_rec_acc + st_line['amount'] = st_line_amt + bank_statement_lines[line[2:6]]=st_line + bank_statement["bank_statement_line"]=bank_statement_lines + elif line[1] == '2': + st_line_name = line[2:6] + bank_statement_lines[st_line_name].update({'account_id': data['form']['awaiting_account']}) + + elif line[1] == '3': + # movement data record 3.1 + st_line_name = line[2:6] + st_line_partner_acc = str(line[10:47]).strip() + cntry_number=line[10:47].strip() + contry_name=line[47:125].strip() + bank_ids = pool.get('res.partner.bank').search(cr,uid,[('acc_number','=',st_line_partner_acc)]) + bank_statement_lines[st_line_name].update({'cntry_number': cntry_number, 'contry_name': contry_name}) + if bank_ids: + bank = pool.get('res.partner.bank').browse(cr,uid,bank_ids[0],context) + if line and bank.partner_id: + bank_statement_lines[st_line_name].update({'partner_id': bank.partner_id.id}) + if bank_statement_lines[st_line_name]['amount'] < 0 : + bank_statement_lines[st_line_name].update({'account_id': bank.partner_id.property_account_payable.id}) + else : + bank_statement_lines[st_line_name].update({'account_id': bank.partner_id.property_account_receivable.id}) + else: + nb_err += 1 + err_log += _('The bank account %s is not defined for the partner %s.\n')%(cntry_number,contry_name) + bank_statement_lines[st_line_name].update({'account_id': data['form']['awaiting_account']}) + + bank_statement["bank_statement_line"]=bank_statement_lines + elif line[0]=='3': + if line[1] == '1': + st_line_name = line[2:6] + bank_statement_lines[st_line_name]['extra_note'] += '\n' + line[40:113] + elif line[1] == '2': + st_line_name = line[2:6] + bank_statement_lines[st_line_name]['extra_note'] += '\n' + line[10:115] + elif line[1] == '3': + st_line_name = line[2:6] + bank_statement_lines[st_line_name]['extra_note'] += '\n' + line[10:100] + elif line[0]=='8': + # new balance record + bal_end = list2float(line[42:57]) + if line[41] == '1': + bal_end = - bal_end + bank_statement["balance_end_real"]= bal_end + + elif line[0]=='9': + # footer record + bank_statements.append(bank_statement) + #end for + bkst_list=[] + for statement in bank_statements: + try: + bk_st_id = pool.get('account.bank.statement').create(cr,uid,{ + 'journal_id': statement['journal_id'], + 'date':time.strftime('%Y-%m-%d',time.strptime(statement['date'],"%y/%m/%d")), + 'period_id':statement['period_id'], + 'balance_start': statement["balance_start"], + 'balance_end_real': statement["balance_end_real"], + 'state': 'draft', + 'name': statement['name'], + }) + lines=statement["bank_statement_line"] + for value in lines: + line=lines[value] + reconcile_id = False + if line['toreconcile']: + rec_id = pool.get('account.move.line').search(cr, uid, [('name','=',line['name']),('reconcile_id','=',False),('account_id.reconcile','=',True)]) + if rec_id: + reconcile_id = pool.get('account.bank.statement.reconcile').create(cr, uid, { + 'line_ids': [(6, 0, rec_id)] + }, context=context) + str_not1 = '' + if line.has_key('contry_name') and line.has_key('cntry_number'): + str_not1="Partner name:%s \n Partner Account Number:%s \n Communication:%s \n Value Date:%s \n Entry Date:%s \n"%(line["contry_name"],line["cntry_number"],line["free_comm"]+line['extra_note'],line["val_date"][0],line["entry_date"][0]) + id=pool.get('account.bank.statement.line').create(cr,uid,{ + 'name':line['name'], + 'date': line['date'], + 'amount': line['amount'], + 'partner_id':line['partner_id'] or 0, + 'account_id':line['account_id'], + 'statement_id': bk_st_id, + 'reconcile_id': reconcile_id, + 'note':str_not1, + 'ref':line['ref'], + }) + + str_not= "\n \n Account Number: %s \n Account Holder Name: %s " %(statement["acc_number"],statement["acc_holder"]) + std_log += "\nStatement : %s , Date : %s, Starting Balance : %.2f , Ending Balance : %.2f \n"\ + %(statement['name'], statement['date'], float(statement["balance_start"]), float(statement["balance_end_real"])) + bkst_list.append(bk_st_id) + + except osv.except_osv, e: + cr.rollback() + nb_err+=1 + err_log += '\n Application Error : ' + str(e) + raise # REMOVEME + + except Exception, e: + cr.rollback() + nb_err+=1 + err_log += '\n System Error : '+str(e) + raise # REMOVEME + except : + cr.rollback() + nb_err+=1 + err_log += '\n Unknown Error' + raise + err_log += '\n\nNumber of statements : '+ str(len(bkst_list)) + err_log += '\nNumber of error :'+ str(nb_err) +'\n' + + pool.get('account.coda').create(cr, uid,{ + 'name':codafile, + 'statement_ids': [(6, 0, bkst_list,)], + 'note':str_log1+str_not+std_log+err_log, + 'journal_id':data['form']['journal_id'], + 'date':time.strftime("%Y-%m-%d"), + 'user_id':uid, + }) + + return {'note':str_log1 + std_log + err_log ,'journal_id': data['form']['journal_id'], 'coda': data['form']['coda'],'statment_ids':bkst_list} + + +def str2date(date_str): + return time.strftime("%y/%m/%d",time.strptime(date_str,"%d%m%y")) + +def str2float(str): + try: + return float(str) + except: + return 0.0 + +def list2float(lst): + try: + return str2float((lambda s : s[:-3] + '.' + s[-3:])(lst)) + except: + return 0.0 + +class coda_import(wizard.interface): + def _action_open_window(self, cr, uid, data, context): + form=data['form'] + return { + 'domain':"[('id','in',%s)]"%(form['statment_ids']), + 'name': 'Statement', + 'view_type': 'form', + 'view_mode': 'tree,form', + 'res_model': 'account.bank.statement', + 'view_id': False, + 'type': 'ir.actions.act_window', + } + states = { + 'init' : { + 'actions' : [], + 'result' : {'type' : 'form', + 'arch' : codawiz_form, + 'fields' : codawiz_fields, + 'state' : [('end', '_Close'),('extraction', '_Ok') ]} + }, + 'extraction' : { + 'actions' : [_coda_parsing], + 'result' : {'type' : 'form', + 'arch' : result_form, + 'fields' : result_fields, + 'state' : [('end', '_Close'),('open', '_Open Statement')]} + }, + 'open': { + 'actions': [], + 'result': {'type': 'action', 'action': _action_open_window, 'state': 'end'} + + }, + + } +coda_import("account.coda_import") +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: