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: