[ADD] account_coda
authorqdp-launchpad@tinyerp.com <>
Fri, 21 May 2010 14:48:21 +0000 (16:48 +0200)
committerqdp-launchpad@tinyerp.com <>
Fri, 21 May 2010 14:48:21 +0000 (16:48 +0200)
bzr revid: qdp-launchpad@tinyerp.com-20100521144821-vn6x44vvmrq31z8i

12 files changed:
addons/account_coda/__init__.py [new file with mode: 0644]
addons/account_coda/__openerp__.py [new file with mode: 0644]
addons/account_coda/coda.py [new file with mode: 0644]
addons/account_coda/coda_demo.xml [new file with mode: 0644]
addons/account_coda/coda_view.xml [new file with mode: 0644]
addons/account_coda/coda_wizard.xml [new file with mode: 0644]
addons/account_coda/i18n/account_coda.pot [new file with mode: 0644]
addons/account_coda/i18n/fr_BE.po [new file with mode: 0644]
addons/account_coda/security/ir.model.access.csv [new file with mode: 0644]
addons/account_coda/statement_coda.txt [new file with mode: 0644]
addons/account_coda/wizard/__init__.py [new file with mode: 0644]
addons/account_coda/wizard/coda_import.py [new file with mode: 0644]

diff --git a/addons/account_coda/__init__.py b/addons/account_coda/__init__.py
new file mode 100644 (file)
index 0000000..af866f5
--- /dev/null
@@ -0,0 +1,25 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#    
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
+#
+#    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 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 (file)
index 0000000..306098d
--- /dev/null
@@ -0,0 +1,39 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#    
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
+#
+#    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":"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 (file)
index 0000000..f37b563
--- /dev/null
@@ -0,0 +1,50 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#    
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
+#
+#    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 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 (file)
index 0000000..f91d34d
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<openerp>
+<data noupdate="1">
+</data>
+</openerp>
diff --git a/addons/account_coda/coda_view.xml b/addons/account_coda/coda_view.xml
new file mode 100644 (file)
index 0000000..3813fe4
--- /dev/null
@@ -0,0 +1,63 @@
+<?xml version="1.0" ?>
+<openerp>
+<data>
+
+       <record model="ir.ui.view" id="view_account_coda_form">
+               <field name="name">account.coda.form</field>
+               <field name="model">account.coda</field>
+               <field name="type">form</field>
+               <field name="arch" type="xml">
+                       <form string="Coda import">
+                               <field name="name" />
+                               <field name="journal_id" />
+                               <field name="date" />
+                               <field name="user_id" />
+                                <notebook colspan="4">
+                                    <page string="Log">
+                                       <field name="note" colspan="4"/>
+                                    </page>    
+                                    <page string="Statements">
+                                       <field name="statement_ids" colspan="4"/>
+                                    </page>
+                                </notebook>
+                       </form>
+               </field>
+       </record>
+
+
+       <record model="ir.ui.view" id="view_account_coda_tree">
+               <field name="name">account.coda.tree</field>
+               <field name="model">account.coda</field>
+               <field name="type">tree</field>
+               <field name="arch" type="xml">
+                       <tree string="Coda import">
+                               <field name="journal_id" />
+                               <field name="date" />
+                               <field name="user_id" />
+                       </tree>
+               </field>
+       </record>
+
+       <record model="ir.actions.act_window" id="action_account_coda">
+               <field name="name">Coda import</field>
+               <field name="type">ir.actions.act_window</field>
+               <field name="res_model">account.coda</field>
+               <field name="view_type">form</field>
+               <field name="view_mode">tree,form</field>
+       </record>
+
+       <menuitem name="Coda Statements" parent="account.menu_finance_reporting" id="menu_account_coda" action="action_account_coda" sequence="12"/>
+
+       <menuitem name="Import Coda Statements" action="wizard_account_coda_import" parent="account.menu_finance_periodical_processing"
+       type="wizard"  id="menu_account_coda_wizard" sequence="15"/>
+
+       <act_window name="Coda File"
+               domain="[('statement_ids', 'in', [active_id])]"
+               res_model="account.coda"
+               src_model="account.bank.statement"
+               view_type="form"
+               view_mode="tree,form"
+               id="act_account_payment_account_bank_statement"/>
+
+       </data>
+</openerp>
diff --git a/addons/account_coda/coda_wizard.xml b/addons/account_coda/coda_wizard.xml
new file mode 100644 (file)
index 0000000..ecd8eb6
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<openerp>
+       <data>
+
+               <wizard
+               string="Import Coda File"
+               model="account.bank.statement"
+               name="account.coda_import"
+               id="wizard_account_coda_import"
+               menu="False"
+               />
+       </data>
+</openerp>
diff --git a/addons/account_coda/i18n/account_coda.pot b/addons/account_coda/i18n/account_coda.pot
new file mode 100644 (file)
index 0000000..348fb03
--- /dev/null
@@ -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 (file)
index 0000000..348fb03
--- /dev/null
@@ -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 (file)
index 0000000..9c1e0a4
--- /dev/null
@@ -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 (file)
index 0000000..44fe702
--- /dev/null
@@ -0,0 +1,10 @@
+0000006060712505   00000CPH CODA  TINY                      0047747270100477472701 00000                                       1\r
+1 049126201326907 EUR0BE                  0000000015632900050607TINY                      COMPTE COURANT ORDINAIRE           049\r
+2100010000                     0000000001150000060607001500000INVOICE OF 2006-12-19                                0606070020100\r
+2200010000                                                                               EUR000000001150000                  100\r
+2300010000301915554082                         PROLIBRE SARL             CAROUGE GE                                          000\r
+2100020000                     0000000000500000060607001500000CONTRACT PARTNER ERREUR ECART      YEA               0606070030100\r
+2200020000RTY CONTRACT PARTNER                                                           EUR000000000500000                  100\r
+2300020000050000000017                         SEDNACOM                  43 ALLEE DES FOUGERES     9522 0 HERBLAY            000\r
+8049126201326907                         0000000017282900060607                                                                 \r
+9               000008000000000000000000000001650000                                                                           2\r
diff --git a/addons/account_coda/wizard/__init__.py b/addons/account_coda/wizard/__init__.py
new file mode 100644 (file)
index 0000000..72d3b95
--- /dev/null
@@ -0,0 +1,25 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#    
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
+#
+#    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 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 (file)
index 0000000..5e1ffa3
--- /dev/null
@@ -0,0 +1,339 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
+#
+#    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 pooler
+import time
+import datetime
+import wizard
+import netsvc
+import base64
+from osv import osv
+from tools.translate import _
+
+codawiz_form = """<?xml version="1.0"?>
+<form string="Import Coda Statement">
+<separator colspan="4" string="Select your bank journal :" />
+    <field name="journal_id" colspan="1" domain="[('type','=','cash')]" />
+    <newline />
+    <field name="def_payable" />    <field name="def_receivable" />
+    <newline />
+    <field name="awaiting_account" />
+    <separator string="Clic on 'New' to select your file :" colspan="4"/>
+    <field name="coda"/>
+</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 = """<?xml version="1.0"?>
+<form string="Import Coda Statement">
+<separator colspan="4" string="Results :" />
+    <field name="note" colspan="4" nolabel="1" width="500"/>
+</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: