Merge lp:~jsancho/sepa-tools/xml-mandate-views-6.0 into lp:sepa-tools

Proposed by Javier Sancho
Status: Needs review
Proposed branch: lp:~jsancho/sepa-tools/xml-mandate-views-6.0
Merge into: lp:sepa-tools
Diff against target: 15182 lines (+14722/-0) (has conflicts)
85 files modified
account_payment_direct_debit/__init__.py (+1/-0)
account_payment_direct_debit/__openerp__.py (+56/-0)
account_payment_direct_debit/data/account_payment_term.xml (+16/-0)
account_payment_direct_debit/i18n/account_direct_debit.pot (+133/-0)
account_payment_direct_debit/i18n/es.po (+133/-0)
account_payment_direct_debit/i18n/nl.po (+155/-0)
account_payment_direct_debit/model/__init__.py (+6/-0)
account_payment_direct_debit/model/account_invoice.py (+166/-0)
account_payment_direct_debit/model/account_move_line.py (+126/-0)
account_payment_direct_debit/model/account_payment.py (+22/-0)
account_payment_direct_debit/model/payment_line.py (+153/-0)
account_payment_direct_debit/model/payment_order_create.py (+42/-0)
account_payment_direct_debit/model/payment_type.py (+42/-0)
account_payment_direct_debit/view/account_invoice.xml (+41/-0)
account_payment_direct_debit/view/account_payment.xml (+69/-0)
account_payment_direct_debit/view/payment_type.xml (+17/-0)
account_payment_direct_debit/workflow/account_invoice.xml (+51/-0)
account_payment_export/__init__.py (+1/-0)
account_payment_export/__openerp__.py (+62/-0)
account_payment_export/data/payment_type.xml (+14/-0)
account_payment_export/i18n/account_banking_payment_export.pot (+145/-0)
account_payment_export/i18n/es.po (+110/-0)
account_payment_export/i18n/nl.po (+151/-0)
account_payment_export/model/__init__.py (+4/-0)
account_payment_export/model/account_payment.py (+88/-0)
account_payment_export/model/bank_payment_manual.py (+60/-0)
account_payment_export/model/payment_mode.py (+45/-0)
account_payment_export/model/payment_order_create.py (+60/-0)
account_payment_export/view/account_payment.xml (+22/-0)
account_payment_export/view/bank_payment_manual.xml (+16/-0)
account_payment_export/view/payment_mode.xml (+20/-0)
account_payment_pain_base/.directory (+6/-0)
account_payment_pain_base/__init__.py (+26/-0)
account_payment_pain_base/__openerp__.py (+55/-0)
account_payment_pain_base/banking_export_pain.py (+441/-0)
account_payment_pain_base/company.py (+82/-0)
account_payment_pain_base/company_view.xml (+25/-0)
account_payment_pain_base/i18n/account_banking_pain_base.pot (+146/-0)
account_payment_pain_base/i18n/es.po (+153/-0)
account_payment_pain_base/i18n/fr.po (+146/-0)
account_payment_pain_base/payment_line.py (+54/-0)
account_payment_pain_base/payment_line_view.xml (+41/-0)
account_payment_pain_base/payment_mode.py (+41/-0)
account_payment_pain_base/payment_mode_view.xml (+22/-0)
account_payment_sepa_credit_transfer/__init__.py (+24/-0)
account_payment_sepa_credit_transfer/__openerp__.py (+57/-0)
account_payment_sepa_credit_transfer/account_banking_sepa.py (+91/-0)
account_payment_sepa_credit_transfer/account_banking_sepa_view.xml (+80/-0)
account_payment_sepa_credit_transfer/data/pain.001.001.02.xsd (+784/-0)
account_payment_sepa_credit_transfer/data/pain.001.001.03.xsd (+921/-0)
account_payment_sepa_credit_transfer/data/pain.001.001.04.xsd (+968/-0)
account_payment_sepa_credit_transfer/data/pain.001.001.05.xsd (+931/-0)
account_payment_sepa_credit_transfer/data/payment_type_sepa_sct.xml (+41/-0)
account_payment_sepa_credit_transfer/i18n/account_banking_sepa_credit_transfer.pot (+207/-0)
account_payment_sepa_credit_transfer/i18n/es.po (+227/-0)
account_payment_sepa_credit_transfer/i18n/fr.po (+207/-0)
account_payment_sepa_credit_transfer/i18n/nl.po (+405/-0)
account_payment_sepa_credit_transfer/security/ir.model.access.csv (+2/-0)
account_payment_sepa_credit_transfer/wizard/__init__.py (+23/-0)
account_payment_sepa_credit_transfer/wizard/export_sepa.py (+300/-0)
account_payment_sepa_credit_transfer/wizard/export_sepa_view.xml (+38/-0)
account_payment_sepa_direct_debit/__init__.py (+25/-0)
account_payment_sepa_direct_debit/__openerp__.py (+67/-0)
account_payment_sepa_direct_debit/account_banking_sdd.py (+424/-0)
account_payment_sepa_direct_debit/account_banking_sdd_view.xml (+80/-0)
account_payment_sepa_direct_debit/account_invoice_view.xml (+22/-0)
account_payment_sepa_direct_debit/account_payment_view.xml (+26/-0)
account_payment_sepa_direct_debit/company.py (+90/-0)
account_payment_sepa_direct_debit/company_view.xml (+23/-0)
account_payment_sepa_direct_debit/data/mandate_reference_sequence.xml (+21/-0)
account_payment_sepa_direct_debit/data/pain.008.001.02.xsd (+879/-0)
account_payment_sepa_direct_debit/data/pain.008.001.03.xsd (+925/-0)
account_payment_sepa_direct_debit/data/pain.008.001.04.xsd (+892/-0)
account_payment_sepa_direct_debit/data/payment_type_sdd.xml (+37/-0)
account_payment_sepa_direct_debit/i18n/account_banking_sepa_direct_debit.pot (+633/-0)
account_payment_sepa_direct_debit/i18n/es.po (+657/-0)
account_payment_sepa_direct_debit/i18n/fr.po (+642/-0)
account_payment_sepa_direct_debit/mandate_expire_cron.xml (+26/-0)
account_payment_sepa_direct_debit/res_partner_bank_view.xml (+48/-0)
account_payment_sepa_direct_debit/sdd_mandate_view.xml (+100/-0)
account_payment_sepa_direct_debit/security/ir.model.access.csv (+4/-0)
account_payment_sepa_direct_debit/security/original_mandate_required_security.xml (+16/-0)
account_payment_sepa_direct_debit/wizard/__init__.py (+23/-0)
account_payment_sepa_direct_debit/wizard/export_sdd.py (+454/-0)
account_payment_sepa_direct_debit/wizard/export_sdd_view.xml (+37/-0)
Conflict adding file account_payment_direct_debit.  Moved existing file to account_payment_direct_debit.moved.
Conflict adding file account_payment_export.  Moved existing file to account_payment_export.moved.
Conflict adding file account_payment_pain_base.  Moved existing file to account_payment_pain_base.moved.
Conflict adding file account_payment_sepa_credit_transfer.  Moved existing file to account_payment_sepa_credit_transfer.moved.
Conflict adding file account_payment_sepa_direct_debit.  Moved existing file to account_payment_sepa_direct_debit.moved.
To merge this branch: bzr merge lp:~jsancho/sepa-tools/xml-mandate-views-6.0
Reviewer Review Type Date Requested Status
Ignacio Ibeas (www.acysos.com) Needs Fixing
Review via email: mp+208768@code.launchpad.net

Description of the change

XML views need some extra fields for OpenERP can build them correctly, for example, type of view.

To post a comment you must log in.
Revision history for this message
Ignacio Ibeas (www.acysos.com) (ignacio-acysos) wrote :

Hello,

I think that you try to merge a 6.0 version into 7.0. Also yo have moved the aold directory, instead to edit the existing.

Gretings

review: Needs Fixing
12. By Javier Sancho <jsancho@bespin>

[FIX] account_payment_export: make payments calling parent class

Unmerged revisions

12. By Javier Sancho <jsancho@bespin>

[FIX] account_payment_export: make payments calling parent class

11. By Javier Sancho <jsancho@bespin>

[FIX] account_payment_export: make payments calling parent class

10. By Javier Sancho <jsancho@bespin>

[FIX] account_payment_sepa_direct_debit: fix XML for mandate views

9. By Ignacio Ibeas (www.acysos.com)

[FIX] Installation in Windows Server

8. By Ignacio Ibeas (www.acysos.com)

[FIX] account_payment_pain_base: fix party identifier for Spain

7. By Ignacio Ibeas (www.acysos.com)

[FIX] account_payment_pain_base: fix party identifier for Spain

6. By Ignacio Ibeas (www.acysos.com)

[FIX] account_payment_export: fix return GTK client

5. By Ignacio Ibeas (www.acysos.com)

[ADD] Account Payment SEPA: modules SEPA for account_paymnt_extension adapted from banking addons

4. By Ignacio Ibeas (www.acysos.com)

[FIX] sepa_pain: authors

3. By Ignacio Ibeas (www.acysos.com)

[FIX] sepa_pain: fix not vat number in comapany

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added directory 'account_payment_direct_debit'
2=== renamed directory 'account_payment_direct_debit' => 'account_payment_direct_debit.moved'
3=== added file 'account_payment_direct_debit/__init__.py'
4--- account_payment_direct_debit/__init__.py 1970-01-01 00:00:00 +0000
5+++ account_payment_direct_debit/__init__.py 2014-06-02 14:43:40 +0000
6@@ -0,0 +1,1 @@
7+import model
8
9=== added file 'account_payment_direct_debit/__openerp__.py'
10--- account_payment_direct_debit/__openerp__.py 1970-01-01 00:00:00 +0000
11+++ account_payment_direct_debit/__openerp__.py 2014-06-02 14:43:40 +0000
12@@ -0,0 +1,56 @@
13+##############################################################################
14+#
15+# Copyright (C) 2011 - 2013 Therp BV (<http://therp.nl>).
16+# Copyright (C) 2011 Smile (<http://smile.fr>).
17+# Copyright (C) 2014 Acysos S.L. (<http://acysos.com>).
18+# @author: Ignacio Ibeas <ignacio@acysos.com>
19+# All Rights Reserved
20+#
21+# This program is free software: you can redistribute it and/or modify
22+# it under the terms of the GNU Affero General Public License as published by
23+# the Free Software Foundation, either version 3 of the License, or
24+# (at your option) any later version.
25+#
26+# This program is distributed in the hope that it will be useful,
27+# but WITHOUT ANY WARRANTY; without even the implied warranty of
28+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29+# GNU Affero General Public License for more details.
30+#
31+# You should have received a copy of the GNU Affero General Public License
32+# along with this program. If not, see <http://www.gnu.org/licenses/>.
33+#
34+##############################################################################
35+{
36+ 'name': 'Direct Debit',
37+ 'version': '7.0.2.134',
38+ 'license': 'AGPL-3',
39+ 'author': ['Therp BV', 'Smile'],
40+ 'website': 'https://launchpad.net/account-payment',
41+ 'category': 'Banking addons',
42+ 'depends': ['account_payment_extension'],
43+ 'data': [
44+ 'view/account_payment.xml',
45+ 'view/account_invoice.xml',
46+ 'view/payment_type.xml',
47+ 'workflow/account_invoice.xml',
48+ 'data/account_payment_term.xml',
49+ ],
50+ 'description': '''
51+This module adds support for direct debit orders, analogous to payment orders.
52+A new entry in the Accounting/Payment menu allow you to create a direct debit
53+order that helps you to select any customer invoices for you to collect.
54+
55+This module explicitely implements direct debit orders as applicable
56+in the Netherlands. Debit orders are advanced in total by the bank.
57+Amounts that cannot be debited or are canceled by account owners are
58+credited afterwards. Such a creditation is called a storno. This style of
59+direct debit order may not apply to your country.
60+
61+This module depends on and is part of the account payment for OpenERP. This set
62+of modules helps you to provide support for communications with your local
63+banking institutions.
64+
65+Adapted to account_payment_extension by Acysos S.L. <info@acysos.com>
66+ ''',
67+ 'installable': True,
68+}
69
70=== added directory 'account_payment_direct_debit/data'
71=== added file 'account_payment_direct_debit/data/account_payment_term.xml'
72--- account_payment_direct_debit/data/account_payment_term.xml 1970-01-01 00:00:00 +0000
73+++ account_payment_direct_debit/data/account_payment_term.xml 2014-06-02 14:43:40 +0000
74@@ -0,0 +1,16 @@
75+<?xml version="1.0" encoding="utf-8"?>
76+<openerp>
77+ <data noupdate="1">
78+ <record id="payment_term_direct_debit" model="account.payment.term">
79+ <field name="name">Direct debit</field>
80+ <field name="note">Direct debit in 14 days</field>
81+ </record>
82+ <record id="payment_term_line_direct_debit" model="account.payment.term.line">
83+ <field name="name">Direct debit in 14 days</field>
84+ <field name="value">balance</field>
85+ <field eval="14" name="days"/>
86+ <field eval="0" name="days2"/>
87+ <field eval="payment_term_direct_debit" name="payment_id"/>
88+ </record>
89+ </data>
90+</openerp>
91
92=== added directory 'account_payment_direct_debit/i18n'
93=== added file 'account_payment_direct_debit/i18n/account_direct_debit.pot'
94--- account_payment_direct_debit/i18n/account_direct_debit.pot 1970-01-01 00:00:00 +0000
95+++ account_payment_direct_debit/i18n/account_direct_debit.pot 2014-06-02 14:43:40 +0000
96@@ -0,0 +1,133 @@
97+# Translation of OpenERP Server.
98+# This file contains the translation of the following modules:
99+# * account_direct_debit
100+#
101+msgid ""
102+msgstr ""
103+"Project-Id-Version: OpenERP Server 7.0\n"
104+"Report-Msgid-Bugs-To: \n"
105+"POT-Creation-Date: 2013-10-25 16:01+0000\n"
106+"PO-Revision-Date: 2013-10-25 16:01+0000\n"
107+"Last-Translator: <>\n"
108+"Language-Team: \n"
109+"MIME-Version: 1.0\n"
110+"Content-Type: text/plain; charset=UTF-8\n"
111+"Content-Transfer-Encoding: \n"
112+"Plural-Forms: \n"
113+
114+#. module: account_direct_debit
115+#: model:account.payment.term,note:account_direct_debit.payment_term_direct_debit
116+msgid "Direct debit in 14 days"
117+msgstr ""
118+
119+#. module: account_direct_debit
120+#: model:ir.model,name:account_direct_debit.model_payment_order
121+msgid "Payment Order"
122+msgstr ""
123+
124+#. module: account_direct_debit
125+#: view:payment.order:0
126+msgid "Select Invoices to Collect"
127+msgstr ""
128+
129+#. module: account_direct_debit
130+#: model:ir.model,name:account_direct_debit.model_payment_line
131+msgid "Payment Line"
132+msgstr ""
133+
134+#. module: account_direct_debit
135+#: code:addons/account_direct_debit/model/payment_line.py:140
136+#, python-format
137+msgid "Can not reconcile"
138+msgstr ""
139+
140+#. module: account_direct_debit
141+#: view:account.invoice:0
142+msgid "Debit Denied"
143+msgstr ""
144+
145+#. module: account_direct_debit
146+#: code:addons/account_direct_debit/model/account_invoice.py:147
147+#, python-format
148+msgid "Error !"
149+msgstr ""
150+
151+#. module: account_direct_debit
152+#: view:account.invoice:0
153+msgid "Show only invoices with state Debit denied"
154+msgstr ""
155+
156+#. module: account_direct_debit
157+#: view:payment.order:0
158+msgid "{'invisible':['|',('state','!=','draft'),('payment_order_type', '!=', 'payment')]}"
159+msgstr ""
160+
161+#. module: account_direct_debit
162+#: model:ir.model,name:account_direct_debit.model_account_move_line
163+msgid "Journal Items"
164+msgstr ""
165+
166+#. module: account_direct_debit
167+#: view:account.invoice:0
168+msgid "Debit denied"
169+msgstr ""
170+
171+#. module: account_direct_debit
172+#: model:ir.actions.act_window,name:account_direct_debit.action_debit_order_tree
173+#: model:ir.ui.menu,name:account_direct_debit.menu_action_debit_order_form
174+msgid "Direct Debit Orders"
175+msgstr ""
176+
177+#. module: account_direct_debit
178+#: model:account.payment.term,name:account_direct_debit.payment_term_direct_debit
179+msgid "Direct debit"
180+msgstr ""
181+
182+#. module: account_direct_debit
183+#: code:addons/account_direct_debit/model/account_invoice.py:148
184+#, python-format
185+msgid "You cannot set invoice '%s' to state 'debit denied', as it is still reconciled."
186+msgstr ""
187+
188+#. module: account_direct_debit
189+#: code:addons/account_direct_debit/model/account_invoice.py:152
190+#, python-format
191+msgid "Invoice '%s': direct debit is denied."
192+msgstr ""
193+
194+#. module: account_direct_debit
195+#: code:addons/account_direct_debit/model/payment_line.py:141
196+#, python-format
197+msgid "Cancelation of payment line '%s' has already been processed"
198+msgstr ""
199+
200+#. module: account_direct_debit
201+#: model:ir.model,name:account_direct_debit.model_payment_order_create
202+msgid "payment.order.create"
203+msgstr ""
204+
205+#. module: account_direct_debit
206+#: field:payment.line,storno:0
207+msgid "Storno"
208+msgstr ""
209+
210+#. module: account_direct_debit
211+#: help:payment.line,storno:0
212+msgid "If this is true, the debit order has been canceled by the bank or by the customer"
213+msgstr ""
214+
215+#. module: account_direct_debit
216+#: model:ir.actions.act_window,help:account_direct_debit.action_debit_order_tree
217+msgid "A debit order is a debit request from your company to collect customer invoices. Here you can register all debit orders that should be done, keep track of all debit orders and mention the invoice reference and the partner the withdrawal should be done for."
218+msgstr ""
219+
220+#. module: account_direct_debit
221+#: field:account.move.line,amount_to_receive:0
222+msgid "Amount to receive"
223+msgstr ""
224+
225+#. module: account_direct_debit
226+#: model:ir.model,name:account_direct_debit.model_account_invoice
227+msgid "Invoice"
228+msgstr ""
229+
230
231=== added file 'account_payment_direct_debit/i18n/es.po'
232--- account_payment_direct_debit/i18n/es.po 1970-01-01 00:00:00 +0000
233+++ account_payment_direct_debit/i18n/es.po 2014-06-02 14:43:40 +0000
234@@ -0,0 +1,133 @@
235+# Translation of OpenERP Server.
236+# This file contains the translation of the following modules:
237+# * account_payment_direct_debit
238+#
239+msgid ""
240+msgstr ""
241+"Project-Id-Version: OpenERP Server 7.0-20131224-002412\n"
242+"Report-Msgid-Bugs-To: \n"
243+"POT-Creation-Date: 2014-01-25 11:27+0000\n"
244+"PO-Revision-Date: 2014-01-25 11:27+0000\n"
245+"Last-Translator: <>\n"
246+"Language-Team: \n"
247+"MIME-Version: 1.0\n"
248+"Content-Type: text/plain; charset=UTF-8\n"
249+"Content-Transfer-Encoding: \n"
250+"Plural-Forms: \n"
251+
252+#. module: account_payment_direct_debit
253+#: model:account.payment.term,note:account_payment_direct_debit.payment_term_direct_debit
254+msgid "Direct debit in 14 days"
255+msgstr "Adeudos directos en 14 días"
256+
257+#. module: account_payment_direct_debit
258+#: model:ir.model,name:account_payment_direct_debit.model_payment_order
259+msgid "Payment Order"
260+msgstr "Orden de pago"
261+
262+#. module: account_payment_direct_debit
263+#: field:payment.type,payment_order_type:0
264+msgid "Payment order type"
265+msgstr "Tipo de orden de pago"
266+
267+#. module: account_payment_direct_debit
268+#: model:ir.model,name:account_payment_direct_debit.model_payment_line
269+msgid "Payment Line"
270+msgstr "Línea de pago"
271+
272+#. module: account_payment_direct_debit
273+#: model:ir.model,name:account_payment_direct_debit.model_payment_mode
274+msgid "Payment Mode"
275+msgstr "Modo de pago"
276+
277+#. module: account_payment_direct_debit
278+#: code:addons/account_payment_direct_debit/model/payment_line.py:140
279+#, python-format
280+msgid "Can not reconcile"
281+msgstr "No se puede reconciliar"
282+
283+#. module: account_payment_direct_debit
284+#: view:account.invoice:0
285+msgid "Debit Denied"
286+msgstr "Adeudo denegado"
287+
288+#. module: account_payment_direct_debit
289+#: code:addons/account_payment_direct_debit/model/account_invoice.py:147
290+#, python-format
291+msgid "Error !"
292+msgstr "Error !"
293+
294+#. module: account_payment_direct_debit
295+#: view:account.invoice:0
296+msgid "Show only invoices with state Debit denied"
297+msgstr "Mostrar solo las facturas con adeudo denegado"
298+
299+#. module: account_payment_direct_debit
300+#: model:ir.model,name:account_payment_direct_debit.model_account_move_line
301+msgid "Journal Items"
302+msgstr "Apuntes contables"
303+
304+#. module: account_payment_direct_debit
305+#: selection:payment.type,payment_order_type:0
306+msgid "Payment"
307+msgstr "Pago"
308+
309+#. module: account_payment_direct_debit
310+#: view:account.invoice:0
311+msgid "Debit denied"
312+msgstr "Adeudo denegado"
313+
314+#. module: account_payment_direct_debit
315+#: model:account.payment.term,name:account_payment_direct_debit.payment_term_direct_debit
316+#: selection:payment.type,payment_order_type:0
317+msgid "Direct debit"
318+msgstr "Adeudo directo"
319+
320+#. module: account_payment_direct_debit
321+#: code:addons/account_payment_direct_debit/model/account_invoice.py:148
322+#, python-format
323+msgid "You cannot set invoice '%s' to state 'debit denied', as it is still reconciled."
324+msgstr "No puede cambiar la factura '%s' a estado 'Adeudo denegado', porque esta aun conciliada."
325+
326+#. module: account_payment_direct_debit
327+#: code:addons/account_payment_direct_debit/model/account_invoice.py:152
328+#, python-format
329+msgid "Invoice '%s': direct debit is denied."
330+msgstr "Factura '%s': adeudo directo es denegado."
331+
332+#. module: account_payment_direct_debit
333+#: model:ir.model,name:account_payment_direct_debit.model_payment_order_create
334+msgid "payment.order.create"
335+msgstr "pago.orden.crear"
336+
337+#. module: account_payment_direct_debit
338+#: field:payment.line,storno:0
339+msgid "Storno"
340+msgstr "Anulación"
341+
342+#. module: account_payment_direct_debit
343+#: help:payment.line,storno:0
344+msgid "If this is true, the debit order has been canceled by the bank or by the customer"
345+msgstr "Si esta seleccionado, el adeudo directo ha sido cancelado por el banco o el cliente"
346+
347+#. module: account_payment_direct_debit
348+#: model:ir.model,name:account_payment_direct_debit.model_payment_type
349+msgid "Payment type"
350+msgstr "Tipo de pago"
351+
352+#. module: account_payment_direct_debit
353+#: code:addons/account_payment_direct_debit/model/payment_line.py:141
354+#, python-format
355+msgid "Cancelation of payment line '%s' has already been processed"
356+msgstr "La cancelación de la linea de pago '%s' ha sido procesada"
357+
358+#. module: account_payment_direct_debit
359+#: field:account.move.line,amount_to_receive:0
360+msgid "Amount to receive"
361+msgstr "Cantidad a recibir"
362+
363+#. module: account_payment_direct_debit
364+#: model:ir.model,name:account_payment_direct_debit.model_account_invoice
365+msgid "Invoice"
366+msgstr "Factura"
367+
368
369=== added file 'account_payment_direct_debit/i18n/nl.po'
370--- account_payment_direct_debit/i18n/nl.po 1970-01-01 00:00:00 +0000
371+++ account_payment_direct_debit/i18n/nl.po 2014-06-02 14:43:40 +0000
372@@ -0,0 +1,155 @@
373+# Dutch translation for banking-addons
374+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
375+# This file is distributed under the same license as the banking-addons package.
376+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
377+#
378+msgid ""
379+msgstr ""
380+"Project-Id-Version: banking-addons\n"
381+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
382+"POT-Creation-Date: 2013-10-25 16:01+0000\n"
383+"PO-Revision-Date: 2013-12-03 11:31+0000\n"
384+"Last-Translator: Erwin van der Ploeg (BAS Solutions) <Unknown>\n"
385+"Language-Team: Dutch <nl@li.org>\n"
386+"MIME-Version: 1.0\n"
387+"Content-Type: text/plain; charset=UTF-8\n"
388+"Content-Transfer-Encoding: 8bit\n"
389+"X-Launchpad-Export-Date: 2013-12-04 05:59+0000\n"
390+"X-Generator: Launchpad (build 16861)\n"
391+
392+#. module: account_direct_debit
393+#: model:account.payment.term,note:account_direct_debit.payment_term_direct_debit
394+msgid "Direct debit in 14 days"
395+msgstr "Incasso opdracht in 14 dagen"
396+
397+#. module: account_direct_debit
398+#: model:ir.model,name:account_direct_debit.model_payment_order
399+msgid "Payment Order"
400+msgstr "Betalingsopdracht"
401+
402+#. module: account_direct_debit
403+#: view:payment.order:0
404+msgid "Select Invoices to Collect"
405+msgstr "Selecteer openstaande posten ter incasso"
406+
407+#. module: account_direct_debit
408+#: model:ir.model,name:account_direct_debit.model_payment_line
409+msgid "Payment Line"
410+msgstr "Betaalregel"
411+
412+#. module: account_direct_debit
413+#: code:addons/account_direct_debit/model/payment_line.py:140
414+#, python-format
415+msgid "Can not reconcile"
416+msgstr "Kan niet afletteren"
417+
418+#. module: account_direct_debit
419+#: view:account.invoice:0
420+msgid "Debit Denied"
421+msgstr "Incasso geweigerd"
422+
423+#. module: account_direct_debit
424+#: code:addons/account_direct_debit/model/account_invoice.py:147
425+#, python-format
426+msgid "Error !"
427+msgstr "Fout !"
428+
429+#. module: account_direct_debit
430+#: view:account.invoice:0
431+msgid "Show only invoices with state Debit denied"
432+msgstr "Laat alleen facturen zien waarvan de incasso is geweigerd"
433+
434+#. module: account_direct_debit
435+#: view:payment.order:0
436+msgid ""
437+"{'invisible':['|',('state','!=','draft'),('payment_order_type', '!=', "
438+"'payment')]}"
439+msgstr ""
440+"{'invisible':['|',('state','!=','draft'),('payment_order_type', '!=', "
441+"'payment')]}"
442+
443+#. module: account_direct_debit
444+#: model:ir.model,name:account_direct_debit.model_account_move_line
445+msgid "Journal Items"
446+msgstr "Boekingen"
447+
448+#. module: account_direct_debit
449+#: view:account.invoice:0
450+msgid "Debit denied"
451+msgstr "Incasso geweigerd"
452+
453+#. module: account_direct_debit
454+#: model:ir.actions.act_window,name:account_direct_debit.action_debit_order_tree
455+#: model:ir.ui.menu,name:account_direct_debit.menu_action_debit_order_form
456+msgid "Direct Debit Orders"
457+msgstr "Incasso opdracht"
458+
459+#. module: account_direct_debit
460+#: model:account.payment.term,name:account_direct_debit.payment_term_direct_debit
461+msgid "Direct debit"
462+msgstr "Incasso opdracht"
463+
464+#. module: account_direct_debit
465+#: code:addons/account_direct_debit/model/account_invoice.py:148
466+#, python-format
467+msgid ""
468+"You cannot set invoice '%s' to state 'debit denied', as it is still "
469+"reconciled."
470+msgstr ""
471+"Het is niet mogelijk om factuur '%s' in status 'Incasso geweigerd' te "
472+"zetten, omdat deze nog is afgeletterd."
473+
474+#. module: account_direct_debit
475+#: code:addons/account_direct_debit/model/account_invoice.py:152
476+#, python-format
477+msgid "Invoice '%s': direct debit is denied."
478+msgstr "Factuur '%s': Incasso geweigerd"
479+
480+#. module: account_direct_debit
481+#: code:addons/account_direct_debit/model/payment_line.py:141
482+#, python-format
483+msgid "Cancelation of payment line '%s' has already been processed"
484+msgstr "Het annuleren van de betaalopdrachtregel '%s' is al verwerkt"
485+
486+#. module: account_direct_debit
487+#: model:ir.model,name:account_direct_debit.model_payment_order_create
488+msgid "payment.order.create"
489+msgstr "payment.order.create"
490+
491+#. module: account_direct_debit
492+#: field:payment.line,storno:0
493+msgid "Storno"
494+msgstr "Storno"
495+
496+#. module: account_direct_debit
497+#: help:payment.line,storno:0
498+msgid ""
499+"If this is true, the debit order has been canceled by the bank or by the "
500+"customer"
501+msgstr ""
502+"Indien aangevinkt is de incasso opdracht al geannuleerd dor de bank of de "
503+"klant."
504+
505+#. module: account_direct_debit
506+#: model:ir.actions.act_window,help:account_direct_debit.action_debit_order_tree
507+msgid ""
508+"A debit order is a debit request from your company to collect customer "
509+"invoices. Here you can register all debit orders that should be done, keep "
510+"track of all debit orders and mention the invoice reference and the partner "
511+"the withdrawal should be done for."
512+msgstr ""
513+"Een incasso opdracht is een opdracht van uw bedrijf aan uw klant voor het "
514+"incasseren van openstaande posten. Hier kunt u alle incasso opdrachten "
515+"invoeren die moeten worden uitgevoerd en overzicht houden op alle incasso "
516+"opdrachten. Tevens voert u hier de factuurreferentie en klant in waar de "
517+"afschrijving moet plaatsvinden."
518+
519+#. module: account_direct_debit
520+#: field:account.move.line,amount_to_receive:0
521+msgid "Amount to receive"
522+msgstr "Bedrag te ontvangen"
523+
524+#. module: account_direct_debit
525+#: model:ir.model,name:account_direct_debit.model_account_invoice
526+msgid "Invoice"
527+msgstr "Factuur"
528
529=== added directory 'account_payment_direct_debit/model'
530=== added file 'account_payment_direct_debit/model/__init__.py'
531--- account_payment_direct_debit/model/__init__.py 1970-01-01 00:00:00 +0000
532+++ account_payment_direct_debit/model/__init__.py 2014-06-02 14:43:40 +0000
533@@ -0,0 +1,6 @@
534+import account_payment
535+import payment_line
536+import account_move_line
537+import account_invoice
538+import payment_order_create
539+import payment_type
540
541=== added file 'account_payment_direct_debit/model/account_invoice.py'
542--- account_payment_direct_debit/model/account_invoice.py 1970-01-01 00:00:00 +0000
543+++ account_payment_direct_debit/model/account_invoice.py 2014-06-02 14:43:40 +0000
544@@ -0,0 +1,166 @@
545+# -*- coding: utf-8 -*-
546+##############################################################################
547+#
548+# Copyright (C) 2011 - 2013 Therp BV (<http://therp.nl>).
549+#
550+# All other contributions are (C) by their respective contributors
551+#
552+# All Rights Reserved
553+#
554+# This program is free software: you can redistribute it and/or modify
555+# it under the terms of the GNU Affero General Public License as
556+# published by the Free Software Foundation, either version 3 of the
557+# License, or (at your option) any later version.
558+#
559+# This program is distributed in the hope that it will be useful,
560+# but WITHOUT ANY WARRANTY; without even the implied warranty of
561+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
562+# GNU Affero General Public License for more details.
563+#
564+# You should have received a copy of the GNU Affero General Public License
565+# along with this program. If not, see <http://www.gnu.org/licenses/>.
566+#
567+##############################################################################
568+
569+from osv import fields, osv
570+from tools.translate import _
571+
572+"""
573+This module adds support for Direct debit orders as applicable
574+in the Netherlands. Debit orders are advanced in total by the bank.
575+Amounts that cannot be debited or are canceled by account owners are
576+credited afterwards. Such a creditation is called a storno.
577+
578+Invoice workflow:
579+
580+1 the sale leads to
581+ 1300 Debtors 100
582+ 8000 Sales 100
583+
584+Balance:
585+ Debtors 2000 |
586+ Sales | 2000
587+
588+2 an external booking takes place
589+ 1100 Bank 100
590+ 1300 Debtors 100
591+ This booking is reconciled with [1]
592+ The invoice gets set to state 'paid', and 'reconciled' = True
593+
594+Balance:
595+ Debtors 1900 |
596+ Bank 100 |
597+ Sales | 2000
598+
599+This module implements the following diversion:
600+
601+2a the invoice is included in a direct debit order. When the order is
602+ confirmed, a move is created per invoice:
603+
604+ 2000 Transfer account 100 |
605+ 1300 Debtors | 100
606+ Reconciliation takes place between 1 and 2a.
607+ The invoice gets set to state 'paid', and 'reconciled' = True
608+
609+Balance:
610+ Debtors 0 |
611+ Transfer account 2000 |
612+ Bank 0 |
613+ Sales | 2000
614+
615+3a the direct debit order is booked on the bank account
616+
617+Balance:
618+ 1100 Bank 2000 |
619+ 2000 Transfer account | 2000
620+ Reconciliation takes place between 3a and 2a
621+
622+Balance:
623+ Debtors 0 |
624+ Transfer account 0 |
625+ Bank 2000 |
626+ Sales | 2000
627+
628+4 a storno from invoice [1] triggers a new booking on the bank account
629+ 1300 Debtors 100 |
630+ 1100 Bank | 100
631+
632+Balance:
633+ Debtors 100 |
634+ Transfer account 0 |
635+ Bank 1900 |
636+ Sales | 2000
637+
638+ The reconciliation of 2a is undone. The booking of 2a is reconciled
639+ with the booking of 4 instead.
640+ The payment line attribute 'storno' is set to True and the invoice
641+ state is no longer 'paid'.
642+
643+Two cases need to be distinguisted:
644+ 1) If the storno is a manual storno from the partner, the invoice is set to
645+ state 'debit_denied', with 'reconciled' = False
646+ This module implements this option by allowing the bank module to call
647+
648+ netsvc.LocalService("workflow").trg_validate(
649+ uid, 'account.invoice', ids, 'debit_denied', cr)
650+
651+ 2) If the storno is an error generated by the bank (assumingly non-fatal),
652+ the invoice is reopened for the next debit run. This is a call to existing
653+
654+ netsvc.LocalService("workflow").trg_validate(
655+ uid, 'account.invoice', ids, 'open_test', cr)
656+
657+ Should also be adding a log entry on the invoice for tracing purposes
658+
659+ self._log_event(cr, uid, ids, -1.0, 'Debit denied')
660+
661+ If not for that funny comment
662+ "#TODO: implement messages system" in account/invoice.py
663+
664+ Repeating non-fatal fatal errors need to be dealt with manually by checking
665+ open invoices with a matured invoice- or due date.
666+"""
667+
668+class account_invoice(osv.osv):
669+ _inherit = "account.invoice"
670+
671+ def __init__(self, pool, cr):
672+ """
673+ Adding a state to the hardcoded state list of the inherited
674+ model. The alternative is duplicating the field definition
675+ in columns but only one module can do that!
676+
677+ Maybe apply a similar trick when overriding the buttons' 'states' attributes
678+ in the form view, manipulating the xml in fields_view_get().
679+ """
680+ super(account_invoice, self).__init__(pool, cr)
681+ invoice_obj = pool.get('account.invoice')
682+ invoice_obj._columns['state'].selection.append(
683+ ('debit_denied', 'Debit denied'))
684+
685+ def action_debit_denied(self, cr, uid, ids, context=None):
686+ for invoice_id in ids:
687+ if self.test_paid(cr, uid, [invoice_id], context):
688+ number = self.read(
689+ cr, uid, invoice_id, ['number'], context=context)['number']
690+ raise osv.except_osv(
691+ _('Error !'),
692+ _('You cannot set invoice \'%s\' to state \'debit denied\', ' +
693+ 'as it is still reconciled.') % number)
694+ self.write(cr, uid, ids, {'state': 'debit_denied'}, context=context)
695+ for inv_id, name in self.name_get(cr, uid, ids, context=context):
696+ message = _("Invoice '%s': direct debit is denied.") % name
697+ self.log(cr, uid, inv_id, message)
698+ return True
699+
700+ def test_undo_debit_denied(self, cr, uid, ids, context=None):
701+ """
702+ Called from the workflow. Used to unset paid state on
703+ invoices that were paid with bank transfers which are being cancelled
704+ """
705+ for invoice in self.read(cr, uid, ids, ['reconciled'], context):
706+ if not invoice['reconciled']:
707+ return False
708+ return True
709+
710+account_invoice()
711\ No newline at end of file
712
713=== added file 'account_payment_direct_debit/model/account_move_line.py'
714--- account_payment_direct_debit/model/account_move_line.py 1970-01-01 00:00:00 +0000
715+++ account_payment_direct_debit/model/account_move_line.py 2014-06-02 14:43:40 +0000
716@@ -0,0 +1,126 @@
717+# -*- coding: utf-8 -*-
718+##############################################################################
719+#
720+# OpenERP, Open Source Management Solution
721+# This module (C) 2011 - 2013 Therp BV (<http://therp.nl>).
722+# (C) 2011 Smile Benelux (<http://smile.fr>).
723+#
724+# This program is free software: you can redistribute it and/or modify
725+# it under the terms of the GNU Affero General Public License as
726+# published by the Free Software Foundation, either version 3 of the
727+# License, or (at your option) any later version.
728+#
729+# This program is distributed in the hope that it will be useful,
730+# but WITHOUT ANY WARRANTY; without even the implied warranty of
731+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
732+# GNU Affero General Public License for more details.
733+#
734+# You should have received a copy of the GNU Affero General Public License
735+# along with this program. If not, see <http://www.gnu.org/licenses/>.
736+#
737+##############################################################################
738+
739+from operator import itemgetter
740+from osv import fields, osv
741+
742+class account_move_line(osv.osv):
743+ _inherit = "account.move.line"
744+
745+ def amount_to_receive(self, cr, uid, ids, name, arg={}, context=None):
746+ """
747+ Return the amount still to receive regarding all the debit orders
748+ (excepting canceled orders).
749+ This is the reverse from amount_to_pay() in
750+ account_payment/account_move_line.py
751+ """
752+ if not ids:
753+ return {}
754+ cr.execute("""SELECT ml.id,
755+ CASE WHEN ml.amount_currency > 0
756+ THEN ml.amount_currency
757+ ELSE ml.debit
758+ END -
759+ (SELECT coalesce(sum(amount_currency),0)
760+ FROM payment_line pl
761+ INNER JOIN payment_order po
762+ ON (pl.order_id = po.id)
763+ WHERE move_line_id = ml.id
764+ AND pl.storno is false
765+ AND po.state != 'cancel') AS amount
766+ FROM account_move_line ml
767+ WHERE id IN %s""", (tuple(ids),))
768+ r = dict(cr.fetchall())
769+ return r
770+
771+ def _to_receive_search(self, cr, uid, obj, name, args, context=None):
772+ """
773+ Reverse of account_payment/account_move_line.py:_to_pay_search()
774+ """
775+ if not args:
776+ return []
777+ line_obj = self.pool.get('account.move.line')
778+ query = line_obj._query_get(cr, uid, context=context)
779+ where = ' and '.join(map(lambda x: '''(SELECT
780+ CASE WHEN l.amount_currency > 0
781+ THEN l.amount_currency
782+ ELSE l.debit
783+ END - coalesce(sum(pl.amount_currency), 0)
784+ FROM payment_line pl
785+ INNER JOIN payment_order po ON (pl.order_id = po.id)
786+ WHERE move_line_id = l.id
787+ AND pl.storno is false
788+ AND po.state != 'cancel'
789+ ) %(operator)s %%s ''' % {'operator': x[1]}, args))
790+ sql_args = tuple(map(itemgetter(2), args))
791+
792+ cr.execute(('''SELECT id
793+ FROM account_move_line l
794+ WHERE account_id IN (select id
795+ FROM account_account
796+ WHERE type=%s AND active)
797+ AND reconcile_id IS null
798+ AND debit > 0
799+ AND ''' + where + ' and ' + query), ('receivable',)+sql_args )
800+
801+ res = cr.fetchall()
802+ if not res:
803+ return [('id', '=', '0')]
804+ return [('id', 'in', map(lambda x:x[0], res))]
805+
806+ def line2bank(self, cr, uid, ids, payment_type=None, context=None):
807+ '''I have to inherit this function for direct debits to fix the
808+ following issue : if the customer invoice has a value for
809+ 'partner_bank_id', then it will take this partner_bank_id
810+ in the payment line... but, on a customer invoice,
811+ the partner_bank_id is the bank account of the company,
812+ not the bank account of the customer !
813+ '''
814+ if context is None:
815+ context = {}
816+ pay_mode_obj = self.pool.get('payment.mode')
817+ pay_type_obj = self.pool.get('payment.type')
818+ if payment_type:
819+ pay_type = pay_type_obj.browse(
820+ cr, uid, payment_type, context=context)
821+ if pay_type.payment_order_type == 'debit':
822+ line2bank = {}
823+ bank_type = pay_mode_obj.suitable_bank_types(
824+ cr, uid, payment_type, context=context)
825+ for line in self.browse(cr, uid, ids, context=context):
826+ line2bank[line.id] = False
827+ if line.partner_id:
828+ for bank in line.partner_id.bank_ids:
829+ if bank.state in bank_type:
830+ line2bank[line.id] = bank.id
831+ break
832+ return line2bank
833+ return super(account_move_line, self).line2bank(
834+ cr, uid, ids, payment_type, context=context)
835+
836+ _columns = {
837+ 'amount_to_receive': fields.function(
838+ amount_to_receive, method=True,
839+ type='float', string='Amount to receive',
840+ fnct_search=_to_receive_search),
841+ }
842+account_move_line()
843
844=== added file 'account_payment_direct_debit/model/account_payment.py'
845--- account_payment_direct_debit/model/account_payment.py 1970-01-01 00:00:00 +0000
846+++ account_payment_direct_debit/model/account_payment.py 2014-06-02 14:43:40 +0000
847@@ -0,0 +1,22 @@
848+# -*- coding: utf-8 -*-
849+from osv import fields, osv
850+import netsvc
851+from tools.translate import _
852+
853+class payment_order(osv.osv):
854+ _inherit = 'payment.order'
855+
856+ def test_undo_done(self, cr, uid, ids, context=None):
857+ """
858+ Called from the workflow. Used to unset done state on
859+ payment orders that were reconciled with bank transfers
860+ which are being cancelled
861+ """
862+ for order in self.browse(cr, uid, ids, context=context):
863+ if order.type == 'receivable':
864+ for line in order.line_ids:
865+ if line.storno:
866+ return False
867+ return super(payment_order, self).test_undo_done(
868+ cr, uid, ids, context=context)
869+payment_order()
870
871=== added file 'account_payment_direct_debit/model/payment_line.py'
872--- account_payment_direct_debit/model/payment_line.py 1970-01-01 00:00:00 +0000
873+++ account_payment_direct_debit/model/payment_line.py 2014-06-02 14:43:40 +0000
874@@ -0,0 +1,153 @@
875+# -*- coding: utf-8 -*-
876+from osv import fields, osv
877+import netsvc
878+from tools.translate import _
879+
880+class payment_line(osv.osv):
881+ _inherit = 'payment.line'
882+
883+ def debit_storno(self, cr, uid, payment_line_id, amount,
884+ currency, storno_retry=True, context=None):
885+ """
886+ The processing of a storno is triggered by a debit
887+ transfer on one of the company's bank accounts.
888+ This method offers to re-reconcile the original debit
889+ payment. For this purpose, we have registered that
890+ payment move on the payment line.
891+
892+ Return the (now incomplete) reconcile id. The caller MUST
893+ re-reconcile this reconcile with the bank transfer and
894+ re-open the associated invoice.
895+
896+ :param payment_line_id: the single payment line id
897+ :param amount: the (signed) amount debited from the bank account
898+ :param currency: the bank account's currency *browse object*
899+ :param boolean storno_retry: when True, attempt to reopen the invoice, \
900+ set the invoice to 'Debit denied' otherwise.
901+ :return: an incomplete reconcile for the caller to fill
902+ :rtype: database id of an account.move.reconcile resource.
903+ """
904+
905+ move_line_obj = self.pool.get('account.move.line')
906+ reconcile_obj = self.pool.get('account.move.reconcile')
907+ line = self.browse(cr, uid, payment_line_id)
908+ reconcile_id = False
909+ if (line.transit_move_line_id and not line.storno and
910+ self.pool.get('res.currency').is_zero(
911+ cr, uid, currency, (
912+ (line.transit_move_line_id.credit or 0.0) -
913+ (line.transit_move_line_id.debit or 0.0) + amount))):
914+ # Two different cases, full and partial
915+ # Both cases differ subtly in the procedure to follow
916+ # Needs refractoring, but why is this not in the OpenERP API?
917+ # Actually, given the nature of a direct debit order and storno,
918+ # we should not need to take partial into account on the side of
919+ # the transit_move_line.
920+ if line.transit_move_line_id.reconcile_partial_id:
921+ reconcile_id = line.transit_move_line_id.reconcile_partial_id.id
922+ attribute = 'reconcile_partial_id'
923+ if len(line.transit_move_line_id.reconcile_id.line_partial_ids) == 2:
924+ # reuse the simple reconcile for the storno transfer
925+ reconcile_obj.write(
926+ cr, uid, reconcile_id, {
927+ 'line_id': [(6, 0, line.transit_move_line_id.id)],
928+ 'line_partial_ids': [(6, 0, [])],
929+ }, context=context)
930+ else:
931+ # split up the original reconcile in a partial one
932+ # and a new one for reconciling the storno transfer
933+ reconcile_obj.write(
934+ cr, uid, reconcile_id, {
935+ 'line_partial_ids': [(3, line.transit_move_line_id.id)],
936+ }, context=context)
937+ reconcile_id = reconcile_obj.create(
938+ cr, uid, {
939+ 'type': 'auto',
940+ 'line_id': [(6, 0, line.transit_move_line_id.id)],
941+ }, context=context)
942+ elif line.transit_move_line_id.reconcile_id:
943+ reconcile_id = line.transit_move_line_id.reconcile_id.id
944+ if len(line.transit_move_line_id.reconcile_id.line_id) == 2:
945+ # reuse the simple reconcile for the storno transfer
946+ reconcile_obj.write(
947+ cr, uid, reconcile_id, {
948+ 'line_id': [(6, 0, [line.transit_move_line_id.id])]
949+ }, context=context)
950+ else:
951+ # split up the original reconcile in a partial one
952+ # and a new one for reconciling the storno transfer
953+ partial_ids = [
954+ x.id for x in line.transit_move_line_id.reconcile_id.line_id
955+ if x.id != line.transit_move_line_id.id
956+ ]
957+ reconcile_obj.write(
958+ cr, uid, reconcile_id, {
959+ 'line_partial_ids': [(6, 0, partial_ids)],
960+ 'line_id': [(6, 0, [])],
961+ }, context=context)
962+ reconcile_id = reconcile_obj.create(
963+ cr, uid, {
964+ 'type': 'auto',
965+ 'line_id': [(6, 0, line.transit_move_line_id.id)],
966+ }, context=context)
967+ # mark the payment line for storno processed
968+ if reconcile_id:
969+ self.write(cr, uid, [payment_line_id],
970+ {'storno': True}, context=context)
971+ # put forth the invoice workflow
972+ if line.move_line_id.invoice:
973+ activity = (storno_retry and 'open_test'
974+ or 'invoice_debit_denied')
975+ netsvc.LocalService("workflow").trg_validate(
976+ uid, 'account.invoice', line.move_line_id.invoice.id,
977+ activity, cr)
978+ return reconcile_id
979+
980+ def get_storno_account_id(self, cr, uid, payment_line_id, amount,
981+ currency, context=None):
982+ """
983+ Check the match of the arguments, and return the account associated
984+ with the storno.
985+ Used in account_banking interactive mode
986+
987+ :param payment_line_id: the single payment line id
988+ :param amount: the (signed) amount debited from the bank account
989+ :param currency: the bank account's currency *browse object*
990+ :return: an account if there is a full match, False otherwise
991+ :rtype: database id of an account.account resource.
992+ """
993+
994+ line = self.browse(cr, uid, payment_line_id)
995+ account_id = False
996+ if (line.transit_move_line_id and not line.storno and
997+ self.pool.get('res.currency').is_zero(
998+ cr, uid, currency, (
999+ (line.transit_move_line_id.credit or 0.0) -
1000+ (line.transit_move_line_id.debit or 0.0) + amount))):
1001+ account_id = line.transit_move_line_id.account_id.id
1002+ return account_id
1003+
1004+ def debit_reconcile(self, cr, uid, payment_line_id, context=None):
1005+ """
1006+ Raise if a payment line is passed for which storno is True
1007+ """
1008+ if isinstance(payment_line_id, (list, tuple)):
1009+ payment_line_id = payment_line_id[0]
1010+ payment_line_vals = self.read(
1011+ cr, uid, payment_line_id, ['storno', 'name'], context=context)
1012+ if payment_line_vals['storno']:
1013+ raise osv.except_osv(
1014+ _('Can not reconcile'),
1015+ _('Cancelation of payment line \'%s\' has already been '
1016+ 'processed') % payment_line_vals['name'])
1017+ return super(payment_line, self).debit_reconcile(
1018+ cr, uid, payment_line_id, context=context)
1019+
1020+ _columns = {
1021+ 'storno': fields.boolean(
1022+ 'Storno',
1023+ readonly=True,
1024+ help=("If this is true, the debit order has been canceled "
1025+ "by the bank or by the customer")),
1026+ }
1027+payment_line()
1028
1029=== added file 'account_payment_direct_debit/model/payment_order_create.py'
1030--- account_payment_direct_debit/model/payment_order_create.py 1970-01-01 00:00:00 +0000
1031+++ account_payment_direct_debit/model/payment_order_create.py 2014-06-02 14:43:40 +0000
1032@@ -0,0 +1,42 @@
1033+# -*- coding: utf-8 -*-
1034+##############################################################################
1035+#
1036+# Copyright (C) 2013 Therp BV (<http://therp.nl>).
1037+#
1038+# All other contributions are (C) by their respective contributors
1039+#
1040+# All Rights Reserved
1041+#
1042+# This program is free software: you can redistribute it and/or modify
1043+# it under the terms of the GNU Affero General Public License as
1044+# published by the Free Software Foundation, either version 3 of the
1045+# License, or (at your option) any later version.
1046+#
1047+# This program is distributed in the hope that it will be useful,
1048+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1049+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1050+# GNU Affero General Public License for more details.
1051+#
1052+# You should have received a copy of the GNU Affero General Public License
1053+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1054+#
1055+##############################################################################
1056+
1057+from osv import fields, osv
1058+
1059+
1060+class payment_order_create(osv.osv_memory):
1061+ _inherit = 'payment.order.create'
1062+
1063+ def extend_payment_order_domain(
1064+ self, cr, uid, payment_order, domain, context=None):
1065+ super(payment_order_create, self).extend_payment_order_domain(
1066+ cr, uid, payment_order, domain, context=context)
1067+ if payment_order.type == 'receivable':
1068+ domain += [
1069+ ('account_id.type', '=', 'receivable'),
1070+ ('invoice.state', '!=', 'debit_denied'),
1071+ ('amount_to_receive', '>', 0),
1072+ ]
1073+ return True
1074+payment_order_create()
1075
1076=== added file 'account_payment_direct_debit/model/payment_type.py'
1077--- account_payment_direct_debit/model/payment_type.py 1970-01-01 00:00:00 +0000
1078+++ account_payment_direct_debit/model/payment_type.py 2014-06-02 14:43:40 +0000
1079@@ -0,0 +1,42 @@
1080+# -*- coding: utf-8 -*-
1081+##############################################################################
1082+#
1083+# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
1084+# (C) 2011 - 2013 Therp BV (<http://therp.nl>).
1085+#
1086+# All other contributions are (C) by their respective contributors
1087+#
1088+# All Rights Reserved
1089+#
1090+# This program is free software: you can redistribute it and/or modify
1091+# it under the terms of the GNU Affero General Public License as
1092+# published by the Free Software Foundation, either version 3 of the
1093+# License, or (at your option) any later version.
1094+#
1095+# This program is distributed in the hope that it will be useful,
1096+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1097+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1098+# GNU Affero General Public License for more details.
1099+#
1100+# You should have received a copy of the GNU Affero General Public License
1101+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1102+#
1103+##############################################################################
1104+
1105+from osv import fields, osv
1106+
1107+
1108+class payment_type(osv.osv):
1109+ _inherit = 'payment.type'
1110+
1111+ _columns = {
1112+ 'payment_order_type': fields.selection(
1113+ [('payment', 'Payment'),('debit', 'Direct debit')],
1114+ 'Payment order type', required=True,
1115+ ),
1116+ }
1117+
1118+ _defaults = {
1119+ 'payment_order_type': 'payment',
1120+ }
1121+payment_type()
1122
1123=== added directory 'account_payment_direct_debit/view'
1124=== added file 'account_payment_direct_debit/view/account_invoice.xml'
1125--- account_payment_direct_debit/view/account_invoice.xml 1970-01-01 00:00:00 +0000
1126+++ account_payment_direct_debit/view/account_invoice.xml 2014-06-02 14:43:40 +0000
1127@@ -0,0 +1,41 @@
1128+<?xml version="1.0" encoding="utf-8"?>
1129+<openerp>
1130+ <data>
1131+ <record id="invoice_form" model="ir.ui.view">
1132+ <field name="name">account.invoice.form</field>
1133+ <field name="model">account.invoice</field>
1134+ <field name="inherit_id" ref="account.invoice_form"/>
1135+ <field name="arch" type="xml">
1136+ <data>
1137+ <!--
1138+ Add new state 'debit_denied' to applicable buttons.
1139+ Maybe apply trick in fields_view_get instead, for
1140+ better compatibility with other modules?
1141+ -->
1142+ <!-- button name="invoice_open" position="attributes">
1143+ <attribute name="states">draft,proforma2,debit_denied</attribute>
1144+ </button -->
1145+ <button name="invoice_open" position="after">
1146+ <button name="invoice_debit_denied" states="paid"
1147+ string="Debit Denied" icon="gtk-cancel"/>
1148+ </button>
1149+ </data>
1150+ </field>
1151+ </record>
1152+ <record id="view_account_invoice_filter" model="ir.ui.view">
1153+ <field name="name">account.invoice.select direct debit</field>
1154+ <field name="model">account.invoice</field>
1155+ <field name="type">search</field>
1156+ <field name="inherit_id" ref="account.view_account_invoice_filter"/>
1157+ <field name="arch" type="xml">
1158+ <filter name="invoices" position="after">
1159+ <filter name="debit_denied" icon="terp-dolar_ok!"
1160+ string="Debit denied"
1161+ domain="[('state','=','debit_denied')]"
1162+ help="Show only invoices with state Debit denied"
1163+ />
1164+ </filter>
1165+ </field>
1166+ </record>
1167+ </data>
1168+</openerp>
1169
1170=== added file 'account_payment_direct_debit/view/account_payment.xml'
1171--- account_payment_direct_debit/view/account_payment.xml 1970-01-01 00:00:00 +0000
1172+++ account_payment_direct_debit/view/account_payment.xml 2014-06-02 14:43:40 +0000
1173@@ -0,0 +1,69 @@
1174+<?xml version="1.0" encoding="utf-8"?>
1175+<openerp>
1176+ <data>
1177+
1178+ <!-- distinguish between payment orders and debit orders in the menu
1179+ <record id="account_payment.action_payment_order_tree" model="ir.actions.act_window">
1180+ <field name="domain">[('type', '=', 'payable')]</field>
1181+ <field name="context">{'search_type': 'payable'}</field>
1182+ </record>
1183+
1184+ <record id="action_debit_order_tree" model="ir.actions.act_window">
1185+ <field name="name">Direct Debit Orders</field>
1186+ <field name="res_model">payment.order</field>
1187+ <field name="view_type">form</field>
1188+ <field name="view_mode">tree,form</field>
1189+ <field name="context">{'search_type': 'receivable',
1190+ 'default_type': 'receivable'}</field>
1191+ <field name="search_view_id" ref="account_payment.view_payment_order_search"/>
1192+ <field name="domain">[('type', '=', 'receivable')]</field>
1193+ <field name="help">A debit order is a debit request from your company to collect customer invoices. Here you can register all debit orders that should be done, keep track of all debit orders and mention the invoice reference and the partner the withdrawal should be done for.</field>
1194+ </record>
1195+
1196+ <menuitem action="action_debit_order_tree" id="menu_action_debit_order_form" parent="account_payment.menu_main_payment" sequence="4"/>-->
1197+
1198+ <!--<record id="view_payment_order_form" model="ir.ui.view">
1199+ <field name="name">payment.order.form</field>
1200+ <field name="model">payment.order</field>
1201+ <field name="inherit_id" ref="account_payment.view_payment_order_form"/>
1202+ <field name="priority" eval="60"/>
1203+ <field name="arch" type="xml">
1204+ <data>
1205+ <field name="reference" position="after">
1206+ <field name="payment_order_type"/>
1207+ </field>
1208+ <xpath expr="//button[@string='Select Invoices to Pay']"
1209+ position="attributes">
1210+ <attribute name="attrs">
1211+ {'invisible':['|',('state','!=','draft'),('payment_order_type', '!=', 'payment')]}
1212+ </attribute>
1213+ </xpath>
1214+ <xpath expr="//button[@string='Select Invoices to Pay']"
1215+ position="after">
1216+ <button colspan="2" name="%(account_payment.action_create_payment_order)s"
1217+ string="Select Invoices to Collect" type="action"
1218+ attrs="{'invisible':['|',('state','!=','draft'),('payment_order_type', '!=', 'debit')]}"
1219+ icon="gtk-find"
1220+ />
1221+ </xpath>
1222+ <field name="mode" position="attributes">
1223+ <attribute name="domain">[('payment_order_type', '=', payment_order_type)]</attribute>
1224+ </field>
1225+ </data>
1226+ </field>
1227+ </record>-->
1228+
1229+ <record id="view_payment_line_tree" model="ir.ui.view">
1230+ <field name="name">Payment Lines</field>
1231+ <field name="model">payment.line</field>
1232+ <field name="inherit_id" ref="account_payment.view_payment_line_tree"/>
1233+ <field eval="4" name="priority"/>
1234+ <field name="arch" type="xml">
1235+ <field name="name" position="after">
1236+ <field name="storno"/>
1237+ </field>
1238+ </field>
1239+ </record>
1240+
1241+ </data>
1242+</openerp>
1243
1244=== added file 'account_payment_direct_debit/view/payment_type.xml'
1245--- account_payment_direct_debit/view/payment_type.xml 1970-01-01 00:00:00 +0000
1246+++ account_payment_direct_debit/view/payment_type.xml 2014-06-02 14:43:40 +0000
1247@@ -0,0 +1,17 @@
1248+<?xml version="1.0" encoding="utf-8"?>
1249+<openerp>
1250+ <data>
1251+
1252+ <record model="ir.ui.view" id="view_payment_type_form_inherit">
1253+ <field name="name">view.payment.type.form</field>
1254+ <field name="model">payment.type</field>
1255+ <field name="inherit_id" ref="account_payment_extension.view_payment_type_form"/>
1256+ <field name="arch" type="xml">
1257+ <field name="suitable_bank_types" position="after">
1258+ <field name="payment_order_type"/>
1259+ </field>
1260+ </field>
1261+ </record>
1262+
1263+ </data>
1264+</openerp>
1265
1266=== added directory 'account_payment_direct_debit/workflow'
1267=== added file 'account_payment_direct_debit/workflow/account_invoice.xml'
1268--- account_payment_direct_debit/workflow/account_invoice.xml 1970-01-01 00:00:00 +0000
1269+++ account_payment_direct_debit/workflow/account_invoice.xml 2014-06-02 14:43:40 +0000
1270@@ -0,0 +1,51 @@
1271+<?xml version="1.0" encoding="utf-8"?>
1272+<openerp>
1273+ <data>
1274+ <record id="act_debit_denied" model="workflow.activity">
1275+ <field name="wkf_id" ref="account.wkf"/>
1276+ <field name="name">debit_denied</field>
1277+ <field name="action">action_debit_denied()</field>
1278+ <field name="kind">function</field>
1279+ </record>
1280+ <record id="paid_to_debit_denied" model="workflow.transition">
1281+ <!--
1282+ Set an invoice to state debit denied, either manually
1283+ or by confirming a bank statement line that constitutes
1284+ a fatal storno
1285+ -->
1286+ <field name="act_from" ref="account.act_paid"/>
1287+ <field name="act_to" ref="act_debit_denied"/>
1288+ <field name="signal">invoice_debit_denied</field>
1289+ </record>
1290+ <record id="open_test_to_debit_denied" model="workflow.transition">
1291+ <!--
1292+ A storno leads to unreconciling the move line, which
1293+ reopens the invoice. We need to allow a transition from
1294+ this state to the debit denied state if the storno is fatal.
1295+ -->
1296+ <field name="act_from" ref="account.act_open_test"/>
1297+ <field name="act_to" ref="act_debit_denied"/>
1298+ <field name="signal">invoice_debit_denied</field>
1299+ </record>
1300+ <record id="debit_denied_to_paid" model="workflow.transition">
1301+ <!--
1302+ Cancel a bank statement line that constitutes a fatal
1303+ storno
1304+ -->
1305+ <field name="act_from" ref="act_debit_denied"/>
1306+ <field name="act_to" ref="account.act_paid"/>
1307+ <field name="condition">test_undo_debit_denied()</field>
1308+ <field name="signal">undo_debit_denied</field>
1309+ </record>
1310+ <record id="debit_denied_to_open" model="workflow.transition">
1311+ <!--
1312+ Allow the user to manually reset a debit denied status
1313+ on a paid invoice (but only after manually unreconciling
1314+ the invoice)
1315+ -->
1316+ <field name="act_from" ref="act_debit_denied"/>
1317+ <field name="act_to" ref="account.act_open_test"/>
1318+ <field name="signal">open_test</field>
1319+ </record>
1320+ </data>
1321+</openerp>
1322
1323=== added directory 'account_payment_export'
1324=== renamed directory 'account_payment_export' => 'account_payment_export.moved'
1325=== added file 'account_payment_export/__init__.py'
1326--- account_payment_export/__init__.py 1970-01-01 00:00:00 +0000
1327+++ account_payment_export/__init__.py 2014-06-02 14:43:40 +0000
1328@@ -0,0 +1,1 @@
1329+import model
1330\ No newline at end of file
1331
1332=== added file 'account_payment_export/__openerp__.py'
1333--- account_payment_export/__openerp__.py 1970-01-01 00:00:00 +0000
1334+++ account_payment_export/__openerp__.py 2014-06-02 14:43:40 +0000
1335@@ -0,0 +1,62 @@
1336+# -*- coding: utf-8 -*-
1337+##############################################################################
1338+#
1339+# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
1340+# (C) 2011 - 2013 Therp BV (<http://therp.nl>).
1341+# Copyright (C) 2014 Acysos S.L. (<http://acysos.com>).
1342+# @author: Ignacio Ibeas <ignacio@acysos.com>
1343+#
1344+# All other contributions are (C) by their respective contributors
1345+#
1346+# All Rights Reserved
1347+#
1348+# This program is free software: you can redistribute it and/or modify
1349+# it under the terms of the GNU Affero General Public License as
1350+# published by the Free Software Foundation, either version 3 of the
1351+# License, or (at your option) any later version.
1352+#
1353+# This program is distributed in the hope that it will be useful,
1354+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1355+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1356+# GNU Affero General Public License for more details.
1357+#
1358+# You should have received a copy of the GNU Affero General Public License
1359+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1360+#
1361+##############################################################################
1362+
1363+{
1364+ 'name': 'Account Payment - Payments Export Infrastructure',
1365+ 'version': '0.1.164',
1366+ 'license': 'AGPL-3',
1367+ 'author': 'Account Payment community',
1368+ 'website': 'https://launchpad.net/account-payment',
1369+ 'category': 'Banking addons',
1370+ 'depends': [
1371+ 'account_payment',
1372+ 'account_payment_extension',
1373+ 'base_iban', # for manual_bank_tranfer
1374+ ],
1375+ 'data': [
1376+ 'view/account_payment.xml',
1377+ 'view/bank_payment_manual.xml',
1378+ 'view/payment_mode.xml',
1379+ 'data/payment_type.xml',
1380+ ],
1381+ 'description': '''
1382+ Infrastructure to export payment orders.
1383+
1384+ This technical module provides the base infrastructure to export
1385+ payment orders for electronic banking. It provides the following
1386+ technical features:
1387+ * a new payment.mode.type model
1388+ * payment.mode now has a mandatory type
1389+ * a better implementation of payment_mode.suitable_bank_types() based on payment.mode.type
1390+ * the "make payment" button launches a wizard depending on the payment.mode.type
1391+ * a manual payment mode type is provided as an example, with a default "do nothing" wizard
1392+
1393+ Adapted to account_payment_extension by Acysos S.L. <info@acysos.com>
1394+ ''',
1395+ 'auto_install': True,
1396+ 'installable': True,
1397+}
1398
1399=== added directory 'account_payment_export/data'
1400=== added file 'account_payment_export/data/payment_type.xml'
1401--- account_payment_export/data/payment_type.xml 1970-01-01 00:00:00 +0000
1402+++ account_payment_export/data/payment_type.xml 2014-06-02 14:43:40 +0000
1403@@ -0,0 +1,14 @@
1404+<?xml version="1.0" encoding="utf-8"?>
1405+<openerp>
1406+ <data>
1407+ <!-- Add manual bank transfer as default payment option -->
1408+ <record model="payment.type" id="manual_bank_tranfer">
1409+ <field name="name">Manual Bank Transfer</field>
1410+ <field name="code">BANKMAN</field>
1411+ <field name="suitable_bank_types"
1412+ eval="[(6,0,[ref('base.bank_normal'),ref('base_iban.bank_iban'),])]" />
1413+ <field name="ir_model_id"
1414+ ref="model_payment_manual"/>
1415+ </record>
1416+ </data>
1417+</openerp>
1418
1419=== added directory 'account_payment_export/i18n'
1420=== added file 'account_payment_export/i18n/account_banking_payment_export.pot'
1421--- account_payment_export/i18n/account_banking_payment_export.pot 1970-01-01 00:00:00 +0000
1422+++ account_payment_export/i18n/account_banking_payment_export.pot 2014-06-02 14:43:40 +0000
1423@@ -0,0 +1,145 @@
1424+# Translation of OpenERP Server.
1425+# This file contains the translation of the following modules:
1426+# * account_banking_payment_export
1427+#
1428+msgid ""
1429+msgstr ""
1430+"Project-Id-Version: OpenERP Server 7.0\n"
1431+"Report-Msgid-Bugs-To: \n"
1432+"POT-Creation-Date: 2013-10-25 15:58+0000\n"
1433+"PO-Revision-Date: 2013-10-25 15:58+0000\n"
1434+"Last-Translator: <>\n"
1435+"Language-Team: \n"
1436+"MIME-Version: 1.0\n"
1437+"Content-Type: text/plain; charset=UTF-8\n"
1438+"Content-Transfer-Encoding: \n"
1439+"Plural-Forms: \n"
1440+
1441+#. module: account_banking_payment_export
1442+#: help:payment.mode.type,name:0
1443+msgid "Payment Type"
1444+msgstr ""
1445+
1446+#. module: account_banking_payment_export
1447+#: model:ir.model,name:account_banking_payment_export.model_payment_order
1448+msgid "Payment Order"
1449+msgstr ""
1450+
1451+#. module: account_banking_payment_export
1452+#: view:payment.manual:0
1453+msgid "Please execute payment order manually, and click OK when succesfully sent."
1454+msgstr ""
1455+
1456+#. module: account_banking_payment_export
1457+#: model:ir.model,name:account_banking_payment_export.model_payment_mode
1458+msgid "Payment Mode"
1459+msgstr ""
1460+
1461+#. module: account_banking_payment_export
1462+#: code:addons/account_banking_payment_export/model/account_payment.py:69
1463+#, python-format
1464+msgid "You can only combine payment orders of the same type"
1465+msgstr ""
1466+
1467+#. module: account_banking_payment_export
1468+#: model:ir.model,name:account_banking_payment_export.model_payment_mode_type
1469+msgid "Payment Mode Type"
1470+msgstr ""
1471+
1472+#. module: account_banking_payment_export
1473+#: model:ir.model,name:account_banking_payment_export.model_account_move_line
1474+msgid "Journal Items"
1475+msgstr ""
1476+
1477+#. module: account_banking_payment_export
1478+#: model:ir.model,name:account_banking_payment_export.model_payment_manual
1479+msgid "Send payment order(s) manually"
1480+msgstr ""
1481+
1482+#. module: account_banking_payment_export
1483+#: field:payment.mode.type,name:0
1484+msgid "Name"
1485+msgstr ""
1486+
1487+#. module: account_banking_payment_export
1488+#: help:payment.mode.type,ir_model_id:0
1489+msgid "Select the Payment Wizard for payments of this type. Leave empty for manual processing"
1490+msgstr ""
1491+
1492+#. module: account_banking_payment_export
1493+#: view:payment.manual:0
1494+msgid "Manual payment"
1495+msgstr ""
1496+
1497+#. module: account_banking_payment_export
1498+#: field:payment.manual,payment_order_ids:0
1499+msgid "Payment orders"
1500+msgstr ""
1501+
1502+#. module: account_banking_payment_export
1503+#: code:addons/account_banking_payment_export/model/account_payment.py:52
1504+#, python-format
1505+msgid "Payment Order Export"
1506+msgstr ""
1507+
1508+#. module: account_banking_payment_export
1509+#: help:payment.mode,type:0
1510+msgid "Select the Payment Type for the Payment Mode."
1511+msgstr ""
1512+
1513+#. module: account_banking_payment_export
1514+#: view:payment.order:0
1515+msgid "launch_wizard"
1516+msgstr ""
1517+
1518+#. module: account_banking_payment_export
1519+#: help:payment.mode.type,code:0
1520+msgid "Specify the Code for Payment Type"
1521+msgstr ""
1522+
1523+#. module: account_banking_payment_export
1524+#: model:ir.model,name:account_banking_payment_export.model_payment_order_create
1525+msgid "payment.order.create"
1526+msgstr ""
1527+
1528+#. module: account_banking_payment_export
1529+#: code:addons/account_banking_payment_export/model/account_payment.py:68
1530+#, python-format
1531+msgid "Error"
1532+msgstr ""
1533+
1534+#. module: account_banking_payment_export
1535+#: field:payment.mode.type,ir_model_id:0
1536+msgid "Payment wizard"
1537+msgstr ""
1538+
1539+#. module: account_banking_payment_export
1540+#: field:payment.mode,type:0
1541+msgid "Payment type"
1542+msgstr ""
1543+
1544+#. module: account_banking_payment_export
1545+#: field:payment.mode.type,code:0
1546+msgid "Code"
1547+msgstr ""
1548+
1549+#. module: account_banking_payment_export
1550+#: view:payment.manual:0
1551+msgid "OK"
1552+msgstr ""
1553+
1554+#. module: account_banking_payment_export
1555+#: view:payment.mode.type:0
1556+msgid "Payment mode"
1557+msgstr ""
1558+
1559+#. module: account_banking_payment_export
1560+#: view:payment.manual:0
1561+msgid "Cancel"
1562+msgstr ""
1563+
1564+#. module: account_banking_payment_export
1565+#: field:payment.mode.type,suitable_bank_types:0
1566+msgid "Suitable bank types"
1567+msgstr ""
1568+
1569
1570=== added file 'account_payment_export/i18n/es.po'
1571--- account_payment_export/i18n/es.po 1970-01-01 00:00:00 +0000
1572+++ account_payment_export/i18n/es.po 2014-06-02 14:43:40 +0000
1573@@ -0,0 +1,110 @@
1574+# Translation of OpenERP Server.
1575+# This file contains the translation of the following modules:
1576+# * account_payment_export
1577+#
1578+msgid ""
1579+msgstr ""
1580+"Project-Id-Version: OpenERP Server 7.0-20131224-002412\n"
1581+"Report-Msgid-Bugs-To: \n"
1582+"POT-Creation-Date: 2014-01-25 11:26+0000\n"
1583+"PO-Revision-Date: 2014-01-25 11:26+0000\n"
1584+"Last-Translator: <>\n"
1585+"Language-Team: \n"
1586+"MIME-Version: 1.0\n"
1587+"Content-Type: text/plain; charset=UTF-8\n"
1588+"Content-Transfer-Encoding: \n"
1589+"Plural-Forms: \n"
1590+
1591+#. module: account_payment_export
1592+#: field:payment.type,ir_model_id:0
1593+msgid "Payment wizard"
1594+msgstr "Asistente de pago"
1595+
1596+#. module: account_payment_export
1597+#: model:ir.model,name:account_payment_export.model_payment_type
1598+msgid "Payment type"
1599+msgstr "Tipo de pago"
1600+
1601+#. module: account_payment_export
1602+#: model:ir.model,name:account_payment_export.model_payment_order
1603+msgid "Payment Order"
1604+msgstr "Orden de pago"
1605+
1606+#. module: account_payment_export
1607+#: view:payment.manual:0
1608+msgid "OK"
1609+msgstr "OK"
1610+
1611+#. module: account_payment_export
1612+#: model:ir.model,name:account_payment_export.model_payment_manual
1613+msgid "Send payment order(s) manually"
1614+msgstr "Enviar la orden de pago manualmente"
1615+
1616+#. module: account_payment_export
1617+#: help:payment.type,ir_model_id:0
1618+msgid "Select the Payment Wizard for payments of this type. Leave empty for manual processing"
1619+msgstr "Seleccione el asistente de pago para los pagos de estet tipo. Deje en blanco para proceso manual"
1620+
1621+#. module: account_payment_export
1622+#: model:ir.model,name:account_payment_export.model_payment_mode
1623+msgid "Payment Mode"
1624+msgstr "Modo de pago"
1625+
1626+#. module: account_payment_export
1627+#: view:payment.manual:0
1628+msgid "Manual payment"
1629+msgstr "Pago manual"
1630+
1631+#. module: account_payment_export
1632+#: field:payment.manual,payment_order_ids:0
1633+msgid "Payment orders"
1634+msgstr "Ordenes de pago"
1635+
1636+#. module: account_payment_export
1637+#: code:addons/account_payment_export/model/account_payment.py:52
1638+#, python-format
1639+msgid "Payment Order Export"
1640+msgstr "Exportar orden de pago"
1641+
1642+#. module: account_payment_export
1643+#: model:ir.model,name:account_payment_export.model_account_move_line
1644+msgid "Journal Items"
1645+msgstr "Apuntes contables"
1646+
1647+#. module: account_payment_export
1648+#: view:payment.order:0
1649+msgid "launch_wizard"
1650+msgstr "lanzar_asistente"
1651+
1652+#. module: account_payment_export
1653+#: view:payment.manual:0
1654+msgid "Please execute payment order manually, and click OK when succesfully sent."
1655+msgstr "Por favor, ejecute la orden de pago manualmente, y pulse OK cuando sea enviada con exito."
1656+
1657+#. module: account_payment_export
1658+#: model:ir.model,name:account_payment_export.model_payment_order_create
1659+msgid "payment.order.create"
1660+msgstr "pago.orden.crear"
1661+
1662+#. module: account_payment_export
1663+#: code:addons/account_payment_export/model/account_payment.py:68
1664+#, python-format
1665+msgid "Error"
1666+msgstr "Error"
1667+
1668+#. module: account_payment_export
1669+#: view:payment.manual:0
1670+msgid "Cancel"
1671+msgstr "Cancelar"
1672+
1673+#. module: account_payment_export
1674+#: model:payment.type,name:account_payment_export.manual_bank_tranfer
1675+msgid "Manual Bank Transfer"
1676+msgstr "Tranferencia bancaria manual"
1677+
1678+#. module: account_payment_export
1679+#: code:addons/account_payment_export/model/account_payment.py:69
1680+#, python-format
1681+msgid "You can only combine payment orders of the same type"
1682+msgstr "Solo puede combinar ordenes de pago del mismo tipo"
1683+
1684
1685=== added file 'account_payment_export/i18n/nl.po'
1686--- account_payment_export/i18n/nl.po 1970-01-01 00:00:00 +0000
1687+++ account_payment_export/i18n/nl.po 2014-06-02 14:43:40 +0000
1688@@ -0,0 +1,151 @@
1689+# Translation of OpenERP Server.
1690+# This file contains the translation of the following modules:
1691+# * account_banking_payment_export
1692+#
1693+msgid ""
1694+msgstr ""
1695+"Project-Id-Version: OpenERP Server 7.0\n"
1696+"Report-Msgid-Bugs-To: \n"
1697+"POT-Creation-Date: 2013-10-25 15:58+0000\n"
1698+"PO-Revision-Date: 2013-12-03 11:49+0000\n"
1699+"Last-Translator: Erwin van der Ploeg (BAS Solutions) <Unknown>\n"
1700+"Language-Team: \n"
1701+"MIME-Version: 1.0\n"
1702+"Content-Type: text/plain; charset=UTF-8\n"
1703+"Content-Transfer-Encoding: 8bit\n"
1704+"X-Launchpad-Export-Date: 2013-12-04 05:59+0000\n"
1705+"X-Generator: Launchpad (build 16861)\n"
1706+
1707+#. module: account_banking_payment_export
1708+#: help:payment.mode.type,name:0
1709+msgid "Payment Type"
1710+msgstr "Betaalwijze"
1711+
1712+#. module: account_banking_payment_export
1713+#: model:ir.model,name:account_banking_payment_export.model_payment_order
1714+msgid "Payment Order"
1715+msgstr "Betalingsopdracht"
1716+
1717+#. module: account_banking_payment_export
1718+#: view:payment.manual:0
1719+msgid ""
1720+"Please execute payment order manually, and click OK when succesfully sent."
1721+msgstr ""
1722+"Voer de betaalopdracht handmatig uit en klik OK, wanneer succesvol verzonden."
1723+
1724+#. module: account_banking_payment_export
1725+#: model:ir.model,name:account_banking_payment_export.model_payment_mode
1726+msgid "Payment Mode"
1727+msgstr "Betaalwijze"
1728+
1729+#. module: account_banking_payment_export
1730+#: code:addons/account_banking_payment_export/model/account_payment.py:69
1731+#, python-format
1732+msgid "You can only combine payment orders of the same type"
1733+msgstr "U kunt alleen betalingsopdrachten van dezelfde soort combineren"
1734+
1735+#. module: account_banking_payment_export
1736+#: model:ir.model,name:account_banking_payment_export.model_payment_mode_type
1737+msgid "Payment Mode Type"
1738+msgstr "Betaalwijze soort"
1739+
1740+#. module: account_banking_payment_export
1741+#: model:ir.model,name:account_banking_payment_export.model_account_move_line
1742+msgid "Journal Items"
1743+msgstr "Boekingen"
1744+
1745+#. module: account_banking_payment_export
1746+#: model:ir.model,name:account_banking_payment_export.model_payment_manual
1747+msgid "Send payment order(s) manually"
1748+msgstr "Verzend betaalopdrachten handmatig"
1749+
1750+#. module: account_banking_payment_export
1751+#: field:payment.mode.type,name:0
1752+msgid "Name"
1753+msgstr "Naam"
1754+
1755+#. module: account_banking_payment_export
1756+#: help:payment.mode.type,ir_model_id:0
1757+msgid ""
1758+"Select the Payment Wizard for payments of this type. Leave empty for manual "
1759+"processing"
1760+msgstr ""
1761+"Selecteer de wizard voor het verwerken van betalingen van dit type. Laat "
1762+"leeg voor handmatige verwerking."
1763+
1764+#. module: account_banking_payment_export
1765+#: view:payment.manual:0
1766+msgid "Manual payment"
1767+msgstr "Handmatige betaling"
1768+
1769+#. module: account_banking_payment_export
1770+#: field:payment.manual,payment_order_ids:0
1771+msgid "Payment orders"
1772+msgstr "Betaalopdrachten"
1773+
1774+#. module: account_banking_payment_export
1775+#: code:addons/account_banking_payment_export/model/account_payment.py:52
1776+#, python-format
1777+msgid "Payment Order Export"
1778+msgstr "Betaalopdracht export"
1779+
1780+#. module: account_banking_payment_export
1781+#: help:payment.mode,type:0
1782+msgid "Select the Payment Type for the Payment Mode."
1783+msgstr "Selecteer het type van de betaalmodus."
1784+
1785+#. module: account_banking_payment_export
1786+#: view:payment.order:0
1787+msgid "launch_wizard"
1788+msgstr "launch_wizard"
1789+
1790+#. module: account_banking_payment_export
1791+#: help:payment.mode.type,code:0
1792+msgid "Specify the Code for Payment Type"
1793+msgstr "Geef de code op voor het betaaltype"
1794+
1795+#. module: account_banking_payment_export
1796+#: model:ir.model,name:account_banking_payment_export.model_payment_order_create
1797+msgid "payment.order.create"
1798+msgstr "payment.order.create"
1799+
1800+#. module: account_banking_payment_export
1801+#: code:addons/account_banking_payment_export/model/account_payment.py:68
1802+#, python-format
1803+msgid "Error"
1804+msgstr "Fout"
1805+
1806+#. module: account_banking_payment_export
1807+#: field:payment.mode.type,ir_model_id:0
1808+msgid "Payment wizard"
1809+msgstr "Betaalwizard"
1810+
1811+#. module: account_banking_payment_export
1812+#: field:payment.mode,type:0
1813+msgid "Payment type"
1814+msgstr "Betaaltype"
1815+
1816+#. module: account_banking_payment_export
1817+#: field:payment.mode.type,code:0
1818+msgid "Code"
1819+msgstr "Code"
1820+
1821+#. module: account_banking_payment_export
1822+#: view:payment.manual:0
1823+msgid "OK"
1824+msgstr "OK"
1825+
1826+#. module: account_banking_payment_export
1827+#: view:payment.mode.type:0
1828+msgid "Payment mode"
1829+msgstr "Betaalwijze"
1830+
1831+#. module: account_banking_payment_export
1832+#: view:payment.manual:0
1833+msgid "Cancel"
1834+msgstr "Annuleren"
1835+
1836+#. module: account_banking_payment_export
1837+#: field:payment.mode.type,suitable_bank_types:0
1838+msgid "Suitable bank types"
1839+msgstr "Geschikte banktypen"
1840
1841=== added directory 'account_payment_export/model'
1842=== added file 'account_payment_export/model/__init__.py'
1843--- account_payment_export/model/__init__.py 1970-01-01 00:00:00 +0000
1844+++ account_payment_export/model/__init__.py 2014-06-02 14:43:40 +0000
1845@@ -0,0 +1,4 @@
1846+import account_payment
1847+import bank_payment_manual
1848+import payment_mode
1849+import payment_order_create
1850\ No newline at end of file
1851
1852=== added file 'account_payment_export/model/account_payment.py'
1853--- account_payment_export/model/account_payment.py 1970-01-01 00:00:00 +0000
1854+++ account_payment_export/model/account_payment.py 2014-06-02 14:43:40 +0000
1855@@ -0,0 +1,88 @@
1856+# -*- coding: utf-8 -*-
1857+##############################################################################
1858+#
1859+# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
1860+# (C) 2011 - 2013 Therp BV (<http://therp.nl>).
1861+#
1862+# All other contributions are (C) by their respective contributors
1863+#
1864+# All Rights Reserved
1865+#
1866+# This program is free software: you can redistribute it and/or modify
1867+# it under the terms of the GNU Affero General Public License as
1868+# published by the Free Software Foundation, either version 3 of the
1869+# License, or (at your option) any later version.
1870+#
1871+# This program is distributed in the hope that it will be useful,
1872+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1873+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1874+# GNU Affero General Public License for more details.
1875+#
1876+# You should have received a copy of the GNU Affero General Public License
1877+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1878+#
1879+##############################################################################
1880+
1881+from osv import fields, osv
1882+from tools.translate import _
1883+import netsvc
1884+
1885+
1886+class payment_order(osv.osv):
1887+ _inherit = 'payment.order'
1888+
1889+ def launch_wizard(self, cr, uid, ids, context=None):
1890+ """
1891+ Search for a wizard to launch according to the type.
1892+ If type is manual. just confirm the order.
1893+ Previously (pre-v6) in account_payment/wizard/wizard_pay.py
1894+ """
1895+ if context == None:
1896+ context = {}
1897+ result = {}
1898+ orders = self.browse(cr, uid, ids, context)
1899+ order = orders[0]
1900+ # check if a wizard is defined for the first order
1901+ if order.mode.type and order.mode.type.ir_model_id:
1902+ context['active_ids'] = ids
1903+ wizard_model = order.mode.type.ir_model_id.model
1904+ wizard_obj = self.pool.get(wizard_model)
1905+ wizard_id = wizard_obj.create(cr, uid, {}, context)
1906+ result = {
1907+ 'name': wizard_obj._description or _('Payment Order Export'),
1908+ 'view_type': 'form',
1909+ 'view_mode': 'form',
1910+ 'res_model': wizard_model,
1911+ 'domain': [],
1912+ 'context': context,
1913+ 'type': 'ir.actions.act_window',
1914+ 'target': 'new',
1915+ 'res_id': wizard_id,
1916+ 'nodestroy': True,
1917+ }
1918+ else:
1919+ # should all be manual orders without type or wizard model
1920+ for order in orders[1:]:
1921+ if order.mode.type and order.mode.type.ir_model_id:
1922+ raise osv.except_osv(
1923+ _('Error'),
1924+ _('You can only combine payment orders of the same type')
1925+ )
1926+ # process manual payments
1927+ return self.set_done(cr, uid, ids, context)
1928+ return result
1929+
1930+payment_order()
1931+
1932+class payment_type(osv.osv):
1933+ _inherit = 'payment.type'
1934+
1935+ _columns = {
1936+ 'ir_model_id': fields.many2one(
1937+ 'ir.model', 'Payment wizard',
1938+ help=('Select the Payment Wizard for payments of this type. '
1939+ 'Leave empty for manual processing'),
1940+ domain=[('osv_memory', '=', True)],
1941+ ),
1942+ }
1943+payment_type()
1944
1945=== added file 'account_payment_export/model/bank_payment_manual.py'
1946--- account_payment_export/model/bank_payment_manual.py 1970-01-01 00:00:00 +0000
1947+++ account_payment_export/model/bank_payment_manual.py 2014-06-02 14:43:40 +0000
1948@@ -0,0 +1,60 @@
1949+# -*- coding: utf-8 -*-
1950+##############################################################################
1951+#
1952+# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
1953+# (C) 2011 - 2013 Therp BV (<http://therp.nl>).
1954+#
1955+# All other contributions are (C) by their respective contributors
1956+#
1957+# All Rights Reserved
1958+#
1959+# This program is free software: you can redistribute it and/or modify
1960+# it under the terms of the GNU Affero General Public License as
1961+# published by the Free Software Foundation, either version 3 of the
1962+# License, or (at your option) any later version.
1963+#
1964+# This program is distributed in the hope that it will be useful,
1965+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1966+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1967+# GNU Affero General Public License for more details.
1968+#
1969+# You should have received a copy of the GNU Affero General Public License
1970+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1971+#
1972+##############################################################################
1973+
1974+'''
1975+This module contains a single "wizard" for confirming manual
1976+bank transfers.
1977+'''
1978+
1979+from osv import fields, osv
1980+import netsvc
1981+
1982+
1983+class payment_manual(osv.osv_memory):
1984+ _name = 'payment.manual'
1985+ _description = 'Send payment order(s) manually'
1986+
1987+ _columns = {
1988+ 'payment_order_ids': fields.many2many('payment.order',
1989+ 'wiz_manual_payorders_rel', 'wizard_id', 'payment_order_id',
1990+ 'Payment orders', readonly=True),
1991+ }
1992+
1993+ def create(self, cr, uid, vals, context=None):
1994+ payment_order_ids = context.get('active_ids', [])
1995+ vals.update({
1996+ 'payment_order_ids': [[6, 0, payment_order_ids]],
1997+ })
1998+ return super(payment_manual, self).create(cr, uid,
1999+ vals, context=context)
2000+
2001+ def button_ok(self, cr, uid, ids, context=None):
2002+ wf_service = netsvc.LocalService('workflow')
2003+ for wiz in self.browse(cr, uid, ids, context=context):
2004+ for order_id in wiz.payment_order_ids:
2005+ wf_service.trg_validate(
2006+ uid, 'payment.order', order_id.id, 'done', cr)
2007+ return {'type': 'ir.actions.act_window_close'}
2008+payment_manual()
2009
2010=== added file 'account_payment_export/model/payment_mode.py'
2011--- account_payment_export/model/payment_mode.py 1970-01-01 00:00:00 +0000
2012+++ account_payment_export/model/payment_mode.py 2014-06-02 14:43:40 +0000
2013@@ -0,0 +1,45 @@
2014+# -*- coding: utf-8 -*-
2015+##############################################################################
2016+#
2017+# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
2018+# (C) 2011 - 2013 Therp BV (<http://therp.nl>).
2019+#
2020+# All other contributions are (C) by their respective contributors
2021+#
2022+# All Rights Reserved
2023+#
2024+# This program is free software: you can redistribute it and/or modify
2025+# it under the terms of the GNU Affero General Public License as
2026+# published by the Free Software Foundation, either version 3 of the
2027+# License, or (at your option) any later version.
2028+#
2029+# This program is distributed in the hope that it will be useful,
2030+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2031+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2032+# GNU Affero General Public License for more details.
2033+#
2034+# You should have received a copy of the GNU Affero General Public License
2035+# along with this program. If not, see <http://www.gnu.org/licenses/>.
2036+#
2037+##############################################################################
2038+
2039+from osv import fields, osv
2040+
2041+
2042+class payment_mode(osv.osv):
2043+ ''' Restoring the payment type from version 5,
2044+ used to select the export wizard (if any) '''
2045+ _inherit = "payment.mode"
2046+
2047+ def suitable_bank_types(self, cr, uid, ids, payment_mode_id=None, context=None):
2048+ """ Reinstates functional code for suitable bank type filtering.
2049+ Current code in account_payment is disfunctional.
2050+ """
2051+ res = []
2052+ payment_mode = self.browse(
2053+ cr, uid, payment_mode_id, context)
2054+ if (payment_mode and payment_mode.type and
2055+ payment_mode.type.suitable_bank_types):
2056+ res = [t.code for t in payment_mode.type.suitable_bank_types]
2057+ return res
2058+payment_mode()
2059
2060=== added file 'account_payment_export/model/payment_order_create.py'
2061--- account_payment_export/model/payment_order_create.py 1970-01-01 00:00:00 +0000
2062+++ account_payment_export/model/payment_order_create.py 2014-06-02 14:43:40 +0000
2063@@ -0,0 +1,60 @@
2064+# -*- coding: utf-8 -*-
2065+##############################################################################
2066+#
2067+# Copyright (C) 2013 ACSONE SA/NV (<http://acsone.eu>);.
2068+#
2069+# All other contributions are (C) by their respective contributors
2070+#
2071+# All Rights Reserved
2072+#
2073+# This program is free software: you can redistribute it and/or modify
2074+# it under the terms of the GNU Affero General Public License as
2075+# published by the Free Software Foundation, either version 3 of the
2076+# License, or (at your option) any later version.
2077+#
2078+# This program is distributed in the hope that it will be useful,
2079+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2080+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2081+# GNU Affero General Public License for more details.
2082+#
2083+# You should have received a copy of the GNU Affero General Public License
2084+# along with this program. If not, see <http://www.gnu.org/licenses/>.
2085+#
2086+##############################################################################
2087+
2088+from osv import fields, osv
2089+
2090+
2091+class payment_order_create(osv.osv_memory):
2092+ _inherit = 'payment.order.create'
2093+
2094+ def create_payment(self, cr, uid, ids, context=None):
2095+ '''This method adapts the core create_payment()
2096+ to pass the payment mode to line2bank() through the context,
2097+ so it is in turn propagated to suitable_bank_types().
2098+
2099+ This is necessary because the core does not propagate the payment mode to line2bank: t = None in
2100+ http://bazaar.launchpad.net/~openerp/openobject-addons/7.0/view/head:/account_payment/wizard/account_payment_order.py#L72
2101+
2102+ Hack idea courtesy Stefan Rijnhart.
2103+ '''
2104+ if context is None:
2105+ context = {}
2106+ order_obj = self.pool.get('payment.order')
2107+ payment = order_obj.browse(cr, uid, context['active_id'], context=context)
2108+ context['_fix_payment_mode_id'] = payment.mode.id
2109+ return super(payment_order_create, self).create_payment(cr, uid, ids, context=context)
2110+
2111+payment_order_create()
2112+
2113+class account_move_line(osv.osv):
2114+ _inherit = 'account.move.line'
2115+
2116+ def line2bank(self, cr, uid, ids, payment_mode_id=None, context=None):
2117+ '''Obtain payment_type from context, see create_payment above'''
2118+ if context is None:
2119+ context = {}
2120+ payment_mode_id = payment_mode_id or context.get('_fix_payment_mode_id')
2121+ return super(account_move_line, self).line2bank(cr, uid, ids, payment_mode_id, context=context)
2122+
2123+account_move_line()
2124
2125=== added directory 'account_payment_export/view'
2126=== added file 'account_payment_export/view/account_payment.xml'
2127--- account_payment_export/view/account_payment.xml 1970-01-01 00:00:00 +0000
2128+++ account_payment_export/view/account_payment.xml 2014-06-02 14:43:40 +0000
2129@@ -0,0 +1,22 @@
2130+<?xml version="1.0" encoding="utf-8"?>
2131+<openerp>
2132+ <data>
2133+ <!-- restore wizard functionality when making payments
2134+ -->
2135+
2136+ <record id="view_banking_payment_order_form_1" model="ir.ui.view">
2137+ <field name="name">account.payment.order.form.banking-1</field>
2138+ <field name="inherit_id" ref="account_payment.view_payment_order_form" />
2139+ <field name="model">payment.order</field>
2140+ <field name="arch" type="xml">
2141+ <data>
2142+ <xpath expr="//button[@string='Make Payments']"
2143+ position="attributes">
2144+ <attribute name="name">launch_wizard</attribute>
2145+ </xpath>
2146+ </data>
2147+ </field>
2148+ </record>
2149+
2150+ </data>
2151+</openerp>
2152
2153=== added file 'account_payment_export/view/bank_payment_manual.xml'
2154--- account_payment_export/view/bank_payment_manual.xml 1970-01-01 00:00:00 +0000
2155+++ account_payment_export/view/bank_payment_manual.xml 2014-06-02 14:43:40 +0000
2156@@ -0,0 +1,16 @@
2157+<?xml version="1.0" encoding="utf-8"?>
2158+<openerp>
2159+ <data>
2160+ <record id="view_payment_manual_form" model="ir.ui.view">
2161+ <field name="name">Form for manual payment wizard</field>
2162+ <field name="model">payment.manual</field>
2163+ <field name="arch" type="xml">
2164+ <form string="Manual payment">
2165+ <label string="Please execute payment order manually, and click OK when succesfully sent." colspan="4"/>
2166+ <button name="button_ok" type="object" string="OK"/>
2167+ <button special="cancel" string="Cancel"/>
2168+ </form>
2169+ </field>
2170+ </record>
2171+ </data>
2172+</openerp>
2173
2174=== added file 'account_payment_export/view/payment_mode.xml'
2175--- account_payment_export/view/payment_mode.xml 1970-01-01 00:00:00 +0000
2176+++ account_payment_export/view/payment_mode.xml 2014-06-02 14:43:40 +0000
2177@@ -0,0 +1,20 @@
2178+<?xml version="1.0" encoding="utf-8"?>
2179+<openerp>
2180+ <data>
2181+
2182+ <!--
2183+ Add the payment mode type and transfer settings
2184+ -->
2185+ <record id="view_payment_mode_tree_inherit" model="ir.ui.view">
2186+ <field name="name">payment.mode.tree.inherit</field>
2187+ <field name="model">payment.mode</field>
2188+ <field name="inherit_id" ref="account_payment.view_payment_mode_tree"/>
2189+ <field name="arch" type="xml">
2190+ <field name="company_id" position="after">
2191+ <field name="type"/>
2192+ </field>
2193+ </field>
2194+ </record>
2195+
2196+ </data>
2197+</openerp>
2198
2199=== added directory 'account_payment_pain_base'
2200=== renamed directory 'account_payment_pain_base' => 'account_payment_pain_base.moved'
2201=== added file 'account_payment_pain_base/.directory'
2202--- account_payment_pain_base/.directory 1970-01-01 00:00:00 +0000
2203+++ account_payment_pain_base/.directory 2014-06-02 14:43:40 +0000
2204@@ -0,0 +1,6 @@
2205+[Dolphin]
2206+SortOrder=1
2207+SortRole=date
2208+Timestamp=2014,1,23,11,48,11
2209+Version=3
2210+ViewMode=1
2211
2212=== added file 'account_payment_pain_base/__init__.py'
2213--- account_payment_pain_base/__init__.py 1970-01-01 00:00:00 +0000
2214+++ account_payment_pain_base/__init__.py 2014-06-02 14:43:40 +0000
2215@@ -0,0 +1,26 @@
2216+# -*- encoding: utf-8 -*-
2217+##############################################################################
2218+#
2219+# PAIN Base module for OpenERP
2220+# Copyright (C) 2013 Akretion (http://www.akretion.com)
2221+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
2222+#
2223+# This program is free software: you can redistribute it and/or modify
2224+# it under the terms of the GNU Affero General Public License as
2225+# published by the Free Software Foundation, either version 3 of the
2226+# License, or (at your option) any later version.
2227+#
2228+# This program is distributed in the hope that it will be useful,
2229+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2230+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2231+# GNU Affero General Public License for more details.
2232+#
2233+# You should have received a copy of the GNU Affero General Public License
2234+# along with this program. If not, see <http://www.gnu.org/licenses/>.
2235+#
2236+##############################################################################
2237+
2238+import payment_line
2239+import payment_mode
2240+import company
2241+import banking_export_pain
2242
2243=== added file 'account_payment_pain_base/__openerp__.py'
2244--- account_payment_pain_base/__openerp__.py 1970-01-01 00:00:00 +0000
2245+++ account_payment_pain_base/__openerp__.py 2014-06-02 14:43:40 +0000
2246@@ -0,0 +1,55 @@
2247+##############################################################################
2248+#
2249+# PAIN base module for OpenERP
2250+# Copyright (C) 2013 Akretion (http://www.akretion.com)
2251+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
2252+# Copyright (C) 2014 Acysos S.L. (<http://acysos.com>).
2253+# @author: Ignacio Ibeas <ignacio@acysos.com>
2254+#
2255+# This program is free software: you can redistribute it and/or modify
2256+# it under the terms of the GNU Affero General Public License as
2257+# published by the Free Software Foundation, either version 3 of the
2258+# License, or (at your option) any later version.
2259+#
2260+# This program is distributed in the hope that it will be useful,
2261+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2262+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2263+# GNU Affero General Public License for more details.
2264+#
2265+# You should have received a copy of the GNU Affero General Public License
2266+# along with this program. If not, see <http://www.gnu.org/licenses/>.
2267+#
2268+##############################################################################
2269+{
2270+ 'name': 'Account Payment PAIN Base Module',
2271+ 'summary': 'Base module for PAIN file generation',
2272+ 'version': '0.1',
2273+ 'license': 'AGPL-3',
2274+ 'author': 'Akretion, Noviat, Acysos',
2275+ 'website': 'http://openerp-community-association.org/',
2276+ 'category': 'Hidden',
2277+ 'depends': ['account_payment_extension','account_payment_export'],
2278+# 'external_dependencies': {
2279+# 'python': ['unidecode', 'lxml'],
2280+# },
2281+ 'data': [
2282+ 'payment_line_view.xml',
2283+ 'payment_mode_view.xml',
2284+ 'company_view.xml',
2285+ ],
2286+ 'description': '''
2287+Base module for PAIN file generation
2288+====================================
2289+
2290+This module contains fields and functions that are used by the module for SEPA Credit Transfer (account_banking_sepa_credit_transfer) and SEPA Direct Debit (account_banking_sepa_direct_debit). This module doesn't provide any functionnality by itself.
2291+
2292+This module is part of the account payment addons: https://launchpad.net/account-payment
2293+
2294+For windows server copy the 'unidecode' folder of https://pypi.python.org/pypi/Unidecode/ to the OpenERP Server Folder.
2295+
2296+This module was started during the Akretion-Noviat code sprint of November 21st 2013 in Epiais les Louvres (France).
2297+Adapted to account_payment_extension by Acysos S.L. <info@acysos.com>
2298+ ''',
2299+ 'active': False,
2300+ 'installable': True,
2301+}
2302
2303=== added file 'account_payment_pain_base/banking_export_pain.py'
2304--- account_payment_pain_base/banking_export_pain.py 1970-01-01 00:00:00 +0000
2305+++ account_payment_pain_base/banking_export_pain.py 2014-06-02 14:43:40 +0000
2306@@ -0,0 +1,441 @@
2307+# -*- encoding: utf-8 -*-
2308+##############################################################################
2309+#
2310+# PAIN Base module for OpenERP
2311+# Copyright (C) 2013 Akretion (http://www.akretion.com)
2312+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
2313+#
2314+# This program is free software: you can redistribute it and/or modify
2315+# it under the terms of the GNU Affero General Public License as
2316+# published by the Free Software Foundation, either version 3 of the
2317+# License, or (at your option) any later version.
2318+#
2319+# This program is distributed in the hope that it will be useful,
2320+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2321+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2322+# GNU Affero General Public License for more details.
2323+#
2324+# You should have received a copy of the GNU Affero General Public License
2325+# along with this program. If not, see <http://www.gnu.org/licenses/>.
2326+#
2327+##############################################################################
2328+
2329+from osv import osv, fields
2330+from tools.translate import _
2331+from tools.safe_eval import safe_eval
2332+from datetime import datetime
2333+from unidecode import unidecode
2334+from lxml import etree
2335+import tools
2336+import logging
2337+import base64
2338+
2339+logger = logging.getLogger(__name__)
2340+
2341+
2342+class banking_export_pain(osv.osv_memory):
2343+ _name = 'banking.export.pain'
2344+
2345+ def _validate_iban(self, cr, uid, iban, bank_id, context=None):
2346+ '''if IBAN is valid, returns IBAN
2347+ if IBAN is NOT valid, raises an error message'''
2348+ partner_bank_obj = self.pool.get('res.partner.bank')
2349+ if partner_bank_obj.check_iban(cr, uid, [bank_id], context=context):
2350+ return iban.replace(' ', '')
2351+ else:
2352+ raise osv.except_osv(
2353+ _('Error:'), _("This IBAN is not valid : %s") % iban)
2354+
2355+ def _prepare_field(
2356+ self, cr, uid, field_name, field_value, eval_ctx, max_size=0,
2357+ gen_args=None, context=None):
2358+ '''This function is designed to be inherited !'''
2359+ if gen_args is None:
2360+ gen_args = {}
2361+ assert isinstance(eval_ctx, dict), 'eval_ctx must contain a dict'
2362+ try:
2363+ value = safe_eval(field_value, eval_ctx)
2364+ # SEPA uses XML ; XML = UTF-8 ; UTF-8 = support for all characters
2365+ # But we are dealing with banks...
2366+ # and many banks don't want non-ASCCI characters !
2367+ # cf section 1.4 "Character set" of the SEPA Credit Transfer
2368+ # Scheme Customer-to-bank guidelines
2369+ if gen_args.get('convert_to_ascii'):
2370+ value = unidecode(value)
2371+ unallowed_ascii_chars = [
2372+ '"', '#', '$', '%', '&', '*', ';', '<', '>', '=', '@',
2373+ '[', ']', '^', '_', '`', '{', '}', '|', '~', '\\', '!']
2374+ for unallowed_ascii_char in unallowed_ascii_chars:
2375+ value = value.replace(unallowed_ascii_char, '-')
2376+ except:
2377+ line = eval_ctx.get('line')
2378+ if line:
2379+ raise osv.except_osv(
2380+ _('Error:'),
2381+ _("Cannot compute the '%s' of the Payment Line with "
2382+ "reference '%s'.")
2383+ % (field_name, line.name))
2384+ else:
2385+ raise osv.except_osv(
2386+ _('Error:'),
2387+ _("Cannot compute the '%s'.") % field_name)
2388+ if not isinstance(value, (str, unicode)):
2389+ raise osv.except_osv(
2390+ _('Field type error:'),
2391+ _("The type of the field '%s' is %s. It should be a string "
2392+ "or unicode.")
2393+ % (field_name, type(value)))
2394+ if not value:
2395+ raise osv.except_osv(
2396+ _('Error:'),
2397+ _("The '%s' is empty or 0. It should have a non-null value.")
2398+ % field_name)
2399+ if max_size and len(value) > max_size:
2400+ value = value[0:max_size]
2401+ return value
2402+
2403+ def _prepare_export_sepa(
2404+ self, cr, uid, total_amount, transactions_count, xml_string,
2405+ gen_args, context=None):
2406+ return {
2407+ 'batch_booking': gen_args['sepa_export'].batch_booking,
2408+ 'charge_bearer': gen_args['sepa_export'].charge_bearer,
2409+ 'total_amount': total_amount,
2410+ 'nb_transactions': transactions_count,
2411+ 'file': base64.encodestring(xml_string),
2412+ 'payment_order_ids': [(
2413+ 6, 0, [x.id for x in gen_args['sepa_export'].payment_order_ids]
2414+ )],
2415+ }
2416+
2417+ def _validate_xml(self, cr, uid, xml_string, gen_args, context=None):
2418+ xsd_etree_obj = etree.parse(
2419+ tools.file_open(gen_args['pain_xsd_file']))
2420+ official_pain_schema = etree.XMLSchema(xsd_etree_obj)
2421+
2422+ try:
2423+ root_to_validate = etree.fromstring(xml_string)
2424+ official_pain_schema.assertValid(root_to_validate)
2425+ except Exception, e:
2426+ logger.warning(
2427+ "The XML file is invalid against the XML Schema Definition")
2428+ logger.warning(xml_string)
2429+ logger.warning(e)
2430+ raise osv.except_osv(
2431+ _('Error:'),
2432+ _("The generated XML file is not valid against the official "
2433+ "XML Schema Definition. The generated XML file and the "
2434+ "full error have been written in the server logs. Here "
2435+ "is the error, which may give you an idea on the cause "
2436+ "of the problem : %s")
2437+ % str(e))
2438+ return True
2439+
2440+ def finalize_sepa_file_creation(
2441+ self, cr, uid, ids, xml_root, total_amount, transactions_count,
2442+ gen_args, context=None):
2443+ xml_string = etree.tostring(
2444+ xml_root, pretty_print=True, encoding='UTF-8',
2445+ xml_declaration=True)
2446+ logger.debug(
2447+ "Generated SEPA XML file in format %s below"
2448+ % gen_args['pain_flavor'])
2449+ logger.debug(xml_string)
2450+ self._validate_xml(cr, uid, xml_string, gen_args, context=context)
2451+
2452+ file_id = gen_args['file_obj'].create(
2453+ cr, uid, self._prepare_export_sepa(
2454+ cr, uid, total_amount, transactions_count,
2455+ xml_string, gen_args, context=context),
2456+ context=context)
2457+
2458+ self.write(
2459+ cr, uid, ids, {
2460+ 'file_id': file_id,
2461+ 'state': 'finish',
2462+ }, context=context)
2463+
2464+ action = {
2465+ 'name': 'SEPA File',
2466+ 'type': 'ir.actions.act_window',
2467+ 'view_type': 'form',
2468+ 'view_mode': 'form,tree',
2469+ 'res_model': self._name,
2470+ 'res_id': ids[0],
2471+ 'target': 'new',
2472+ }
2473+ return action
2474+
2475+ def generate_group_header_block(
2476+ self, cr, uid, parent_node, gen_args, context=None):
2477+ group_header_1_0 = etree.SubElement(parent_node, 'GrpHdr')
2478+ message_identification_1_1 = etree.SubElement(
2479+ group_header_1_0, 'MsgId')
2480+ message_identification_1_1.text = self._prepare_field(
2481+ cr, uid, 'Message Identification',
2482+ 'sepa_export.payment_order_ids[0].reference',
2483+ {'sepa_export': gen_args['sepa_export']}, 35,
2484+ gen_args=gen_args, context=context)
2485+ creation_date_time_1_2 = etree.SubElement(group_header_1_0, 'CreDtTm')
2486+ creation_date_time_1_2.text = datetime.strftime(
2487+ datetime.today(), '%Y-%m-%dT%H:%M:%S')
2488+ if gen_args.get('pain_flavor') == 'pain.001.001.02':
2489+ # batch_booking is in "Group header" with pain.001.001.02
2490+ # and in "Payment info" in pain.001.001.03/04
2491+ batch_booking = etree.SubElement(group_header_1_0, 'BtchBookg')
2492+ batch_booking.text = \
2493+ str(gen_args['sepa_export'].batch_booking).lower()
2494+ nb_of_transactions_1_6 = etree.SubElement(
2495+ group_header_1_0, 'NbOfTxs')
2496+ control_sum_1_7 = etree.SubElement(group_header_1_0, 'CtrlSum')
2497+ # Grpg removed in pain.001.001.03
2498+ if gen_args.get('pain_flavor') == 'pain.001.001.02':
2499+ grouping = etree.SubElement(group_header_1_0, 'Grpg')
2500+ grouping.text = 'GRPD'
2501+ self.generate_initiating_party_block(
2502+ cr, uid, group_header_1_0, gen_args,
2503+ context=context)
2504+ return group_header_1_0, nb_of_transactions_1_6, control_sum_1_7
2505+
2506+ def generate_start_payment_info_block(
2507+ self, cr, uid, parent_node, payment_info_ident,
2508+ priority, local_instrument, sequence_type, requested_date,
2509+ eval_ctx, gen_args, context=None):
2510+ payment_info_2_0 = etree.SubElement(parent_node, 'PmtInf')
2511+ payment_info_identification_2_1 = etree.SubElement(
2512+ payment_info_2_0, 'PmtInfId')
2513+ payment_info_identification_2_1.text = self._prepare_field(
2514+ cr, uid, 'Payment Information Identification',
2515+ payment_info_ident, eval_ctx, 35,
2516+ gen_args=gen_args, context=context)
2517+ payment_method_2_2 = etree.SubElement(payment_info_2_0, 'PmtMtd')
2518+ payment_method_2_2.text = gen_args['payment_method']
2519+ if gen_args.get('pain_flavor') != 'pain.001.001.02':
2520+ batch_booking_2_3 = etree.SubElement(payment_info_2_0, 'BtchBookg')
2521+ batch_booking_2_3.text = \
2522+ str(gen_args['sepa_export'].batch_booking).lower()
2523+ # The "SEPA Customer-to-bank
2524+ # Implementation guidelines" for SCT and SDD says that control sum
2525+ # and nb_of_transactions should be present
2526+ # at both "group header" level and "payment info" level
2527+ nb_of_transactions_2_4 = etree.SubElement(
2528+ payment_info_2_0, 'NbOfTxs')
2529+ control_sum_2_5 = etree.SubElement(payment_info_2_0, 'CtrlSum')
2530+ payment_type_info_2_6 = etree.SubElement(
2531+ payment_info_2_0, 'PmtTpInf')
2532+ if priority:
2533+ instruction_priority_2_7 = etree.SubElement(
2534+ payment_type_info_2_6, 'InstrPrty')
2535+ instruction_priority_2_7.text = priority
2536+ service_level_2_8 = etree.SubElement(
2537+ payment_type_info_2_6, 'SvcLvl')
2538+ service_level_code_2_9 = etree.SubElement(service_level_2_8, 'Cd')
2539+ service_level_code_2_9.text = 'SEPA'
2540+ if local_instrument:
2541+ local_instrument_2_11 = etree.SubElement(
2542+ payment_type_info_2_6, 'LclInstrm')
2543+ local_instr_code_2_12 = etree.SubElement(
2544+ local_instrument_2_11, 'Cd')
2545+ local_instr_code_2_12.text = local_instrument
2546+ if sequence_type:
2547+ sequence_type_2_14 = etree.SubElement(
2548+ payment_type_info_2_6, 'SeqTp')
2549+ sequence_type_2_14.text = sequence_type
2550+
2551+ if gen_args['payment_method'] == 'DD':
2552+ request_date_tag = 'ReqdColltnDt'
2553+ else:
2554+ request_date_tag = 'ReqdExctnDt'
2555+ requested_date_2_17 = etree.SubElement(
2556+ payment_info_2_0, request_date_tag)
2557+ requested_date_2_17.text = requested_date
2558+ return payment_info_2_0, nb_of_transactions_2_4, control_sum_2_5
2559+
2560+ def generate_initiating_party_block(
2561+ self, cr, uid, parent_node, gen_args, context=None):
2562+ my_company_name = self._prepare_field(
2563+ cr, uid, 'Company Name',
2564+ 'sepa_export.payment_order_ids[0].mode.bank_id.partner_id.name',
2565+ {'sepa_export': gen_args['sepa_export']},
2566+ gen_args.get('name_maxsize'), gen_args=gen_args, context=context)
2567+ initiating_party_1_8 = etree.SubElement(parent_node, 'InitgPty')
2568+ initiating_party_name = etree.SubElement(initiating_party_1_8, 'Nm')
2569+ initiating_party_name.text = my_company_name
2570+ initiating_party_identifier = self.pool.get('res.company').\
2571+ _get_initiating_party_identifier(
2572+ cr, uid,
2573+ gen_args['sepa_export'].payment_order_ids[0].mode.type.company_id.id,
2574+ context=context)
2575+ initiating_party_issuer = gen_args['sepa_export'].\
2576+ payment_order_ids[0].mode.type.company_id.initiating_party_issuer
2577+ if initiating_party_identifier and initiating_party_issuer:
2578+ iniparty_id = etree.SubElement(initiating_party_1_8, 'Id')
2579+ iniparty_org_id = etree.SubElement(iniparty_id, 'OrgId')
2580+ iniparty_org_other = etree.SubElement(iniparty_org_id, 'Othr')
2581+ iniparty_org_other_id = etree.SubElement(iniparty_org_other, 'Id')
2582+ iniparty_org_other_id.text = initiating_party_identifier
2583+ iniparty_org_other_issuer = etree.SubElement(
2584+ iniparty_org_other, 'Issr')
2585+ iniparty_org_other_issuer.text = initiating_party_issuer
2586+ return True
2587+
2588+ def generate_party_agent(
2589+ self, cr, uid, parent_node, party_type, party_type_label,
2590+ order, party_name, iban, bic, eval_ctx, gen_args, context=None):
2591+ '''Generate the piece of the XML file corresponding to BIC
2592+ This code is mutualized between TRF and DD'''
2593+ assert order in ('B', 'C'), "Order can be 'B' or 'C'"
2594+ try:
2595+ bic = self._prepare_field(
2596+ cr, uid, '%s BIC' % party_type_label, bic, eval_ctx,
2597+ gen_args=gen_args, context=context)
2598+ party_agent = etree.SubElement(parent_node, '%sAgt' % party_type)
2599+ party_agent_institution = etree.SubElement(
2600+ party_agent, 'FinInstnId')
2601+ party_agent_bic = etree.SubElement(
2602+ party_agent_institution, gen_args.get('bic_xml_tag'))
2603+ party_agent_bic.text = bic
2604+ except except_orm:
2605+ if order == 'C':
2606+ if iban[0:2] != gen_args['initiating_party_country_code']:
2607+ raise osv.except_osv(
2608+ _('Error:'),
2609+ _("The bank account with IBAN '%s' of partner '%s' "
2610+ "must have an associated BIC because it is a "
2611+ "cross-border SEPA operation.")
2612+ % (iban, party_name))
2613+ if order == 'B' or (
2614+ order == 'C' and gen_args['payment_method'] == 'DD'):
2615+ party_agent = etree.SubElement(
2616+ parent_node, '%sAgt' % party_type)
2617+ party_agent_institution = etree.SubElement(
2618+ party_agent, 'FinInstnId')
2619+ party_agent_other = etree.SubElement(
2620+ party_agent_institution, 'Othr')
2621+ party_agent_other_identification = etree.SubElement(
2622+ party_agent_other, 'Id')
2623+ party_agent_other_identification.text = 'NOTPROVIDED'
2624+ # for Credit Transfers, in the 'C' block, if BIC is not provided,
2625+ # we should not put the 'Creditor Agent' block at all,
2626+ # as per the guidelines of the EPC
2627+ return True
2628+
2629+ def generate_party_block(
2630+ self, cr, uid, parent_node, party_type, order, name, iban, bic,
2631+ bank_id, eval_ctx, gen_args, context=None):
2632+ '''Generate the piece of the XML file corresponding to Name+IBAN+BIC
2633+ This code is mutualized between TRF and DD'''
2634+ assert order in ('B', 'C'), "Order can be 'B' or 'C'"
2635+ if party_type == 'Cdtr':
2636+ party_type_label = 'Creditor'
2637+ elif party_type == 'Dbtr':
2638+ party_type_label = 'Debtor'
2639+ party_name = self._prepare_field(
2640+ cr, uid, '%s Name' % party_type_label, name, eval_ctx,
2641+ gen_args.get('name_maxsize'),
2642+ gen_args=gen_args, context=context)
2643+ piban = self._prepare_field(
2644+ cr, uid, '%s IBAN' % party_type_label, iban, eval_ctx,
2645+ gen_args=gen_args,
2646+ context=context)
2647+ viban = self._validate_iban(cr, uid, piban, bank_id, context=context)
2648+ # At C level, the order is : BIC, Name, IBAN
2649+ # At B level, the order is : Name, IBAN, BIC
2650+ if order == 'B':
2651+ gen_args['initiating_party_country_code'] = viban[0:2]
2652+ elif order == 'C':
2653+ self.generate_party_agent(
2654+ cr, uid, parent_node, party_type, party_type_label,
2655+ order, party_name, viban, bic,
2656+ eval_ctx, gen_args, context=context)
2657+ party = etree.SubElement(parent_node, party_type)
2658+ party_nm = etree.SubElement(party, 'Nm')
2659+ party_nm.text = party_name
2660+ party_account = etree.SubElement(
2661+ parent_node, '%sAcct' % party_type)
2662+ party_account_id = etree.SubElement(party_account, 'Id')
2663+ party_account_iban = etree.SubElement(
2664+ party_account_id, 'IBAN')
2665+ party_account_iban.text = viban
2666+ if order == 'B':
2667+ self.generate_party_agent(
2668+ cr, uid, parent_node, party_type, party_type_label,
2669+ order, party_name, viban, bic,
2670+ eval_ctx, gen_args, context=context)
2671+ return True
2672+
2673+ def generate_remittance_info_block(
2674+ self, cr, uid, parent_node, line, gen_args, context=None):
2675+
2676+ remittance_info_2_91 = etree.SubElement(
2677+ parent_node, 'RmtInf')
2678+ if line.state == 'normal':
2679+ remittance_info_unstructured_2_99 = etree.SubElement(
2680+ remittance_info_2_91, 'Ustrd')
2681+ remittance_info_unstructured_2_99.text = \
2682+ self._prepare_field(
2683+ cr, uid, 'Remittance Unstructured Information',
2684+ 'line.communication', {'line': line}, 140,
2685+ gen_args=gen_args,
2686+ context=context)
2687+ else:
2688+ if not line.struct_communication_type:
2689+ raise osv.except_osv(
2690+ _('Error:'),
2691+ _("Missing 'Structured Communication Type' on payment "
2692+ "line with reference '%s'.")
2693+ % (line.name))
2694+ remittance_info_structured_2_100 = etree.SubElement(
2695+ remittance_info_2_91, 'Strd')
2696+ creditor_ref_information_2_120 = etree.SubElement(
2697+ remittance_info_structured_2_100, 'CdtrRefInf')
2698+ if gen_args.get('pain_flavor') == 'pain.001.001.02':
2699+ creditor_ref_info_type_2_121 = etree.SubElement(
2700+ creditor_ref_information_2_120, 'CdtrRefTp')
2701+ creditor_ref_info_type_code_2_123 = etree.SubElement(
2702+ creditor_ref_info_type_2_121, 'Cd')
2703+ creditor_ref_info_type_issuer_2_125 = etree.SubElement(
2704+ creditor_ref_info_type_2_121, 'Issr')
2705+ creditor_reference_2_126 = etree.SubElement(
2706+ creditor_ref_information_2_120, 'CdtrRef')
2707+ else:
2708+ creditor_ref_info_type_2_121 = etree.SubElement(
2709+ creditor_ref_information_2_120, 'Tp')
2710+ creditor_ref_info_type_or_2_122 = etree.SubElement(
2711+ creditor_ref_info_type_2_121, 'CdOrPrtry')
2712+ creditor_ref_info_type_code_2_123 = etree.SubElement(
2713+ creditor_ref_info_type_or_2_122, 'Cd')
2714+ creditor_ref_info_type_issuer_2_125 = etree.SubElement(
2715+ creditor_ref_info_type_2_121, 'Issr')
2716+ creditor_reference_2_126 = etree.SubElement(
2717+ creditor_ref_information_2_120, 'Ref')
2718+
2719+ creditor_ref_info_type_code_2_123.text = 'SCOR'
2720+ creditor_ref_info_type_issuer_2_125.text = \
2721+ line.struct_communication_type
2722+ creditor_reference_2_126.text = \
2723+ self._prepare_field(
2724+ cr, uid, 'Creditor Structured Reference',
2725+ 'line.communication', {'line': line}, 35,
2726+ gen_args=gen_args,
2727+ context=context)
2728+ return True
2729+
2730+ def generate_creditor_scheme_identification(
2731+ self, cr, uid, parent_node, identification, identification_label,
2732+ eval_ctx, scheme_name_proprietary, gen_args, context=None):
2733+ csi_id = etree.SubElement(
2734+ parent_node, 'Id')
2735+ csi_privateid = csi_id = etree.SubElement(csi_id, 'PrvtId')
2736+ csi_other = etree.SubElement(csi_privateid, 'Othr')
2737+ csi_other_id = etree.SubElement(csi_other, 'Id')
2738+ csi_other_id.text = self._prepare_field(
2739+ cr, uid, identification_label, identification, eval_ctx,
2740+ gen_args=gen_args, context=context)
2741+ csi_scheme_name = etree.SubElement(csi_other, 'SchmeNm')
2742+ csi_scheme_name_proprietary = etree.SubElement(
2743+ csi_scheme_name, 'Prtry')
2744+ csi_scheme_name_proprietary.text = scheme_name_proprietary
2745+ return True
2746+
2747+banking_export_pain()
2748
2749=== added file 'account_payment_pain_base/company.py'
2750--- account_payment_pain_base/company.py 1970-01-01 00:00:00 +0000
2751+++ account_payment_pain_base/company.py 2014-06-02 14:43:40 +0000
2752@@ -0,0 +1,82 @@
2753+# -*- encoding: utf-8 -*-
2754+##############################################################################
2755+#
2756+# PAIN Base module for OpenERP
2757+# Copyright (C) 2013 Akretion (http://www.akretion.com)
2758+# Copyright (C) 2013 Noviat (http://www.noviat.com)
2759+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
2760+# @author: Luc de Meyer (Noviat)
2761+#
2762+# This program is free software: you can redistribute it and/or modify
2763+# it under the terms of the GNU Affero General Public License as
2764+# published by the Free Software Foundation, either version 3 of the
2765+# License, or (at your option) any later version.
2766+#
2767+# This program is distributed in the hope that it will be useful,
2768+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2769+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2770+# GNU Affero General Public License for more details.
2771+#
2772+# You should have received a copy of the GNU Affero General Public License
2773+# along with this program. If not, see <http://www.gnu.org/licenses/>.
2774+#
2775+##############################################################################
2776+
2777+from osv import osv, fields
2778+
2779+
2780+class res_company(osv.osv):
2781+ _inherit = 'res.company'
2782+
2783+ _columns = {
2784+ 'initiating_party_issuer': fields.char(
2785+ 'Initiating Party Issuer', size=35,
2786+ help="This will be used as the 'Initiating Party Issuer' in the "
2787+ "PAIN files generated by OpenERP."),
2788+ }
2789+
2790+ def _get_initiating_party_identifier(
2791+ self, cr, uid, company_id, context=None):
2792+ '''The code here may be different from one country to another.
2793+ If you need to add support for an additionnal country, you can
2794+ contribute your code here or inherit this function in the
2795+ localization modules for your country'''
2796+ assert isinstance(company_id, int), 'Only one company ID'
2797+ company = self.browse(cr, uid, company_id, context=context)
2798+ company_vat = company.partner_id.vat
2799+ party_identifier = False
2800+ if company_vat and company_vat[0:2].upper() in ['BE']:
2801+ party_identifier = company_vat[2:].replace(' ', '')
2802+ if company_vat and company_vat[0:2].upper() in ['ES']:
2803+ party_identifier = company.sepa_creditor_identifier
2804+ return party_identifier
2805+
2806+ def _initiating_party_issuer_default(self, cr, uid, context=None):
2807+ '''If you need to add support for an additionnal country, you can
2808+ add an entry in the dict "party_issuer_per_country" here
2809+ or inherit this function in the localization modules for
2810+ your country'''
2811+ initiating_party_issuer = ''
2812+ # If your country require the 'Initiating Party Issuer', you should
2813+ # contribute the entry for your country in the dict below
2814+ party_issuer_per_country = {
2815+ 'BE': 'KBO-BCE', # KBO-BCE = the registry of companies in Belgium
2816+ }
2817+ company_id = self._company_default_get(
2818+ cr, uid, 'res.company', context=context)
2819+ if company_id:
2820+ company = self.browse(cr, uid, company_id, context=context)
2821+ country_code = company.partner_id.country.code
2822+ initiating_party_issuer = party_issuer_per_country.get(
2823+ country_code, '')
2824+ return initiating_party_issuer
2825+
2826+ def _initiating_party_issuer_def(self, cr, uid, context=None):
2827+ return self._initiating_party_issuer_default(
2828+ cr, uid, context=context)
2829+
2830+ _defaults = {
2831+ 'initiating_party_issuer': _initiating_party_issuer_def,
2832+ }
2833+
2834+res_company()
2835
2836=== added file 'account_payment_pain_base/company_view.xml'
2837--- account_payment_pain_base/company_view.xml 1970-01-01 00:00:00 +0000
2838+++ account_payment_pain_base/company_view.xml 2014-06-02 14:43:40 +0000
2839@@ -0,0 +1,25 @@
2840+<?xml version="1.0" encoding="utf-8"?>
2841+<!--
2842+ Copyright (C) 2013 Akretion (http://www.akretion.com)
2843+ @author: Alexis de Lattre <alexis.delattre@akretion.com>
2844+ The licence is in the file __openerp__.py
2845+-->
2846+<openerp>
2847+<data>
2848+
2849+<record id="view_company_form" model="ir.ui.view">
2850+ <field name="name">pain.group.on.res.company.form</field>
2851+ <field name="model">res.company</field>
2852+ <field name="inherit_id" ref="base.view_company_form"/>
2853+ <field name="arch" type="xml">
2854+ <page string="Configuration" position="inside">
2855+ <group colspan="4">
2856+ <separator string="Payment Initiation" colspan="4" />
2857+ <field name="initiating_party_issuer"/>
2858+ </group>
2859+ </page>
2860+ </field>
2861+</record>
2862+
2863+</data>
2864+</openerp>
2865
2866=== added directory 'account_payment_pain_base/i18n'
2867=== added file 'account_payment_pain_base/i18n/account_banking_pain_base.pot'
2868--- account_payment_pain_base/i18n/account_banking_pain_base.pot 1970-01-01 00:00:00 +0000
2869+++ account_payment_pain_base/i18n/account_banking_pain_base.pot 2014-06-02 14:43:40 +0000
2870@@ -0,0 +1,146 @@
2871+# Translation of OpenERP Server.
2872+# This file contains the translation of the following modules:
2873+# * account_banking_pain_base
2874+#
2875+msgid ""
2876+msgstr ""
2877+"Project-Id-Version: OpenERP Server 7.0\n"
2878+"Report-Msgid-Bugs-To: \n"
2879+"POT-Creation-Date: 2013-12-23 21:26+0000\n"
2880+"PO-Revision-Date: 2013-12-23 21:26+0000\n"
2881+"Last-Translator: <>\n"
2882+"Language-Team: \n"
2883+"MIME-Version: 1.0\n"
2884+"Content-Type: text/plain; charset=UTF-8\n"
2885+"Content-Transfer-Encoding: \n"
2886+"Plural-Forms: \n"
2887+
2888+#. module: account_banking_pain_base
2889+#: field:res.company,initiating_party_issuer:0
2890+msgid "Initiating Party Issuer"
2891+msgstr ""
2892+
2893+#. module: account_banking_pain_base
2894+#: code:addons/account_banking_pain_base/banking_export_pain.py:122
2895+#, python-format
2896+msgid "The generated XML file is not valid against the official XML Schema Definition. The generated XML file and the full error have been written in the server logs. Here is the error, which may give you an idea on the cause of the problem : %s"
2897+msgstr ""
2898+
2899+#. module: account_banking_pain_base
2900+#: field:payment.line,priority:0
2901+msgid "Priority"
2902+msgstr ""
2903+
2904+#. module: account_banking_pain_base
2905+#: model:ir.model,name:account_banking_pain_base.model_payment_line
2906+msgid "Payment Line"
2907+msgstr ""
2908+
2909+#. module: account_banking_pain_base
2910+#: model:ir.model,name:account_banking_pain_base.model_payment_mode
2911+msgid "Payment Mode"
2912+msgstr ""
2913+
2914+#. module: account_banking_pain_base
2915+#: help:res.company,initiating_party_issuer:0
2916+msgid "This will be used as the 'Initiating Party Issuer' in the PAIN files generated by OpenERP."
2917+msgstr ""
2918+
2919+#. module: account_banking_pain_base
2920+#: code:addons/account_banking_pain_base/banking_export_pain.py:351
2921+#, python-format
2922+msgid "Missing 'Structured Communication Type' on payment line with reference '%s'."
2923+msgstr ""
2924+
2925+#. module: account_banking_pain_base
2926+#: selection:payment.line,priority:0
2927+msgid "Normal"
2928+msgstr ""
2929+
2930+#. module: account_banking_pain_base
2931+#: code:addons/account_banking_pain_base/banking_export_pain.py:70
2932+#, python-format
2933+msgid "Cannot compute the '%s' of the Payment Line with reference '%s'."
2934+msgstr ""
2935+
2936+#. module: account_banking_pain_base
2937+#: code:addons/account_banking_pain_base/banking_export_pain.py:77
2938+#, python-format
2939+msgid "Cannot compute the '%s'."
2940+msgstr ""
2941+
2942+#. module: account_banking_pain_base
2943+#: code:addons/account_banking_pain_base/banking_export_pain.py:81
2944+#, python-format
2945+msgid "The type of the field '%s' is %s. It should be a string or unicode."
2946+msgstr ""
2947+
2948+#. module: account_banking_pain_base
2949+#: code:addons/account_banking_pain_base/banking_export_pain.py:47
2950+#: code:addons/account_banking_pain_base/banking_export_pain.py:69
2951+#: code:addons/account_banking_pain_base/banking_export_pain.py:76
2952+#: code:addons/account_banking_pain_base/banking_export_pain.py:86
2953+#: code:addons/account_banking_pain_base/banking_export_pain.py:121
2954+#: code:addons/account_banking_pain_base/banking_export_pain.py:350
2955+#, python-format
2956+msgid "Error:"
2957+msgstr ""
2958+
2959+#. module: account_banking_pain_base
2960+#: model:ir.model,name:account_banking_pain_base.model_res_company
2961+msgid "Companies"
2962+msgstr ""
2963+
2964+#. module: account_banking_pain_base
2965+#: code:addons/account_banking_pain_base/banking_export_pain.py:47
2966+#, python-format
2967+msgid "This IBAN is not valid : %s"
2968+msgstr ""
2969+
2970+#. module: account_banking_pain_base
2971+#: code:addons/account_banking_pain_base/banking_export_pain.py:80
2972+#, python-format
2973+msgid "Field type error:"
2974+msgstr ""
2975+
2976+#. module: account_banking_pain_base
2977+#: field:payment.line,struct_communication_type:0
2978+msgid "Structured Communication Type"
2979+msgstr ""
2980+
2981+#. module: account_banking_pain_base
2982+#: code:addons/account_banking_pain_base/banking_export_pain.py:87
2983+#, python-format
2984+msgid "The '%s' is empty or 0. It should have a non-null value."
2985+msgstr ""
2986+
2987+#. module: account_banking_pain_base
2988+#: model:ir.model,name:account_banking_pain_base.model_banking_export_pain
2989+msgid "banking.export.pain"
2990+msgstr ""
2991+
2992+#. module: account_banking_pain_base
2993+#: help:payment.mode,convert_to_ascii:0
2994+msgid "If active, OpenERP will convert each accented caracter to the corresponding unaccented caracter, so that only ASCII caracters are used in the generated PAIN file."
2995+msgstr ""
2996+
2997+#. module: account_banking_pain_base
2998+#: help:payment.line,priority:0
2999+msgid "This field will be used as the 'Instruction Priority' in the generated PAIN file."
3000+msgstr ""
3001+
3002+#. module: account_banking_pain_base
3003+#: view:res.company:0
3004+msgid "Payment Initiation"
3005+msgstr ""
3006+
3007+#. module: account_banking_pain_base
3008+#: selection:payment.line,priority:0
3009+msgid "High"
3010+msgstr ""
3011+
3012+#. module: account_banking_pain_base
3013+#: field:payment.mode,convert_to_ascii:0
3014+msgid "Convert to ASCII"
3015+msgstr ""
3016+
3017
3018=== added file 'account_payment_pain_base/i18n/es.po'
3019--- account_payment_pain_base/i18n/es.po 1970-01-01 00:00:00 +0000
3020+++ account_payment_pain_base/i18n/es.po 2014-06-02 14:43:40 +0000
3021@@ -0,0 +1,153 @@
3022+# Translation of OpenERP Server.
3023+# This file contains the translation of the following modules:
3024+# * account_payment_pain_base
3025+#
3026+msgid ""
3027+msgstr ""
3028+"Project-Id-Version: OpenERP Server 7.0-20131224-002412\n"
3029+"Report-Msgid-Bugs-To: \n"
3030+"POT-Creation-Date: 2014-01-25 11:28+0000\n"
3031+"PO-Revision-Date: 2014-01-25 11:28+0000\n"
3032+"Last-Translator: <>\n"
3033+"Language-Team: \n"
3034+"MIME-Version: 1.0\n"
3035+"Content-Type: text/plain; charset=UTF-8\n"
3036+"Content-Transfer-Encoding: \n"
3037+"Plural-Forms: \n"
3038+
3039+#. module: account_payment_pain_base
3040+#: field:res.company,initiating_party_issuer:0
3041+msgid "Initiating Party Issuer"
3042+msgstr "Initiating Party Issuer"
3043+
3044+#. module: account_payment_pain_base
3045+#: code:addons/account_payment_pain_base/banking_export_pain.py:126
3046+#, python-format
3047+msgid "The generated XML file is not valid against the official XML Schema Definition. The generated XML file and the full error have been written in the server logs. Here is the error, which may give you an idea on the cause of the problem : %s"
3048+msgstr "El archivo XML generado no es válido según el esquema oficial. El archivo XML generado y el error han sido escrito en el log del servidor. Aquí esta el error, que le puede indicar una idea del problema : %s"
3049+
3050+#. module: account_payment_pain_base
3051+#: field:payment.line,priority:0
3052+msgid "Priority"
3053+msgstr "Prioridad"
3054+
3055+#. module: account_payment_pain_base
3056+#: model:ir.model,name:account_payment_pain_base.model_payment_line
3057+msgid "Payment Line"
3058+msgstr "Línea de pago"
3059+
3060+#. module: account_payment_pain_base
3061+#: model:ir.model,name:account_payment_pain_base.model_payment_mode
3062+msgid "Payment Mode"
3063+msgstr "Modo de pago"
3064+
3065+#. module: account_payment_pain_base
3066+#: code:addons/account_payment_pain_base/banking_export_pain.py:303
3067+#, python-format
3068+msgid "The bank account with IBAN '%s' of partner '%s' must have an associated BIC because it is a cross-border SEPA operation."
3069+msgstr "La cuenta bancaria con IBAN '%s' de la empresa '%s' debe tener un BIC asociado porque es una operación SEPA transfronteriza."
3070+
3071+#. module: account_payment_pain_base
3072+#: help:res.company,initiating_party_issuer:0
3073+msgid "This will be used as the 'Initiating Party Issuer' in the PAIN files generated by OpenERP."
3074+msgstr "This will be used as the 'Initiating Party Issuer' in the PAIN files generated by OpenERP."
3075+
3076+#. module: account_payment_pain_base
3077+#: selection:payment.line,priority:0
3078+msgid "Normal"
3079+msgstr "Normal"
3080+
3081+#. module: account_payment_pain_base
3082+#: code:addons/account_payment_pain_base/banking_export_pain.py:81
3083+#, python-format
3084+msgid "Cannot compute the '%s'."
3085+msgstr "No se puede computar el '%s'."
3086+
3087+#. module: account_payment_pain_base
3088+#: code:addons/account_payment_pain_base/banking_export_pain.py:85
3089+#, python-format
3090+msgid "The type of the field '%s' is %s. It should be a string or unicode."
3091+msgstr "El tipo de archivo '%s' es %s. Deben ser caracteres o unicode."
3092+
3093+#. module: account_payment_pain_base
3094+#: model:ir.model,name:account_payment_pain_base.model_res_company
3095+msgid "Companies"
3096+msgstr "Compañías"
3097+
3098+#. module: account_payment_pain_base
3099+#: code:addons/account_payment_pain_base/banking_export_pain.py:47
3100+#: code:addons/account_payment_pain_base/banking_export_pain.py:74
3101+#: code:addons/account_payment_pain_base/banking_export_pain.py:80
3102+#: code:addons/account_payment_pain_base/banking_export_pain.py:90
3103+#: code:addons/account_payment_pain_base/banking_export_pain.py:125
3104+#: code:addons/account_payment_pain_base/banking_export_pain.py:302
3105+#: code:addons/account_payment_pain_base/banking_export_pain.py:384
3106+#, python-format
3107+msgid "Error:"
3108+msgstr "Error:"
3109+
3110+#. module: account_payment_pain_base
3111+#: help:payment.line,priority:0
3112+msgid "This field will be used as the 'Instruction Priority' in the generated PAIN file."
3113+msgstr "Este campo debe ser usuado como 'Instrucción prioritaria' en el archivo PAIN generado."
3114+
3115+#. module: account_payment_pain_base
3116+#: code:addons/account_payment_pain_base/banking_export_pain.py:75
3117+#, python-format
3118+msgid "Cannot compute the '%s' of the Payment Line with reference '%s'."
3119+msgstr "No se puede computar el '%s' de la línea de pago '%s'."
3120+
3121+#. module: account_payment_pain_base
3122+#: code:addons/account_payment_pain_base/banking_export_pain.py:47
3123+#, python-format
3124+msgid "This IBAN is not valid : %s"
3125+msgstr "Este IBAN no es válido : %s"
3126+
3127+#. module: account_payment_pain_base
3128+#: code:addons/account_payment_pain_base/banking_export_pain.py:84
3129+#, python-format
3130+msgid "Field type error:"
3131+msgstr "Error en el ripo de campo:"
3132+
3133+#. module: account_payment_pain_base
3134+#: field:payment.line,struct_communication_type:0
3135+msgid "Structured Communication Type"
3136+msgstr "Comunicación estructurada"
3137+
3138+#. module: account_payment_pain_base
3139+#: code:addons/account_payment_pain_base/banking_export_pain.py:91
3140+#, python-format
3141+msgid "The '%s' is empty or 0. It should have a non-null value."
3142+msgstr "Es '%s' esta vacio o es 0. Debe tener un valor no núlo."
3143+
3144+#. module: account_payment_pain_base
3145+#: model:ir.model,name:account_payment_pain_base.model_banking_export_pain
3146+msgid "banking.export.pain"
3147+msgstr "banking.export.pain"
3148+
3149+#. module: account_payment_pain_base
3150+#: help:payment.mode,convert_to_ascii:0
3151+msgid "If active, OpenERP will convert each accented caracter to the corresponding unaccented caracter, so that only ASCII caracters are used in the generated PAIN file."
3152+msgstr "Si esta activo, OpenERP convertirá cada carácter acentuado en su correspondiente cáracter sin acentuar, solo se usan carácter ASCII el archivo PAIN."
3153+
3154+#. module: account_payment_pain_base
3155+#: view:res.company:0
3156+msgid "Payment Initiation"
3157+msgstr "Inicio de pago"
3158+
3159+#. module: account_payment_pain_base
3160+#: selection:payment.line,priority:0
3161+msgid "High"
3162+msgstr "Alto"
3163+
3164+#. module: account_payment_pain_base
3165+#: field:payment.mode,convert_to_ascii:0
3166+msgid "Convert to ASCII"
3167+msgstr "Convertir a ASCII"
3168+
3169+#. module: account_payment_pain_base
3170+#: code:addons/account_payment_pain_base/banking_export_pain.py:385
3171+#, python-format
3172+msgid "Missing 'Structured Communication Type' on payment line with reference '%s'."
3173+msgstr "'Comunicación estrecturada' no disponible en la línea de pago con referencia '%s'."
3174+
3175
3176=== added file 'account_payment_pain_base/i18n/fr.po'
3177--- account_payment_pain_base/i18n/fr.po 1970-01-01 00:00:00 +0000
3178+++ account_payment_pain_base/i18n/fr.po 2014-06-02 14:43:40 +0000
3179@@ -0,0 +1,146 @@
3180+# Translation of OpenERP Server.
3181+# This file contains the translation of the following modules:
3182+# * account_banking_pain_base
3183+#
3184+msgid ""
3185+msgstr ""
3186+"Project-Id-Version: OpenERP Server 7.0\n"
3187+"Report-Msgid-Bugs-To: \n"
3188+"POT-Creation-Date: 2013-12-23 21:27+0000\n"
3189+"PO-Revision-Date: 2013-12-23 21:27+0000\n"
3190+"Last-Translator: <>\n"
3191+"Language-Team: \n"
3192+"MIME-Version: 1.0\n"
3193+"Content-Type: text/plain; charset=UTF-8\n"
3194+"Content-Transfer-Encoding: \n"
3195+"Plural-Forms: \n"
3196+
3197+#. module: account_banking_pain_base
3198+#: field:res.company,initiating_party_issuer:0
3199+msgid "Initiating Party Issuer"
3200+msgstr "Initiating Party Issuer"
3201+
3202+#. module: account_banking_pain_base
3203+#: code:addons/account_banking_pain_base/banking_export_pain.py:122
3204+#, python-format
3205+msgid "The generated XML file is not valid against the official XML Schema Definition. The generated XML file and the full error have been written in the server logs. Here is the error, which may give you an idea on the cause of the problem : %s"
3206+msgstr "Le fichier XML généré n'est pas valide par rapport à la Définition du Schéma XML officiel. Le fichier XML généré et le message d'erreur complet ont été écrits dans les logs du serveur. Voici l'erreur, qui vous donnera peut-être une idée sur la cause du problème : %s"
3207+
3208+#. module: account_banking_pain_base
3209+#: field:payment.line,priority:0
3210+msgid "Priority"
3211+msgstr "Priorité"
3212+
3213+#. module: account_banking_pain_base
3214+#: model:ir.model,name:account_banking_pain_base.model_payment_line
3215+msgid "Payment Line"
3216+msgstr "Ligne de paiement"
3217+
3218+#. module: account_banking_pain_base
3219+#: model:ir.model,name:account_banking_pain_base.model_payment_mode
3220+msgid "Payment Mode"
3221+msgstr "Mode de paiement"
3222+
3223+#. module: account_banking_pain_base
3224+#: help:res.company,initiating_party_issuer:0
3225+msgid "This will be used as the 'Initiating Party Issuer' in the PAIN files generated by OpenERP."
3226+msgstr "Ce champ sera le 'Initiating Party Issuer' dans les fichiers PAIN générés par OpenERP."
3227+
3228+#. module: account_banking_pain_base
3229+#: code:addons/account_banking_pain_base/banking_export_pain.py:351
3230+#, python-format
3231+msgid "Missing 'Structured Communication Type' on payment line with reference '%s'."
3232+msgstr "Le 'Type de communication structuré' n'est pas renseigné sur la ligne de paiement ayant la référence '%s'."
3233+
3234+#. module: account_banking_pain_base
3235+#: selection:payment.line,priority:0
3236+msgid "Normal"
3237+msgstr "Normal"
3238+
3239+#. module: account_banking_pain_base
3240+#: code:addons/account_banking_pain_base/banking_export_pain.py:70
3241+#, python-format
3242+msgid "Cannot compute the '%s' of the Payment Line with reference '%s'."
3243+msgstr "Impossible de calculer le '%s' de la ligne de paiement ayant la référence '%s'."
3244+
3245+#. module: account_banking_pain_base
3246+#: code:addons/account_banking_pain_base/banking_export_pain.py:77
3247+#, python-format
3248+msgid "Cannot compute the '%s'."
3249+msgstr "Impossible de calculer le '%s'."
3250+
3251+#. module: account_banking_pain_base
3252+#: code:addons/account_banking_pain_base/banking_export_pain.py:81
3253+#, python-format
3254+msgid "The type of the field '%s' is %s. It should be a string or unicode."
3255+msgstr "Le type du champ '%s' est %s. Il devrait être de type string ou unicode."
3256+
3257+#. module: account_banking_pain_base
3258+#: code:addons/account_banking_pain_base/banking_export_pain.py:47
3259+#: code:addons/account_banking_pain_base/banking_export_pain.py:69
3260+#: code:addons/account_banking_pain_base/banking_export_pain.py:76
3261+#: code:addons/account_banking_pain_base/banking_export_pain.py:86
3262+#: code:addons/account_banking_pain_base/banking_export_pain.py:121
3263+#: code:addons/account_banking_pain_base/banking_export_pain.py:350
3264+#, python-format
3265+msgid "Error:"
3266+msgstr "Erreur :"
3267+
3268+#. module: account_banking_pain_base
3269+#: model:ir.model,name:account_banking_pain_base.model_res_company
3270+msgid "Companies"
3271+msgstr "Sociétés"
3272+
3273+#. module: account_banking_pain_base
3274+#: code:addons/account_banking_pain_base/banking_export_pain.py:47
3275+#, python-format
3276+msgid "This IBAN is not valid : %s"
3277+msgstr "Cet IBAN n'est pas valide : %s"
3278+
3279+#. module: account_banking_pain_base
3280+#: code:addons/account_banking_pain_base/banking_export_pain.py:80
3281+#, python-format
3282+msgid "Field type error:"
3283+msgstr "Erreur dans le type de champ :"
3284+
3285+#. module: account_banking_pain_base
3286+#: field:payment.line,struct_communication_type:0
3287+msgid "Structured Communication Type"
3288+msgstr "Type de communication structurée"
3289+
3290+#. module: account_banking_pain_base
3291+#: code:addons/account_banking_pain_base/banking_export_pain.py:87
3292+#, python-format
3293+msgid "The '%s' is empty or 0. It should have a non-null value."
3294+msgstr "Le '%s' est vide ou égal à 0. Il devrait avoir une valeur non-nulle."
3295+
3296+#. module: account_banking_pain_base
3297+#: model:ir.model,name:account_banking_pain_base.model_banking_export_pain
3298+msgid "banking.export.pain"
3299+msgstr "banking.export.pain"
3300+
3301+#. module: account_banking_pain_base
3302+#: help:payment.mode,convert_to_ascii:0
3303+msgid "If active, OpenERP will convert each accented caracter to the corresponding unaccented caracter, so that only ASCII caracters are used in the generated PAIN file."
3304+msgstr "Si actif, OpenERP convertira chaque caractère accentué en son équivalent non accentué, de telle façon que seuls des caractères ASCII soient utilisés dans le fichier PAIN généré."
3305+
3306+#. module: account_banking_pain_base
3307+#: help:payment.line,priority:0
3308+msgid "This field will be used as the 'Instruction Priority' in the generated PAIN file."
3309+msgstr "Ce champ sera le 'Instruction Priority' dans le fichier PAIN généré."
3310+
3311+#. module: account_banking_pain_base
3312+#: view:res.company:0
3313+msgid "Payment Initiation"
3314+msgstr "Payment Initiation"
3315+
3316+#. module: account_banking_pain_base
3317+#: selection:payment.line,priority:0
3318+msgid "High"
3319+msgstr "Élevé"
3320+
3321+#. module: account_banking_pain_base
3322+#: field:payment.mode,convert_to_ascii:0
3323+msgid "Convert to ASCII"
3324+msgstr "Convertir en ASCII"
3325+
3326
3327=== added file 'account_payment_pain_base/payment_line.py'
3328--- account_payment_pain_base/payment_line.py 1970-01-01 00:00:00 +0000
3329+++ account_payment_pain_base/payment_line.py 2014-06-02 14:43:40 +0000
3330@@ -0,0 +1,54 @@
3331+# -*- encoding: utf-8 -*-
3332+##############################################################################
3333+#
3334+# PAIN Base module for OpenERP
3335+# Copyright (C) 2013 Akretion (http://www.akretion.com)
3336+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
3337+#
3338+# This program is free software: you can redistribute it and/or modify
3339+# it under the terms of the GNU Affero General Public License as
3340+# published by the Free Software Foundation, either version 3 of the
3341+# License, or (at your option) any later version.
3342+#
3343+# This program is distributed in the hope that it will be useful,
3344+# but WITHOUT ANY WARRANTY; without even the implied warranty of
3345+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3346+# GNU Affero General Public License for more details.
3347+#
3348+# You should have received a copy of the GNU Affero General Public License
3349+# along with this program. If not, see <http://www.gnu.org/licenses/>.
3350+#
3351+##############################################################################
3352+
3353+from osv import osv, fields
3354+
3355+
3356+class payment_line(osv.osv):
3357+ _inherit = 'payment.line'
3358+
3359+ def _get_struct_communication_types(self, cr, uid, context=None):
3360+ return [('ISO', 'ISO')]
3361+
3362+ _columns = {
3363+ 'priority': fields.selection([
3364+ ('NORM', 'Normal'),
3365+ ('HIGH', 'High'),
3366+ ], 'Priority',
3367+ help="This field will be used as the 'Instruction Priority' in "
3368+ "the generated PAIN file."),
3369+ # Update size from 64 to 140, because PAIN allows 140 caracters
3370+ 'communication': fields.char(
3371+ 'Communication', size=140, required=True,
3372+ help="Used as the message between ordering customer and current "
3373+ "company. Depicts 'What do you want to say to the recipient "
3374+ "about this order ?'"),
3375+ 'struct_communication_type': fields.selection(
3376+ _get_struct_communication_types, 'Structured Communication Type'),
3377+ }
3378+
3379+ _defaults = {
3380+ 'priority': 'NORM',
3381+ 'struct_communication_type': 'ISO',
3382+ }
3383+
3384+payment_line()
3385
3386=== added file 'account_payment_pain_base/payment_line_view.xml'
3387--- account_payment_pain_base/payment_line_view.xml 1970-01-01 00:00:00 +0000
3388+++ account_payment_pain_base/payment_line_view.xml 2014-06-02 14:43:40 +0000
3389@@ -0,0 +1,41 @@
3390+<?xml version="1.0" encoding="utf-8"?>
3391+<!--
3392+ Copyright (C) 2013 Akretion (http://www.akretion.com)
3393+ @author: Alexis de Lattre <alexis.delattre@akretion.com>
3394+ The licence is in the file __openerp__.py
3395+-->
3396+<openerp>
3397+<data>
3398+
3399+<record id="view_payment_line_form" model="ir.ui.view">
3400+ <field name="name">pain.base.payment.line.form</field>
3401+ <field name="model">payment.line</field>
3402+ <field name="inherit_id" ref="account_payment.view_payment_line_form"/>
3403+ <field name="arch" type="xml">
3404+ <field name="bank_id" position="after">
3405+ <field name="priority"/>
3406+ <newline />
3407+ </field>
3408+ <field name="state" position="after">
3409+ <field name="struct_communication_type" attrs="{'invisible': [('state', '!=', 'structured')], 'required': [('state', '=', 'structured')]}"/>
3410+ </field>
3411+ </field>
3412+</record>
3413+
3414+<record id="view_payment_order_form" model="ir.ui.view">
3415+ <field name="name">pain.base.payment.line.inside.order.form</field>
3416+ <field name="model">payment.order</field>
3417+ <field name="inherit_id" ref="account_payment.view_payment_order_form"/>
3418+ <field name="arch" type="xml">
3419+ <xpath expr="//field[@name='line_ids']/form//field[@name='bank_id']" position="after">
3420+ <field name="priority"/>
3421+ <newline />
3422+ </xpath>
3423+ <xpath expr="//field[@name='line_ids']/form//field[@name='state']" position="after">
3424+ <field name="struct_communication_type" attrs="{'invisible': [('state', '!=', 'structured')], 'required': [('state', '=', 'structured')]}"/>
3425+ </xpath>
3426+ </field>
3427+</record>
3428+
3429+</data>
3430+</openerp>
3431
3432=== added file 'account_payment_pain_base/payment_mode.py'
3433--- account_payment_pain_base/payment_mode.py 1970-01-01 00:00:00 +0000
3434+++ account_payment_pain_base/payment_mode.py 2014-06-02 14:43:40 +0000
3435@@ -0,0 +1,41 @@
3436+# -*- encoding: utf-8 -*-
3437+##############################################################################
3438+#
3439+# PAIN Base module for OpenERP
3440+# Copyright (C) 2013 Akretion (http://www.akretion.com)
3441+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
3442+#
3443+# This program is free software: you can redistribute it and/or modify
3444+# it under the terms of the GNU Affero General Public License as
3445+# published by the Free Software Foundation, either version 3 of the
3446+# License, or (at your option) any later version.
3447+#
3448+# This program is distributed in the hope that it will be useful,
3449+# but WITHOUT ANY WARRANTY; without even the implied warranty of
3450+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3451+# GNU Affero General Public License for more details.
3452+#
3453+# You should have received a copy of the GNU Affero General Public License
3454+# along with this program. If not, see <http://www.gnu.org/licenses/>.
3455+#
3456+##############################################################################
3457+
3458+from osv import osv, fields
3459+
3460+
3461+class payment_mode(osv.osv):
3462+ _inherit = 'payment.mode'
3463+
3464+ _columns = {
3465+ 'convert_to_ascii': fields.boolean(
3466+ 'Convert to ASCII',
3467+ help="If active, OpenERP will convert each accented caracter to "
3468+ "the corresponding unaccented caracter, so that only ASCII "
3469+ "caracters are used in the generated PAIN file."),
3470+ }
3471+
3472+ _defaults = {
3473+ 'convert_to_ascii': True,
3474+ }
3475+
3476+payment_mode()
3477
3478=== added file 'account_payment_pain_base/payment_mode_view.xml'
3479--- account_payment_pain_base/payment_mode_view.xml 1970-01-01 00:00:00 +0000
3480+++ account_payment_pain_base/payment_mode_view.xml 2014-06-02 14:43:40 +0000
3481@@ -0,0 +1,22 @@
3482+<?xml version="1.0" encoding="utf-8"?>
3483+<!--
3484+ Copyright (C) 2013 Akretion (http://www.akretion.com)
3485+ @author: Alexis de Lattre <alexis.delattre@akretion.com>
3486+ The licence is in the file __openerp__.py
3487+-->
3488+<openerp>
3489+<data>
3490+
3491+<record id="view_payment_mode_form_inherit" model="ir.ui.view">
3492+ <field name="name">add.convert_to_ascii.in.payment.mode.form</field>
3493+ <field name="model">payment.mode</field>
3494+ <field name="inherit_id" ref="account_payment_extension.view_payment_mode_form_require_bank_account"/>
3495+ <field name="arch" type="xml">
3496+ <field name="type" position="after">
3497+ <field name="convert_to_ascii"/>
3498+ </field>
3499+ </field>
3500+</record>
3501+
3502+</data>
3503+</openerp>
3504
3505=== added directory 'account_payment_sepa_credit_transfer'
3506=== renamed directory 'account_payment_sepa_credit_transfer' => 'account_payment_sepa_credit_transfer.moved'
3507=== added file 'account_payment_sepa_credit_transfer/__init__.py'
3508--- account_payment_sepa_credit_transfer/__init__.py 1970-01-01 00:00:00 +0000
3509+++ account_payment_sepa_credit_transfer/__init__.py 2014-06-02 14:43:40 +0000
3510@@ -0,0 +1,24 @@
3511+# -*- encoding: utf-8 -*-
3512+##############################################################################
3513+#
3514+# SEPA Credit Transfer module for OpenERP
3515+# Copyright (C) 2010-2013 Akretion (http://www.akretion.com)
3516+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
3517+#
3518+# This program is free software: you can redistribute it and/or modify
3519+# it under the terms of the GNU Affero General Public License as
3520+# published by the Free Software Foundation, either version 3 of the
3521+# License, or (at your option) any later version.
3522+#
3523+# This program is distributed in the hope that it will be useful,
3524+# but WITHOUT ANY WARRANTY; without even the implied warranty of
3525+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3526+# GNU Affero General Public License for more details.
3527+#
3528+# You should have received a copy of the GNU Affero General Public License
3529+# along with this program. If not, see <http://www.gnu.org/licenses/>.
3530+#
3531+##############################################################################
3532+
3533+import wizard
3534+import account_banking_sepa
3535
3536=== added file 'account_payment_sepa_credit_transfer/__openerp__.py'
3537--- account_payment_sepa_credit_transfer/__openerp__.py 1970-01-01 00:00:00 +0000
3538+++ account_payment_sepa_credit_transfer/__openerp__.py 2014-06-02 14:43:40 +0000
3539@@ -0,0 +1,57 @@
3540+##############################################################################
3541+#
3542+# SEPA Credit Transfer module for OpenERP
3543+# Copyright (C) 2010-2013 Akretion (http://www.akretion.com)
3544+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
3545+# Copyright (C) 2014 Acysos S.L. (<http://acysos.com>).
3546+# @author: Ignacio Ibeas <ignacio@acysos.com>
3547+#
3548+# This program is free software: you can redistribute it and/or modify
3549+# it under the terms of the GNU Affero General Public License as
3550+# published by the Free Software Foundation, either version 3 of the
3551+# License, or (at your option) any later version.
3552+#
3553+# This program is distributed in the hope that it will be useful,
3554+# but WITHOUT ANY WARRANTY; without even the implied warranty of
3555+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3556+# GNU Affero General Public License for more details.
3557+#
3558+# You should have received a copy of the GNU Affero General Public License
3559+# along with this program. If not, see <http://www.gnu.org/licenses/>.
3560+#
3561+##############################################################################
3562+{
3563+ 'name': 'Account Payment SEPA Credit Transfer',
3564+ 'summary': 'Create SEPA XML files for Credit Transfers',
3565+ 'version': '0.2',
3566+ 'license': 'AGPL-3',
3567+ 'author': 'Akretion',
3568+ 'website': 'http://www.akretion.com',
3569+ 'category': 'Banking addons',
3570+ 'depends': ['account_payment_pain_base'],
3571+# 'external_dependencies': {
3572+# 'python': ['unidecode', 'lxml'],
3573+# },
3574+ 'data': [
3575+ 'account_banking_sepa_view.xml',
3576+ 'wizard/export_sepa_view.xml',
3577+ 'data/payment_type_sepa_sct.xml',
3578+ 'security/ir.model.access.csv',
3579+ ],
3580+ 'description': '''
3581+Module to export payment orders in SEPA XML file format.
3582+
3583+SEPA PAIN (PAyment INitiation) is the new european standard for Customer-to-Bank payment instructions. This module implements SEPA Credit Transfer (SCT), more specifically PAIN versions 001.001.02, 001.001.03, 001.001.04 and 001.001.05. It is part of the ISO 20022 standard, available on http://www.iso20022.org.
3584+
3585+The Implementation Guidelines for SEPA Credit Transfer published by the European Payments Council (http://http://www.europeanpaymentscouncil.eu) use PAIN version 001.001.03, so it's probably the version of PAIN that you should try first.
3586+
3587+This module uses the framework provided by the account payment addons, cf https://launchpad.net/account-payment
3588+
3589+For windows server copy the 'unidecode' folder of https://pypi.python.org/pypi/Unidecode/ to the OpenERP Server Folder.
3590+
3591+Please contact Alexis de Lattre from Akretion <alexis.delattre@akretion.com> for any help or question about this module.
3592+Adapted to account_payment_extension by Acysos S.L. <info@acysos.com>
3593+ ''',
3594+ 'active': False,
3595+ 'installable': True,
3596+}
3597
3598=== added file 'account_payment_sepa_credit_transfer/account_banking_sepa.py'
3599--- account_payment_sepa_credit_transfer/account_banking_sepa.py 1970-01-01 00:00:00 +0000
3600+++ account_payment_sepa_credit_transfer/account_banking_sepa.py 2014-06-02 14:43:40 +0000
3601@@ -0,0 +1,91 @@
3602+##############################################################################
3603+#
3604+# SEPA Credit Transfer module for OpenERP
3605+# Copyright (C) 2010-2013 Akretion (http://www.akretion.com)
3606+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
3607+#
3608+# This program is free software: you can redistribute it and/or modify
3609+# it under the terms of the GNU Affero General Public License as
3610+# published by the Free Software Foundation, either version 3 of the
3611+# License, or (at your option) any later version.
3612+#
3613+# This program is distributed in the hope that it will be useful,
3614+# but WITHOUT ANY WARRANTY; without even the implied warranty of
3615+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3616+# GNU Affero General Public License for more details.
3617+#
3618+# You should have received a copy of the GNU Affero General Public License
3619+# along with this program. If not, see <http://www.gnu.org/licenses/>.
3620+#
3621+##############################################################################
3622+
3623+from osv import fields, osv
3624+import decimal_precision as dp
3625+from unidecode import unidecode
3626+
3627+
3628+class banking_export_sepa(osv.osv):
3629+ '''SEPA export'''
3630+ _name = 'banking.export.sepa'
3631+ _description = __doc__
3632+ _rec_name = 'filename'
3633+
3634+ def _generate_filename(self, cr, uid, ids, name, arg, context=None):
3635+ res = {}
3636+ for sepa_file in self.browse(cr, uid, ids, context=context):
3637+ ref = sepa_file.payment_order_ids[0].reference
3638+ if ref:
3639+ label = unidecode(ref.replace('/', '-'))
3640+ else:
3641+ label = 'error'
3642+ res[sepa_file.id] = 'sct_%s.xml' % label
3643+ return res
3644+
3645+ _columns = {
3646+ 'payment_order_ids': fields.many2many(
3647+ 'payment.order',
3648+ 'account_payment_order_sepa_rel',
3649+ 'banking_export_sepa_id', 'account_order_id',
3650+ 'Payment Orders',
3651+ readonly=True),
3652+ 'nb_transactions': fields.integer(
3653+ 'Number of Transactions', readonly=True),
3654+ 'total_amount': fields.float(
3655+ 'Total Amount', digits_compute=dp.get_precision('Account'),
3656+ readonly=True),
3657+ 'batch_booking': fields.boolean(
3658+ 'Batch Booking', readonly=True,
3659+ help="If true, the bank statement will display only one debit "
3660+ "line for all the wire transfers of the SEPA XML file ; "
3661+ "if false, the bank statement will display one debit line "
3662+ "per wire transfer of the SEPA XML file."),
3663+ 'charge_bearer': fields.selection([
3664+ ('SLEV', 'Following Service Level'),
3665+ ('SHAR', 'Shared'),
3666+ ('CRED', 'Borne by Creditor'),
3667+ ('DEBT', 'Borne by Debtor'),
3668+ ], 'Charge Bearer', readonly=True,
3669+ help="Following service level : transaction charges are to be "
3670+ "applied following the rules agreed in the service level and/or "
3671+ "scheme (SEPA Core messages must use this). Shared : "
3672+ "transaction charges on the creditor side are to be borne by "
3673+ "the creditor, transaction charges on the debtor side are to "
3674+ "be borne by the debtor. Borne by creditor : all transaction "
3675+ "charges are to be borne by the creditor. Borne by debtor : "
3676+ "all transaction charges are to be borne by the debtor."),
3677+ 'create_date': fields.datetime('Generation Date', readonly=True),
3678+ 'file': fields.binary('SEPA XML File', readonly=True),
3679+ 'filename': fields.function(
3680+ _generate_filename, type='char', size=256, string='Filename',
3681+ method=True, readonly=True, store=True),
3682+ 'state': fields.selection([
3683+ ('draft', 'Draft'),
3684+ ('sent', 'Sent'),
3685+ ('done', 'Reconciled'),
3686+ ], 'State', readonly=True),
3687+ }
3688+
3689+ _defaults = {
3690+ 'state': 'draft',
3691+ }
3692+banking_export_sepa()
3693
3694=== added file 'account_payment_sepa_credit_transfer/account_banking_sepa_view.xml'
3695--- account_payment_sepa_credit_transfer/account_banking_sepa_view.xml 1970-01-01 00:00:00 +0000
3696+++ account_payment_sepa_credit_transfer/account_banking_sepa_view.xml 2014-06-02 14:43:40 +0000
3697@@ -0,0 +1,80 @@
3698+<?xml version="1.0" encoding="utf-8"?>
3699+<!--
3700+ Copyright (C) 2010-2013 Akretion (http://www.akretion.com)
3701+ @author: Alexis de Lattre <alexis.delattre@akretion.com>
3702+ The licence is in the file __openerp__.py
3703+-->
3704+<openerp>
3705+<data>
3706+
3707+<record id="view_banking_export_sepa_form" model="ir.ui.view">
3708+ <field name="name">account.banking.export.sepa.form</field>
3709+ <field name="model">banking.export.sepa</field>
3710+ <field name="arch" type="xml">
3711+ <form string="SEPA Credit Transfer">
3712+ <notebook>
3713+ <page string="General Information">
3714+ <field name="total_amount" />
3715+ <field name="nb_transactions" />
3716+ <field name="batch_booking" />
3717+ <field name="charge_bearer"/>
3718+ <field name="create_date" />
3719+ <newline />
3720+ <field name="file" filename="filename"/>
3721+ <field name="filename" invisible="True"/>
3722+ </page>
3723+ <page string="Payment Orders">
3724+ <field name="payment_order_ids" colspan="4" nolabel="1">
3725+ <tree colors="blue:state in ('draft');gray:state in ('cancel','done');black:state in ('open')" string="Payment Orders">
3726+ <field name="reference"/>
3727+ <field name="date_created"/>
3728+ <field name="date_done"/>
3729+ <field name="total"/>
3730+ <field name="state"/>
3731+ </tree>
3732+ </field>
3733+ </page>
3734+ </notebook>
3735+ </form>
3736+ </field>
3737+</record>
3738+
3739+
3740+<record id="view_banking_export_sepa_tree" model="ir.ui.view">
3741+ <field name="name">account.banking.export.sepa.tree</field>
3742+ <field name="model">banking.export.sepa</field>
3743+ <field name="arch" type="xml">
3744+ <tree string="SEPA Credit Transfer">
3745+ <field name="filename"/>
3746+ <field name="create_date"/>
3747+ <field name="nb_transactions"/>
3748+ </tree>
3749+ </field>
3750+</record>
3751+
3752+
3753+<record id="action_account_banking_sepa" model="ir.actions.act_window">
3754+ <field name="name">SEPA Credit Transfer Files</field>
3755+ <field name="res_model">banking.export.sepa</field>
3756+ <field name="view_type">form</field>
3757+ <field name="view_mode">tree,form</field>
3758+</record>
3759+
3760+
3761+<menuitem id="menu_account_banking_sepa"
3762+ parent="account_payment.menu_main_payment"
3763+ action="action_account_banking_sepa"
3764+ sequence="15"
3765+ />
3766+
3767+<act_window id="act_banking_export_sepa_payment_order"
3768+ name="SEPA Credit Transfer Files"
3769+ domain="[('payment_order_ids', '=', active_id)]"
3770+ res_model="banking.export.sepa"
3771+ src_model="payment.order"
3772+ view_type="form"
3773+ view_mode="tree,form"
3774+/>
3775+
3776+</data>
3777+</openerp>
3778
3779=== added directory 'account_payment_sepa_credit_transfer/data'
3780=== added file 'account_payment_sepa_credit_transfer/data/pain.001.001.02.xsd'
3781--- account_payment_sepa_credit_transfer/data/pain.001.001.02.xsd 1970-01-01 00:00:00 +0000
3782+++ account_payment_sepa_credit_transfer/data/pain.001.001.02.xsd 2014-06-02 14:43:40 +0000
3783@@ -0,0 +1,784 @@
3784+<?xml version="1.0" encoding="UTF-8"?>
3785+<!--Generated by SWIFTStandards Workstation (build:R5.1.0.4) on 2006 Sep 08 11:58:39-->
3786+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.02" elementFormDefault="qualified" targetNamespace="urn:iso:std:iso:20022:tech:xsd:pain.001.001.02">
3787+<xs:element name="Document" type="Document"/>
3788+<xs:complexType name="AccountIdentification3Choice">
3789+<xs:sequence>
3790+<xs:choice>
3791+<xs:element name="IBAN" type="IBANIdentifier"/>
3792+<xs:element name="BBAN" type="BBANIdentifier"/>
3793+<xs:element name="UPIC" type="UPICIdentifier"/>
3794+<xs:element name="PrtryAcct" type="SimpleIdentificationInformation2"/>
3795+</xs:choice>
3796+</xs:sequence>
3797+</xs:complexType>
3798+<xs:simpleType name="AddressType2Code">
3799+<xs:restriction base="xs:string">
3800+<xs:enumeration value="ADDR"/>
3801+<xs:enumeration value="PBOX"/>
3802+<xs:enumeration value="HOME"/>
3803+<xs:enumeration value="BIZZ"/>
3804+<xs:enumeration value="MLTO"/>
3805+<xs:enumeration value="DLVY"/>
3806+</xs:restriction>
3807+</xs:simpleType>
3808+<xs:complexType name="AmountType2Choice">
3809+<xs:sequence>
3810+<xs:choice>
3811+<xs:element name="InstdAmt" type="CurrencyAndAmount"/>
3812+<xs:element name="EqvtAmt" type="EquivalentAmount"/>
3813+</xs:choice>
3814+</xs:sequence>
3815+</xs:complexType>
3816+<xs:simpleType name="BBANIdentifier">
3817+<xs:restriction base="xs:string">
3818+<xs:pattern value="[a-zA-Z0-9]{1,30}"/>
3819+</xs:restriction>
3820+</xs:simpleType>
3821+<xs:simpleType name="BEIIdentifier">
3822+<xs:restriction base="xs:string">
3823+<xs:pattern value="[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"/>
3824+</xs:restriction>
3825+</xs:simpleType>
3826+<xs:simpleType name="BICIdentifier">
3827+<xs:restriction base="xs:string">
3828+<xs:pattern value="[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"/>
3829+</xs:restriction>
3830+</xs:simpleType>
3831+<xs:simpleType name="BaseOneRate">
3832+<xs:restriction base="xs:decimal">
3833+<xs:fractionDigits value="10"/>
3834+<xs:totalDigits value="11"/>
3835+</xs:restriction>
3836+</xs:simpleType>
3837+<xs:simpleType name="BatchBookingIndicator">
3838+<xs:restriction base="xs:boolean"/>
3839+</xs:simpleType>
3840+<xs:complexType name="BranchAndFinancialInstitutionIdentification3">
3841+<xs:sequence>
3842+<xs:element name="FinInstnId" type="FinancialInstitutionIdentification5Choice"/>
3843+<xs:element name="BrnchId" type="BranchData" minOccurs="0" maxOccurs="1"/>
3844+</xs:sequence>
3845+</xs:complexType>
3846+<xs:complexType name="BranchData">
3847+<xs:sequence>
3848+<xs:element name="Id" type="Max35Text" minOccurs="0" maxOccurs="1"/>
3849+<xs:element name="Nm" type="Max35Text" minOccurs="0" maxOccurs="1"/>
3850+<xs:element name="PstlAdr" type="PostalAddress1" minOccurs="0" maxOccurs="1"/>
3851+</xs:sequence>
3852+</xs:complexType>
3853+<xs:simpleType name="CHIPSUniversalIdentifier">
3854+<xs:restriction base="xs:string">
3855+<xs:pattern value="CH[0-9]{6,6}"/>
3856+</xs:restriction>
3857+</xs:simpleType>
3858+<xs:complexType name="CashAccount7">
3859+<xs:sequence>
3860+<xs:element name="Id" type="AccountIdentification3Choice"/>
3861+<xs:element name="Tp" type="CashAccountType2" minOccurs="0" maxOccurs="1"/>
3862+<xs:element name="Ccy" type="CurrencyCode" minOccurs="0" maxOccurs="1"/>
3863+<xs:element name="Nm" type="Max70Text" minOccurs="0" maxOccurs="1"/>
3864+</xs:sequence>
3865+</xs:complexType>
3866+<xs:complexType name="CashAccountType2">
3867+<xs:sequence>
3868+<xs:choice>
3869+<xs:element name="Cd" type="CashAccountType4Code"/>
3870+<xs:element name="Prtry" type="Max35Text"/>
3871+</xs:choice>
3872+</xs:sequence>
3873+</xs:complexType>
3874+<xs:simpleType name="CashAccountType4Code">
3875+<xs:restriction base="xs:string">
3876+<xs:enumeration value="CASH"/>
3877+<xs:enumeration value="CHAR"/>
3878+<xs:enumeration value="COMM"/>
3879+<xs:enumeration value="TAXE"/>
3880+<xs:enumeration value="CISH"/>
3881+<xs:enumeration value="TRAS"/>
3882+<xs:enumeration value="SACC"/>
3883+<xs:enumeration value="CACC"/>
3884+<xs:enumeration value="SVGS"/>
3885+<xs:enumeration value="ONDP"/>
3886+<xs:enumeration value="MGLD"/>
3887+<xs:enumeration value="NREX"/>
3888+<xs:enumeration value="MOMA"/>
3889+<xs:enumeration value="LOAN"/>
3890+<xs:enumeration value="SLRY"/>
3891+<xs:enumeration value="ODFT"/>
3892+</xs:restriction>
3893+</xs:simpleType>
3894+<xs:simpleType name="ChargeBearerType1Code">
3895+<xs:restriction base="xs:string">
3896+<xs:enumeration value="DEBT"/>
3897+<xs:enumeration value="CRED"/>
3898+<xs:enumeration value="SHAR"/>
3899+<xs:enumeration value="SLEV"/>
3900+</xs:restriction>
3901+</xs:simpleType>
3902+<xs:complexType name="Cheque5">
3903+<xs:sequence>
3904+<xs:element name="ChqTp" type="ChequeType2Code" minOccurs="0" maxOccurs="1"/>
3905+<xs:element name="ChqNb" type="Max35Text" minOccurs="0" maxOccurs="1"/>
3906+<xs:element name="ChqFr" type="NameAndAddress3" minOccurs="0" maxOccurs="1"/>
3907+<xs:element name="DlvryMtd" type="ChequeDeliveryMethod1Choice" minOccurs="0" maxOccurs="1"/>
3908+<xs:element name="DlvrTo" type="NameAndAddress3" minOccurs="0" maxOccurs="1"/>
3909+<xs:element name="InstrPrty" type="Priority2Code" minOccurs="0" maxOccurs="1"/>
3910+<xs:element name="ChqMtrtyDt" type="ISODate" minOccurs="0" maxOccurs="1"/>
3911+<xs:element name="FrmsCd" type="Max35Text" minOccurs="0" maxOccurs="1"/>
3912+<xs:element name="MemoFld" type="Max35Text" minOccurs="0" maxOccurs="1"/>
3913+<xs:element name="RgnlClrZone" type="Max35Text" minOccurs="0" maxOccurs="1"/>
3914+<xs:element name="PrtLctn" type="Max35Text" minOccurs="0" maxOccurs="1"/>
3915+</xs:sequence>
3916+</xs:complexType>
3917+<xs:simpleType name="ChequeDelivery1Code">
3918+<xs:restriction base="xs:string">
3919+<xs:enumeration value="MLDB"/>
3920+<xs:enumeration value="MLCD"/>
3921+<xs:enumeration value="MLFA"/>
3922+<xs:enumeration value="CRDB"/>
3923+<xs:enumeration value="CRCD"/>
3924+<xs:enumeration value="CRFA"/>
3925+<xs:enumeration value="PUDB"/>
3926+<xs:enumeration value="PUCD"/>
3927+<xs:enumeration value="PUFA"/>
3928+<xs:enumeration value="RGDB"/>
3929+<xs:enumeration value="RGCD"/>
3930+<xs:enumeration value="RGFA"/>
3931+</xs:restriction>
3932+</xs:simpleType>
3933+<xs:complexType name="ChequeDeliveryMethod1Choice">
3934+<xs:sequence>
3935+<xs:choice>
3936+<xs:element name="Cd" type="ChequeDelivery1Code"/>
3937+<xs:element name="Prtry" type="Max35Text"/>
3938+</xs:choice>
3939+</xs:sequence>
3940+</xs:complexType>
3941+<xs:simpleType name="ChequeType2Code">
3942+<xs:restriction base="xs:string">
3943+<xs:enumeration value="CCHQ"/>
3944+<xs:enumeration value="CCCH"/>
3945+<xs:enumeration value="BCHQ"/>
3946+<xs:enumeration value="DRFT"/>
3947+<xs:enumeration value="ELDR"/>
3948+</xs:restriction>
3949+</xs:simpleType>
3950+<xs:simpleType name="ClearingChannel2Code">
3951+<xs:restriction base="xs:string">
3952+<xs:enumeration value="RTGS"/>
3953+<xs:enumeration value="RTNS"/>
3954+<xs:enumeration value="MPNS"/>
3955+<xs:enumeration value="BOOK"/>
3956+</xs:restriction>
3957+</xs:simpleType>
3958+<xs:complexType name="ClearingSystemMemberIdentification3Choice">
3959+<xs:sequence>
3960+<xs:choice>
3961+<xs:element name="Id" type="ExternalClearingSystemMemberCode"/>
3962+<xs:element name="Prtry" type="Max35Text"/>
3963+</xs:choice>
3964+</xs:sequence>
3965+</xs:complexType>
3966+<xs:simpleType name="CountryCode">
3967+<xs:restriction base="xs:string">
3968+<xs:pattern value="[A-Z]{2,2}"/>
3969+</xs:restriction>
3970+</xs:simpleType>
3971+<xs:complexType name="CreditTransferTransactionInformation1">
3972+<xs:sequence>
3973+<xs:element name="PmtId" type="PaymentIdentification1"/>
3974+<xs:element name="PmtTpInf" type="PaymentTypeInformation1" minOccurs="0" maxOccurs="1"/>
3975+<xs:element name="Amt" type="AmountType2Choice"/>
3976+<xs:element name="XchgRateInf" type="ExchangeRateInformation1" minOccurs="0" maxOccurs="1"/>
3977+<xs:element name="ChrgBr" type="ChargeBearerType1Code" minOccurs="0" maxOccurs="1"/>
3978+<xs:element name="ChqInstr" type="Cheque5" minOccurs="0" maxOccurs="1"/>
3979+<xs:element name="UltmtDbtr" type="PartyIdentification8" minOccurs="0" maxOccurs="1"/>
3980+<xs:element name="IntrmyAgt1" type="BranchAndFinancialInstitutionIdentification3" minOccurs="0" maxOccurs="1"/>
3981+<xs:element name="IntrmyAgt1Acct" type="CashAccount7" minOccurs="0" maxOccurs="1"/>
3982+<xs:element name="IntrmyAgt2" type="BranchAndFinancialInstitutionIdentification3" minOccurs="0" maxOccurs="1"/>
3983+<xs:element name="IntrmyAgt2Acct" type="CashAccount7" minOccurs="0" maxOccurs="1"/>
3984+<xs:element name="IntrmyAgt3" type="BranchAndFinancialInstitutionIdentification3" minOccurs="0" maxOccurs="1"/>
3985+<xs:element name="IntrmyAgt3Acct" type="CashAccount7" minOccurs="0" maxOccurs="1"/>
3986+<xs:element name="CdtrAgt" type="BranchAndFinancialInstitutionIdentification3" minOccurs="0" maxOccurs="1"/>
3987+<xs:element name="CdtrAgtAcct" type="CashAccount7" minOccurs="0" maxOccurs="1"/>
3988+<xs:element name="Cdtr" type="PartyIdentification8" minOccurs="0" maxOccurs="1"/>
3989+<xs:element name="CdtrAcct" type="CashAccount7" minOccurs="0" maxOccurs="1"/>
3990+<xs:element name="UltmtCdtr" type="PartyIdentification8" minOccurs="0" maxOccurs="1"/>
3991+<xs:element name="InstrForCdtrAgt" type="InstructionForCreditorAgent1" minOccurs="0" maxOccurs="unbounded"/>
3992+<xs:element name="InstrForDbtrAgt" type="Max140Text" minOccurs="0" maxOccurs="1"/>
3993+<xs:element name="Purp" type="Purpose1Choice" minOccurs="0" maxOccurs="1"/>
3994+<xs:element name="RgltryRptg" type="RegulatoryReporting2" minOccurs="0" maxOccurs="10"/>
3995+<xs:element name="Tax" type="TaxInformation2" minOccurs="0" maxOccurs="1"/>
3996+<xs:element name="RltdRmtInf" type="RemittanceLocation1" minOccurs="0" maxOccurs="10"/>
3997+<xs:element name="RmtInf" type="RemittanceInformation1" minOccurs="0" maxOccurs="1"/>
3998+</xs:sequence>
3999+</xs:complexType>
4000+<xs:complexType name="CreditorReferenceInformation1">
4001+<xs:sequence>
4002+<xs:element name="CdtrRefTp" type="CreditorReferenceType1" minOccurs="0" maxOccurs="1"/>
4003+<xs:element name="CdtrRef" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4004+</xs:sequence>
4005+</xs:complexType>
4006+<xs:complexType name="CreditorReferenceType1">
4007+<xs:sequence>
4008+<xs:choice>
4009+<xs:element name="Cd" type="DocumentType3Code"/>
4010+<xs:element name="Prtry" type="Max35Text"/>
4011+</xs:choice>
4012+<xs:element name="Issr" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4013+</xs:sequence>
4014+</xs:complexType>
4015+<xs:simpleType name="CurrencyAndAmount_SimpleType">
4016+<xs:restriction base="xs:decimal">
4017+<xs:minInclusive value="0"/>
4018+<xs:fractionDigits value="5"/>
4019+<xs:totalDigits value="18"/>
4020+</xs:restriction>
4021+</xs:simpleType>
4022+<xs:complexType name="CurrencyAndAmount">
4023+<xs:simpleContent>
4024+<xs:extension base="CurrencyAndAmount_SimpleType">
4025+<xs:attribute name="Ccy" type="CurrencyCode" use="required"/>
4026+</xs:extension>
4027+</xs:simpleContent>
4028+</xs:complexType>
4029+<xs:simpleType name="CurrencyCode">
4030+<xs:restriction base="xs:string">
4031+<xs:pattern value="[A-Z]{3,3}"/>
4032+</xs:restriction>
4033+</xs:simpleType>
4034+<xs:complexType name="DateAndPlaceOfBirth">
4035+<xs:sequence>
4036+<xs:element name="BirthDt" type="ISODate"/>
4037+<xs:element name="PrvcOfBirth" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4038+<xs:element name="CityOfBirth" type="Max35Text"/>
4039+<xs:element name="CtryOfBirth" type="CountryCode"/>
4040+</xs:sequence>
4041+</xs:complexType>
4042+<xs:simpleType name="DecimalNumber">
4043+<xs:restriction base="xs:decimal">
4044+<xs:fractionDigits value="17"/>
4045+<xs:totalDigits value="18"/>
4046+</xs:restriction>
4047+</xs:simpleType>
4048+<xs:complexType name="Document">
4049+<xs:sequence>
4050+<xs:element name="pain.001.001.02" type="pain.001.001.02"/>
4051+</xs:sequence>
4052+</xs:complexType>
4053+<xs:simpleType name="DocumentType2Code">
4054+<xs:restriction base="xs:string">
4055+<xs:enumeration value="MSIN"/>
4056+<xs:enumeration value="CNFA"/>
4057+<xs:enumeration value="DNFA"/>
4058+<xs:enumeration value="CINV"/>
4059+<xs:enumeration value="CREN"/>
4060+<xs:enumeration value="DEBN"/>
4061+<xs:enumeration value="HIRI"/>
4062+<xs:enumeration value="SBIN"/>
4063+<xs:enumeration value="CMCN"/>
4064+<xs:enumeration value="SOAC"/>
4065+<xs:enumeration value="DISP"/>
4066+</xs:restriction>
4067+</xs:simpleType>
4068+<xs:simpleType name="DocumentType3Code">
4069+<xs:restriction base="xs:string">
4070+<xs:enumeration value="RADM"/>
4071+<xs:enumeration value="RPIN"/>
4072+<xs:enumeration value="FXDR"/>
4073+<xs:enumeration value="DISP"/>
4074+<xs:enumeration value="PUOR"/>
4075+<xs:enumeration value="SCOR"/>
4076+</xs:restriction>
4077+</xs:simpleType>
4078+<xs:simpleType name="DunsIdentifier">
4079+<xs:restriction base="xs:string">
4080+<xs:pattern value="[0-9]{9,9}"/>
4081+</xs:restriction>
4082+</xs:simpleType>
4083+<xs:simpleType name="EANGLNIdentifier">
4084+<xs:restriction base="xs:string">
4085+<xs:pattern value="[0-9]{13,13}"/>
4086+</xs:restriction>
4087+</xs:simpleType>
4088+<xs:complexType name="EquivalentAmount">
4089+<xs:sequence>
4090+<xs:element name="Amt" type="CurrencyAndAmount"/>
4091+<xs:element name="CcyOfTrf" type="CurrencyCode"/>
4092+</xs:sequence>
4093+</xs:complexType>
4094+<xs:complexType name="ExchangeRateInformation1">
4095+<xs:sequence>
4096+<xs:element name="XchgRate" type="BaseOneRate" minOccurs="0" maxOccurs="1"/>
4097+<xs:element name="RateTp" type="ExchangeRateType1Code" minOccurs="0" maxOccurs="1"/>
4098+<xs:element name="CtrctId" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4099+</xs:sequence>
4100+</xs:complexType>
4101+<xs:simpleType name="ExchangeRateType1Code">
4102+<xs:restriction base="xs:string">
4103+<xs:enumeration value="SPOT"/>
4104+<xs:enumeration value="SALE"/>
4105+<xs:enumeration value="AGRD"/>
4106+</xs:restriction>
4107+</xs:simpleType>
4108+<xs:simpleType name="ExternalClearingSystemMemberCode">
4109+<xs:restriction base="xs:string">
4110+<xs:minLength value="1"/>
4111+<xs:maxLength value="35"/>
4112+</xs:restriction>
4113+</xs:simpleType>
4114+<xs:simpleType name="ExternalLocalInstrumentCode">
4115+<xs:restriction base="xs:string">
4116+<xs:minLength value="1"/>
4117+<xs:maxLength value="35"/>
4118+</xs:restriction>
4119+</xs:simpleType>
4120+<xs:simpleType name="ExternalPurposeCode">
4121+<xs:restriction base="xs:string">
4122+<xs:minLength value="1"/>
4123+<xs:maxLength value="35"/>
4124+</xs:restriction>
4125+</xs:simpleType>
4126+<xs:complexType name="FinancialInstitutionIdentification3">
4127+<xs:sequence>
4128+<xs:element name="BIC" type="BICIdentifier" minOccurs="0" maxOccurs="1"/>
4129+<xs:element name="ClrSysMmbId" type="ClearingSystemMemberIdentification3Choice" minOccurs="0" maxOccurs="1"/>
4130+<xs:element name="Nm" type="Max70Text" minOccurs="0" maxOccurs="1"/>
4131+<xs:element name="PstlAdr" type="PostalAddress1" minOccurs="0" maxOccurs="1"/>
4132+<xs:element name="PrtryId" type="GenericIdentification3" minOccurs="0" maxOccurs="1"/>
4133+</xs:sequence>
4134+</xs:complexType>
4135+<xs:complexType name="FinancialInstitutionIdentification5Choice">
4136+<xs:sequence>
4137+<xs:choice>
4138+<xs:element name="BIC" type="BICIdentifier"/>
4139+<xs:element name="ClrSysMmbId" type="ClearingSystemMemberIdentification3Choice"/>
4140+<xs:element name="NmAndAdr" type="NameAndAddress7"/>
4141+<xs:element name="PrtryId" type="GenericIdentification3"/>
4142+<xs:element name="CmbndId" type="FinancialInstitutionIdentification3"/>
4143+</xs:choice>
4144+</xs:sequence>
4145+</xs:complexType>
4146+<xs:complexType name="GenericIdentification3">
4147+<xs:sequence>
4148+<xs:element name="Id" type="Max35Text"/>
4149+<xs:element name="Issr" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4150+</xs:sequence>
4151+</xs:complexType>
4152+<xs:complexType name="GenericIdentification4">
4153+<xs:sequence>
4154+<xs:element name="Id" type="Max35Text"/>
4155+<xs:element name="IdTp" type="Max35Text"/>
4156+</xs:sequence>
4157+</xs:complexType>
4158+<xs:complexType name="GroupHeader1">
4159+<xs:sequence>
4160+<xs:element name="MsgId" type="Max35Text"/>
4161+<xs:element name="CreDtTm" type="ISODateTime"/>
4162+<xs:element name="Authstn" type="Max128Text" minOccurs="0" maxOccurs="2"/>
4163+<xs:element name="BtchBookg" type="BatchBookingIndicator" minOccurs="0" maxOccurs="1"/>
4164+<xs:element name="NbOfTxs" type="Max15NumericText"/>
4165+<xs:element name="CtrlSum" type="DecimalNumber" minOccurs="0" maxOccurs="1"/>
4166+<xs:element name="Grpg" type="Grouping1Code"/>
4167+<xs:element name="InitgPty" type="PartyIdentification8"/>
4168+<xs:element name="FwdgAgt" type="BranchAndFinancialInstitutionIdentification3" minOccurs="0" maxOccurs="1"/>
4169+</xs:sequence>
4170+</xs:complexType>
4171+<xs:simpleType name="Grouping1Code">
4172+<xs:restriction base="xs:string">
4173+<xs:enumeration value="SNGL"/>
4174+<xs:enumeration value="GRPD"/>
4175+<xs:enumeration value="MIXD"/>
4176+</xs:restriction>
4177+</xs:simpleType>
4178+<xs:simpleType name="IBANIdentifier">
4179+<xs:restriction base="xs:string">
4180+<xs:pattern value="[a-zA-Z]{2,2}[0-9]{2,2}[a-zA-Z0-9]{1,30}"/>
4181+</xs:restriction>
4182+</xs:simpleType>
4183+<xs:simpleType name="IBEIIdentifier">
4184+<xs:restriction base="xs:string">
4185+<xs:pattern value="[A-Z]{2,2}[B-DF-HJ-NP-TV-XZ0-9]{7,7}[0-9]{1,1}"/>
4186+</xs:restriction>
4187+</xs:simpleType>
4188+<xs:simpleType name="ISODate">
4189+<xs:restriction base="xs:date"/>
4190+</xs:simpleType>
4191+<xs:simpleType name="ISODateTime">
4192+<xs:restriction base="xs:dateTime"/>
4193+</xs:simpleType>
4194+<xs:simpleType name="Instruction3Code">
4195+<xs:restriction base="xs:string">
4196+<xs:enumeration value="CHQB"/>
4197+<xs:enumeration value="HOLD"/>
4198+<xs:enumeration value="PHOB"/>
4199+<xs:enumeration value="TELB"/>
4200+</xs:restriction>
4201+</xs:simpleType>
4202+<xs:complexType name="InstructionForCreditorAgent1">
4203+<xs:sequence>
4204+<xs:element name="Cd" type="Instruction3Code" minOccurs="0" maxOccurs="1"/>
4205+<xs:element name="InstrInf" type="Max140Text" minOccurs="0" maxOccurs="1"/>
4206+</xs:sequence>
4207+</xs:complexType>
4208+<xs:complexType name="LocalInstrument1Choice">
4209+<xs:sequence>
4210+<xs:choice>
4211+<xs:element name="Cd" type="ExternalLocalInstrumentCode"/>
4212+<xs:element name="Prtry" type="Max35Text"/>
4213+</xs:choice>
4214+</xs:sequence>
4215+</xs:complexType>
4216+<xs:simpleType name="Max128Text">
4217+<xs:restriction base="xs:string">
4218+<xs:minLength value="1"/>
4219+<xs:maxLength value="128"/>
4220+</xs:restriction>
4221+</xs:simpleType>
4222+<xs:simpleType name="Max140Text">
4223+<xs:restriction base="xs:string">
4224+<xs:minLength value="1"/>
4225+<xs:maxLength value="140"/>
4226+</xs:restriction>
4227+</xs:simpleType>
4228+<xs:simpleType name="Max15NumericText">
4229+<xs:restriction base="xs:string">
4230+<xs:pattern value="[0-9]{1,15}"/>
4231+</xs:restriction>
4232+</xs:simpleType>
4233+<xs:simpleType name="Max16Text">
4234+<xs:restriction base="xs:string">
4235+<xs:minLength value="1"/>
4236+<xs:maxLength value="16"/>
4237+</xs:restriction>
4238+</xs:simpleType>
4239+<xs:simpleType name="Max256Text">
4240+<xs:restriction base="xs:string">
4241+<xs:minLength value="1"/>
4242+<xs:maxLength value="256"/>
4243+</xs:restriction>
4244+</xs:simpleType>
4245+<xs:simpleType name="Max34Text">
4246+<xs:restriction base="xs:string">
4247+<xs:minLength value="1"/>
4248+<xs:maxLength value="34"/>
4249+</xs:restriction>
4250+</xs:simpleType>
4251+<xs:simpleType name="Max35Text">
4252+<xs:restriction base="xs:string">
4253+<xs:minLength value="1"/>
4254+<xs:maxLength value="35"/>
4255+</xs:restriction>
4256+</xs:simpleType>
4257+<xs:simpleType name="Max3Text">
4258+<xs:restriction base="xs:string">
4259+<xs:minLength value="1"/>
4260+<xs:maxLength value="3"/>
4261+</xs:restriction>
4262+</xs:simpleType>
4263+<xs:simpleType name="Max70Text">
4264+<xs:restriction base="xs:string">
4265+<xs:minLength value="1"/>
4266+<xs:maxLength value="70"/>
4267+</xs:restriction>
4268+</xs:simpleType>
4269+<xs:complexType name="NameAndAddress3">
4270+<xs:sequence>
4271+<xs:element name="Nm" type="Max70Text"/>
4272+<xs:element name="Adr" type="PostalAddress1"/>
4273+</xs:sequence>
4274+</xs:complexType>
4275+<xs:complexType name="NameAndAddress7">
4276+<xs:sequence>
4277+<xs:element name="Nm" type="Max70Text"/>
4278+<xs:element name="PstlAdr" type="PostalAddress1"/>
4279+</xs:sequence>
4280+</xs:complexType>
4281+<xs:complexType name="OrganisationIdentification2">
4282+<xs:sequence>
4283+<xs:element name="BIC" type="BICIdentifier" minOccurs="0" maxOccurs="1"/>
4284+<xs:element name="IBEI" type="IBEIIdentifier" minOccurs="0" maxOccurs="1"/>
4285+<xs:element name="BEI" type="BEIIdentifier" minOccurs="0" maxOccurs="1"/>
4286+<xs:element name="EANGLN" type="EANGLNIdentifier" minOccurs="0" maxOccurs="1"/>
4287+<xs:element name="USCHU" type="CHIPSUniversalIdentifier" minOccurs="0" maxOccurs="1"/>
4288+<xs:element name="DUNS" type="DunsIdentifier" minOccurs="0" maxOccurs="1"/>
4289+<xs:element name="BkPtyId" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4290+<xs:element name="TaxIdNb" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4291+<xs:element name="PrtryId" type="GenericIdentification3" minOccurs="0" maxOccurs="1"/>
4292+</xs:sequence>
4293+</xs:complexType>
4294+<xs:complexType name="Party2Choice">
4295+<xs:sequence>
4296+<xs:choice>
4297+<xs:element name="OrgId" type="OrganisationIdentification2"/>
4298+<xs:element name="PrvtId" type="PersonIdentification3" minOccurs="1" maxOccurs="4"/>
4299+</xs:choice>
4300+</xs:sequence>
4301+</xs:complexType>
4302+<xs:complexType name="PartyIdentification8">
4303+<xs:sequence>
4304+<xs:element name="Nm" type="Max70Text" minOccurs="0" maxOccurs="1"/>
4305+<xs:element name="PstlAdr" type="PostalAddress1" minOccurs="0" maxOccurs="1"/>
4306+<xs:element name="Id" type="Party2Choice" minOccurs="0" maxOccurs="1"/>
4307+<xs:element name="CtryOfRes" type="CountryCode" minOccurs="0" maxOccurs="1"/>
4308+</xs:sequence>
4309+</xs:complexType>
4310+<xs:simpleType name="PaymentCategoryPurpose1Code">
4311+<xs:restriction base="xs:string">
4312+<xs:enumeration value="CORT"/>
4313+<xs:enumeration value="SALA"/>
4314+<xs:enumeration value="TREA"/>
4315+<xs:enumeration value="CASH"/>
4316+<xs:enumeration value="DIVI"/>
4317+<xs:enumeration value="GOVT"/>
4318+<xs:enumeration value="INTE"/>
4319+<xs:enumeration value="LOAN"/>
4320+<xs:enumeration value="PENS"/>
4321+<xs:enumeration value="SECU"/>
4322+<xs:enumeration value="SSBE"/>
4323+<xs:enumeration value="SUPP"/>
4324+<xs:enumeration value="TAXS"/>
4325+<xs:enumeration value="TRAD"/>
4326+<xs:enumeration value="VATX"/>
4327+<xs:enumeration value="HEDG"/>
4328+<xs:enumeration value="INTC"/>
4329+<xs:enumeration value="WHLD"/>
4330+</xs:restriction>
4331+</xs:simpleType>
4332+<xs:complexType name="PaymentIdentification1">
4333+<xs:sequence>
4334+<xs:element name="InstrId" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4335+<xs:element name="EndToEndId" type="Max35Text"/>
4336+</xs:sequence>
4337+</xs:complexType>
4338+<xs:complexType name="PaymentInstructionInformation1">
4339+<xs:sequence>
4340+<xs:element name="PmtInfId" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4341+<xs:element name="PmtMtd" type="PaymentMethod3Code"/>
4342+<xs:element name="PmtTpInf" type="PaymentTypeInformation1" minOccurs="0" maxOccurs="1"/>
4343+<xs:element name="ReqdExctnDt" type="ISODate"/>
4344+<xs:element name="PoolgAdjstmntDt" type="ISODate" minOccurs="0" maxOccurs="1"/>
4345+<xs:element name="Dbtr" type="PartyIdentification8"/>
4346+<xs:element name="DbtrAcct" type="CashAccount7"/>
4347+<xs:element name="DbtrAgt" type="BranchAndFinancialInstitutionIdentification3"/>
4348+<xs:element name="DbtrAgtAcct" type="CashAccount7" minOccurs="0" maxOccurs="1"/>
4349+<xs:element name="UltmtDbtr" type="PartyIdentification8" minOccurs="0" maxOccurs="1"/>
4350+<xs:element name="ChrgBr" type="ChargeBearerType1Code" minOccurs="0" maxOccurs="1"/>
4351+<xs:element name="ChrgsAcct" type="CashAccount7" minOccurs="0" maxOccurs="1"/>
4352+<xs:element name="ChrgsAcctAgt" type="BranchAndFinancialInstitutionIdentification3" minOccurs="0" maxOccurs="1"/>
4353+<xs:element name="CdtTrfTxInf" type="CreditTransferTransactionInformation1" minOccurs="1" maxOccurs="unbounded"/>
4354+</xs:sequence>
4355+</xs:complexType>
4356+<xs:simpleType name="PaymentMethod3Code">
4357+<xs:restriction base="xs:string">
4358+<xs:enumeration value="CHK"/>
4359+<xs:enumeration value="TRF"/>
4360+<xs:enumeration value="TRA"/>
4361+</xs:restriction>
4362+</xs:simpleType>
4363+<xs:complexType name="PaymentTypeInformation1">
4364+<xs:sequence>
4365+<xs:element name="InstrPrty" type="Priority2Code" minOccurs="0" maxOccurs="1"/>
4366+<xs:choice>
4367+<xs:element name="SvcLvl" type="ServiceLevel2Choice" minOccurs="0" maxOccurs="1"/>
4368+<xs:element name="ClrChanl" type="ClearingChannel2Code" minOccurs="0" maxOccurs="1"/>
4369+</xs:choice>
4370+<xs:element name="LclInstrm" type="LocalInstrument1Choice" minOccurs="0" maxOccurs="1"/>
4371+<xs:element name="CtgyPurp" type="PaymentCategoryPurpose1Code" minOccurs="0" maxOccurs="1"/>
4372+</xs:sequence>
4373+</xs:complexType>
4374+<xs:simpleType name="PercentageRate">
4375+<xs:restriction base="xs:decimal">
4376+<xs:fractionDigits value="10"/>
4377+<xs:totalDigits value="11"/>
4378+</xs:restriction>
4379+</xs:simpleType>
4380+<xs:complexType name="PersonIdentification3">
4381+<xs:sequence>
4382+<xs:choice>
4383+<xs:element name="DrvrsLicNb" type="Max35Text"/>
4384+<xs:element name="CstmrNb" type="Max35Text"/>
4385+<xs:element name="SclSctyNb" type="Max35Text"/>
4386+<xs:element name="AlnRegnNb" type="Max35Text"/>
4387+<xs:element name="PsptNb" type="Max35Text"/>
4388+<xs:element name="TaxIdNb" type="Max35Text"/>
4389+<xs:element name="IdntyCardNb" type="Max35Text"/>
4390+<xs:element name="MplyrIdNb" type="Max35Text"/>
4391+<xs:element name="DtAndPlcOfBirth" type="DateAndPlaceOfBirth"/>
4392+<xs:element name="OthrId" type="GenericIdentification4"/>
4393+</xs:choice>
4394+<xs:element name="Issr" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4395+</xs:sequence>
4396+</xs:complexType>
4397+<xs:complexType name="PostalAddress1">
4398+<xs:sequence>
4399+<xs:element name="AdrTp" type="AddressType2Code" minOccurs="0" maxOccurs="1"/>
4400+<xs:element name="AdrLine" type="Max70Text" minOccurs="0" maxOccurs="5"/>
4401+<xs:element name="StrtNm" type="Max70Text" minOccurs="0" maxOccurs="1"/>
4402+<xs:element name="BldgNb" type="Max16Text" minOccurs="0" maxOccurs="1"/>
4403+<xs:element name="PstCd" type="Max16Text" minOccurs="0" maxOccurs="1"/>
4404+<xs:element name="TwnNm" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4405+<xs:element name="CtrySubDvsn" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4406+<xs:element name="Ctry" type="CountryCode"/>
4407+</xs:sequence>
4408+</xs:complexType>
4409+<xs:simpleType name="Priority2Code">
4410+<xs:restriction base="xs:string">
4411+<xs:enumeration value="HIGH"/>
4412+<xs:enumeration value="NORM"/>
4413+</xs:restriction>
4414+</xs:simpleType>
4415+<xs:complexType name="Purpose1Choice">
4416+<xs:sequence>
4417+<xs:choice>
4418+<xs:element name="Cd" type="ExternalPurposeCode"/>
4419+<xs:element name="Prtry" type="Max35Text"/>
4420+</xs:choice>
4421+</xs:sequence>
4422+</xs:complexType>
4423+<xs:complexType name="ReferredDocumentAmount1Choice">
4424+<xs:sequence>
4425+<xs:choice>
4426+<xs:element name="DuePyblAmt" type="CurrencyAndAmount"/>
4427+<xs:element name="DscntApldAmt" type="CurrencyAndAmount"/>
4428+<xs:element name="RmtdAmt" type="CurrencyAndAmount"/>
4429+<xs:element name="CdtNoteAmt" type="CurrencyAndAmount"/>
4430+<xs:element name="TaxAmt" type="CurrencyAndAmount"/>
4431+</xs:choice>
4432+</xs:sequence>
4433+</xs:complexType>
4434+<xs:complexType name="ReferredDocumentInformation1">
4435+<xs:sequence>
4436+<xs:element name="RfrdDocTp" type="ReferredDocumentType1" minOccurs="0" maxOccurs="1"/>
4437+<xs:element name="RfrdDocNb" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4438+</xs:sequence>
4439+</xs:complexType>
4440+<xs:complexType name="ReferredDocumentType1">
4441+<xs:sequence>
4442+<xs:choice>
4443+<xs:element name="Cd" type="DocumentType2Code"/>
4444+<xs:element name="Prtry" type="Max35Text"/>
4445+</xs:choice>
4446+<xs:element name="Issr" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4447+</xs:sequence>
4448+</xs:complexType>
4449+<xs:complexType name="RegulatoryAuthority">
4450+<xs:sequence>
4451+<xs:element name="AuthrtyNm" type="Max70Text" minOccurs="0" maxOccurs="1"/>
4452+<xs:element name="AuthrtyCtry" type="CountryCode" minOccurs="0" maxOccurs="1"/>
4453+</xs:sequence>
4454+</xs:complexType>
4455+<xs:complexType name="RegulatoryReporting2">
4456+<xs:sequence>
4457+<xs:element name="DbtCdtRptgInd" type="RegulatoryReportingType1Code" minOccurs="0" maxOccurs="1"/>
4458+<xs:element name="Authrty" type="RegulatoryAuthority" minOccurs="0" maxOccurs="1"/>
4459+<xs:element name="RgltryDtls" type="StructuredRegulatoryReporting2" minOccurs="0" maxOccurs="1"/>
4460+</xs:sequence>
4461+</xs:complexType>
4462+<xs:simpleType name="RegulatoryReportingType1Code">
4463+<xs:restriction base="xs:string">
4464+<xs:enumeration value="CRED"/>
4465+<xs:enumeration value="DEBT"/>
4466+<xs:enumeration value="BOTH"/>
4467+</xs:restriction>
4468+</xs:simpleType>
4469+<xs:complexType name="RemittanceInformation1">
4470+<xs:sequence>
4471+<xs:element name="Ustrd" type="Max140Text" minOccurs="0" maxOccurs="unbounded"/>
4472+<xs:element name="Strd" type="StructuredRemittanceInformation6" minOccurs="0" maxOccurs="unbounded"/>
4473+</xs:sequence>
4474+</xs:complexType>
4475+<xs:complexType name="RemittanceLocation1">
4476+<xs:sequence>
4477+<xs:element name="RmtId" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4478+<xs:element name="RmtLctnMtd" type="RemittanceLocationMethod1Code" minOccurs="0" maxOccurs="1"/>
4479+<xs:element name="RmtLctnElctrncAdr" type="Max256Text" minOccurs="0" maxOccurs="1"/>
4480+<xs:element name="RmtLctnPstlAdr" type="NameAndAddress3" minOccurs="0" maxOccurs="1"/>
4481+</xs:sequence>
4482+</xs:complexType>
4483+<xs:simpleType name="RemittanceLocationMethod1Code">
4484+<xs:restriction base="xs:string">
4485+<xs:enumeration value="FAXI"/>
4486+<xs:enumeration value="EDIC"/>
4487+<xs:enumeration value="URID"/>
4488+<xs:enumeration value="EMAL"/>
4489+<xs:enumeration value="POST"/>
4490+</xs:restriction>
4491+</xs:simpleType>
4492+<xs:simpleType name="ServiceLevel1Code">
4493+<xs:restriction base="xs:string">
4494+<xs:enumeration value="SEPA"/>
4495+<xs:enumeration value="SDVA"/>
4496+<xs:enumeration value="PRPT"/>
4497+</xs:restriction>
4498+</xs:simpleType>
4499+<xs:complexType name="ServiceLevel2Choice">
4500+<xs:sequence>
4501+<xs:choice>
4502+<xs:element name="Cd" type="ServiceLevel1Code"/>
4503+<xs:element name="Prtry" type="Max35Text"/>
4504+</xs:choice>
4505+</xs:sequence>
4506+</xs:complexType>
4507+<xs:complexType name="SimpleIdentificationInformation2">
4508+<xs:sequence>
4509+<xs:element name="Id" type="Max34Text"/>
4510+</xs:sequence>
4511+</xs:complexType>
4512+<xs:complexType name="StructuredRegulatoryReporting2">
4513+<xs:sequence>
4514+<xs:element name="Cd" type="Max3Text" minOccurs="0" maxOccurs="1"/>
4515+<xs:element name="Amt" type="CurrencyAndAmount" minOccurs="0" maxOccurs="1"/>
4516+<xs:element name="Inf" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4517+</xs:sequence>
4518+</xs:complexType>
4519+<xs:complexType name="StructuredRemittanceInformation6">
4520+<xs:sequence>
4521+<xs:element name="RfrdDocInf" type="ReferredDocumentInformation1" minOccurs="0" maxOccurs="1"/>
4522+<xs:element name="RfrdDocRltdDt" type="ISODate" minOccurs="0" maxOccurs="1"/>
4523+<xs:element name="RfrdDocAmt" type="ReferredDocumentAmount1Choice" minOccurs="0" maxOccurs="unbounded"/>
4524+<xs:element name="CdtrRefInf" type="CreditorReferenceInformation1" minOccurs="0" maxOccurs="1"/>
4525+<xs:element name="Invcr" type="PartyIdentification8" minOccurs="0" maxOccurs="1"/>
4526+<xs:element name="Invcee" type="PartyIdentification8" minOccurs="0" maxOccurs="1"/>
4527+<xs:element name="AddtlRmtInf" type="Max140Text" minOccurs="0" maxOccurs="1"/>
4528+</xs:sequence>
4529+</xs:complexType>
4530+<xs:complexType name="TaxDetails">
4531+<xs:sequence>
4532+<xs:element name="CertId" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4533+<xs:element name="TaxTp" type="TaxType" minOccurs="0" maxOccurs="1"/>
4534+</xs:sequence>
4535+</xs:complexType>
4536+<xs:complexType name="TaxInformation2">
4537+<xs:sequence>
4538+<xs:element name="CdtrTaxId" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4539+<xs:element name="CdtrTaxTp" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4540+<xs:element name="DbtrTaxId" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4541+<xs:element name="TaxRefNb" type="Max140Text" minOccurs="0" maxOccurs="1"/>
4542+<xs:element name="TtlTaxblBaseAmt" type="CurrencyAndAmount" minOccurs="0" maxOccurs="1"/>
4543+<xs:element name="TtlTaxAmt" type="CurrencyAndAmount" minOccurs="0" maxOccurs="1"/>
4544+<xs:element name="TaxDt" type="ISODate" minOccurs="0" maxOccurs="1"/>
4545+<xs:element name="TaxTpInf" type="TaxDetails" minOccurs="0" maxOccurs="unbounded"/>
4546+</xs:sequence>
4547+</xs:complexType>
4548+<xs:complexType name="TaxType">
4549+<xs:sequence>
4550+<xs:element name="CtgyDesc" type="Max35Text" minOccurs="0" maxOccurs="1"/>
4551+<xs:element name="Rate" type="PercentageRate" minOccurs="0" maxOccurs="1"/>
4552+<xs:element name="TaxblBaseAmt" type="CurrencyAndAmount" minOccurs="0" maxOccurs="1"/>
4553+<xs:element name="Amt" type="CurrencyAndAmount" minOccurs="0" maxOccurs="1"/>
4554+</xs:sequence>
4555+</xs:complexType>
4556+<xs:simpleType name="UPICIdentifier">
4557+<xs:restriction base="xs:string">
4558+<xs:pattern value="[0-9]{8,17}"/>
4559+</xs:restriction>
4560+</xs:simpleType>
4561+<xs:complexType name="pain.001.001.02">
4562+<xs:sequence>
4563+<xs:element name="GrpHdr" type="GroupHeader1"/>
4564+<xs:element name="PmtInf" type="PaymentInstructionInformation1" minOccurs="1" maxOccurs="unbounded"/>
4565+</xs:sequence>
4566+</xs:complexType>
4567+</xs:schema>
4568
4569=== added file 'account_payment_sepa_credit_transfer/data/pain.001.001.03.xsd'
4570--- account_payment_sepa_credit_transfer/data/pain.001.001.03.xsd 1970-01-01 00:00:00 +0000
4571+++ account_payment_sepa_credit_transfer/data/pain.001.001.03.xsd 2014-06-02 14:43:40 +0000
4572@@ -0,0 +1,921 @@
4573+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
4574+<!--Generated by SWIFTStandards Workstation (build:R6.1.0.2) on 2009 Jan 08 17:30:53-->
4575+<xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
4576+ <xs:element name="Document" type="Document"/>
4577+ <xs:complexType name="AccountIdentification4Choice">
4578+ <xs:sequence>
4579+ <xs:choice>
4580+ <xs:element name="IBAN" type="IBAN2007Identifier"/>
4581+ <xs:element name="Othr" type="GenericAccountIdentification1"/>
4582+ </xs:choice>
4583+ </xs:sequence>
4584+ </xs:complexType>
4585+ <xs:complexType name="AccountSchemeName1Choice">
4586+ <xs:sequence>
4587+ <xs:choice>
4588+ <xs:element name="Cd" type="ExternalAccountIdentification1Code"/>
4589+ <xs:element name="Prtry" type="Max35Text"/>
4590+ </xs:choice>
4591+ </xs:sequence>
4592+ </xs:complexType>
4593+ <xs:simpleType name="ActiveOrHistoricCurrencyAndAmount_SimpleType">
4594+ <xs:restriction base="xs:decimal">
4595+ <xs:minInclusive value="0"/>
4596+ <xs:fractionDigits value="5"/>
4597+ <xs:totalDigits value="18"/>
4598+ </xs:restriction>
4599+ </xs:simpleType>
4600+ <xs:complexType name="ActiveOrHistoricCurrencyAndAmount">
4601+ <xs:simpleContent>
4602+ <xs:extension base="ActiveOrHistoricCurrencyAndAmount_SimpleType">
4603+ <xs:attribute name="Ccy" type="ActiveOrHistoricCurrencyCode" use="required"/>
4604+ </xs:extension>
4605+ </xs:simpleContent>
4606+ </xs:complexType>
4607+ <xs:simpleType name="ActiveOrHistoricCurrencyCode">
4608+ <xs:restriction base="xs:string">
4609+ <xs:pattern value="[A-Z]{3,3}"/>
4610+ </xs:restriction>
4611+ </xs:simpleType>
4612+ <xs:simpleType name="AddressType2Code">
4613+ <xs:restriction base="xs:string">
4614+ <xs:enumeration value="ADDR"/>
4615+ <xs:enumeration value="PBOX"/>
4616+ <xs:enumeration value="HOME"/>
4617+ <xs:enumeration value="BIZZ"/>
4618+ <xs:enumeration value="MLTO"/>
4619+ <xs:enumeration value="DLVY"/>
4620+ </xs:restriction>
4621+ </xs:simpleType>
4622+ <xs:complexType name="AmountType3Choice">
4623+ <xs:sequence>
4624+ <xs:choice>
4625+ <xs:element name="InstdAmt" type="ActiveOrHistoricCurrencyAndAmount"/>
4626+ <xs:element name="EqvtAmt" type="EquivalentAmount2"/>
4627+ </xs:choice>
4628+ </xs:sequence>
4629+ </xs:complexType>
4630+ <xs:simpleType name="AnyBICIdentifier">
4631+ <xs:restriction base="xs:string">
4632+ <xs:pattern value="[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"/>
4633+ </xs:restriction>
4634+ </xs:simpleType>
4635+ <xs:complexType name="Authorisation1Choice">
4636+ <xs:sequence>
4637+ <xs:choice>
4638+ <xs:element name="Cd" type="Authorisation1Code"/>
4639+ <xs:element name="Prtry" type="Max128Text"/>
4640+ </xs:choice>
4641+ </xs:sequence>
4642+ </xs:complexType>
4643+ <xs:simpleType name="Authorisation1Code">
4644+ <xs:restriction base="xs:string">
4645+ <xs:enumeration value="AUTH"/>
4646+ <xs:enumeration value="FDET"/>
4647+ <xs:enumeration value="FSUM"/>
4648+ <xs:enumeration value="ILEV"/>
4649+ </xs:restriction>
4650+ </xs:simpleType>
4651+ <xs:simpleType name="BICIdentifier">
4652+ <xs:restriction base="xs:string">
4653+ <xs:pattern value="[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"/>
4654+ </xs:restriction>
4655+ </xs:simpleType>
4656+ <xs:simpleType name="BaseOneRate">
4657+ <xs:restriction base="xs:decimal">
4658+ <xs:fractionDigits value="10"/>
4659+ <xs:totalDigits value="11"/>
4660+ </xs:restriction>
4661+ </xs:simpleType>
4662+ <xs:simpleType name="BatchBookingIndicator">
4663+ <xs:restriction base="xs:boolean"/>
4664+ </xs:simpleType>
4665+ <xs:complexType name="BranchAndFinancialInstitutionIdentification4">
4666+ <xs:sequence>
4667+ <xs:element name="FinInstnId" type="FinancialInstitutionIdentification7"/>
4668+ <xs:element maxOccurs="1" minOccurs="0" name="BrnchId" type="BranchData2"/>
4669+ </xs:sequence>
4670+ </xs:complexType>
4671+ <xs:complexType name="BranchData2">
4672+ <xs:sequence>
4673+ <xs:element maxOccurs="1" minOccurs="0" name="Id" type="Max35Text"/>
4674+ <xs:element maxOccurs="1" minOccurs="0" name="Nm" type="Max140Text"/>
4675+ <xs:element maxOccurs="1" minOccurs="0" name="PstlAdr" type="PostalAddress6"/>
4676+ </xs:sequence>
4677+ </xs:complexType>
4678+ <xs:complexType name="CashAccount16">
4679+ <xs:sequence>
4680+ <xs:element name="Id" type="AccountIdentification4Choice"/>
4681+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="CashAccountType2"/>
4682+ <xs:element maxOccurs="1" minOccurs="0" name="Ccy" type="ActiveOrHistoricCurrencyCode"/>
4683+ <xs:element maxOccurs="1" minOccurs="0" name="Nm" type="Max70Text"/>
4684+ </xs:sequence>
4685+ </xs:complexType>
4686+ <xs:complexType name="CashAccountType2">
4687+ <xs:sequence>
4688+ <xs:choice>
4689+ <xs:element name="Cd" type="CashAccountType4Code"/>
4690+ <xs:element name="Prtry" type="Max35Text"/>
4691+ </xs:choice>
4692+ </xs:sequence>
4693+ </xs:complexType>
4694+ <xs:simpleType name="CashAccountType4Code">
4695+ <xs:restriction base="xs:string">
4696+ <xs:enumeration value="CASH"/>
4697+ <xs:enumeration value="CHAR"/>
4698+ <xs:enumeration value="COMM"/>
4699+ <xs:enumeration value="TAXE"/>
4700+ <xs:enumeration value="CISH"/>
4701+ <xs:enumeration value="TRAS"/>
4702+ <xs:enumeration value="SACC"/>
4703+ <xs:enumeration value="CACC"/>
4704+ <xs:enumeration value="SVGS"/>
4705+ <xs:enumeration value="ONDP"/>
4706+ <xs:enumeration value="MGLD"/>
4707+ <xs:enumeration value="NREX"/>
4708+ <xs:enumeration value="MOMA"/>
4709+ <xs:enumeration value="LOAN"/>
4710+ <xs:enumeration value="SLRY"/>
4711+ <xs:enumeration value="ODFT"/>
4712+ </xs:restriction>
4713+ </xs:simpleType>
4714+ <xs:complexType name="CategoryPurpose1Choice">
4715+ <xs:sequence>
4716+ <xs:choice>
4717+ <xs:element name="Cd" type="ExternalCategoryPurpose1Code"/>
4718+ <xs:element name="Prtry" type="Max35Text"/>
4719+ </xs:choice>
4720+ </xs:sequence>
4721+ </xs:complexType>
4722+ <xs:simpleType name="ChargeBearerType1Code">
4723+ <xs:restriction base="xs:string">
4724+ <xs:enumeration value="DEBT"/>
4725+ <xs:enumeration value="CRED"/>
4726+ <xs:enumeration value="SHAR"/>
4727+ <xs:enumeration value="SLEV"/>
4728+ </xs:restriction>
4729+ </xs:simpleType>
4730+ <xs:complexType name="Cheque6">
4731+ <xs:sequence>
4732+ <xs:element maxOccurs="1" minOccurs="0" name="ChqTp" type="ChequeType2Code"/>
4733+ <xs:element maxOccurs="1" minOccurs="0" name="ChqNb" type="Max35Text"/>
4734+ <xs:element maxOccurs="1" minOccurs="0" name="ChqFr" type="NameAndAddress10"/>
4735+ <xs:element maxOccurs="1" minOccurs="0" name="DlvryMtd" type="ChequeDeliveryMethod1Choice"/>
4736+ <xs:element maxOccurs="1" minOccurs="0" name="DlvrTo" type="NameAndAddress10"/>
4737+ <xs:element maxOccurs="1" minOccurs="0" name="InstrPrty" type="Priority2Code"/>
4738+ <xs:element maxOccurs="1" minOccurs="0" name="ChqMtrtyDt" type="ISODate"/>
4739+ <xs:element maxOccurs="1" minOccurs="0" name="FrmsCd" type="Max35Text"/>
4740+ <xs:element maxOccurs="2" minOccurs="0" name="MemoFld" type="Max35Text"/>
4741+ <xs:element maxOccurs="1" minOccurs="0" name="RgnlClrZone" type="Max35Text"/>
4742+ <xs:element maxOccurs="1" minOccurs="0" name="PrtLctn" type="Max35Text"/>
4743+ </xs:sequence>
4744+ </xs:complexType>
4745+ <xs:simpleType name="ChequeDelivery1Code">
4746+ <xs:restriction base="xs:string">
4747+ <xs:enumeration value="MLDB"/>
4748+ <xs:enumeration value="MLCD"/>
4749+ <xs:enumeration value="MLFA"/>
4750+ <xs:enumeration value="CRDB"/>
4751+ <xs:enumeration value="CRCD"/>
4752+ <xs:enumeration value="CRFA"/>
4753+ <xs:enumeration value="PUDB"/>
4754+ <xs:enumeration value="PUCD"/>
4755+ <xs:enumeration value="PUFA"/>
4756+ <xs:enumeration value="RGDB"/>
4757+ <xs:enumeration value="RGCD"/>
4758+ <xs:enumeration value="RGFA"/>
4759+ </xs:restriction>
4760+ </xs:simpleType>
4761+ <xs:complexType name="ChequeDeliveryMethod1Choice">
4762+ <xs:sequence>
4763+ <xs:choice>
4764+ <xs:element name="Cd" type="ChequeDelivery1Code"/>
4765+ <xs:element name="Prtry" type="Max35Text"/>
4766+ </xs:choice>
4767+ </xs:sequence>
4768+ </xs:complexType>
4769+ <xs:simpleType name="ChequeType2Code">
4770+ <xs:restriction base="xs:string">
4771+ <xs:enumeration value="CCHQ"/>
4772+ <xs:enumeration value="CCCH"/>
4773+ <xs:enumeration value="BCHQ"/>
4774+ <xs:enumeration value="DRFT"/>
4775+ <xs:enumeration value="ELDR"/>
4776+ </xs:restriction>
4777+ </xs:simpleType>
4778+ <xs:complexType name="ClearingSystemIdentification2Choice">
4779+ <xs:sequence>
4780+ <xs:choice>
4781+ <xs:element name="Cd" type="ExternalClearingSystemIdentification1Code"/>
4782+ <xs:element name="Prtry" type="Max35Text"/>
4783+ </xs:choice>
4784+ </xs:sequence>
4785+ </xs:complexType>
4786+ <xs:complexType name="ClearingSystemMemberIdentification2">
4787+ <xs:sequence>
4788+ <xs:element maxOccurs="1" minOccurs="0" name="ClrSysId" type="ClearingSystemIdentification2Choice"/>
4789+ <xs:element name="MmbId" type="Max35Text"/>
4790+ </xs:sequence>
4791+ </xs:complexType>
4792+ <xs:complexType name="ContactDetails2">
4793+ <xs:sequence>
4794+ <xs:element maxOccurs="1" minOccurs="0" name="NmPrfx" type="NamePrefix1Code"/>
4795+ <xs:element maxOccurs="1" minOccurs="0" name="Nm" type="Max140Text"/>
4796+ <xs:element maxOccurs="1" minOccurs="0" name="PhneNb" type="PhoneNumber"/>
4797+ <xs:element maxOccurs="1" minOccurs="0" name="MobNb" type="PhoneNumber"/>
4798+ <xs:element maxOccurs="1" minOccurs="0" name="FaxNb" type="PhoneNumber"/>
4799+ <xs:element maxOccurs="1" minOccurs="0" name="EmailAdr" type="Max2048Text"/>
4800+ <xs:element maxOccurs="1" minOccurs="0" name="Othr" type="Max35Text"/>
4801+ </xs:sequence>
4802+ </xs:complexType>
4803+ <xs:simpleType name="CountryCode">
4804+ <xs:restriction base="xs:string">
4805+ <xs:pattern value="[A-Z]{2,2}"/>
4806+ </xs:restriction>
4807+ </xs:simpleType>
4808+ <xs:simpleType name="CreditDebitCode">
4809+ <xs:restriction base="xs:string">
4810+ <xs:enumeration value="CRDT"/>
4811+ <xs:enumeration value="DBIT"/>
4812+ </xs:restriction>
4813+ </xs:simpleType>
4814+ <xs:complexType name="CreditTransferTransactionInformation10">
4815+ <xs:sequence>
4816+ <xs:element name="PmtId" type="PaymentIdentification1"/>
4817+ <xs:element maxOccurs="1" minOccurs="0" name="PmtTpInf" type="PaymentTypeInformation19"/>
4818+ <xs:element name="Amt" type="AmountType3Choice"/>
4819+ <xs:element maxOccurs="1" minOccurs="0" name="XchgRateInf" type="ExchangeRateInformation1"/>
4820+ <xs:element maxOccurs="1" minOccurs="0" name="ChrgBr" type="ChargeBearerType1Code"/>
4821+ <xs:element maxOccurs="1" minOccurs="0" name="ChqInstr" type="Cheque6"/>
4822+ <xs:element maxOccurs="1" minOccurs="0" name="UltmtDbtr" type="PartyIdentification32"/>
4823+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt1" type="BranchAndFinancialInstitutionIdentification4"/>
4824+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt1Acct" type="CashAccount16"/>
4825+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt2" type="BranchAndFinancialInstitutionIdentification4"/>
4826+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt2Acct" type="CashAccount16"/>
4827+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt3" type="BranchAndFinancialInstitutionIdentification4"/>
4828+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt3Acct" type="CashAccount16"/>
4829+ <xs:element maxOccurs="1" minOccurs="0" name="CdtrAgt" type="BranchAndFinancialInstitutionIdentification4"/>
4830+ <xs:element maxOccurs="1" minOccurs="0" name="CdtrAgtAcct" type="CashAccount16"/>
4831+ <xs:element maxOccurs="1" minOccurs="0" name="Cdtr" type="PartyIdentification32"/>
4832+ <xs:element maxOccurs="1" minOccurs="0" name="CdtrAcct" type="CashAccount16"/>
4833+ <xs:element maxOccurs="1" minOccurs="0" name="UltmtCdtr" type="PartyIdentification32"/>
4834+ <xs:element maxOccurs="unbounded" minOccurs="0" name="InstrForCdtrAgt" type="InstructionForCreditorAgent1"/>
4835+ <xs:element maxOccurs="1" minOccurs="0" name="InstrForDbtrAgt" type="Max140Text"/>
4836+ <xs:element maxOccurs="1" minOccurs="0" name="Purp" type="Purpose2Choice"/>
4837+ <xs:element maxOccurs="10" minOccurs="0" name="RgltryRptg" type="RegulatoryReporting3"/>
4838+ <xs:element maxOccurs="1" minOccurs="0" name="Tax" type="TaxInformation3"/>
4839+ <xs:element maxOccurs="10" minOccurs="0" name="RltdRmtInf" type="RemittanceLocation2"/>
4840+ <xs:element maxOccurs="1" minOccurs="0" name="RmtInf" type="RemittanceInformation5"/>
4841+ </xs:sequence>
4842+ </xs:complexType>
4843+ <xs:complexType name="CreditorReferenceInformation2">
4844+ <xs:sequence>
4845+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="CreditorReferenceType2"/>
4846+ <xs:element maxOccurs="1" minOccurs="0" name="Ref" type="Max35Text"/>
4847+ </xs:sequence>
4848+ </xs:complexType>
4849+ <xs:complexType name="CreditorReferenceType1Choice">
4850+ <xs:sequence>
4851+ <xs:choice>
4852+ <xs:element name="Cd" type="DocumentType3Code"/>
4853+ <xs:element name="Prtry" type="Max35Text"/>
4854+ </xs:choice>
4855+ </xs:sequence>
4856+ </xs:complexType>
4857+ <xs:complexType name="CreditorReferenceType2">
4858+ <xs:sequence>
4859+ <xs:element name="CdOrPrtry" type="CreditorReferenceType1Choice"/>
4860+ <xs:element maxOccurs="1" minOccurs="0" name="Issr" type="Max35Text"/>
4861+ </xs:sequence>
4862+ </xs:complexType>
4863+ <xs:complexType name="CustomerCreditTransferInitiationV03">
4864+ <xs:sequence>
4865+ <xs:element name="GrpHdr" type="GroupHeader32"/>
4866+ <xs:element maxOccurs="unbounded" minOccurs="1" name="PmtInf" type="PaymentInstructionInformation3"/>
4867+ </xs:sequence>
4868+ </xs:complexType>
4869+ <xs:complexType name="DateAndPlaceOfBirth">
4870+ <xs:sequence>
4871+ <xs:element name="BirthDt" type="ISODate"/>
4872+ <xs:element maxOccurs="1" minOccurs="0" name="PrvcOfBirth" type="Max35Text"/>
4873+ <xs:element name="CityOfBirth" type="Max35Text"/>
4874+ <xs:element name="CtryOfBirth" type="CountryCode"/>
4875+ </xs:sequence>
4876+ </xs:complexType>
4877+ <xs:complexType name="DatePeriodDetails">
4878+ <xs:sequence>
4879+ <xs:element name="FrDt" type="ISODate"/>
4880+ <xs:element name="ToDt" type="ISODate"/>
4881+ </xs:sequence>
4882+ </xs:complexType>
4883+ <xs:simpleType name="DecimalNumber">
4884+ <xs:restriction base="xs:decimal">
4885+ <xs:fractionDigits value="17"/>
4886+ <xs:totalDigits value="18"/>
4887+ </xs:restriction>
4888+ </xs:simpleType>
4889+ <xs:complexType name="Document">
4890+ <xs:sequence>
4891+ <xs:element name="CstmrCdtTrfInitn" type="CustomerCreditTransferInitiationV03"/>
4892+ </xs:sequence>
4893+ </xs:complexType>
4894+ <xs:complexType name="DocumentAdjustment1">
4895+ <xs:sequence>
4896+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
4897+ <xs:element maxOccurs="1" minOccurs="0" name="CdtDbtInd" type="CreditDebitCode"/>
4898+ <xs:element maxOccurs="1" minOccurs="0" name="Rsn" type="Max4Text"/>
4899+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlInf" type="Max140Text"/>
4900+ </xs:sequence>
4901+ </xs:complexType>
4902+ <xs:simpleType name="DocumentType3Code">
4903+ <xs:restriction base="xs:string">
4904+ <xs:enumeration value="RADM"/>
4905+ <xs:enumeration value="RPIN"/>
4906+ <xs:enumeration value="FXDR"/>
4907+ <xs:enumeration value="DISP"/>
4908+ <xs:enumeration value="PUOR"/>
4909+ <xs:enumeration value="SCOR"/>
4910+ </xs:restriction>
4911+ </xs:simpleType>
4912+ <xs:simpleType name="DocumentType5Code">
4913+ <xs:restriction base="xs:string">
4914+ <xs:enumeration value="MSIN"/>
4915+ <xs:enumeration value="CNFA"/>
4916+ <xs:enumeration value="DNFA"/>
4917+ <xs:enumeration value="CINV"/>
4918+ <xs:enumeration value="CREN"/>
4919+ <xs:enumeration value="DEBN"/>
4920+ <xs:enumeration value="HIRI"/>
4921+ <xs:enumeration value="SBIN"/>
4922+ <xs:enumeration value="CMCN"/>
4923+ <xs:enumeration value="SOAC"/>
4924+ <xs:enumeration value="DISP"/>
4925+ <xs:enumeration value="BOLD"/>
4926+ <xs:enumeration value="VCHR"/>
4927+ <xs:enumeration value="AROI"/>
4928+ <xs:enumeration value="TSUT"/>
4929+ </xs:restriction>
4930+ </xs:simpleType>
4931+ <xs:complexType name="EquivalentAmount2">
4932+ <xs:sequence>
4933+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
4934+ <xs:element name="CcyOfTrf" type="ActiveOrHistoricCurrencyCode"/>
4935+ </xs:sequence>
4936+ </xs:complexType>
4937+ <xs:complexType name="ExchangeRateInformation1">
4938+ <xs:sequence>
4939+ <xs:element maxOccurs="1" minOccurs="0" name="XchgRate" type="BaseOneRate"/>
4940+ <xs:element maxOccurs="1" minOccurs="0" name="RateTp" type="ExchangeRateType1Code"/>
4941+ <xs:element maxOccurs="1" minOccurs="0" name="CtrctId" type="Max35Text"/>
4942+ </xs:sequence>
4943+ </xs:complexType>
4944+ <xs:simpleType name="ExchangeRateType1Code">
4945+ <xs:restriction base="xs:string">
4946+ <xs:enumeration value="SPOT"/>
4947+ <xs:enumeration value="SALE"/>
4948+ <xs:enumeration value="AGRD"/>
4949+ </xs:restriction>
4950+ </xs:simpleType>
4951+ <xs:simpleType name="ExternalAccountIdentification1Code">
4952+ <xs:restriction base="xs:string">
4953+ <xs:minLength value="1"/>
4954+ <xs:maxLength value="4"/>
4955+ </xs:restriction>
4956+ </xs:simpleType>
4957+ <xs:simpleType name="ExternalCategoryPurpose1Code">
4958+ <xs:restriction base="xs:string">
4959+ <xs:minLength value="1"/>
4960+ <xs:maxLength value="4"/>
4961+ </xs:restriction>
4962+ </xs:simpleType>
4963+ <xs:simpleType name="ExternalClearingSystemIdentification1Code">
4964+ <xs:restriction base="xs:string">
4965+ <xs:minLength value="1"/>
4966+ <xs:maxLength value="5"/>
4967+ </xs:restriction>
4968+ </xs:simpleType>
4969+ <xs:simpleType name="ExternalFinancialInstitutionIdentification1Code">
4970+ <xs:restriction base="xs:string">
4971+ <xs:minLength value="1"/>
4972+ <xs:maxLength value="4"/>
4973+ </xs:restriction>
4974+ </xs:simpleType>
4975+ <xs:simpleType name="ExternalLocalInstrument1Code">
4976+ <xs:restriction base="xs:string">
4977+ <xs:minLength value="1"/>
4978+ <xs:maxLength value="35"/>
4979+ </xs:restriction>
4980+ </xs:simpleType>
4981+ <xs:simpleType name="ExternalOrganisationIdentification1Code">
4982+ <xs:restriction base="xs:string">
4983+ <xs:minLength value="1"/>
4984+ <xs:maxLength value="4"/>
4985+ </xs:restriction>
4986+ </xs:simpleType>
4987+ <xs:simpleType name="ExternalPersonIdentification1Code">
4988+ <xs:restriction base="xs:string">
4989+ <xs:minLength value="1"/>
4990+ <xs:maxLength value="4"/>
4991+ </xs:restriction>
4992+ </xs:simpleType>
4993+ <xs:simpleType name="ExternalPurpose1Code">
4994+ <xs:restriction base="xs:string">
4995+ <xs:minLength value="1"/>
4996+ <xs:maxLength value="4"/>
4997+ </xs:restriction>
4998+ </xs:simpleType>
4999+ <xs:simpleType name="ExternalServiceLevel1Code">
5000+ <xs:restriction base="xs:string">
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches