From c85c8b9621b977348f0a92402f7b7b9ce51fcd58 Mon Sep 17 00:00:00 2001
From: "Pieter J. Kersten"
Date: Tue, 26 Jan 2010 21:55:24 +0100
Subject: [PATCH] [META] Set structure
---
__init__.py => account_banking/__init__.py | 0
__terp__.py => account_banking/__terp__.py | 0
.../account_banking.py | 0
.../account_banking_demo.xml | 0
.../account_banking_import_wizard.xml | 0
.../account_banking_view.xml | 0
.../account_banking_workflow.xml | 0
.../i18n}/account_banking.pot | 0
{i18n => account_banking/i18n}/en_US.po | 0
{i18n => account_banking/i18n}/nl_NL.po | 0
.../parsers}/__init__.py | 0
.../parsers}/convert.py | 0
.../parsers}/models.py | 0
record.py => account_banking/record.py | 0
sepa.py => account_banking/sepa.py | 0
.../wizard}/__init__.py | 0
.../wizard}/bank_import.py | 0
.../wizard}/banktools.py | 0
account_banking_nl_clieop/__init__.py | 30 ++
account_banking_nl_clieop/__terp__.py | 50 ++
.../account_banking_clieop.xml | 63 +++
.../account_banking_export_wizard.xml | 15 +
.../account_banking_nl_clieop.py | 99 ++++
.../data/banking_export_clieop.xml | 22 +
.../i18n/account_banking_nl_clieop.pot | 335 +++++++++++++
account_banking_nl_clieop/i18n/en_US.po | 335 +++++++++++++
account_banking_nl_clieop/i18n/nl_NL.po | 341 +++++++++++++
account_banking_nl_clieop/wizard/__init__.py | 23 +
account_banking_nl_clieop/wizard/clieop.py | 460 ++++++++++++++++++
.../wizard/export_clieop.py | 373 ++++++++++++++
account_banking_nl_multibank/__init__.py | 29 ++
account_banking_nl_multibank/__terp__.py | 46 ++
.../i18n/account_banking_nl_multibank.pot | 48 ++
account_banking_nl_multibank/i18n/en_US.po | 48 ++
account_banking_nl_multibank/i18n/nl_NL.po | 56 +++
account_banking_nl_multibank/multibank.py | 184 +++++++
36 files changed, 2557 insertions(+)
rename __init__.py => account_banking/__init__.py (100%)
rename __terp__.py => account_banking/__terp__.py (100%)
rename account_banking.py => account_banking/account_banking.py (100%)
rename account_banking_demo.xml => account_banking/account_banking_demo.xml (100%)
rename account_banking_import_wizard.xml => account_banking/account_banking_import_wizard.xml (100%)
rename account_banking_view.xml => account_banking/account_banking_view.xml (100%)
rename account_banking_workflow.xml => account_banking/account_banking_workflow.xml (100%)
rename {i18n => account_banking/i18n}/account_banking.pot (100%)
rename {i18n => account_banking/i18n}/en_US.po (100%)
rename {i18n => account_banking/i18n}/nl_NL.po (100%)
rename {parsers => account_banking/parsers}/__init__.py (100%)
rename {parsers => account_banking/parsers}/convert.py (100%)
rename {parsers => account_banking/parsers}/models.py (100%)
rename record.py => account_banking/record.py (100%)
rename sepa.py => account_banking/sepa.py (100%)
rename {wizard => account_banking/wizard}/__init__.py (100%)
rename {wizard => account_banking/wizard}/bank_import.py (100%)
rename {wizard => account_banking/wizard}/banktools.py (100%)
create mode 100644 account_banking_nl_clieop/__init__.py
create mode 100644 account_banking_nl_clieop/__terp__.py
create mode 100644 account_banking_nl_clieop/account_banking_clieop.xml
create mode 100644 account_banking_nl_clieop/account_banking_export_wizard.xml
create mode 100644 account_banking_nl_clieop/account_banking_nl_clieop.py
create mode 100644 account_banking_nl_clieop/data/banking_export_clieop.xml
create mode 100644 account_banking_nl_clieop/i18n/account_banking_nl_clieop.pot
create mode 100644 account_banking_nl_clieop/i18n/en_US.po
create mode 100644 account_banking_nl_clieop/i18n/nl_NL.po
create mode 100644 account_banking_nl_clieop/wizard/__init__.py
create mode 100644 account_banking_nl_clieop/wizard/clieop.py
create mode 100644 account_banking_nl_clieop/wizard/export_clieop.py
create mode 100644 account_banking_nl_multibank/__init__.py
create mode 100644 account_banking_nl_multibank/__terp__.py
create mode 100644 account_banking_nl_multibank/i18n/account_banking_nl_multibank.pot
create mode 100644 account_banking_nl_multibank/i18n/en_US.po
create mode 100644 account_banking_nl_multibank/i18n/nl_NL.po
create mode 100644 account_banking_nl_multibank/multibank.py
diff --git a/__init__.py b/account_banking/__init__.py
similarity index 100%
rename from __init__.py
rename to account_banking/__init__.py
diff --git a/__terp__.py b/account_banking/__terp__.py
similarity index 100%
rename from __terp__.py
rename to account_banking/__terp__.py
diff --git a/account_banking.py b/account_banking/account_banking.py
similarity index 100%
rename from account_banking.py
rename to account_banking/account_banking.py
diff --git a/account_banking_demo.xml b/account_banking/account_banking_demo.xml
similarity index 100%
rename from account_banking_demo.xml
rename to account_banking/account_banking_demo.xml
diff --git a/account_banking_import_wizard.xml b/account_banking/account_banking_import_wizard.xml
similarity index 100%
rename from account_banking_import_wizard.xml
rename to account_banking/account_banking_import_wizard.xml
diff --git a/account_banking_view.xml b/account_banking/account_banking_view.xml
similarity index 100%
rename from account_banking_view.xml
rename to account_banking/account_banking_view.xml
diff --git a/account_banking_workflow.xml b/account_banking/account_banking_workflow.xml
similarity index 100%
rename from account_banking_workflow.xml
rename to account_banking/account_banking_workflow.xml
diff --git a/i18n/account_banking.pot b/account_banking/i18n/account_banking.pot
similarity index 100%
rename from i18n/account_banking.pot
rename to account_banking/i18n/account_banking.pot
diff --git a/i18n/en_US.po b/account_banking/i18n/en_US.po
similarity index 100%
rename from i18n/en_US.po
rename to account_banking/i18n/en_US.po
diff --git a/i18n/nl_NL.po b/account_banking/i18n/nl_NL.po
similarity index 100%
rename from i18n/nl_NL.po
rename to account_banking/i18n/nl_NL.po
diff --git a/parsers/__init__.py b/account_banking/parsers/__init__.py
similarity index 100%
rename from parsers/__init__.py
rename to account_banking/parsers/__init__.py
diff --git a/parsers/convert.py b/account_banking/parsers/convert.py
similarity index 100%
rename from parsers/convert.py
rename to account_banking/parsers/convert.py
diff --git a/parsers/models.py b/account_banking/parsers/models.py
similarity index 100%
rename from parsers/models.py
rename to account_banking/parsers/models.py
diff --git a/record.py b/account_banking/record.py
similarity index 100%
rename from record.py
rename to account_banking/record.py
diff --git a/sepa.py b/account_banking/sepa.py
similarity index 100%
rename from sepa.py
rename to account_banking/sepa.py
diff --git a/wizard/__init__.py b/account_banking/wizard/__init__.py
similarity index 100%
rename from wizard/__init__.py
rename to account_banking/wizard/__init__.py
diff --git a/wizard/bank_import.py b/account_banking/wizard/bank_import.py
similarity index 100%
rename from wizard/bank_import.py
rename to account_banking/wizard/bank_import.py
diff --git a/wizard/banktools.py b/account_banking/wizard/banktools.py
similarity index 100%
rename from wizard/banktools.py
rename to account_banking/wizard/banktools.py
diff --git a/account_banking_nl_clieop/__init__.py b/account_banking_nl_clieop/__init__.py
new file mode 100644
index 000000000..e0700990b
--- /dev/null
+++ b/account_banking_nl_clieop/__init__.py
@@ -0,0 +1,30 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Copyright (C) 2009 EduSense BV ().
+# 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 .
+#
+##############################################################################
+import wizard
+import account_banking_nl_clieop
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/account_banking_nl_clieop/__terp__.py b/account_banking_nl_clieop/__terp__.py
new file mode 100644
index 000000000..531254fbf
--- /dev/null
+++ b/account_banking_nl_clieop/__terp__.py
@@ -0,0 +1,50 @@
+##############################################################################
+#
+# Copyright (C) 2009 EduSense BV ().
+# 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 .
+#
+##############################################################################
+{
+ 'name': 'Account Banking NL ClieOp',
+ 'version': '0.1',
+ 'license': 'GPL-3',
+ 'author': 'EduSense BV',
+ 'website': 'http://www.edusense.nl',
+ 'category': 'Account Banking',
+ 'depends': ['account_banking'],
+ 'init_xml': [],
+ 'update_xml': [
+ #'security/ir.model.access.csv',
+ 'account_banking_nl_clieop.xml',
+ 'account_banking_export_wizard.xml',
+ 'data/banking_export_clieop.xml',
+ ],
+ 'demo_xml': [],
+ 'description': '''
+ Module to export payment orders in ClieOp format.
+
+ ClieOp format is used by Dutch banks to batch national bank transfers.
+ This module uses the account_banking logic.
+ ''',
+ 'active': False,
+ 'installable': True,
+}
diff --git a/account_banking_nl_clieop/account_banking_clieop.xml b/account_banking_nl_clieop/account_banking_clieop.xml
new file mode 100644
index 000000000..aa1858a3c
--- /dev/null
+++ b/account_banking_nl_clieop/account_banking_clieop.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+ account.banking.export.clieop.form
+ banking.export.clieop
+ form
+
+
+
+
+
+ account.banking.export.clieop.tree
+ banking.export.clieop
+ tree
+
+
+
+
+
+
+
+
+
+
+ Generated ClieOp3 Files
+ ir.actions.act_window
+ banking.export.clieop
+ form
+ tree,form
+
+
+
+
+
+
+
diff --git a/account_banking_nl_clieop/account_banking_export_wizard.xml b/account_banking_nl_clieop/account_banking_export_wizard.xml
new file mode 100644
index 000000000..ff8c5e05c
--- /dev/null
+++ b/account_banking_nl_clieop/account_banking_export_wizard.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/account_banking_nl_clieop/account_banking_nl_clieop.py b/account_banking_nl_clieop/account_banking_nl_clieop.py
new file mode 100644
index 000000000..1f1c1146a
--- /dev/null
+++ b/account_banking_nl_clieop/account_banking_nl_clieop.py
@@ -0,0 +1,99 @@
+##############################################################################
+#
+# Copyright (C) 2009 EduSense BV ().
+# 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 .
+#
+##############################################################################
+
+from osv import osv, fields
+from datetime import date
+from tools.translate import _
+
+class payment_order(osv.osv):
+ '''
+ Attach export_clieop wizard to payment order and allow traceability
+ '''
+ _inherit = 'payment.order'
+ def get_wizard(self, type):
+ if type in ['CLIEOPPAY', 'CLIEOPINC', 'CLIEOPSAL']:
+ return self._module, 'wizard_account_banking_export_clieop'
+ return super(payment_order, self).get_wizard(type)
+payment_order()
+
+class clieop_export(osv.osv):
+ '''ClieOp3 Export'''
+ _name = 'banking.export.clieop'
+ _description = __doc__
+
+ _columns = {
+ 'payment_order_ids':
+ fields.text('Payment Orders'),
+ 'testcode':
+ fields.selection([('T', _('Yes')), ('P', _('No'))],
+ 'Test Run', readonly=True),
+ 'daynumber':
+ fields.integer('ClieOp Transaction nr of the Day', readonly=True),
+ 'duplicates':
+ fields.integer('Number of Duplicates', readonly=True),
+ 'prefered_date':
+ fields.date('Prefered Processing Date',readonly=True),
+ 'no_transactions':
+ fields.integer('Number of Transactions', readonly=True),
+ 'check_no_accounts':
+ fields.char('Check Number Accounts', size=5, readonly=True),
+ 'total_amount':
+ fields.float('Total Amount', readonly=True),
+ 'identification':
+ fields.char('Identification', size=6, readonly=True, select=True),
+ 'filetype':
+ fields.selection([
+ ('CREDBET', 'Payment Batch'),
+ ('SALARIS', 'Salary Payment Batch'),
+ ('INCASSO', 'Direct Debit Batch'),
+ ], 'File Type', size=7, readonly=True, select=True),
+ 'date_generated':
+ fields.datetime('Generation Date', readonly=True, select=True),
+ 'file':
+ fields.binary('ClieOp File', readonly=True),
+ 'state':
+ fields.selection([
+ ('draft', 'Draft'),
+ ('sent', 'Sent'),
+ ('done', 'Reconciled'),
+ ], 'State', readonly=True),
+ }
+ def _get_daynr(self, cursor, uid, ids, context):
+ '''
+ Return highest day number
+ '''
+ last = cursor.execute('SELECT max(daynumber) '
+ 'FROM banking_export_clieop '
+ 'WHERE date_generated = "%s"' %
+ date.today().strftime('%Y-%m-%d')
+ ).fetchone()
+ if last:
+ return int(last) +1
+ return 1
+
+ _defaults = {
+ 'date_generated': lambda *a: date.today().strftime('%Y-%m-%d'),
+ 'duplicates': lambda *a: 1,
+ 'state': lambda *a: 'draft',
+ 'daynumber': _get_daynr,
+ }
+clieop_export()
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/account_banking_nl_clieop/data/banking_export_clieop.xml b/account_banking_nl_clieop/data/banking_export_clieop.xml
new file mode 100644
index 000000000..c56a0b716
--- /dev/null
+++ b/account_banking_nl_clieop/data/banking_export_clieop.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ ClieOp3 Direct Debit Batch
+ CLIEOPINC
+
+
+
+
+ ClieOp3 Payment Batch
+ CLIEOPPAY
+
+
+
+
+ ClieOp3 Salary Payment Batch
+ CLIEOPSAL
+
+
+
+
diff --git a/account_banking_nl_clieop/i18n/account_banking_nl_clieop.pot b/account_banking_nl_clieop/i18n/account_banking_nl_clieop.pot
new file mode 100644
index 000000000..a5c2d62bb
--- /dev/null
+++ b/account_banking_nl_clieop/i18n/account_banking_nl_clieop.pot
@@ -0,0 +1,335 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * account_banking_nl_clieop
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 5.0.7\n"
+"Report-Msgid-Bugs-To: support@openerp.com\n"
+"POT-Creation-Date: 2010-01-08 15:36:23+0000\n"
+"PO-Revision-Date: 2010-01-08 15:36:23+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_banking_nl_clieop
+#: constraint:ir.model:0
+msgid "The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,init,batchtype:0
+msgid "Direct Debits"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,create,testcode:0
+#: code:addons/account_banking_nl_clieop/account_banking_clieop.py:0
+#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
+#: selection:banking.export.clieop,testcode:0
+#, python-format
+msgid "No"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: model:ir.module.module,shortdesc:account_banking_nl_clieop.module_meta_information
+msgid "Account Banking NL ClieOp"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,no_transactions:0
+#: field:banking.export.clieop,no_transactions:0
+msgid "Number of Transactions"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: model:ir.actions.wizard,name:account_banking_nl_clieop.wizard_account_banking_export_clieop
+msgid "Export ClieOp File"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,prefered_date:0
+#: field:banking.export.clieop,prefered_date:0
+msgid "Prefered Processing Date"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: model:payment.type,name:account_banking_nl_clieop.export_clieop_pay
+msgid "ClieOp3 Payment Batch"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: field:banking.export.clieop,state:0
+msgid "State"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: help:account_banking_nl_clieop.banking_export_clieop,init,test:0
+msgid "Select this if you want your bank to run a test process rather then execute your orders for real."
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:banking.export.clieop,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: view:banking.export.clieop:0
+msgid "Processing Information"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: help:account_banking_nl_clieop.banking_export_clieop,init,fixed_message:0
+msgid "A fixed message to apply to all transactions in addition to the individual messages."
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,check_no_accounts:0
+#: field:banking.export.clieop,check_no_accounts:0
+msgid "Check Number Accounts"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_button:account_banking_nl_clieop.banking_export_clieop,create,save:0
+msgid "Save"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,batchtype:0
+msgid "Type"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:banking.export.clieop,state:0
+msgid "Sent"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,log:0
+msgid "Log"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: view:banking.export.clieop:0
+msgid "ClieOp Information"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: model:ir.model,name:account_banking_nl_clieop.model_banking_export_clieop
+msgid "ClieOp3 Export"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
+#, python-format
+msgid "You can only combine payment orders of the same type"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,create,filetype:0
+#: selection:banking.export.clieop,filetype:0
+msgid "Salary Payment Batch"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:banking.export.clieop,state:0
+msgid "Reconciled"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_view:account_banking_nl_clieop.banking_export_clieop,init:0
+msgid "Reference for further communication"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: field:banking.export.clieop,duplicates:0
+msgid "Number of Duplicates"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: help:account_banking_nl_clieop.banking_export_clieop,init,reference:0
+msgid "The bank will use this reference in feedback communication to refer to this run. Only five characters are available."
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_view:account_banking_nl_clieop.banking_export_clieop,init:0
+msgid "Processing Details"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: model:payment.type,name:account_banking_nl_clieop.export_clieop_sal
+msgid "ClieOp3 Salary Payment Batch"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_button:account_banking_nl_clieop.banking_export_clieop,init,create:0
+msgid "Create"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,create,filetype:0
+#: selection:banking.export.clieop,filetype:0
+msgid "Direct Debit Batch"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,file:0
+#: field:banking.export.clieop,file:0
+msgid "ClieOp File"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
+#, python-format
+msgid "You can\'t create ClieOp orders more than 30 days in advance."
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,execution_date:0
+msgid "Execution Date"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,fixed_message:0
+msgid "Fixed Message"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,filetype:0
+#: field:banking.export.clieop,filetype:0
+msgid "File Type"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: model:payment.type,name:account_banking_nl_clieop.export_clieop_inc
+msgid "ClieOp3 Direct Debit Batch"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,testcode:0
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,test:0
+#: field:banking.export.clieop,testcode:0
+msgid "Test Run"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,init,batchtype:0
+msgid "Payments"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,init,batchtype:0
+msgid "Salary Payments"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_view:account_banking_nl_clieop.banking_export_clieop,create:0
+#: wizard_view:account_banking_nl_clieop.banking_export_clieop,init:0
+#: view:banking.export.clieop:0
+msgid "Client Opdrachten Export"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_view:account_banking_nl_clieop.banking_export_clieop,init:0
+msgid "Additional message for all transactions"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: model:ir.actions.act_window,name:account_banking_nl_clieop.action_account_banking_clieops
+#: model:ir.ui.menu,name:account_banking_nl_clieop.menu_action_account_banking_exported_clieop_files
+msgid "Generated ClieOp3 Files"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: model:ir.module.module,description:account_banking_nl_clieop.module_meta_information
+msgid "\n"
+" Module to export payment orders in ClieOp format.\n"
+"\n"
+" ClieOp format is used by Dutch banks to batch national bank transfers.\n"
+" This module uses the account_banking logic.\n"
+" "
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,reference:0
+msgid "Reference"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: help:account_banking_nl_clieop.banking_export_clieop,init,execution_date:0
+msgid "This is the date the file should be processed by the bank. Don't choose a date beyond the nearest date in your payments. The latest allowed date is 30 days from now.\n"
+"Please keep in mind that banks only execute on working days and typically use a delay of two days between execution date and effective transfer date."
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: field:banking.export.clieop,payment_order_ids:0
+msgid "Payment Orders"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: view:banking.export.clieop:0
+msgid "General Information"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,total_amount:0
+#: field:banking.export.clieop,total_amount:0
+msgid "Total Amount"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: field:banking.export.clieop,daynumber:0
+msgid "ClieOp Transaction nr of the Day"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_button:account_banking_nl_clieop.banking_export_clieop,create,cancel:0
+#: wizard_button:account_banking_nl_clieop.banking_export_clieop,init,end:0
+msgid "Cancel"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,identification:0
+#: field:banking.export.clieop,identification:0
+msgid "Identification"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,create,testcode:0
+#: code:addons/account_banking_nl_clieop/account_banking_clieop.py:0
+#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
+#: selection:banking.export.clieop,testcode:0
+#, python-format
+msgid "Yes"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,create,filetype:0
+#: selection:banking.export.clieop,filetype:0
+msgid "Payment Batch"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: field:banking.export.clieop,date_generated:0
+msgid "Generation Date"
+msgstr ""
+
diff --git a/account_banking_nl_clieop/i18n/en_US.po b/account_banking_nl_clieop/i18n/en_US.po
new file mode 100644
index 000000000..a5c2d62bb
--- /dev/null
+++ b/account_banking_nl_clieop/i18n/en_US.po
@@ -0,0 +1,335 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * account_banking_nl_clieop
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 5.0.7\n"
+"Report-Msgid-Bugs-To: support@openerp.com\n"
+"POT-Creation-Date: 2010-01-08 15:36:23+0000\n"
+"PO-Revision-Date: 2010-01-08 15:36:23+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_banking_nl_clieop
+#: constraint:ir.model:0
+msgid "The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,init,batchtype:0
+msgid "Direct Debits"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,create,testcode:0
+#: code:addons/account_banking_nl_clieop/account_banking_clieop.py:0
+#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
+#: selection:banking.export.clieop,testcode:0
+#, python-format
+msgid "No"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: model:ir.module.module,shortdesc:account_banking_nl_clieop.module_meta_information
+msgid "Account Banking NL ClieOp"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,no_transactions:0
+#: field:banking.export.clieop,no_transactions:0
+msgid "Number of Transactions"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: model:ir.actions.wizard,name:account_banking_nl_clieop.wizard_account_banking_export_clieop
+msgid "Export ClieOp File"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,prefered_date:0
+#: field:banking.export.clieop,prefered_date:0
+msgid "Prefered Processing Date"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: model:payment.type,name:account_banking_nl_clieop.export_clieop_pay
+msgid "ClieOp3 Payment Batch"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: field:banking.export.clieop,state:0
+msgid "State"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: help:account_banking_nl_clieop.banking_export_clieop,init,test:0
+msgid "Select this if you want your bank to run a test process rather then execute your orders for real."
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:banking.export.clieop,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: view:banking.export.clieop:0
+msgid "Processing Information"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: help:account_banking_nl_clieop.banking_export_clieop,init,fixed_message:0
+msgid "A fixed message to apply to all transactions in addition to the individual messages."
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,check_no_accounts:0
+#: field:banking.export.clieop,check_no_accounts:0
+msgid "Check Number Accounts"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_button:account_banking_nl_clieop.banking_export_clieop,create,save:0
+msgid "Save"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,batchtype:0
+msgid "Type"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:banking.export.clieop,state:0
+msgid "Sent"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,log:0
+msgid "Log"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: view:banking.export.clieop:0
+msgid "ClieOp Information"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: model:ir.model,name:account_banking_nl_clieop.model_banking_export_clieop
+msgid "ClieOp3 Export"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
+#, python-format
+msgid "You can only combine payment orders of the same type"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,create,filetype:0
+#: selection:banking.export.clieop,filetype:0
+msgid "Salary Payment Batch"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:banking.export.clieop,state:0
+msgid "Reconciled"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_view:account_banking_nl_clieop.banking_export_clieop,init:0
+msgid "Reference for further communication"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: field:banking.export.clieop,duplicates:0
+msgid "Number of Duplicates"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: help:account_banking_nl_clieop.banking_export_clieop,init,reference:0
+msgid "The bank will use this reference in feedback communication to refer to this run. Only five characters are available."
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_view:account_banking_nl_clieop.banking_export_clieop,init:0
+msgid "Processing Details"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: model:payment.type,name:account_banking_nl_clieop.export_clieop_sal
+msgid "ClieOp3 Salary Payment Batch"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_button:account_banking_nl_clieop.banking_export_clieop,init,create:0
+msgid "Create"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,create,filetype:0
+#: selection:banking.export.clieop,filetype:0
+msgid "Direct Debit Batch"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,file:0
+#: field:banking.export.clieop,file:0
+msgid "ClieOp File"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
+#, python-format
+msgid "You can\'t create ClieOp orders more than 30 days in advance."
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,execution_date:0
+msgid "Execution Date"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,fixed_message:0
+msgid "Fixed Message"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,filetype:0
+#: field:banking.export.clieop,filetype:0
+msgid "File Type"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: model:payment.type,name:account_banking_nl_clieop.export_clieop_inc
+msgid "ClieOp3 Direct Debit Batch"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,testcode:0
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,test:0
+#: field:banking.export.clieop,testcode:0
+msgid "Test Run"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,init,batchtype:0
+msgid "Payments"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,init,batchtype:0
+msgid "Salary Payments"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_view:account_banking_nl_clieop.banking_export_clieop,create:0
+#: wizard_view:account_banking_nl_clieop.banking_export_clieop,init:0
+#: view:banking.export.clieop:0
+msgid "Client Opdrachten Export"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_view:account_banking_nl_clieop.banking_export_clieop,init:0
+msgid "Additional message for all transactions"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: model:ir.actions.act_window,name:account_banking_nl_clieop.action_account_banking_clieops
+#: model:ir.ui.menu,name:account_banking_nl_clieop.menu_action_account_banking_exported_clieop_files
+msgid "Generated ClieOp3 Files"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: model:ir.module.module,description:account_banking_nl_clieop.module_meta_information
+msgid "\n"
+" Module to export payment orders in ClieOp format.\n"
+"\n"
+" ClieOp format is used by Dutch banks to batch national bank transfers.\n"
+" This module uses the account_banking logic.\n"
+" "
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,reference:0
+msgid "Reference"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: help:account_banking_nl_clieop.banking_export_clieop,init,execution_date:0
+msgid "This is the date the file should be processed by the bank. Don't choose a date beyond the nearest date in your payments. The latest allowed date is 30 days from now.\n"
+"Please keep in mind that banks only execute on working days and typically use a delay of two days between execution date and effective transfer date."
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: field:banking.export.clieop,payment_order_ids:0
+msgid "Payment Orders"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: view:banking.export.clieop:0
+msgid "General Information"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,total_amount:0
+#: field:banking.export.clieop,total_amount:0
+msgid "Total Amount"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: field:banking.export.clieop,daynumber:0
+msgid "ClieOp Transaction nr of the Day"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_button:account_banking_nl_clieop.banking_export_clieop,create,cancel:0
+#: wizard_button:account_banking_nl_clieop.banking_export_clieop,init,end:0
+msgid "Cancel"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,identification:0
+#: field:banking.export.clieop,identification:0
+msgid "Identification"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,create,testcode:0
+#: code:addons/account_banking_nl_clieop/account_banking_clieop.py:0
+#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
+#: selection:banking.export.clieop,testcode:0
+#, python-format
+msgid "Yes"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,create,filetype:0
+#: selection:banking.export.clieop,filetype:0
+msgid "Payment Batch"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: field:banking.export.clieop,date_generated:0
+msgid "Generation Date"
+msgstr ""
+
diff --git a/account_banking_nl_clieop/i18n/nl_NL.po b/account_banking_nl_clieop/i18n/nl_NL.po
new file mode 100644
index 000000000..054453805
--- /dev/null
+++ b/account_banking_nl_clieop/i18n/nl_NL.po
@@ -0,0 +1,341 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * account_banking_nl_clieop
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 5.0.7\n"
+"Report-Msgid-Bugs-To: support@openerp.com\n"
+"POT-Creation-Date: 2010-01-07 22:22:23+0000\n"
+"PO-Revision-Date: 2010-01-07 22:22:23+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_banking_nl_clieop
+#: constraint:ir.model:0
+msgid "The Object name must start with x_ and not contain any special character !"
+msgstr "De objectnaam moet beginnen met x_ en mag geen speciale karakters bevatten !"
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,init,batchtype:0
+msgid "Direct Debits"
+msgstr "Incasso-batch"
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,create,testcode:0
+#: code:addons/account_banking_nl_clieop/account_banking_clieop.py:0
+#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
+#: selection:banking.export.clieop,testcode:0
+#, python-format
+msgid "No"
+msgstr "Nee"
+
+#. module: account_banking_nl_clieop
+#: model:ir.module.module,shortdesc:account_banking_nl_clieop.module_meta_information
+msgid "Account Banking NL ClieOp"
+msgstr "Account Banking NL ClieOp"
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,no_transactions:0
+#: field:banking.export.clieop,no_transactions:0
+msgid "Number of Transactions"
+msgstr "Aantal transacties"
+
+#. module: account_banking_nl_clieop
+#: model:ir.actions.wizard,name:account_banking_nl_clieop.wizard_account_banking_export_clieop
+msgid "Export ClieOp File"
+msgstr "Exporteer ClieOp-bestand"
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,prefered_date:0
+#: field:banking.export.clieop,prefered_date:0
+msgid "Prefered Processing Date"
+msgstr "Gewenste verwerkingsdatum"
+
+#. module: account_banking_nl_clieop
+#: model:payment.type,name:account_banking_nl_clieop.export_clieop_pay
+msgid "ClieOp3 Payment Batch"
+msgstr "ClieOp3 betalingsbatch"
+
+#. module: account_banking_nl_clieop
+#: field:banking.export.clieop,state:0
+msgid "State"
+msgstr "Status"
+
+#. module: account_banking_nl_clieop
+#: help:account_banking_nl_clieop.banking_export_clieop,init,test:0
+msgid "Select this if you want your bank to run a test process rather then execute your orders for real."
+msgstr "Kies dit als u wilt dat de bank een testrun draait in plaats van uw opdrachten te verwerken."
+
+#. module: account_banking_nl_clieop
+#: selection:banking.export.clieop,state:0
+msgid "Draft"
+msgstr "Concept"
+
+#. module: account_banking_nl_clieop
+#: view:banking.export.clieop:0
+msgid "Processing Information"
+msgstr "Verwerkingsinformatie"
+
+#. module: account_banking_nl_clieop
+#: help:account_banking_nl_clieop.banking_export_clieop,init,fixed_message:0
+msgid "A fixed message to apply to all transactions in addition to the individual messages."
+msgstr "Een vast bericht om toe te voegen aan alle transacties in toevoeging op de individuele berichten."
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,check_no_accounts:0
+#: field:banking.export.clieop,check_no_accounts:0
+msgid "Check Number Accounts"
+msgstr "Controlegetal rekeningen"
+
+#. module: account_banking_nl_clieop
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Ongeldige naam in actie-definitie."
+
+#. module: account_banking_nl_clieop
+#: wizard_button:account_banking_nl_clieop.banking_export_clieop,create,save:0
+msgid "Save"
+msgstr "Opskaan"
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,batchtype:0
+msgid "Type"
+msgstr "Soort"
+
+#. module: account_banking_nl_clieop
+#: selection:banking.export.clieop,state:0
+msgid "Sent"
+msgstr "Verzonden"
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,log:0
+msgid "Log"
+msgstr "Log"
+
+#. module: account_banking_nl_clieop
+#: view:banking.export.clieop:0
+msgid "ClieOp Information"
+msgstr "ClieOp-informatie"
+
+#. module: account_banking_nl_clieop
+#: model:ir.model,name:account_banking_nl_clieop.model_banking_export_clieop
+msgid "ClieOp3 Export"
+msgstr "ClieOp3-export"
+
+#. module: account_banking_nl_clieop
+#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
+#, python-format
+msgid "You can only combine payment orders of the same type"
+msgstr "U kunt alleen betalingsopdrachten van dezelfde soort combineren"
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,create,filetype:0
+#: selection:banking.export.clieop,filetype:0
+msgid "Salary Payment Batch"
+msgstr "Salarisbetalingsbatch"
+
+#. module: account_banking_nl_clieop
+#: selection:banking.export.clieop,state:0
+msgid "Reconciled"
+msgstr "Afgeletterd"
+
+#. module: account_banking_nl_clieop
+#: wizard_view:account_banking_nl_clieop.banking_export_clieop,init:0
+msgid "Reference for further communication"
+msgstr "Referentie voor verdere communicatie"
+
+#. module: account_banking_nl_clieop
+#: field:banking.export.clieop,duplicates:0
+msgid "Number of Duplicates"
+msgstr "Aantal duplicaten"
+
+#. module: account_banking_nl_clieop
+#: help:account_banking_nl_clieop.banking_export_clieop,init,reference:0
+msgid "The bank will use this reference in feedback communication to refer to this run. Only five characters are available."
+msgstr "De bank zal dit gebruiken in terugkoppelingsberichten om te referen aan deze verwerking. Slechts vijf tekens zijn beschikbaar."
+
+#. module: account_banking_nl_clieop
+#: wizard_view:account_banking_nl_clieop.banking_export_clieop,init:0
+msgid "Processing Details"
+msgstr "Verwerkingsdetails"
+
+#. module: account_banking_nl_clieop
+#: model:payment.type,name:account_banking_nl_clieop.export_clieop_sal
+msgid "ClieOp3 Salary Payment Batch"
+msgstr "ClieOp3 salarisverwerking"
+
+#. module: account_banking_nl_clieop
+#: wizard_button:account_banking_nl_clieop.banking_export_clieop,init,create:0
+msgid "Create"
+msgstr "Maak"
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,create,filetype:0
+#: selection:banking.export.clieop,filetype:0
+msgid "Direct Debit Batch"
+msgstr "Incassobatch"
+
+#. module: account_banking_nl_clieop
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Ongeldige XML voor overzicht"
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,file:0
+#: field:banking.export.clieop,file:0
+msgid "ClieOp File"
+msgstr "ClieOp-bestand"
+
+#. module: account_banking_nl_clieop
+#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
+#, python-format
+msgid "You can\'t create ClieOp orders more than 30 days in advance."
+msgstr "U kunt geen ClieOp opdrachten aanmaken voor meer dan 30 dagen vooruit."
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,execution_date:0
+msgid "Execution Date"
+msgstr "Uitvoeringsdatum"
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,fixed_message:0
+msgid "Fixed Message"
+msgstr ""
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,filetype:0
+#: field:banking.export.clieop,filetype:0
+msgid "File Type"
+msgstr "Bestandsformaat"
+
+#. module: account_banking_nl_clieop
+#: model:payment.type,name:account_banking_nl_clieop.export_clieop_inc
+msgid "ClieOp3 Direct Debit Batch"
+msgstr "ClieOp3 incassoverwerking"
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,testcode:0
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,test:0
+#: field:banking.export.clieop,testcode:0
+msgid "Test Run"
+msgstr "Testverwerking"
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,init,batchtype:0
+msgid "Payments"
+msgstr "Betalingen"
+
+#. module: account_banking_nl_clieop
+#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
+#, python-format
+msgid "Error"
+msgstr "Fout"
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,init,batchtype:0
+msgid "Salary Payments"
+msgstr "Salarisbetalingen"
+
+#. module: account_banking_nl_clieop
+#: wizard_view:account_banking_nl_clieop.banking_export_clieop,create:0
+#: wizard_view:account_banking_nl_clieop.banking_export_clieop,init:0
+#: view:banking.export.clieop:0
+msgid "Client Opdrachten Export"
+msgstr "Client Opdrachten Export"
+
+#. module: account_banking_nl_clieop
+#: wizard_view:account_banking_nl_clieop.banking_export_clieop,init:0
+msgid "Additional message for all transactions"
+msgstr "Toegevoegd bericht voor alle transacties"
+
+#. module: account_banking_nl_clieop
+#: model:ir.actions.act_window,name:account_banking_nl_clieop.action_account_banking_clieops
+#: model:ir.ui.menu,name:account_banking_nl_clieop.menu_action_account_banking_exported_clieop_files
+msgid "Generated ClieOp3 Files"
+msgstr "Gegenereerde ClieOp3-bestanden"
+
+#. module: account_banking_nl_clieop
+#: model:ir.module.module,description:account_banking_nl_clieop.module_meta_information
+msgid "\n"
+" Module to export payment orders in ClieOp format.\n"
+"\n"
+" ClieOp format is used by Dutch banks to batch national bank transfers.\n"
+" This module uses the account_banking logic.\n"
+" "
+msgstr "\n"
+" Module voor het exporteren van betalingsopdrachten in ClieOp-formaat.\n"
+"\n"
+" ClieOp-formaat wordt gebruikt door Nederlandse banks voor batchverwerking van national banktransacties.\n"
+" Deze module gebruikt de account_banking logica.\n"
+" "
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,reference:0
+msgid "Reference"
+msgstr "Referentie"
+
+#. module: account_banking_nl_clieop
+#: help:account_banking_nl_clieop.banking_export_clieop,init,execution_date:0
+msgid "This is the date the file should be processed by the bank. Don't choose a date beyond the nearest date in your payments. The latest allowed date is 30 days from now.\n"
+"Please keep in mind that banks only execute on working days and typically use a delay of two days between execution date and effective transfer date."
+msgstr "Dit is de datum dat het bestand verwerkt dient te worden door de bank. Kies geen datum verder dan 30 dagen vooruit.\n"
+"Onthoud dat veel banken in alleen verwerken op werkdagen en dat er doorgaans twee dagen vertraging zit tussen verwerkingsdatum en effectieve datum.\n"
+
+#. module: account_banking_nl_clieop
+#: field:banking.export.clieop,payment_order_ids:0
+msgid "Payment Orders"
+msgstr "Betalingsopdrachten"
+
+#. module: account_banking_nl_clieop
+#: view:banking.export.clieop:0
+msgid "General Information"
+msgstr "Algemene informatie"
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,total_amount:0
+#: field:banking.export.clieop,total_amount:0
+msgid "Total Amount"
+msgstr "Totaalbedrag"
+
+#. module: account_banking_nl_clieop
+#: field:banking.export.clieop,daynumber:0
+msgid "ClieOp Transaction nr of the Day"
+msgstr "ClieOp dagtransactienummer"
+
+#. module: account_banking_nl_clieop
+#: wizard_button:account_banking_nl_clieop.banking_export_clieop,create,cancel:0
+#: wizard_button:account_banking_nl_clieop.banking_export_clieop,init,end:0
+msgid "Cancel"
+msgstr "Annuleren"
+
+#. module: account_banking_nl_clieop
+#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,identification:0
+#: field:banking.export.clieop,identification:0
+msgid "Identification"
+msgstr "Identificatie"
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,create,testcode:0
+#: code:addons/account_banking_nl_clieop/account_banking_clieop.py:0
+#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
+#: selection:banking.export.clieop,testcode:0
+#, python-format
+msgid "Yes"
+msgstr "Ja"
+
+#. module: account_banking_nl_clieop
+#: selection:account_banking_nl_clieop.banking_export_clieop,create,filetype:0
+#: selection:banking.export.clieop,filetype:0
+msgid "Payment Batch"
+msgstr "Betalingsbatch"
+
+#. module: account_banking_nl_clieop
+#: field:banking.export.clieop,date_generated:0
+msgid "Generation Date"
+msgstr "Aanmaakdatum"
+
diff --git a/account_banking_nl_clieop/wizard/__init__.py b/account_banking_nl_clieop/wizard/__init__.py
new file mode 100644
index 000000000..ef66ed0e3
--- /dev/null
+++ b/account_banking_nl_clieop/wizard/__init__.py
@@ -0,0 +1,23 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Copyright (C) 2009 EduSense BV ().
+# 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 .
+#
+##############################################################################
+import export_clieop
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/account_banking_nl_clieop/wizard/clieop.py b/account_banking_nl_clieop/wizard/clieop.py
new file mode 100644
index 000000000..469be9d13
--- /dev/null
+++ b/account_banking_nl_clieop/wizard/clieop.py
@@ -0,0 +1,460 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Copyright (C) 2009 EduSense BV ().
+# 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 .
+#
+##############################################################################
+
+from account_banking import record
+
+__all__ = ['IncassoBatch', 'BetalingsBatch', 'Incasso', 'Betaling',
+ 'IncassoFile', 'BetalingsFile', 'SalarisFile',
+ 'SalarisbetalingsOpdracht', 'BetalingsOpdracht', 'IncassoOpdracht',
+ 'OpdrachtenFile',
+ ]
+
+def elfproef(s):
+ '''
+ Dutch elfproef for validating 9-long local bank account numbers.
+ '''
+ r = 0
+ l = len(s)
+ for i,c in enumerate(s):
+ r += (l-i) * int(c)
+ return (r % 11) == 0
+
+class HeaderRecord(record.Record): #{{{
+ '''ClieOp3 header record'''
+ _fields = [
+ record.Filler('recordcode', 4, '0001'),
+ record.Filler('variantcode', 1, 'A'),
+ record.DateField('aanmaakdatum', '%d%m%y', auto=True),
+ record.Filler('bestandsnaam', 8, 'CLIEOP03'),
+ record.Field('inzender_id', 5),
+ record.Field('bestands_id', 4),
+ record.Field('duplicaatcode', 1),
+ record.Filler('filler', 21),
+ ]
+
+ def __init__(self, id='1', volgnr=1, duplicate=False):
+ super(HeaderRecord, self).__init__()
+ self.inzender_id = id
+ self.bestands_id = '%02d%02d' % (self.aanmaakdatum.day, volgnr)
+ self.duplicaatcode = duplicate and '2' or '1'
+#}}}
+
+class FooterRecord(record.Record):
+ '''ClieOp3 footer record'''
+ _fields = [
+ record.Filler('recordcode', 4, '9999'),
+ record.Filler('variantcode', 1, 'A'),
+ record.Filler('filler', 45),
+ ]
+
+class BatchHeaderRecord(record.Record):
+ '''Header record preceding new batches'''
+ _fields = [
+ record.Filler('recordcode', 4, '0010'),
+ record.Field('variantcode', 1),
+ record.Field('transactiegroep', 2),
+ record.NumberField('rekeningnr_opdrachtgever', 10),
+ record.NumberField('batchvolgnummer', 4),
+ record.Filler('aanlevermuntsoort', 3, 'EUR'),
+ record.Field('batch_id', 16),
+ record.Filler('filler', 10),
+ ]
+
+class BatchFooterRecord(record.Record):
+ '''Closing record for batches'''
+ _fields = [
+ record.Filler('recordcode', 4, '9990'),
+ record.Filler('variantcode', 1, 'A'),
+ record.NumberField('totaalbedrag', 18),
+ record.NumberField('totaal_rekeningnummers', 10),
+ record.NumberField('aantal_posten', 7),
+ record.Filler('filler', 10),
+ ]
+
+class VasteOmschrijvingRecord(record.Record):
+ '''Fixed message'''
+ _fields = [
+ record.Filler('recordcode', 4, '0020'),
+ record.Filler('variantcode', 1, 'A'),
+ record.Field('vaste_omschrijving', 32),
+ record.Filler('filler', 13),
+ ]
+
+class OpdrachtgeverRecord(record.Record):
+ '''Ordering party'''
+ _fields = [
+ record.Filler('recordcode', 4, '0030'),
+ record.Filler('variantcode', 1, 'B'),
+ record.Field('NAWcode', 1),
+ record.DateField('gewenste_verwerkingsdatum', '%d%m%y', auto=True),
+ record.Field('naam_opdrachtgever', 35),
+ record.Field('testcode', 1),
+ record.Filler('filler', 2),
+ ]
+
+class TransactieRecord(record.Record):
+ '''Transaction'''
+ _fields = [
+ record.Filler('recordcode', 4, '0100'),
+ record.Filler('variantcode', 1, 'A'),
+ record.NumberField('transactiesoort', 4),
+ record.NumberField('bedrag', 12),
+ record.NumberField('rekeningnr_betaler', 10),
+ record.NumberField('rekeningnr_begunstigde', 10),
+ record.Filler('filler', 9),
+ ]
+
+class NaamBetalerRecord(record.Record):
+ '''Name payer'''
+ _fields = [
+ record.Filler('recordcode', 4, '0110'),
+ record.Filler('variantcode', 1, 'B'),
+ record.Field('naam', 35),
+ record.Filler('filler', 10),
+ ]
+
+class BetalingskenmerkRecord(record.Record):
+ '''Payment reference'''
+ _fields = [
+ record.Filler('recordcode', 4, '0150'),
+ record.Filler('variantcode', 1, 'A'),
+ record.Field('betalingskenmerk', 16),
+ record.Filler('filler', 29),
+ ]
+
+class OmschrijvingRecord(record.Record):
+ '''Description'''
+ _fields = [
+ record.Filler('recordcode', 4, '0160'),
+ record.Filler('variantcode', 1, 'B'),
+ record.Field('omschrijving', 32),
+ record.Filler('filler', 13),
+ ]
+
+class NaamBegunstigdeRecord(record.Record):
+ '''Name receiving party'''
+ _fields = [
+ record.Filler('recordcode', 4, '0170'),
+ record.Filler('variantcode', 1, 'B'),
+ record.Field('naam', 35),
+ record.Filler('filler', 10),
+ ]
+
+class OpdrachtRecord(record.Record):
+ '''Order details'''
+ _fields = [
+ record.Filler('recordcode', 6, 'KAE092'),
+ record.Field('naam_transactiecode', 18),
+ record.NumberField('totaalbedrag', 13),
+ record.Field('rekeningnr_opdrachtgever', 10),
+ record.NumberField('totaal_rekeningnummers', 5),
+ record.NumberField('aantal_posten', 6),
+ record.Field('identificatie', 6),
+ record.DateField('gewenste_verwerkingsdatum', '%y%m%d'),
+ record.Field('batch_medium', 18),
+ record.Filler('muntsoort', 3, 'EUR'),
+ record.Field('testcode', 1),
+ ]
+ def __init__(self, *args, **kwargs):
+ super(OpdrachtRecord, self).__init__(*args, **kwargs)
+ self.batch_medium = 'DATACOM'
+ self.naam_transactiecode = self._transactiecode
+
+class SalarisbetalingsOpdracht(OpdrachtRecord):
+ '''Salary payment batch record'''
+ _transactiecode = 'SALARIS'
+
+class BetalingsOpdracht(OpdrachtRecord):
+ '''Payment batch record'''
+ _transactiecode = 'CREDBET'
+
+class IncassoOpdracht(OpdrachtRecord):
+ '''Direct debit payments batch record'''
+ _transactiecode = 'INCASSO'
+
+class Optional(object):
+ '''Auxilliary class to handle optional records'''
+ def __init__(self, klass, max=1):
+ self._klass = klass
+ self._max = max
+ self._guts = []
+
+ def __setattr__(self, attr, value):
+ '''Check for number of records'''
+ if attr[0] == '_':
+ super(Optional, self).__setattr__(attr, value)
+ else:
+ if self._guts and len(self._guts) > self._max:
+ raise ValueError, 'Only %d lines are allowed' % self._max
+ newitem = self._klass()
+ setattr(newitem, attr, value)
+ self._guts.append(newitem)
+
+ def __getattr__(self, attr):
+ '''Only return if used'''
+ if attr[0] == '_':
+ return super(Optional, self).__getattr__(attr)
+ return [getattr(x, attr) for x in self._guts]
+
+ def __iter__(self):
+ '''Make sure to adapt'''
+ return self._guts.__iter__()
+
+class OpdrachtenFile(object):
+ '''A payment orders file'''
+ def __init__(self, *args, **kwargs):
+ self.opdrachten = []
+
+ @property
+ def rawdata(self):
+ '''
+ Return a writeable file content object
+ '''
+ return '\r\n'.join(self.opdrachten)
+
+class Transactie(object):
+ '''Generic transaction class'''
+ def __init__(self, soort=0, naam=None, referentie=None, omschrijvingen=[],
+ rekeningnr_begunstigde=None, rekeningnr_betaler=None,
+ bedrag=0
+ ):
+ self.transactie = TransactieRecord()
+ self.betalingskenmerk = Optional(BetalingskenmerkRecord)
+ self.omschrijving = Optional(OmschrijvingRecord, 4)
+ self.transactie.transactiesoort = soort
+ self.transactie.rekeningnr_begunstigde = rekeningnr_begunstigde
+ self.transactie.rekeningnr_betaler = rekeningnr_betaler
+ self.transactie.bedrag = int(bedrag * 100)
+ if referentie:
+ self.betalingskenmerk.betalingskenmerk = referentie
+ for oms in omschrijvingen:
+ self.omschrijving.omschrijving = oms
+ self.naam.naam = naam
+
+class Incasso(Transactie):
+ '''Direct Debit Payment transaction'''
+ def __init__(self, *args, **kwargs):
+ reknr = kwargs['rekeningnr_betaler']
+ kwargs['soort'] = len(reknr.lstrip('0')) <= 7 and 1002 or 1001
+ self.naam = NaamBetalerRecord()
+ super(Incasso, self).__init__(*args, **kwargs)
+
+ @property
+ def rawdata(self):
+ '''
+ Return self as writeable file content object
+ '''
+ items = [str(self.transactie)]
+ if self.naam:
+ items.append(str(self.naam))
+ for kenmerk in self.betalingskenmerk:
+ items.append(str(kenmerk))
+ for omschrijving in self.omschrijving:
+ items.append(str(omschrijving))
+ return '\r\n'.join(items)
+
+class Betaling(Transactie):
+ '''Payment transaction'''
+ def __init__(self, *args, **kwargs):
+ reknr = kwargs['rekeningnr_begunstigde']
+ if len(reknr.lstrip('0')) > 7:
+ if not elfproef(reknr):
+ raise ValueError, '%s is not a valid bank account' % reknr
+ kwargs['soort'] = 5
+ self.naam = NaamBegunstigdeRecord()
+ super(Betaling, self).__init__(*args, **kwargs)
+
+ @property
+ def rawdata(self):
+ '''
+ Return self as writeable file content object
+ '''
+ items = [str(self.transactie)]
+ for kenmerk in self.betalingskenmerk:
+ items.append(str(kenmerk))
+ if self.naam:
+ items.append(str(self.naam))
+ for omschrijving in self.omschrijving:
+ items.append(str(omschrijving))
+ return '\r\n'.join(items)
+
+class SalarisBetaling(Betaling):
+ '''Salary Payment transaction'''
+ def __init__(self, *args, **kwargs):
+ reknr = kwargs['rekeningnr_begunstigde']
+ kwargs['soort'] = len(reknr.lstrip('0')) <= 7 and 3 or 8
+ super(SalarisBetaling, self).__init__(*args, **kwargs)
+
+class Batch(object):
+ '''Generic batch class'''
+ transactieclass = None
+
+ def __init__(self, opdrachtgever, rekeningnr, verwerkingsdatum=None,
+ test=True, omschrijvingen=[], transactiegroep=None,
+ batchvolgnummer=1, batch_id=''
+ ):
+ self.header = BatchHeaderRecord()
+ self.vaste_omschrijving = Optional(VasteOmschrijvingRecord, 4)
+ self.opdrachtgever = OpdrachtgeverRecord()
+ self.footer = BatchFooterRecord()
+ self.header.variantcode = batch_id and 'C' or 'B'
+ self.header.transactiegroep = transactiegroep
+ self.header.batchvolgnummer = batchvolgnummer
+ self.header.batch_id = batch_id
+ self.header.rekeningnr_opdrachtgever = rekeningnr
+ self.opdrachtgever.naam_opdrachtgever = opdrachtgever
+ self.opdrachtgever.gewenste_verwerkingsdatum = verwerkingsdatum
+ self.opdrachtgever.NAWcode = 1
+ self.opdrachtgever.testcode = test and 'T' or 'P'
+ self.transacties = []
+ for omschrijving in omschrijvingen:
+ self.vaste_omschrijving.omschrijving = omschrijving
+
+ @property
+ def aantal_posten(self):
+ '''nr of posts'''
+ return len(self.transacties)
+
+ @property
+ def totaalbedrag(self):
+ '''total amount transferred'''
+ return reduce(lambda x,y: x + int(y.transactie.bedrag),
+ self.transacties, 0
+ )
+
+ @property
+ def totaal_rekeningnummers(self):
+ '''check number on account numbers'''
+ return reduce(lambda x,y:
+ x + int(y.transactie.rekeningnr_betaler) + \
+ int(y.transactie.rekeningnr_begunstigde),
+ self.transacties, 0
+ )
+
+ @property
+ def rawdata(self):
+ '''
+ Return self as writeable file content object
+ '''
+ self.footer.aantal_posten = self.aantal_posten
+ self.footer.totaalbedrag = self.totaalbedrag
+ self.footer.totaal_rekeningnummers = self.totaal_rekeningnummers
+ lines = [str(self.header)]
+ for oms in self.vaste_omschrijving:
+ lines.append(str(oms))
+ lines += [
+ str(self.opdrachtgever),
+ '\r\n'.join([x.rawdata for x in self.transacties]),
+ str(self.footer)
+ ]
+ return '\r\n'.join(lines)
+
+ def transactie(self, *args, **kwargs):
+ '''generic factory method'''
+ retval = self.transactieclass(*args, **kwargs)
+ self.transacties.append(retval)
+ return retval
+
+class IncassoBatch(Batch):
+ '''Direct Debig Payment batch'''
+ transactieclass = Incasso
+
+class BetalingsBatch(Batch):
+ '''Payment batch'''
+ transactieclass = Betaling
+
+class SalarisBatch(Batch):
+ '''Salary payment class'''
+ transactieclass = SalarisBetaling
+
+class ClieOpFile(object):
+ '''The grand unifying class'''
+ def __init__(self, identificatie='1', uitvoeringsdatum=None,
+ naam_opdrachtgever='', rekeningnr_opdrachtgever='',
+ test=False, **kwargs):
+ self.header = HeaderRecord(id=identificatie,)
+ self.footer = FooterRecord()
+ self.batches = []
+ self._uitvoeringsdatum = uitvoeringsdatum
+ self._identificatie = identificatie
+ self._naam_opdrachtgever = naam_opdrachtgever
+ self._reknr_opdrachtgever = rekeningnr_opdrachtgever
+ self._test = test
+
+ @property
+ def rawdata(self):
+ '''Return self as writeable file content object'''
+ return '\r\n'.join(
+ [str(self.header)] +
+ [x.rawdata for x in self.batches] +
+ [str(self.footer)]
+ )
+
+ def batch(self, *args, **kwargs):
+ '''Create batch'''
+ kwargs['transactiegroep'] = self.transactiegroep
+ kwargs['batchvolgnummer'] = len(self.batches) +1
+ kwargs['verwerkingsdatum'] = self._uitvoeringsdatum
+ kwargs['test'] = self._test
+ args = (self._naam_opdrachtgever, self._reknr_opdrachtgever)
+ retval = self.batchclass(*args, **kwargs)
+ self.batches.append(retval)
+ return retval
+
+ @property
+ def opdracht(self):
+ '''Produce an order to go with the file'''
+ totaal_rekeningnummers = 0
+ totaalbedrag = 0
+ aantal_posten = 0
+ for batch in self.batches:
+ totaal_rekeningnummers += batch.totaal_rekeningnummers
+ totaalbedrag += batch.totaalbedrag
+ aantal_posten += batch.aantal_posten
+ retval = self.opdrachtclass()
+ retval.identificatie = self._identificatie
+ retval.rekeningnr_opdrachtgever = self._reknr_opdrachtgever
+ retval.gewenste_verwerkingsdatum = self._uitvoeringsdatum
+ retval.testcode = self._test and 'T' or 'P'
+ retval.totaalbedrag = totaalbedrag
+ retval.aantal_posten = aantal_posten
+ retval.totaal_rekeningnummers = totaal_rekeningnummers
+ return retval
+
+class IncassoFile(ClieOpFile):
+ '''Direct Debit Payments file'''
+ transactiegroep = '10'
+ batchclass = IncassoBatch
+ opdrachtclass = IncassoOpdracht
+
+class BetalingsFile(ClieOpFile):
+ '''Payments file'''
+ transactiegroep = '00'
+ batchclass = BetalingsBatch
+ opdrachtclass = BetalingsOpdracht
+
+class SalarisFile(BetalingsFile):
+ '''Salary Payments file'''
+ batchclass = SalarisBatch
+ opdrachtclass = SalarisbetalingsOpdracht
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
diff --git a/account_banking_nl_clieop/wizard/export_clieop.py b/account_banking_nl_clieop/wizard/export_clieop.py
new file mode 100644
index 000000000..21a115a92
--- /dev/null
+++ b/account_banking_nl_clieop/wizard/export_clieop.py
@@ -0,0 +1,373 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Copyright (C) 2009 EduSense BV ().
+# 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 .
+#
+##############################################################################
+
+import wizard
+import pooler
+import base64
+#from osv import osv
+from tools.translate import _
+from datetime import datetime, date, timedelta
+#import pdb; pdb.set_trace()
+import clieop
+
+form = '''
+'''
+
+fields = {
+ 'reference' : {
+ 'string': 'Reference',
+ 'type': 'char',
+ 'size': 5,
+ 'required': False,
+ 'help': ('The bank will use this reference in feedback communication '
+ 'to refer to this run. Only five characters are available.'
+ )
+ },
+ 'batchtype': {
+ 'string': 'Type',
+ 'type': 'selection',
+ 'selection': [
+ ('CLIEOPPAY', 'Payments'),
+ ('CLIEOPSAL', 'Salary Payments'),
+ ('CLIEOPINC', 'Direct Debits'),
+ ],
+ 'readonly': True,
+ },
+ 'execution_date': {
+ 'string': 'Execution Date',
+ 'type': 'date',
+ 'required': False,
+ 'help': ('This is the date the file should be processed by the bank. '
+ 'Don\'t choose a date beyond the nearest date in your '
+ 'payments. The latest allowed date is 30 days from now.\n'
+ 'Please keep in mind that banks only execute on working days '
+ 'and typically use a delay of two days between execution date '
+ 'and effective transfer date.'
+ ),
+ },
+ 'test': {
+ 'string': 'Test Run',
+ 'type': 'boolean',
+ 'required': True,
+ 'default': True,
+ 'help': ('Select this if you want your bank to run a test process '
+ 'rather then execute your orders for real.'
+ )
+ },
+ 'fixed_message': {
+ 'string': 'Fixed Message',
+ 'type': 'char',
+ 'size': 32,
+ 'required': False,
+ 'default': '',
+ 'help': ('A fixed message to apply to all transactions in addition to '
+ 'the individual messages.'
+ ),
+ },
+}
+
+file_form = '''
+'''
+
+file_fields = {
+ 'testcode': {
+ 'string': 'Test Run',
+ 'type': 'selection',
+ 'selection': [('T', _('Yes')), ('P', _('No'))],
+ 'required': False,
+ 'readonly': True,
+ },
+ 'prefered_date': {
+ 'string': 'Prefered Processing Date',
+ 'type': 'date',
+ 'required': False,
+ 'readonly': True,
+ },
+ 'no_transactions': {
+ 'string': 'Number of Transactions',
+ 'type': 'int',
+ 'required': False,
+ 'readonly': True,
+ },
+ 'check_no_accounts': {
+ 'string': 'Check Number Accounts',
+ 'type': 'char',
+ 'size': 5,
+ 'required': False,
+ 'readonly': True,
+ },
+ 'total_amount': {
+ 'string': 'Total Amount',
+ 'type': 'float',
+ 'required': False,
+ 'readonly': True,
+ },
+ 'identification': {
+ 'string': 'Identification',
+ 'type': 'char',
+ 'size': 6,
+ 'required': False,
+ 'readonly': True,
+ },
+ 'filetype': {
+ 'string': 'File Type',
+ 'type': 'selection',
+ 'selection': [
+ ('CREDBET', 'Payment Batch'),
+ ('SALARIS', 'Salary Payment Batch'),
+ ('INCASSO', 'Direct Debit Batch'),
+ ],
+ 'required': False,
+ 'readonly': True,
+ },
+ 'file': {
+ 'string': 'ClieOp File',
+ 'type': 'binary',
+ 'required': False,
+ 'readonly': True,
+ },
+ 'log': {
+ 'string': 'Log',
+ 'type': 'text',
+ 'readonly': True,
+ },
+}
+
+def strpdate(arg, format='%Y-%m-%d'):
+ '''shortcut'''
+ return datetime.strptime(arg, format).date()
+
+def strfdate(arg, format='%Y-%m-%d'):
+ '''shortcut'''
+ return arg.strftime(format)
+
+def _check_orders(self, cursor, uid, data, context):
+ '''
+ Check payment type for all orders.
+
+ Combine orders into one. All parameters harvested by the wizard
+ will apply to all orders. This will in effect create one super
+ batch for ClieOp, instead of creating individual parameterized
+ batches. As only large companies are likely to need the individual
+ settings per batch, this will do for now.
+ '''
+ form = data['form']
+ today = date.today()
+ pool = pooler.get_pool(cursor.dbname)
+ payment_order_obj = pool.get('payment.order')
+
+ runs = {}
+ # Only orders of same type can be combined
+ payment_orders = payment_order_obj.browse(cursor, uid, data['ids'])
+ for payment_order in payment_orders:
+
+ payment_type = payment_order.mode.type.code
+ if payment_type in runs:
+ runs[payment_type].append(payment_order)
+ else:
+ runs[payment_type] = [payment_order]
+
+ if payment_order.date_prefered == 'fixed':
+ if payment_order.date_planned:
+ execution_date = strpdate(payment_order.date_planned)
+ else:
+ execution_date = today
+ elif payment_order.date_prefered == 'now':
+ execution_date = today
+ elif payment_order.date_prefered == 'due':
+ # Max processing date is 30 days past now, so limiting beyond that
+ # will catch too early payments
+ max_date = execution_date = today + timedelta(days=31)
+ for line in payment_order.line_ids:
+ if line.move_line_id.date_maturity:
+ date_maturity = strpdate(line.move_line_id.date_maturity)
+ if date_maturity < execution_date:
+ execution_date = date_maturity
+ else:
+ execution_date = today
+ if execution_date and execution_date >= max_date:
+ raise wizard.except_wizard(
+ _('Error'),
+ _('You can\'t create ClieOp orders more than 30 days in advance.')
+ )
+ # Sanity check: can't process in the past
+ form['execution_date'] = strfdate(max(execution_date, today))
+
+ if len(runs) != 1:
+ raise wizard.except_wizard(
+ _('Error'),
+ _('You can only combine payment orders of the same type')
+ )
+
+ form['batchtype'] = type = runs.keys()[0]
+ form['reference'] = runs[type][0].reference[-5:]
+ return form
+
+def _create_clieop(self, cursor, uid, data, context):
+ '''
+ Wizard to actually create the ClieOp3 file
+ '''
+ pool = pooler.get_pool(cursor.dbname)
+ payment_order_obj = pool.get('payment.order')
+ form = data['form']
+
+ clieopfile = None
+ payment_orders = payment_order_obj.browse(cursor, uid, data['ids'])
+ for payment_order in payment_orders:
+ if not clieopfile:
+ our_account_owner = payment_order.mode.bank_id.owner_name
+ our_account_nr = payment_order.mode.bank_id.acc_number
+ clieopfile = {'CLIEOPPAY': clieop.BetalingsFile,
+ 'CLIEOPINC': clieop.IncassoFile,
+ 'CLIEOPSAL': clieop.SalarisFile,
+ }[form['batchtype']](
+ identificatie = form['reference'],
+ uitvoeringsdatum = form['execution_date'],
+ naam_opdrachtgever = our_account_owner,
+ rekeningnr_opdrachtgever = our_account_nr,
+ test = form['test']
+ )
+
+ if form['fixed_message']:
+ omschrijvingen = [form['fixed_message']]
+ else:
+ omschrijvingen = []
+ batch = clieopfile.batch(
+ #our_account_owner,
+ #our_account_nr,
+ #verwerkingsdatum = strpdate(form['execution_date']),
+ #test = form['test'],
+ omschrijvingen = omschrijvingen,
+ batch_id = payment_order.reference
+ )
+ for line in payment_order.line_ids:
+ kwargs = dict(
+ naam = line.bank_id.owner_name,
+ bedrag = line.amount_currency,
+ referentie = line.communication or None,
+ )
+ if line.communication2:
+ kwargs['omschrijvingen'] = [line.communication2]
+ if form['batchtype'] in ['CLIEOPPAY', 'CLIEOPSAL']:
+ kwargs['rekeningnr_begunstigde'] = line.bank_id.acc_number
+ kwargs['rekeningnr_betaler'] = our_account_nr
+ else:
+ kwargs['rekeningnr_begunstigde'] = our_account_nr
+ kwargs['rekeningnr_betaler'] = line.bank_id.acc_number
+ transaction = batch.transactie(**kwargs)
+
+ opdracht = clieopfile.opdracht
+ values = dict(
+ filetype = opdracht.naam_transactiecode,
+ identification = opdracht.identificatie,
+ prefered_date = strfdate(opdracht.gewenste_verwerkingsdatum),
+ total_amount = int(opdracht.totaalbedrag) / 100.0,
+ check_no_accounts = opdracht.totaal_rekeningnummers,
+ no_transactions = opdracht.aantal_posten,
+ testcode = opdracht.testcode,
+ file = base64.encodestring(clieopfile.rawdata),
+ )
+ form.update(values)
+ values['daynumber'] = int(clieopfile.header.bestands_id[2:])
+ values['payment_order_ids'] = ','.join(map(str, data['ids']))
+ data['file_id'] = pool.get('banking.export.clieop').create(cursor, uid, values)
+ data['clieop'] = clieopfile
+ form['log'] = ''
+ return form
+
+def _cancel_clieop(self, cursor, uid, data, context):
+ pool = pooler.get_pool(cursor.dbname)
+ pool.get('banking.export.clieop').unlink(cursor, uid, data['file_id'])
+ return {'state': 'end'}
+
+def _save_clieop(self, cursor, uid, data, context):
+ pool = pooler.get_pool(cursor.dbname)
+ clieop_obj = pool.get('banking.export.clieop')
+ payment_order_obj = pool.get('payment.order')
+ clieop_file = clieop_obj.write(
+ cursor, uid, data['file_id'], {'state':'sent'}
+ )
+ payment_order_obj.write(cursor, uid, data['ids'], {'state': 'sent'})
+ return {'state': 'end'}
+
+class wizard_banking_export_clieop(wizard.interface):
+ states = {
+ 'init': {
+ 'actions': [_check_orders],
+ 'result': {
+ 'type': 'form',
+ 'arch': form,
+ 'fields' : fields,
+ 'state': [
+ ('end', 'Cancel', 'gtk-cancel'),
+ ('create', 'Create', 'gtk-ok'),
+ ]
+ }
+ },
+ 'create': {
+ 'actions': [_create_clieop],
+ 'result': {
+ 'type': 'form',
+ 'arch': file_form,
+ 'fields': file_fields,
+ 'state': [
+ ('cancel', 'Cancel', 'gtk-cancel'),
+ ('save', 'Save', 'gtk-save'),
+ ]
+ },
+ },
+ 'cancel': {
+ 'actions': [_cancel_clieop],
+ 'result': {
+ 'type': 'state',
+ 'state': 'end'
+ }
+ },
+ 'save': {
+ 'actions': [_save_clieop],
+ 'result': {
+ 'type': 'state',
+ 'state': 'end'
+ },
+ }
+ }
+wizard_banking_export_clieop('account_banking_nl_clieop.banking_export_clieop')
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/account_banking_nl_multibank/__init__.py b/account_banking_nl_multibank/__init__.py
new file mode 100644
index 000000000..85c40913f
--- /dev/null
+++ b/account_banking_nl_multibank/__init__.py
@@ -0,0 +1,29 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Copyright (C) 2009 EduSense BV ().
+# 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 .
+#
+##############################################################################
+import multibank
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/account_banking_nl_multibank/__terp__.py b/account_banking_nl_multibank/__terp__.py
new file mode 100644
index 000000000..c7910c4ba
--- /dev/null
+++ b/account_banking_nl_multibank/__terp__.py
@@ -0,0 +1,46 @@
+##############################################################################
+#
+# Copyright (C) 2009 EduSense BV ().
+# 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 .
+#
+##############################################################################
+{
+ 'name': 'Account Banking',
+ 'version': '0.1',
+ 'license': 'GPL-3',
+ 'author': 'EduSense BV',
+ 'website': 'http://www.edusense.nl',
+ 'category': 'Account Banking',
+ 'depends': ['account_banking'],
+ 'init_xml': [],
+ 'update_xml': [
+ #'security/ir.model.access.csv',
+ ],
+ 'demo_xml': [],
+ 'description': '''
+ Module to import Dutch Multibank format transation files.
+
+ This modules contains no logic, just an import filter for account_banking.
+ ''',
+ 'active': False,
+ 'installable': True,
+}
diff --git a/account_banking_nl_multibank/i18n/account_banking_nl_multibank.pot b/account_banking_nl_multibank/i18n/account_banking_nl_multibank.pot
new file mode 100644
index 000000000..b6a0b9243
--- /dev/null
+++ b/account_banking_nl_multibank/i18n/account_banking_nl_multibank.pot
@@ -0,0 +1,48 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * account_banking_nl_multibank
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 5.0.7\n"
+"Report-Msgid-Bugs-To: support@openerp.com\n"
+"POT-Creation-Date: 2010-01-08 15:50:45+0000\n"
+"PO-Revision-Date: 2010-01-08 15:50:45+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_banking_nl_multibank
+#: code:addons/account_banking_nl_multibank/multibank.py:0
+#, python-format
+msgid "''\\n"
+"The Dutch Banking Tools format is basicly a MS Excel CSV format.\n"
+"There are two sub formats: MS Excel format and MS-Excel 2004 format.\n"
+"Both formats are covered with this parser. All transactions are tied\n"
+"to Bank Statements.\n"
+"''"
+msgstr ""
+
+#. module: account_banking_nl_multibank
+#: model:ir.module.module,shortdesc:account_banking_nl_multibank.module_meta_information
+msgid "Account Banking"
+msgstr ""
+
+#. module: account_banking_nl_multibank
+#: model:ir.module.module,description:account_banking_nl_multibank.module_meta_information
+msgid "\n"
+" Module to import Dutch Multibank format transation files.\n"
+"\n"
+" This modules contains no logic, just an import filter for account_banking.\n"
+" "
+msgstr ""
+
+#. module: account_banking_nl_multibank
+#: code:addons/account_banking_nl_multibank/multibank.py:0
+#, python-format
+msgid "Dutch Banking Tools"
+msgstr ""
+
diff --git a/account_banking_nl_multibank/i18n/en_US.po b/account_banking_nl_multibank/i18n/en_US.po
new file mode 100644
index 000000000..b6a0b9243
--- /dev/null
+++ b/account_banking_nl_multibank/i18n/en_US.po
@@ -0,0 +1,48 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * account_banking_nl_multibank
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 5.0.7\n"
+"Report-Msgid-Bugs-To: support@openerp.com\n"
+"POT-Creation-Date: 2010-01-08 15:50:45+0000\n"
+"PO-Revision-Date: 2010-01-08 15:50:45+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_banking_nl_multibank
+#: code:addons/account_banking_nl_multibank/multibank.py:0
+#, python-format
+msgid "''\\n"
+"The Dutch Banking Tools format is basicly a MS Excel CSV format.\n"
+"There are two sub formats: MS Excel format and MS-Excel 2004 format.\n"
+"Both formats are covered with this parser. All transactions are tied\n"
+"to Bank Statements.\n"
+"''"
+msgstr ""
+
+#. module: account_banking_nl_multibank
+#: model:ir.module.module,shortdesc:account_banking_nl_multibank.module_meta_information
+msgid "Account Banking"
+msgstr ""
+
+#. module: account_banking_nl_multibank
+#: model:ir.module.module,description:account_banking_nl_multibank.module_meta_information
+msgid "\n"
+" Module to import Dutch Multibank format transation files.\n"
+"\n"
+" This modules contains no logic, just an import filter for account_banking.\n"
+" "
+msgstr ""
+
+#. module: account_banking_nl_multibank
+#: code:addons/account_banking_nl_multibank/multibank.py:0
+#, python-format
+msgid "Dutch Banking Tools"
+msgstr ""
+
diff --git a/account_banking_nl_multibank/i18n/nl_NL.po b/account_banking_nl_multibank/i18n/nl_NL.po
new file mode 100644
index 000000000..f1dc99a5d
--- /dev/null
+++ b/account_banking_nl_multibank/i18n/nl_NL.po
@@ -0,0 +1,56 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * account_banking_nl_multibank
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 5.0.7\n"
+"Report-Msgid-Bugs-To: support@openerp.com\n"
+"POT-Creation-Date: 2010-01-08 14:52:29+0000\n"
+"PO-Revision-Date: 2010-01-08 14:52: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_banking_nl_multibank
+#: code:addons/account_banking_nl_multibank/multibank.py:0
+#, python-format
+msgid "''\\n"
+"The Dutch Banking Tools format is basicly a MS Excel CSV format.\n"
+"There are two sub formats: MS Excel format and MS-Excel 2004 format.\n"
+"Both formats are covered with this parser. All transactions are tied\n"
+"to Bank Statements.\n"
+"''"
+msgstr "''\\n"
+"Het Nederlands MultiBank-formaat is in essentie een MS-Excel CSV-bestand.\n"
+"Er zijn twee varianten: MS-Excel en MS-Excel 2004. Beide formaten worden\n"
+"door deze parser herkend. Alle transacties zijn gebonden aan bankafschriften.\n"
+""
+
+#. module: account_banking_nl_multibank
+#: model:ir.module.module,shortdesc:account_banking_nl_multibank.module_meta_information
+msgid "Account Banking"
+msgstr "Account Banking"
+
+#. module: account_banking_nl_multibank
+#: model:ir.module.module,description:account_banking_nl_multibank.module_meta_information
+msgid "\n"
+" Module to import Dutch Multibank format transation files.\n"
+"\n"
+" This modules contains no logic, just an import filter for account_banking.\n"
+" "
+msgstr "\n"
+" Module voor het importeren van Nederlandse MultiBank-formaat transatiebestanden.\n"
+"\n"
+" Deze module bevat geen logica, maar slechts het importfilter voor account_banking.\n"
+" "
+
+#. module: account_banking_nl_multibank
+#: code:addons/account_banking_nl_multibank/multibank.py:0
+#, python-format
+msgid "Dutch Banking Tools"
+msgstr "Nederlands MultiBank-formaat"
+
diff --git a/account_banking_nl_multibank/multibank.py b/account_banking_nl_multibank/multibank.py
new file mode 100644
index 000000000..e5ab19d46
--- /dev/null
+++ b/account_banking_nl_multibank/multibank.py
@@ -0,0 +1,184 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Copyright (C) 2009 EduSense BV ().
+# 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 .
+#
+##############################################################################
+
+'''
+This parser follows the Dutch Banking Tools specifications which are
+empirically recreated in this module.
+
+Dutch Banking Tools uses the concept of 'Afschrift' or Bank Statement.
+Every transaction is bound to a Bank Statement. As such, this module generates
+Bank Statements along with Bank Transactions.
+'''
+from account_banking.parsers import models
+from account_banking.parsers.convert import str2date
+from tools.translate import _
+import csv
+
+__all__ = ['parser']
+
+class transaction_message(object):
+ '''
+ A auxiliary class to validate and coerce read values
+ '''
+ attrnames = [
+ 'date', 'local_account', 'remote_account', 'remote_owner', 'u1', 'u2',
+ 'u3', 'local_currency', 'start_balance', 'remote_currency',
+ 'transferred_amount', 'execution_date', 'effective_date', 'nr1',
+ 'transfer_type', 'nr2', 'reference', 'message', 'statement_id'
+ ]
+
+ @staticmethod
+ def clean_account(accountno):
+ '''
+ There seems to be some SEPA movement in data: account numbers
+ get prefixed by zeroes as in BBAN. Convert those to 'old' local
+ account numbers
+
+ Edit: All account number now follow the BBAN scheme. As SNS Bank,
+ from which this module was re-engineered, follows the Dutch
+ Banking Tools regulations, it is considered to be used by all banks
+ in the Netherlands which comply to it. If not, please notify us.
+ '''
+ if len(accountno) == 10: # Invalid: longest number is 9
+ accountno = accountno[1:]
+ # 9-scheme or 7-scheme?
+ stripped = accountno.lstrip('0')
+ if len(stripped) <= 7:
+ accountno = stripped
+ return accountno
+
+ def __init__(self, values):
+ '''
+ Initialize own dict with attributes and coerce values to right type
+ '''
+ self.__dict__.update(dict(zip(self.attrnames, values)))
+ #self.local_account = self.clean_account(self.local_account)
+ #self.remote_account = self.clean_account(self.remote_account)
+ self.start_balance = float(self.start_balance)
+ self.transferred_amount = float(self.transferred_amount)
+ self.execution_date = str2date(self.execution_date, '%d-%m-%Y')
+ self.effective_date = str2date(self.effective_date, '%d-%m-%Y')
+
+class transaction(models.mem_bank_transaction):
+ '''
+ Implementation of transaction communication class for account_banking.
+ '''
+ attrnames = ['remote_account', 'remote_currency', 'transferred_amount',
+ 'execution_date', 'effective_date', 'transfer_type',
+ 'reference', 'message'
+ ]
+
+ def __init__(self, line, *args, **kwargs):
+ '''
+ Initialize own dict with read values.
+ '''
+ super(transaction, self).__init__(*args, **kwargs)
+ for attr in self.attrnames:
+ setattr(self, attr, getattr(line, attr))
+
+ def is_valid(self):
+ '''
+ There are a few situations that can be signaled as 'invalid' but are
+ valid nontheless:
+ 1. Transfers from one account to another under the same account holder
+ get not always a remote_account and remote_owner. They have their
+ transfer_type set to 'PRV'.
+ 2. Invoices from the bank itself are communicated through statements.
+ These too have no remote_account and no remote_owner. They have a
+ transfer_type set to 'KST'.
+ 3. Transfers sent through the 'International Transfers' system get
+ their feedback rerouted through a statement, which is not designed to
+ hold the extra fields needed. These transfers have their transfer_type
+ set to 'BTL'.
+ 4. Cash payments with debit cards are not seen as a transfer between
+ accounts, but as a cash withdrawal. These withdrawals have their
+ transfer_type set to 'BEA'.
+ 5. Cash withdrawals from banks are too not seen as a transfer between
+ two accounts - the cash exits the banking system. These withdrawals
+ have their transfer_type set to 'OPN'.
+ '''
+ return (self.transferred_amount and self.execution_date and
+ self.effective_date) and (
+ self.remote_account or
+ self.transfer_type in [
+ 'KST', 'PRV', 'BTL', 'BEA', 'OPN'
+ ])
+
+class statement(models.mem_bank_statement):
+ '''
+ Implementation of bank_statement communication class of account_banking
+ '''
+ def __init__(self, msg, *args, **kwargs):
+ '''
+ Set decent start values based on first transaction read
+ '''
+ super(statement, self).__init__(*args, **kwargs)
+ self.id = msg.statement_id
+ self.local_account = msg.local_account
+ self.date = str2date(msg.date, '%d-%m-%Y')
+ self.start_balance = self.end_balance = msg.start_balance
+ self.import_transaction(msg)
+
+ def import_transaction(self, msg):
+ '''
+ Import a transaction and keep some house holding in the mean time.
+ '''
+ trans = transaction(msg)
+ self.end_balance += trans.transferred_amount
+ self.transactions.append(trans)
+
+class parser(models.parser):
+ code = 'NLBT'
+ name = _('Dutch Banking Tools')
+ doc = _('''\
+The Dutch Banking Tools format is basicly a MS Excel CSV format.
+There are two sub formats: MS Excel format and MS-Excel 2004 format.
+Both formats are covered with this parser. All transactions are tied
+to Bank Statements.
+''')
+
+ def parse(self, data):
+ result = []
+ stmnt = None
+ dialect = csv.excel()
+ dialect.quotechar = '"'
+ dialect.delimiter = ';'
+ lines = data.split('\n')
+ # Probe first record to find out which format we are parsing.
+ if lines and lines[0].count(',') > lines[0].count(';'):
+ dialect.delimiter = ','
+ dialect.quotechar = "'"
+ for line in csv.reader(lines, dialect=dialect):
+ # Skip empty (last) lines
+ if not line:
+ continue
+ msg = transaction_message(line)
+ if stmnt and stmnt.id != msg.statement_id:
+ result.append(stmnt)
+ stmnt = None
+ if not stmnt:
+ stmnt = statement(msg)
+ else:
+ stmnt.import_transaction(msg)
+ result.append(stmnt)
+ return result
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: