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
=== added directory 'account_payment_direct_debit'
=== renamed directory 'account_payment_direct_debit' => 'account_payment_direct_debit.moved'
=== added file 'account_payment_direct_debit/__init__.py'
--- account_payment_direct_debit/__init__.py 1970-01-01 00:00:00 +0000
+++ account_payment_direct_debit/__init__.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,1 @@
1import model
02
=== added file 'account_payment_direct_debit/__openerp__.py'
--- account_payment_direct_debit/__openerp__.py 1970-01-01 00:00:00 +0000
+++ account_payment_direct_debit/__openerp__.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,56 @@
1##############################################################################
2#
3# Copyright (C) 2011 - 2013 Therp BV (<http://therp.nl>).
4# Copyright (C) 2011 Smile (<http://smile.fr>).
5# Copyright (C) 2014 Acysos S.L. (<http://acysos.com>).
6# @author: Ignacio Ibeas <ignacio@acysos.com>
7# All Rights Reserved
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU Affero General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU Affero General Public License for more details.
18#
19# You should have received a copy of the GNU Affero General Public License
20# along with this program. If not, see <http://www.gnu.org/licenses/>.
21#
22##############################################################################
23{
24 'name': 'Direct Debit',
25 'version': '7.0.2.134',
26 'license': 'AGPL-3',
27 'author': ['Therp BV', 'Smile'],
28 'website': 'https://launchpad.net/account-payment',
29 'category': 'Banking addons',
30 'depends': ['account_payment_extension'],
31 'data': [
32 'view/account_payment.xml',
33 'view/account_invoice.xml',
34 'view/payment_type.xml',
35 'workflow/account_invoice.xml',
36 'data/account_payment_term.xml',
37 ],
38 'description': '''
39This module adds support for direct debit orders, analogous to payment orders.
40A new entry in the Accounting/Payment menu allow you to create a direct debit
41order that helps you to select any customer invoices for you to collect.
42
43This module explicitely implements direct debit orders as applicable
44in the Netherlands. Debit orders are advanced in total by the bank.
45Amounts that cannot be debited or are canceled by account owners are
46credited afterwards. Such a creditation is called a storno. This style of
47direct debit order may not apply to your country.
48
49This module depends on and is part of the account payment for OpenERP. This set
50of modules helps you to provide support for communications with your local
51banking institutions.
52
53Adapted to account_payment_extension by Acysos S.L. <info@acysos.com>
54 ''',
55 'installable': True,
56}
057
=== added directory 'account_payment_direct_debit/data'
=== added file 'account_payment_direct_debit/data/account_payment_term.xml'
--- account_payment_direct_debit/data/account_payment_term.xml 1970-01-01 00:00:00 +0000
+++ account_payment_direct_debit/data/account_payment_term.xml 2014-06-02 14:43:40 +0000
@@ -0,0 +1,16 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data noupdate="1">
4 <record id="payment_term_direct_debit" model="account.payment.term">
5 <field name="name">Direct debit</field>
6 <field name="note">Direct debit in 14 days</field>
7 </record>
8 <record id="payment_term_line_direct_debit" model="account.payment.term.line">
9 <field name="name">Direct debit in 14 days</field>
10 <field name="value">balance</field>
11 <field eval="14" name="days"/>
12 <field eval="0" name="days2"/>
13 <field eval="payment_term_direct_debit" name="payment_id"/>
14 </record>
15 </data>
16</openerp>
017
=== added directory 'account_payment_direct_debit/i18n'
=== added file 'account_payment_direct_debit/i18n/account_direct_debit.pot'
--- account_payment_direct_debit/i18n/account_direct_debit.pot 1970-01-01 00:00:00 +0000
+++ account_payment_direct_debit/i18n/account_direct_debit.pot 2014-06-02 14:43:40 +0000
@@ -0,0 +1,133 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * account_direct_debit
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2013-10-25 16:01+0000\n"
10"PO-Revision-Date: 2013-10-25 16:01+0000\n"
11"Last-Translator: <>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: \n"
16"Plural-Forms: \n"
17
18#. module: account_direct_debit
19#: model:account.payment.term,note:account_direct_debit.payment_term_direct_debit
20msgid "Direct debit in 14 days"
21msgstr ""
22
23#. module: account_direct_debit
24#: model:ir.model,name:account_direct_debit.model_payment_order
25msgid "Payment Order"
26msgstr ""
27
28#. module: account_direct_debit
29#: view:payment.order:0
30msgid "Select Invoices to Collect"
31msgstr ""
32
33#. module: account_direct_debit
34#: model:ir.model,name:account_direct_debit.model_payment_line
35msgid "Payment Line"
36msgstr ""
37
38#. module: account_direct_debit
39#: code:addons/account_direct_debit/model/payment_line.py:140
40#, python-format
41msgid "Can not reconcile"
42msgstr ""
43
44#. module: account_direct_debit
45#: view:account.invoice:0
46msgid "Debit Denied"
47msgstr ""
48
49#. module: account_direct_debit
50#: code:addons/account_direct_debit/model/account_invoice.py:147
51#, python-format
52msgid "Error !"
53msgstr ""
54
55#. module: account_direct_debit
56#: view:account.invoice:0
57msgid "Show only invoices with state Debit denied"
58msgstr ""
59
60#. module: account_direct_debit
61#: view:payment.order:0
62msgid "{'invisible':['|',('state','!=','draft'),('payment_order_type', '!=', 'payment')]}"
63msgstr ""
64
65#. module: account_direct_debit
66#: model:ir.model,name:account_direct_debit.model_account_move_line
67msgid "Journal Items"
68msgstr ""
69
70#. module: account_direct_debit
71#: view:account.invoice:0
72msgid "Debit denied"
73msgstr ""
74
75#. module: account_direct_debit
76#: model:ir.actions.act_window,name:account_direct_debit.action_debit_order_tree
77#: model:ir.ui.menu,name:account_direct_debit.menu_action_debit_order_form
78msgid "Direct Debit Orders"
79msgstr ""
80
81#. module: account_direct_debit
82#: model:account.payment.term,name:account_direct_debit.payment_term_direct_debit
83msgid "Direct debit"
84msgstr ""
85
86#. module: account_direct_debit
87#: code:addons/account_direct_debit/model/account_invoice.py:148
88#, python-format
89msgid "You cannot set invoice '%s' to state 'debit denied', as it is still reconciled."
90msgstr ""
91
92#. module: account_direct_debit
93#: code:addons/account_direct_debit/model/account_invoice.py:152
94#, python-format
95msgid "Invoice '%s': direct debit is denied."
96msgstr ""
97
98#. module: account_direct_debit
99#: code:addons/account_direct_debit/model/payment_line.py:141
100#, python-format
101msgid "Cancelation of payment line '%s' has already been processed"
102msgstr ""
103
104#. module: account_direct_debit
105#: model:ir.model,name:account_direct_debit.model_payment_order_create
106msgid "payment.order.create"
107msgstr ""
108
109#. module: account_direct_debit
110#: field:payment.line,storno:0
111msgid "Storno"
112msgstr ""
113
114#. module: account_direct_debit
115#: help:payment.line,storno:0
116msgid "If this is true, the debit order has been canceled by the bank or by the customer"
117msgstr ""
118
119#. module: account_direct_debit
120#: model:ir.actions.act_window,help:account_direct_debit.action_debit_order_tree
121msgid "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."
122msgstr ""
123
124#. module: account_direct_debit
125#: field:account.move.line,amount_to_receive:0
126msgid "Amount to receive"
127msgstr ""
128
129#. module: account_direct_debit
130#: model:ir.model,name:account_direct_debit.model_account_invoice
131msgid "Invoice"
132msgstr ""
133
0134
=== added file 'account_payment_direct_debit/i18n/es.po'
--- account_payment_direct_debit/i18n/es.po 1970-01-01 00:00:00 +0000
+++ account_payment_direct_debit/i18n/es.po 2014-06-02 14:43:40 +0000
@@ -0,0 +1,133 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * account_payment_direct_debit
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0-20131224-002412\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2014-01-25 11:27+0000\n"
10"PO-Revision-Date: 2014-01-25 11:27+0000\n"
11"Last-Translator: <>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: \n"
16"Plural-Forms: \n"
17
18#. module: account_payment_direct_debit
19#: model:account.payment.term,note:account_payment_direct_debit.payment_term_direct_debit
20msgid "Direct debit in 14 days"
21msgstr "Adeudos directos en 14 días"
22
23#. module: account_payment_direct_debit
24#: model:ir.model,name:account_payment_direct_debit.model_payment_order
25msgid "Payment Order"
26msgstr "Orden de pago"
27
28#. module: account_payment_direct_debit
29#: field:payment.type,payment_order_type:0
30msgid "Payment order type"
31msgstr "Tipo de orden de pago"
32
33#. module: account_payment_direct_debit
34#: model:ir.model,name:account_payment_direct_debit.model_payment_line
35msgid "Payment Line"
36msgstr "Línea de pago"
37
38#. module: account_payment_direct_debit
39#: model:ir.model,name:account_payment_direct_debit.model_payment_mode
40msgid "Payment Mode"
41msgstr "Modo de pago"
42
43#. module: account_payment_direct_debit
44#: code:addons/account_payment_direct_debit/model/payment_line.py:140
45#, python-format
46msgid "Can not reconcile"
47msgstr "No se puede reconciliar"
48
49#. module: account_payment_direct_debit
50#: view:account.invoice:0
51msgid "Debit Denied"
52msgstr "Adeudo denegado"
53
54#. module: account_payment_direct_debit
55#: code:addons/account_payment_direct_debit/model/account_invoice.py:147
56#, python-format
57msgid "Error !"
58msgstr "Error !"
59
60#. module: account_payment_direct_debit
61#: view:account.invoice:0
62msgid "Show only invoices with state Debit denied"
63msgstr "Mostrar solo las facturas con adeudo denegado"
64
65#. module: account_payment_direct_debit
66#: model:ir.model,name:account_payment_direct_debit.model_account_move_line
67msgid "Journal Items"
68msgstr "Apuntes contables"
69
70#. module: account_payment_direct_debit
71#: selection:payment.type,payment_order_type:0
72msgid "Payment"
73msgstr "Pago"
74
75#. module: account_payment_direct_debit
76#: view:account.invoice:0
77msgid "Debit denied"
78msgstr "Adeudo denegado"
79
80#. module: account_payment_direct_debit
81#: model:account.payment.term,name:account_payment_direct_debit.payment_term_direct_debit
82#: selection:payment.type,payment_order_type:0
83msgid "Direct debit"
84msgstr "Adeudo directo"
85
86#. module: account_payment_direct_debit
87#: code:addons/account_payment_direct_debit/model/account_invoice.py:148
88#, python-format
89msgid "You cannot set invoice '%s' to state 'debit denied', as it is still reconciled."
90msgstr "No puede cambiar la factura '%s' a estado 'Adeudo denegado', porque esta aun conciliada."
91
92#. module: account_payment_direct_debit
93#: code:addons/account_payment_direct_debit/model/account_invoice.py:152
94#, python-format
95msgid "Invoice '%s': direct debit is denied."
96msgstr "Factura '%s': adeudo directo es denegado."
97
98#. module: account_payment_direct_debit
99#: model:ir.model,name:account_payment_direct_debit.model_payment_order_create
100msgid "payment.order.create"
101msgstr "pago.orden.crear"
102
103#. module: account_payment_direct_debit
104#: field:payment.line,storno:0
105msgid "Storno"
106msgstr "Anulación"
107
108#. module: account_payment_direct_debit
109#: help:payment.line,storno:0
110msgid "If this is true, the debit order has been canceled by the bank or by the customer"
111msgstr "Si esta seleccionado, el adeudo directo ha sido cancelado por el banco o el cliente"
112
113#. module: account_payment_direct_debit
114#: model:ir.model,name:account_payment_direct_debit.model_payment_type
115msgid "Payment type"
116msgstr "Tipo de pago"
117
118#. module: account_payment_direct_debit
119#: code:addons/account_payment_direct_debit/model/payment_line.py:141
120#, python-format
121msgid "Cancelation of payment line '%s' has already been processed"
122msgstr "La cancelación de la linea de pago '%s' ha sido procesada"
123
124#. module: account_payment_direct_debit
125#: field:account.move.line,amount_to_receive:0
126msgid "Amount to receive"
127msgstr "Cantidad a recibir"
128
129#. module: account_payment_direct_debit
130#: model:ir.model,name:account_payment_direct_debit.model_account_invoice
131msgid "Invoice"
132msgstr "Factura"
133
0134
=== added file 'account_payment_direct_debit/i18n/nl.po'
--- account_payment_direct_debit/i18n/nl.po 1970-01-01 00:00:00 +0000
+++ account_payment_direct_debit/i18n/nl.po 2014-06-02 14:43:40 +0000
@@ -0,0 +1,155 @@
1# Dutch translation for banking-addons
2# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
3# This file is distributed under the same license as the banking-addons package.
4# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
5#
6msgid ""
7msgstr ""
8"Project-Id-Version: banking-addons\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2013-10-25 16:01+0000\n"
11"PO-Revision-Date: 2013-12-03 11:31+0000\n"
12"Last-Translator: Erwin van der Ploeg (BAS Solutions) <Unknown>\n"
13"Language-Team: Dutch <nl@li.org>\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
17"X-Launchpad-Export-Date: 2013-12-04 05:59+0000\n"
18"X-Generator: Launchpad (build 16861)\n"
19
20#. module: account_direct_debit
21#: model:account.payment.term,note:account_direct_debit.payment_term_direct_debit
22msgid "Direct debit in 14 days"
23msgstr "Incasso opdracht in 14 dagen"
24
25#. module: account_direct_debit
26#: model:ir.model,name:account_direct_debit.model_payment_order
27msgid "Payment Order"
28msgstr "Betalingsopdracht"
29
30#. module: account_direct_debit
31#: view:payment.order:0
32msgid "Select Invoices to Collect"
33msgstr "Selecteer openstaande posten ter incasso"
34
35#. module: account_direct_debit
36#: model:ir.model,name:account_direct_debit.model_payment_line
37msgid "Payment Line"
38msgstr "Betaalregel"
39
40#. module: account_direct_debit
41#: code:addons/account_direct_debit/model/payment_line.py:140
42#, python-format
43msgid "Can not reconcile"
44msgstr "Kan niet afletteren"
45
46#. module: account_direct_debit
47#: view:account.invoice:0
48msgid "Debit Denied"
49msgstr "Incasso geweigerd"
50
51#. module: account_direct_debit
52#: code:addons/account_direct_debit/model/account_invoice.py:147
53#, python-format
54msgid "Error !"
55msgstr "Fout !"
56
57#. module: account_direct_debit
58#: view:account.invoice:0
59msgid "Show only invoices with state Debit denied"
60msgstr "Laat alleen facturen zien waarvan de incasso is geweigerd"
61
62#. module: account_direct_debit
63#: view:payment.order:0
64msgid ""
65"{'invisible':['|',('state','!=','draft'),('payment_order_type', '!=', "
66"'payment')]}"
67msgstr ""
68"{'invisible':['|',('state','!=','draft'),('payment_order_type', '!=', "
69"'payment')]}"
70
71#. module: account_direct_debit
72#: model:ir.model,name:account_direct_debit.model_account_move_line
73msgid "Journal Items"
74msgstr "Boekingen"
75
76#. module: account_direct_debit
77#: view:account.invoice:0
78msgid "Debit denied"
79msgstr "Incasso geweigerd"
80
81#. module: account_direct_debit
82#: model:ir.actions.act_window,name:account_direct_debit.action_debit_order_tree
83#: model:ir.ui.menu,name:account_direct_debit.menu_action_debit_order_form
84msgid "Direct Debit Orders"
85msgstr "Incasso opdracht"
86
87#. module: account_direct_debit
88#: model:account.payment.term,name:account_direct_debit.payment_term_direct_debit
89msgid "Direct debit"
90msgstr "Incasso opdracht"
91
92#. module: account_direct_debit
93#: code:addons/account_direct_debit/model/account_invoice.py:148
94#, python-format
95msgid ""
96"You cannot set invoice '%s' to state 'debit denied', as it is still "
97"reconciled."
98msgstr ""
99"Het is niet mogelijk om factuur '%s' in status 'Incasso geweigerd' te "
100"zetten, omdat deze nog is afgeletterd."
101
102#. module: account_direct_debit
103#: code:addons/account_direct_debit/model/account_invoice.py:152
104#, python-format
105msgid "Invoice '%s': direct debit is denied."
106msgstr "Factuur '%s': Incasso geweigerd"
107
108#. module: account_direct_debit
109#: code:addons/account_direct_debit/model/payment_line.py:141
110#, python-format
111msgid "Cancelation of payment line '%s' has already been processed"
112msgstr "Het annuleren van de betaalopdrachtregel '%s' is al verwerkt"
113
114#. module: account_direct_debit
115#: model:ir.model,name:account_direct_debit.model_payment_order_create
116msgid "payment.order.create"
117msgstr "payment.order.create"
118
119#. module: account_direct_debit
120#: field:payment.line,storno:0
121msgid "Storno"
122msgstr "Storno"
123
124#. module: account_direct_debit
125#: help:payment.line,storno:0
126msgid ""
127"If this is true, the debit order has been canceled by the bank or by the "
128"customer"
129msgstr ""
130"Indien aangevinkt is de incasso opdracht al geannuleerd dor de bank of de "
131"klant."
132
133#. module: account_direct_debit
134#: model:ir.actions.act_window,help:account_direct_debit.action_debit_order_tree
135msgid ""
136"A debit order is a debit request from your company to collect customer "
137"invoices. Here you can register all debit orders that should be done, keep "
138"track of all debit orders and mention the invoice reference and the partner "
139"the withdrawal should be done for."
140msgstr ""
141"Een incasso opdracht is een opdracht van uw bedrijf aan uw klant voor het "
142"incasseren van openstaande posten. Hier kunt u alle incasso opdrachten "
143"invoeren die moeten worden uitgevoerd en overzicht houden op alle incasso "
144"opdrachten. Tevens voert u hier de factuurreferentie en klant in waar de "
145"afschrijving moet plaatsvinden."
146
147#. module: account_direct_debit
148#: field:account.move.line,amount_to_receive:0
149msgid "Amount to receive"
150msgstr "Bedrag te ontvangen"
151
152#. module: account_direct_debit
153#: model:ir.model,name:account_direct_debit.model_account_invoice
154msgid "Invoice"
155msgstr "Factuur"
0156
=== added directory 'account_payment_direct_debit/model'
=== added file 'account_payment_direct_debit/model/__init__.py'
--- account_payment_direct_debit/model/__init__.py 1970-01-01 00:00:00 +0000
+++ account_payment_direct_debit/model/__init__.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,6 @@
1import account_payment
2import payment_line
3import account_move_line
4import account_invoice
5import payment_order_create
6import payment_type
07
=== added file 'account_payment_direct_debit/model/account_invoice.py'
--- account_payment_direct_debit/model/account_invoice.py 1970-01-01 00:00:00 +0000
+++ account_payment_direct_debit/model/account_invoice.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,166 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2011 - 2013 Therp BV (<http://therp.nl>).
5#
6# All other contributions are (C) by their respective contributors
7#
8# All Rights Reserved
9#
10# This program is free software: you can redistribute it and/or modify
11# it under the terms of the GNU Affero General Public License as
12# published by the Free Software Foundation, either version 3 of the
13# License, or (at your option) any later version.
14#
15# This program is distributed in the hope that it will be useful,
16# but WITHOUT ANY WARRANTY; without even the implied warranty of
17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18# GNU Affero General Public License for more details.
19#
20# You should have received a copy of the GNU Affero General Public License
21# along with this program. If not, see <http://www.gnu.org/licenses/>.
22#
23##############################################################################
24
25from osv import fields, osv
26from tools.translate import _
27
28"""
29This module adds support for Direct debit orders as applicable
30in the Netherlands. Debit orders are advanced in total by the bank.
31Amounts that cannot be debited or are canceled by account owners are
32credited afterwards. Such a creditation is called a storno.
33
34Invoice workflow:
35
361 the sale leads to
37 1300 Debtors 100
38 8000 Sales 100
39
40Balance:
41 Debtors 2000 |
42 Sales | 2000
43
442 an external booking takes place
45 1100 Bank 100
46 1300 Debtors 100
47 This booking is reconciled with [1]
48 The invoice gets set to state 'paid', and 'reconciled' = True
49
50Balance:
51 Debtors 1900 |
52 Bank 100 |
53 Sales | 2000
54
55This module implements the following diversion:
56
572a the invoice is included in a direct debit order. When the order is
58 confirmed, a move is created per invoice:
59
60 2000 Transfer account 100 |
61 1300 Debtors | 100
62 Reconciliation takes place between 1 and 2a.
63 The invoice gets set to state 'paid', and 'reconciled' = True
64
65Balance:
66 Debtors 0 |
67 Transfer account 2000 |
68 Bank 0 |
69 Sales | 2000
70
713a the direct debit order is booked on the bank account
72
73Balance:
74 1100 Bank 2000 |
75 2000 Transfer account | 2000
76 Reconciliation takes place between 3a and 2a
77
78Balance:
79 Debtors 0 |
80 Transfer account 0 |
81 Bank 2000 |
82 Sales | 2000
83
844 a storno from invoice [1] triggers a new booking on the bank account
85 1300 Debtors 100 |
86 1100 Bank | 100
87
88Balance:
89 Debtors 100 |
90 Transfer account 0 |
91 Bank 1900 |
92 Sales | 2000
93
94 The reconciliation of 2a is undone. The booking of 2a is reconciled
95 with the booking of 4 instead.
96 The payment line attribute 'storno' is set to True and the invoice
97 state is no longer 'paid'.
98
99Two cases need to be distinguisted:
100 1) If the storno is a manual storno from the partner, the invoice is set to
101 state 'debit_denied', with 'reconciled' = False
102 This module implements this option by allowing the bank module to call
103
104 netsvc.LocalService("workflow").trg_validate(
105 uid, 'account.invoice', ids, 'debit_denied', cr)
106
107 2) If the storno is an error generated by the bank (assumingly non-fatal),
108 the invoice is reopened for the next debit run. This is a call to existing
109
110 netsvc.LocalService("workflow").trg_validate(
111 uid, 'account.invoice', ids, 'open_test', cr)
112
113 Should also be adding a log entry on the invoice for tracing purposes
114
115 self._log_event(cr, uid, ids, -1.0, 'Debit denied')
116
117 If not for that funny comment
118 "#TODO: implement messages system" in account/invoice.py
119
120 Repeating non-fatal fatal errors need to be dealt with manually by checking
121 open invoices with a matured invoice- or due date.
122"""
123
124class account_invoice(osv.osv):
125 _inherit = "account.invoice"
126
127 def __init__(self, pool, cr):
128 """
129 Adding a state to the hardcoded state list of the inherited
130 model. The alternative is duplicating the field definition
131 in columns but only one module can do that!
132
133 Maybe apply a similar trick when overriding the buttons' 'states' attributes
134 in the form view, manipulating the xml in fields_view_get().
135 """
136 super(account_invoice, self).__init__(pool, cr)
137 invoice_obj = pool.get('account.invoice')
138 invoice_obj._columns['state'].selection.append(
139 ('debit_denied', 'Debit denied'))
140
141 def action_debit_denied(self, cr, uid, ids, context=None):
142 for invoice_id in ids:
143 if self.test_paid(cr, uid, [invoice_id], context):
144 number = self.read(
145 cr, uid, invoice_id, ['number'], context=context)['number']
146 raise osv.except_osv(
147 _('Error !'),
148 _('You cannot set invoice \'%s\' to state \'debit denied\', ' +
149 'as it is still reconciled.') % number)
150 self.write(cr, uid, ids, {'state': 'debit_denied'}, context=context)
151 for inv_id, name in self.name_get(cr, uid, ids, context=context):
152 message = _("Invoice '%s': direct debit is denied.") % name
153 self.log(cr, uid, inv_id, message)
154 return True
155
156 def test_undo_debit_denied(self, cr, uid, ids, context=None):
157 """
158 Called from the workflow. Used to unset paid state on
159 invoices that were paid with bank transfers which are being cancelled
160 """
161 for invoice in self.read(cr, uid, ids, ['reconciled'], context):
162 if not invoice['reconciled']:
163 return False
164 return True
165
166account_invoice()
0\ No newline at end of file167\ No newline at end of file
1168
=== added file 'account_payment_direct_debit/model/account_move_line.py'
--- account_payment_direct_debit/model/account_move_line.py 1970-01-01 00:00:00 +0000
+++ account_payment_direct_debit/model/account_move_line.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,126 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# OpenERP, Open Source Management Solution
5# This module (C) 2011 - 2013 Therp BV (<http://therp.nl>).
6# (C) 2011 Smile Benelux (<http://smile.fr>).
7#
8# This program is free software: you can redistribute it and/or modify
9# it under the terms of the GNU Affero General Public License as
10# published by the Free Software Foundation, either version 3 of the
11# License, or (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU Affero General Public License for more details.
17#
18# You should have received a copy of the GNU Affero General Public License
19# along with this program. If not, see <http://www.gnu.org/licenses/>.
20#
21##############################################################################
22
23from operator import itemgetter
24from osv import fields, osv
25
26class account_move_line(osv.osv):
27 _inherit = "account.move.line"
28
29 def amount_to_receive(self, cr, uid, ids, name, arg={}, context=None):
30 """
31 Return the amount still to receive regarding all the debit orders
32 (excepting canceled orders).
33 This is the reverse from amount_to_pay() in
34 account_payment/account_move_line.py
35 """
36 if not ids:
37 return {}
38 cr.execute("""SELECT ml.id,
39 CASE WHEN ml.amount_currency > 0
40 THEN ml.amount_currency
41 ELSE ml.debit
42 END -
43 (SELECT coalesce(sum(amount_currency),0)
44 FROM payment_line pl
45 INNER JOIN payment_order po
46 ON (pl.order_id = po.id)
47 WHERE move_line_id = ml.id
48 AND pl.storno is false
49 AND po.state != 'cancel') AS amount
50 FROM account_move_line ml
51 WHERE id IN %s""", (tuple(ids),))
52 r = dict(cr.fetchall())
53 return r
54
55 def _to_receive_search(self, cr, uid, obj, name, args, context=None):
56 """
57 Reverse of account_payment/account_move_line.py:_to_pay_search()
58 """
59 if not args:
60 return []
61 line_obj = self.pool.get('account.move.line')
62 query = line_obj._query_get(cr, uid, context=context)
63 where = ' and '.join(map(lambda x: '''(SELECT
64 CASE WHEN l.amount_currency > 0
65 THEN l.amount_currency
66 ELSE l.debit
67 END - coalesce(sum(pl.amount_currency), 0)
68 FROM payment_line pl
69 INNER JOIN payment_order po ON (pl.order_id = po.id)
70 WHERE move_line_id = l.id
71 AND pl.storno is false
72 AND po.state != 'cancel'
73 ) %(operator)s %%s ''' % {'operator': x[1]}, args))
74 sql_args = tuple(map(itemgetter(2), args))
75
76 cr.execute(('''SELECT id
77 FROM account_move_line l
78 WHERE account_id IN (select id
79 FROM account_account
80 WHERE type=%s AND active)
81 AND reconcile_id IS null
82 AND debit > 0
83 AND ''' + where + ' and ' + query), ('receivable',)+sql_args )
84
85 res = cr.fetchall()
86 if not res:
87 return [('id', '=', '0')]
88 return [('id', 'in', map(lambda x:x[0], res))]
89
90 def line2bank(self, cr, uid, ids, payment_type=None, context=None):
91 '''I have to inherit this function for direct debits to fix the
92 following issue : if the customer invoice has a value for
93 'partner_bank_id', then it will take this partner_bank_id
94 in the payment line... but, on a customer invoice,
95 the partner_bank_id is the bank account of the company,
96 not the bank account of the customer !
97 '''
98 if context is None:
99 context = {}
100 pay_mode_obj = self.pool.get('payment.mode')
101 pay_type_obj = self.pool.get('payment.type')
102 if payment_type:
103 pay_type = pay_type_obj.browse(
104 cr, uid, payment_type, context=context)
105 if pay_type.payment_order_type == 'debit':
106 line2bank = {}
107 bank_type = pay_mode_obj.suitable_bank_types(
108 cr, uid, payment_type, context=context)
109 for line in self.browse(cr, uid, ids, context=context):
110 line2bank[line.id] = False
111 if line.partner_id:
112 for bank in line.partner_id.bank_ids:
113 if bank.state in bank_type:
114 line2bank[line.id] = bank.id
115 break
116 return line2bank
117 return super(account_move_line, self).line2bank(
118 cr, uid, ids, payment_type, context=context)
119
120 _columns = {
121 'amount_to_receive': fields.function(
122 amount_to_receive, method=True,
123 type='float', string='Amount to receive',
124 fnct_search=_to_receive_search),
125 }
126account_move_line()
0127
=== added file 'account_payment_direct_debit/model/account_payment.py'
--- account_payment_direct_debit/model/account_payment.py 1970-01-01 00:00:00 +0000
+++ account_payment_direct_debit/model/account_payment.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,22 @@
1# -*- coding: utf-8 -*-
2from osv import fields, osv
3import netsvc
4from tools.translate import _
5
6class payment_order(osv.osv):
7 _inherit = 'payment.order'
8
9 def test_undo_done(self, cr, uid, ids, context=None):
10 """
11 Called from the workflow. Used to unset done state on
12 payment orders that were reconciled with bank transfers
13 which are being cancelled
14 """
15 for order in self.browse(cr, uid, ids, context=context):
16 if order.type == 'receivable':
17 for line in order.line_ids:
18 if line.storno:
19 return False
20 return super(payment_order, self).test_undo_done(
21 cr, uid, ids, context=context)
22payment_order()
023
=== added file 'account_payment_direct_debit/model/payment_line.py'
--- account_payment_direct_debit/model/payment_line.py 1970-01-01 00:00:00 +0000
+++ account_payment_direct_debit/model/payment_line.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,153 @@
1# -*- coding: utf-8 -*-
2from osv import fields, osv
3import netsvc
4from tools.translate import _
5
6class payment_line(osv.osv):
7 _inherit = 'payment.line'
8
9 def debit_storno(self, cr, uid, payment_line_id, amount,
10 currency, storno_retry=True, context=None):
11 """
12 The processing of a storno is triggered by a debit
13 transfer on one of the company's bank accounts.
14 This method offers to re-reconcile the original debit
15 payment. For this purpose, we have registered that
16 payment move on the payment line.
17
18 Return the (now incomplete) reconcile id. The caller MUST
19 re-reconcile this reconcile with the bank transfer and
20 re-open the associated invoice.
21
22 :param payment_line_id: the single payment line id
23 :param amount: the (signed) amount debited from the bank account
24 :param currency: the bank account's currency *browse object*
25 :param boolean storno_retry: when True, attempt to reopen the invoice, \
26 set the invoice to 'Debit denied' otherwise.
27 :return: an incomplete reconcile for the caller to fill
28 :rtype: database id of an account.move.reconcile resource.
29 """
30
31 move_line_obj = self.pool.get('account.move.line')
32 reconcile_obj = self.pool.get('account.move.reconcile')
33 line = self.browse(cr, uid, payment_line_id)
34 reconcile_id = False
35 if (line.transit_move_line_id and not line.storno and
36 self.pool.get('res.currency').is_zero(
37 cr, uid, currency, (
38 (line.transit_move_line_id.credit or 0.0) -
39 (line.transit_move_line_id.debit or 0.0) + amount))):
40 # Two different cases, full and partial
41 # Both cases differ subtly in the procedure to follow
42 # Needs refractoring, but why is this not in the OpenERP API?
43 # Actually, given the nature of a direct debit order and storno,
44 # we should not need to take partial into account on the side of
45 # the transit_move_line.
46 if line.transit_move_line_id.reconcile_partial_id:
47 reconcile_id = line.transit_move_line_id.reconcile_partial_id.id
48 attribute = 'reconcile_partial_id'
49 if len(line.transit_move_line_id.reconcile_id.line_partial_ids) == 2:
50 # reuse the simple reconcile for the storno transfer
51 reconcile_obj.write(
52 cr, uid, reconcile_id, {
53 'line_id': [(6, 0, line.transit_move_line_id.id)],
54 'line_partial_ids': [(6, 0, [])],
55 }, context=context)
56 else:
57 # split up the original reconcile in a partial one
58 # and a new one for reconciling the storno transfer
59 reconcile_obj.write(
60 cr, uid, reconcile_id, {
61 'line_partial_ids': [(3, line.transit_move_line_id.id)],
62 }, context=context)
63 reconcile_id = reconcile_obj.create(
64 cr, uid, {
65 'type': 'auto',
66 'line_id': [(6, 0, line.transit_move_line_id.id)],
67 }, context=context)
68 elif line.transit_move_line_id.reconcile_id:
69 reconcile_id = line.transit_move_line_id.reconcile_id.id
70 if len(line.transit_move_line_id.reconcile_id.line_id) == 2:
71 # reuse the simple reconcile for the storno transfer
72 reconcile_obj.write(
73 cr, uid, reconcile_id, {
74 'line_id': [(6, 0, [line.transit_move_line_id.id])]
75 }, context=context)
76 else:
77 # split up the original reconcile in a partial one
78 # and a new one for reconciling the storno transfer
79 partial_ids = [
80 x.id for x in line.transit_move_line_id.reconcile_id.line_id
81 if x.id != line.transit_move_line_id.id
82 ]
83 reconcile_obj.write(
84 cr, uid, reconcile_id, {
85 'line_partial_ids': [(6, 0, partial_ids)],
86 'line_id': [(6, 0, [])],
87 }, context=context)
88 reconcile_id = reconcile_obj.create(
89 cr, uid, {
90 'type': 'auto',
91 'line_id': [(6, 0, line.transit_move_line_id.id)],
92 }, context=context)
93 # mark the payment line for storno processed
94 if reconcile_id:
95 self.write(cr, uid, [payment_line_id],
96 {'storno': True}, context=context)
97 # put forth the invoice workflow
98 if line.move_line_id.invoice:
99 activity = (storno_retry and 'open_test'
100 or 'invoice_debit_denied')
101 netsvc.LocalService("workflow").trg_validate(
102 uid, 'account.invoice', line.move_line_id.invoice.id,
103 activity, cr)
104 return reconcile_id
105
106 def get_storno_account_id(self, cr, uid, payment_line_id, amount,
107 currency, context=None):
108 """
109 Check the match of the arguments, and return the account associated
110 with the storno.
111 Used in account_banking interactive mode
112
113 :param payment_line_id: the single payment line id
114 :param amount: the (signed) amount debited from the bank account
115 :param currency: the bank account's currency *browse object*
116 :return: an account if there is a full match, False otherwise
117 :rtype: database id of an account.account resource.
118 """
119
120 line = self.browse(cr, uid, payment_line_id)
121 account_id = False
122 if (line.transit_move_line_id and not line.storno and
123 self.pool.get('res.currency').is_zero(
124 cr, uid, currency, (
125 (line.transit_move_line_id.credit or 0.0) -
126 (line.transit_move_line_id.debit or 0.0) + amount))):
127 account_id = line.transit_move_line_id.account_id.id
128 return account_id
129
130 def debit_reconcile(self, cr, uid, payment_line_id, context=None):
131 """
132 Raise if a payment line is passed for which storno is True
133 """
134 if isinstance(payment_line_id, (list, tuple)):
135 payment_line_id = payment_line_id[0]
136 payment_line_vals = self.read(
137 cr, uid, payment_line_id, ['storno', 'name'], context=context)
138 if payment_line_vals['storno']:
139 raise osv.except_osv(
140 _('Can not reconcile'),
141 _('Cancelation of payment line \'%s\' has already been '
142 'processed') % payment_line_vals['name'])
143 return super(payment_line, self).debit_reconcile(
144 cr, uid, payment_line_id, context=context)
145
146 _columns = {
147 'storno': fields.boolean(
148 'Storno',
149 readonly=True,
150 help=("If this is true, the debit order has been canceled "
151 "by the bank or by the customer")),
152 }
153payment_line()
0154
=== added file 'account_payment_direct_debit/model/payment_order_create.py'
--- account_payment_direct_debit/model/payment_order_create.py 1970-01-01 00:00:00 +0000
+++ account_payment_direct_debit/model/payment_order_create.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,42 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2013 Therp BV (<http://therp.nl>).
5#
6# All other contributions are (C) by their respective contributors
7#
8# All Rights Reserved
9#
10# This program is free software: you can redistribute it and/or modify
11# it under the terms of the GNU Affero General Public License as
12# published by the Free Software Foundation, either version 3 of the
13# License, or (at your option) any later version.
14#
15# This program is distributed in the hope that it will be useful,
16# but WITHOUT ANY WARRANTY; without even the implied warranty of
17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18# GNU Affero General Public License for more details.
19#
20# You should have received a copy of the GNU Affero General Public License
21# along with this program. If not, see <http://www.gnu.org/licenses/>.
22#
23##############################################################################
24
25from osv import fields, osv
26
27
28class payment_order_create(osv.osv_memory):
29 _inherit = 'payment.order.create'
30
31 def extend_payment_order_domain(
32 self, cr, uid, payment_order, domain, context=None):
33 super(payment_order_create, self).extend_payment_order_domain(
34 cr, uid, payment_order, domain, context=context)
35 if payment_order.type == 'receivable':
36 domain += [
37 ('account_id.type', '=', 'receivable'),
38 ('invoice.state', '!=', 'debit_denied'),
39 ('amount_to_receive', '>', 0),
40 ]
41 return True
42payment_order_create()
043
=== added file 'account_payment_direct_debit/model/payment_type.py'
--- account_payment_direct_debit/model/payment_type.py 1970-01-01 00:00:00 +0000
+++ account_payment_direct_debit/model/payment_type.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,42 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
5# (C) 2011 - 2013 Therp BV (<http://therp.nl>).
6#
7# All other contributions are (C) by their respective contributors
8#
9# All Rights Reserved
10#
11# This program is free software: you can redistribute it and/or modify
12# it under the terms of the GNU Affero General Public License as
13# published by the Free Software Foundation, either version 3 of the
14# License, or (at your option) any later version.
15#
16# This program is distributed in the hope that it will be useful,
17# but WITHOUT ANY WARRANTY; without even the implied warranty of
18# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19# GNU Affero General Public License for more details.
20#
21# You should have received a copy of the GNU Affero General Public License
22# along with this program. If not, see <http://www.gnu.org/licenses/>.
23#
24##############################################################################
25
26from osv import fields, osv
27
28
29class payment_type(osv.osv):
30 _inherit = 'payment.type'
31
32 _columns = {
33 'payment_order_type': fields.selection(
34 [('payment', 'Payment'),('debit', 'Direct debit')],
35 'Payment order type', required=True,
36 ),
37 }
38
39 _defaults = {
40 'payment_order_type': 'payment',
41 }
42payment_type()
043
=== added directory 'account_payment_direct_debit/view'
=== added file 'account_payment_direct_debit/view/account_invoice.xml'
--- account_payment_direct_debit/view/account_invoice.xml 1970-01-01 00:00:00 +0000
+++ account_payment_direct_debit/view/account_invoice.xml 2014-06-02 14:43:40 +0000
@@ -0,0 +1,41 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4 <record id="invoice_form" model="ir.ui.view">
5 <field name="name">account.invoice.form</field>
6 <field name="model">account.invoice</field>
7 <field name="inherit_id" ref="account.invoice_form"/>
8 <field name="arch" type="xml">
9 <data>
10 <!--
11 Add new state 'debit_denied' to applicable buttons.
12 Maybe apply trick in fields_view_get instead, for
13 better compatibility with other modules?
14 -->
15 <!-- button name="invoice_open" position="attributes">
16 <attribute name="states">draft,proforma2,debit_denied</attribute>
17 </button -->
18 <button name="invoice_open" position="after">
19 <button name="invoice_debit_denied" states="paid"
20 string="Debit Denied" icon="gtk-cancel"/>
21 </button>
22 </data>
23 </field>
24 </record>
25 <record id="view_account_invoice_filter" model="ir.ui.view">
26 <field name="name">account.invoice.select direct debit</field>
27 <field name="model">account.invoice</field>
28 <field name="type">search</field>
29 <field name="inherit_id" ref="account.view_account_invoice_filter"/>
30 <field name="arch" type="xml">
31 <filter name="invoices" position="after">
32 <filter name="debit_denied" icon="terp-dolar_ok!"
33 string="Debit denied"
34 domain="[('state','=','debit_denied')]"
35 help="Show only invoices with state Debit denied"
36 />
37 </filter>
38 </field>
39 </record>
40 </data>
41</openerp>
042
=== added file 'account_payment_direct_debit/view/account_payment.xml'
--- account_payment_direct_debit/view/account_payment.xml 1970-01-01 00:00:00 +0000
+++ account_payment_direct_debit/view/account_payment.xml 2014-06-02 14:43:40 +0000
@@ -0,0 +1,69 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4
5 <!-- distinguish between payment orders and debit orders in the menu
6 <record id="account_payment.action_payment_order_tree" model="ir.actions.act_window">
7 <field name="domain">[('type', '=', 'payable')]</field>
8 <field name="context">{'search_type': 'payable'}</field>
9 </record>
10
11 <record id="action_debit_order_tree" model="ir.actions.act_window">
12 <field name="name">Direct Debit Orders</field>
13 <field name="res_model">payment.order</field>
14 <field name="view_type">form</field>
15 <field name="view_mode">tree,form</field>
16 <field name="context">{'search_type': 'receivable',
17 'default_type': 'receivable'}</field>
18 <field name="search_view_id" ref="account_payment.view_payment_order_search"/>
19 <field name="domain">[('type', '=', 'receivable')]</field>
20 <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>
21 </record>
22
23 <menuitem action="action_debit_order_tree" id="menu_action_debit_order_form" parent="account_payment.menu_main_payment" sequence="4"/>-->
24
25 <!--<record id="view_payment_order_form" model="ir.ui.view">
26 <field name="name">payment.order.form</field>
27 <field name="model">payment.order</field>
28 <field name="inherit_id" ref="account_payment.view_payment_order_form"/>
29 <field name="priority" eval="60"/>
30 <field name="arch" type="xml">
31 <data>
32 <field name="reference" position="after">
33 <field name="payment_order_type"/>
34 </field>
35 <xpath expr="//button[@string='Select Invoices to Pay']"
36 position="attributes">
37 <attribute name="attrs">
38 {'invisible':['|',('state','!=','draft'),('payment_order_type', '!=', 'payment')]}
39 </attribute>
40 </xpath>
41 <xpath expr="//button[@string='Select Invoices to Pay']"
42 position="after">
43 <button colspan="2" name="%(account_payment.action_create_payment_order)s"
44 string="Select Invoices to Collect" type="action"
45 attrs="{'invisible':['|',('state','!=','draft'),('payment_order_type', '!=', 'debit')]}"
46 icon="gtk-find"
47 />
48 </xpath>
49 <field name="mode" position="attributes">
50 <attribute name="domain">[('payment_order_type', '=', payment_order_type)]</attribute>
51 </field>
52 </data>
53 </field>
54 </record>-->
55
56 <record id="view_payment_line_tree" model="ir.ui.view">
57 <field name="name">Payment Lines</field>
58 <field name="model">payment.line</field>
59 <field name="inherit_id" ref="account_payment.view_payment_line_tree"/>
60 <field eval="4" name="priority"/>
61 <field name="arch" type="xml">
62 <field name="name" position="after">
63 <field name="storno"/>
64 </field>
65 </field>
66 </record>
67
68 </data>
69</openerp>
070
=== added file 'account_payment_direct_debit/view/payment_type.xml'
--- account_payment_direct_debit/view/payment_type.xml 1970-01-01 00:00:00 +0000
+++ account_payment_direct_debit/view/payment_type.xml 2014-06-02 14:43:40 +0000
@@ -0,0 +1,17 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4
5 <record model="ir.ui.view" id="view_payment_type_form_inherit">
6 <field name="name">view.payment.type.form</field>
7 <field name="model">payment.type</field>
8 <field name="inherit_id" ref="account_payment_extension.view_payment_type_form"/>
9 <field name="arch" type="xml">
10 <field name="suitable_bank_types" position="after">
11 <field name="payment_order_type"/>
12 </field>
13 </field>
14 </record>
15
16 </data>
17</openerp>
018
=== added directory 'account_payment_direct_debit/workflow'
=== added file 'account_payment_direct_debit/workflow/account_invoice.xml'
--- account_payment_direct_debit/workflow/account_invoice.xml 1970-01-01 00:00:00 +0000
+++ account_payment_direct_debit/workflow/account_invoice.xml 2014-06-02 14:43:40 +0000
@@ -0,0 +1,51 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4 <record id="act_debit_denied" model="workflow.activity">
5 <field name="wkf_id" ref="account.wkf"/>
6 <field name="name">debit_denied</field>
7 <field name="action">action_debit_denied()</field>
8 <field name="kind">function</field>
9 </record>
10 <record id="paid_to_debit_denied" model="workflow.transition">
11 <!--
12 Set an invoice to state debit denied, either manually
13 or by confirming a bank statement line that constitutes
14 a fatal storno
15 -->
16 <field name="act_from" ref="account.act_paid"/>
17 <field name="act_to" ref="act_debit_denied"/>
18 <field name="signal">invoice_debit_denied</field>
19 </record>
20 <record id="open_test_to_debit_denied" model="workflow.transition">
21 <!--
22 A storno leads to unreconciling the move line, which
23 reopens the invoice. We need to allow a transition from
24 this state to the debit denied state if the storno is fatal.
25 -->
26 <field name="act_from" ref="account.act_open_test"/>
27 <field name="act_to" ref="act_debit_denied"/>
28 <field name="signal">invoice_debit_denied</field>
29 </record>
30 <record id="debit_denied_to_paid" model="workflow.transition">
31 <!--
32 Cancel a bank statement line that constitutes a fatal
33 storno
34 -->
35 <field name="act_from" ref="act_debit_denied"/>
36 <field name="act_to" ref="account.act_paid"/>
37 <field name="condition">test_undo_debit_denied()</field>
38 <field name="signal">undo_debit_denied</field>
39 </record>
40 <record id="debit_denied_to_open" model="workflow.transition">
41 <!--
42 Allow the user to manually reset a debit denied status
43 on a paid invoice (but only after manually unreconciling
44 the invoice)
45 -->
46 <field name="act_from" ref="act_debit_denied"/>
47 <field name="act_to" ref="account.act_open_test"/>
48 <field name="signal">open_test</field>
49 </record>
50 </data>
51</openerp>
052
=== added directory 'account_payment_export'
=== renamed directory 'account_payment_export' => 'account_payment_export.moved'
=== added file 'account_payment_export/__init__.py'
--- account_payment_export/__init__.py 1970-01-01 00:00:00 +0000
+++ account_payment_export/__init__.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,1 @@
1import model
0\ No newline at end of file2\ No newline at end of file
13
=== added file 'account_payment_export/__openerp__.py'
--- account_payment_export/__openerp__.py 1970-01-01 00:00:00 +0000
+++ account_payment_export/__openerp__.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,62 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
5# (C) 2011 - 2013 Therp BV (<http://therp.nl>).
6# Copyright (C) 2014 Acysos S.L. (<http://acysos.com>).
7# @author: Ignacio Ibeas <ignacio@acysos.com>
8#
9# All other contributions are (C) by their respective contributors
10#
11# All Rights Reserved
12#
13# This program is free software: you can redistribute it and/or modify
14# it under the terms of the GNU Affero General Public License as
15# published by the Free Software Foundation, either version 3 of the
16# License, or (at your option) any later version.
17#
18# This program is distributed in the hope that it will be useful,
19# but WITHOUT ANY WARRANTY; without even the implied warranty of
20# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21# GNU Affero General Public License for more details.
22#
23# You should have received a copy of the GNU Affero General Public License
24# along with this program. If not, see <http://www.gnu.org/licenses/>.
25#
26##############################################################################
27
28{
29 'name': 'Account Payment - Payments Export Infrastructure',
30 'version': '0.1.164',
31 'license': 'AGPL-3',
32 'author': 'Account Payment community',
33 'website': 'https://launchpad.net/account-payment',
34 'category': 'Banking addons',
35 'depends': [
36 'account_payment',
37 'account_payment_extension',
38 'base_iban', # for manual_bank_tranfer
39 ],
40 'data': [
41 'view/account_payment.xml',
42 'view/bank_payment_manual.xml',
43 'view/payment_mode.xml',
44 'data/payment_type.xml',
45 ],
46 'description': '''
47 Infrastructure to export payment orders.
48
49 This technical module provides the base infrastructure to export
50 payment orders for electronic banking. It provides the following
51 technical features:
52 * a new payment.mode.type model
53 * payment.mode now has a mandatory type
54 * a better implementation of payment_mode.suitable_bank_types() based on payment.mode.type
55 * the "make payment" button launches a wizard depending on the payment.mode.type
56 * a manual payment mode type is provided as an example, with a default "do nothing" wizard
57
58 Adapted to account_payment_extension by Acysos S.L. <info@acysos.com>
59 ''',
60 'auto_install': True,
61 'installable': True,
62}
063
=== added directory 'account_payment_export/data'
=== added file 'account_payment_export/data/payment_type.xml'
--- account_payment_export/data/payment_type.xml 1970-01-01 00:00:00 +0000
+++ account_payment_export/data/payment_type.xml 2014-06-02 14:43:40 +0000
@@ -0,0 +1,14 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4 <!-- Add manual bank transfer as default payment option -->
5 <record model="payment.type" id="manual_bank_tranfer">
6 <field name="name">Manual Bank Transfer</field>
7 <field name="code">BANKMAN</field>
8 <field name="suitable_bank_types"
9 eval="[(6,0,[ref('base.bank_normal'),ref('base_iban.bank_iban'),])]" />
10 <field name="ir_model_id"
11 ref="model_payment_manual"/>
12 </record>
13 </data>
14</openerp>
015
=== added directory 'account_payment_export/i18n'
=== added file 'account_payment_export/i18n/account_banking_payment_export.pot'
--- account_payment_export/i18n/account_banking_payment_export.pot 1970-01-01 00:00:00 +0000
+++ account_payment_export/i18n/account_banking_payment_export.pot 2014-06-02 14:43:40 +0000
@@ -0,0 +1,145 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * account_banking_payment_export
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2013-10-25 15:58+0000\n"
10"PO-Revision-Date: 2013-10-25 15:58+0000\n"
11"Last-Translator: <>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: \n"
16"Plural-Forms: \n"
17
18#. module: account_banking_payment_export
19#: help:payment.mode.type,name:0
20msgid "Payment Type"
21msgstr ""
22
23#. module: account_banking_payment_export
24#: model:ir.model,name:account_banking_payment_export.model_payment_order
25msgid "Payment Order"
26msgstr ""
27
28#. module: account_banking_payment_export
29#: view:payment.manual:0
30msgid "Please execute payment order manually, and click OK when succesfully sent."
31msgstr ""
32
33#. module: account_banking_payment_export
34#: model:ir.model,name:account_banking_payment_export.model_payment_mode
35msgid "Payment Mode"
36msgstr ""
37
38#. module: account_banking_payment_export
39#: code:addons/account_banking_payment_export/model/account_payment.py:69
40#, python-format
41msgid "You can only combine payment orders of the same type"
42msgstr ""
43
44#. module: account_banking_payment_export
45#: model:ir.model,name:account_banking_payment_export.model_payment_mode_type
46msgid "Payment Mode Type"
47msgstr ""
48
49#. module: account_banking_payment_export
50#: model:ir.model,name:account_banking_payment_export.model_account_move_line
51msgid "Journal Items"
52msgstr ""
53
54#. module: account_banking_payment_export
55#: model:ir.model,name:account_banking_payment_export.model_payment_manual
56msgid "Send payment order(s) manually"
57msgstr ""
58
59#. module: account_banking_payment_export
60#: field:payment.mode.type,name:0
61msgid "Name"
62msgstr ""
63
64#. module: account_banking_payment_export
65#: help:payment.mode.type,ir_model_id:0
66msgid "Select the Payment Wizard for payments of this type. Leave empty for manual processing"
67msgstr ""
68
69#. module: account_banking_payment_export
70#: view:payment.manual:0
71msgid "Manual payment"
72msgstr ""
73
74#. module: account_banking_payment_export
75#: field:payment.manual,payment_order_ids:0
76msgid "Payment orders"
77msgstr ""
78
79#. module: account_banking_payment_export
80#: code:addons/account_banking_payment_export/model/account_payment.py:52
81#, python-format
82msgid "Payment Order Export"
83msgstr ""
84
85#. module: account_banking_payment_export
86#: help:payment.mode,type:0
87msgid "Select the Payment Type for the Payment Mode."
88msgstr ""
89
90#. module: account_banking_payment_export
91#: view:payment.order:0
92msgid "launch_wizard"
93msgstr ""
94
95#. module: account_banking_payment_export
96#: help:payment.mode.type,code:0
97msgid "Specify the Code for Payment Type"
98msgstr ""
99
100#. module: account_banking_payment_export
101#: model:ir.model,name:account_banking_payment_export.model_payment_order_create
102msgid "payment.order.create"
103msgstr ""
104
105#. module: account_banking_payment_export
106#: code:addons/account_banking_payment_export/model/account_payment.py:68
107#, python-format
108msgid "Error"
109msgstr ""
110
111#. module: account_banking_payment_export
112#: field:payment.mode.type,ir_model_id:0
113msgid "Payment wizard"
114msgstr ""
115
116#. module: account_banking_payment_export
117#: field:payment.mode,type:0
118msgid "Payment type"
119msgstr ""
120
121#. module: account_banking_payment_export
122#: field:payment.mode.type,code:0
123msgid "Code"
124msgstr ""
125
126#. module: account_banking_payment_export
127#: view:payment.manual:0
128msgid "OK"
129msgstr ""
130
131#. module: account_banking_payment_export
132#: view:payment.mode.type:0
133msgid "Payment mode"
134msgstr ""
135
136#. module: account_banking_payment_export
137#: view:payment.manual:0
138msgid "Cancel"
139msgstr ""
140
141#. module: account_banking_payment_export
142#: field:payment.mode.type,suitable_bank_types:0
143msgid "Suitable bank types"
144msgstr ""
145
0146
=== added file 'account_payment_export/i18n/es.po'
--- account_payment_export/i18n/es.po 1970-01-01 00:00:00 +0000
+++ account_payment_export/i18n/es.po 2014-06-02 14:43:40 +0000
@@ -0,0 +1,110 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * account_payment_export
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0-20131224-002412\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2014-01-25 11:26+0000\n"
10"PO-Revision-Date: 2014-01-25 11:26+0000\n"
11"Last-Translator: <>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: \n"
16"Plural-Forms: \n"
17
18#. module: account_payment_export
19#: field:payment.type,ir_model_id:0
20msgid "Payment wizard"
21msgstr "Asistente de pago"
22
23#. module: account_payment_export
24#: model:ir.model,name:account_payment_export.model_payment_type
25msgid "Payment type"
26msgstr "Tipo de pago"
27
28#. module: account_payment_export
29#: model:ir.model,name:account_payment_export.model_payment_order
30msgid "Payment Order"
31msgstr "Orden de pago"
32
33#. module: account_payment_export
34#: view:payment.manual:0
35msgid "OK"
36msgstr "OK"
37
38#. module: account_payment_export
39#: model:ir.model,name:account_payment_export.model_payment_manual
40msgid "Send payment order(s) manually"
41msgstr "Enviar la orden de pago manualmente"
42
43#. module: account_payment_export
44#: help:payment.type,ir_model_id:0
45msgid "Select the Payment Wizard for payments of this type. Leave empty for manual processing"
46msgstr "Seleccione el asistente de pago para los pagos de estet tipo. Deje en blanco para proceso manual"
47
48#. module: account_payment_export
49#: model:ir.model,name:account_payment_export.model_payment_mode
50msgid "Payment Mode"
51msgstr "Modo de pago"
52
53#. module: account_payment_export
54#: view:payment.manual:0
55msgid "Manual payment"
56msgstr "Pago manual"
57
58#. module: account_payment_export
59#: field:payment.manual,payment_order_ids:0
60msgid "Payment orders"
61msgstr "Ordenes de pago"
62
63#. module: account_payment_export
64#: code:addons/account_payment_export/model/account_payment.py:52
65#, python-format
66msgid "Payment Order Export"
67msgstr "Exportar orden de pago"
68
69#. module: account_payment_export
70#: model:ir.model,name:account_payment_export.model_account_move_line
71msgid "Journal Items"
72msgstr "Apuntes contables"
73
74#. module: account_payment_export
75#: view:payment.order:0
76msgid "launch_wizard"
77msgstr "lanzar_asistente"
78
79#. module: account_payment_export
80#: view:payment.manual:0
81msgid "Please execute payment order manually, and click OK when succesfully sent."
82msgstr "Por favor, ejecute la orden de pago manualmente, y pulse OK cuando sea enviada con exito."
83
84#. module: account_payment_export
85#: model:ir.model,name:account_payment_export.model_payment_order_create
86msgid "payment.order.create"
87msgstr "pago.orden.crear"
88
89#. module: account_payment_export
90#: code:addons/account_payment_export/model/account_payment.py:68
91#, python-format
92msgid "Error"
93msgstr "Error"
94
95#. module: account_payment_export
96#: view:payment.manual:0
97msgid "Cancel"
98msgstr "Cancelar"
99
100#. module: account_payment_export
101#: model:payment.type,name:account_payment_export.manual_bank_tranfer
102msgid "Manual Bank Transfer"
103msgstr "Tranferencia bancaria manual"
104
105#. module: account_payment_export
106#: code:addons/account_payment_export/model/account_payment.py:69
107#, python-format
108msgid "You can only combine payment orders of the same type"
109msgstr "Solo puede combinar ordenes de pago del mismo tipo"
110
0111
=== added file 'account_payment_export/i18n/nl.po'
--- account_payment_export/i18n/nl.po 1970-01-01 00:00:00 +0000
+++ account_payment_export/i18n/nl.po 2014-06-02 14:43:40 +0000
@@ -0,0 +1,151 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * account_banking_payment_export
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2013-10-25 15:58+0000\n"
10"PO-Revision-Date: 2013-12-03 11:49+0000\n"
11"Last-Translator: Erwin van der Ploeg (BAS Solutions) <Unknown>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: 8bit\n"
16"X-Launchpad-Export-Date: 2013-12-04 05:59+0000\n"
17"X-Generator: Launchpad (build 16861)\n"
18
19#. module: account_banking_payment_export
20#: help:payment.mode.type,name:0
21msgid "Payment Type"
22msgstr "Betaalwijze"
23
24#. module: account_banking_payment_export
25#: model:ir.model,name:account_banking_payment_export.model_payment_order
26msgid "Payment Order"
27msgstr "Betalingsopdracht"
28
29#. module: account_banking_payment_export
30#: view:payment.manual:0
31msgid ""
32"Please execute payment order manually, and click OK when succesfully sent."
33msgstr ""
34"Voer de betaalopdracht handmatig uit en klik OK, wanneer succesvol verzonden."
35
36#. module: account_banking_payment_export
37#: model:ir.model,name:account_banking_payment_export.model_payment_mode
38msgid "Payment Mode"
39msgstr "Betaalwijze"
40
41#. module: account_banking_payment_export
42#: code:addons/account_banking_payment_export/model/account_payment.py:69
43#, python-format
44msgid "You can only combine payment orders of the same type"
45msgstr "U kunt alleen betalingsopdrachten van dezelfde soort combineren"
46
47#. module: account_banking_payment_export
48#: model:ir.model,name:account_banking_payment_export.model_payment_mode_type
49msgid "Payment Mode Type"
50msgstr "Betaalwijze soort"
51
52#. module: account_banking_payment_export
53#: model:ir.model,name:account_banking_payment_export.model_account_move_line
54msgid "Journal Items"
55msgstr "Boekingen"
56
57#. module: account_banking_payment_export
58#: model:ir.model,name:account_banking_payment_export.model_payment_manual
59msgid "Send payment order(s) manually"
60msgstr "Verzend betaalopdrachten handmatig"
61
62#. module: account_banking_payment_export
63#: field:payment.mode.type,name:0
64msgid "Name"
65msgstr "Naam"
66
67#. module: account_banking_payment_export
68#: help:payment.mode.type,ir_model_id:0
69msgid ""
70"Select the Payment Wizard for payments of this type. Leave empty for manual "
71"processing"
72msgstr ""
73"Selecteer de wizard voor het verwerken van betalingen van dit type. Laat "
74"leeg voor handmatige verwerking."
75
76#. module: account_banking_payment_export
77#: view:payment.manual:0
78msgid "Manual payment"
79msgstr "Handmatige betaling"
80
81#. module: account_banking_payment_export
82#: field:payment.manual,payment_order_ids:0
83msgid "Payment orders"
84msgstr "Betaalopdrachten"
85
86#. module: account_banking_payment_export
87#: code:addons/account_banking_payment_export/model/account_payment.py:52
88#, python-format
89msgid "Payment Order Export"
90msgstr "Betaalopdracht export"
91
92#. module: account_banking_payment_export
93#: help:payment.mode,type:0
94msgid "Select the Payment Type for the Payment Mode."
95msgstr "Selecteer het type van de betaalmodus."
96
97#. module: account_banking_payment_export
98#: view:payment.order:0
99msgid "launch_wizard"
100msgstr "launch_wizard"
101
102#. module: account_banking_payment_export
103#: help:payment.mode.type,code:0
104msgid "Specify the Code for Payment Type"
105msgstr "Geef de code op voor het betaaltype"
106
107#. module: account_banking_payment_export
108#: model:ir.model,name:account_banking_payment_export.model_payment_order_create
109msgid "payment.order.create"
110msgstr "payment.order.create"
111
112#. module: account_banking_payment_export
113#: code:addons/account_banking_payment_export/model/account_payment.py:68
114#, python-format
115msgid "Error"
116msgstr "Fout"
117
118#. module: account_banking_payment_export
119#: field:payment.mode.type,ir_model_id:0
120msgid "Payment wizard"
121msgstr "Betaalwizard"
122
123#. module: account_banking_payment_export
124#: field:payment.mode,type:0
125msgid "Payment type"
126msgstr "Betaaltype"
127
128#. module: account_banking_payment_export
129#: field:payment.mode.type,code:0
130msgid "Code"
131msgstr "Code"
132
133#. module: account_banking_payment_export
134#: view:payment.manual:0
135msgid "OK"
136msgstr "OK"
137
138#. module: account_banking_payment_export
139#: view:payment.mode.type:0
140msgid "Payment mode"
141msgstr "Betaalwijze"
142
143#. module: account_banking_payment_export
144#: view:payment.manual:0
145msgid "Cancel"
146msgstr "Annuleren"
147
148#. module: account_banking_payment_export
149#: field:payment.mode.type,suitable_bank_types:0
150msgid "Suitable bank types"
151msgstr "Geschikte banktypen"
0152
=== added directory 'account_payment_export/model'
=== added file 'account_payment_export/model/__init__.py'
--- account_payment_export/model/__init__.py 1970-01-01 00:00:00 +0000
+++ account_payment_export/model/__init__.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,4 @@
1import account_payment
2import bank_payment_manual
3import payment_mode
4import payment_order_create
0\ No newline at end of file5\ No newline at end of file
16
=== added file 'account_payment_export/model/account_payment.py'
--- account_payment_export/model/account_payment.py 1970-01-01 00:00:00 +0000
+++ account_payment_export/model/account_payment.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,88 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
5# (C) 2011 - 2013 Therp BV (<http://therp.nl>).
6#
7# All other contributions are (C) by their respective contributors
8#
9# All Rights Reserved
10#
11# This program is free software: you can redistribute it and/or modify
12# it under the terms of the GNU Affero General Public License as
13# published by the Free Software Foundation, either version 3 of the
14# License, or (at your option) any later version.
15#
16# This program is distributed in the hope that it will be useful,
17# but WITHOUT ANY WARRANTY; without even the implied warranty of
18# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19# GNU Affero General Public License for more details.
20#
21# You should have received a copy of the GNU Affero General Public License
22# along with this program. If not, see <http://www.gnu.org/licenses/>.
23#
24##############################################################################
25
26from osv import fields, osv
27from tools.translate import _
28import netsvc
29
30
31class payment_order(osv.osv):
32 _inherit = 'payment.order'
33
34 def launch_wizard(self, cr, uid, ids, context=None):
35 """
36 Search for a wizard to launch according to the type.
37 If type is manual. just confirm the order.
38 Previously (pre-v6) in account_payment/wizard/wizard_pay.py
39 """
40 if context == None:
41 context = {}
42 result = {}
43 orders = self.browse(cr, uid, ids, context)
44 order = orders[0]
45 # check if a wizard is defined for the first order
46 if order.mode.type and order.mode.type.ir_model_id:
47 context['active_ids'] = ids
48 wizard_model = order.mode.type.ir_model_id.model
49 wizard_obj = self.pool.get(wizard_model)
50 wizard_id = wizard_obj.create(cr, uid, {}, context)
51 result = {
52 'name': wizard_obj._description or _('Payment Order Export'),
53 'view_type': 'form',
54 'view_mode': 'form',
55 'res_model': wizard_model,
56 'domain': [],
57 'context': context,
58 'type': 'ir.actions.act_window',
59 'target': 'new',
60 'res_id': wizard_id,
61 'nodestroy': True,
62 }
63 else:
64 # should all be manual orders without type or wizard model
65 for order in orders[1:]:
66 if order.mode.type and order.mode.type.ir_model_id:
67 raise osv.except_osv(
68 _('Error'),
69 _('You can only combine payment orders of the same type')
70 )
71 # process manual payments
72 return self.set_done(cr, uid, ids, context)
73 return result
74
75payment_order()
76
77class payment_type(osv.osv):
78 _inherit = 'payment.type'
79
80 _columns = {
81 'ir_model_id': fields.many2one(
82 'ir.model', 'Payment wizard',
83 help=('Select the Payment Wizard for payments of this type. '
84 'Leave empty for manual processing'),
85 domain=[('osv_memory', '=', True)],
86 ),
87 }
88payment_type()
089
=== added file 'account_payment_export/model/bank_payment_manual.py'
--- account_payment_export/model/bank_payment_manual.py 1970-01-01 00:00:00 +0000
+++ account_payment_export/model/bank_payment_manual.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,60 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
5# (C) 2011 - 2013 Therp BV (<http://therp.nl>).
6#
7# All other contributions are (C) by their respective contributors
8#
9# All Rights Reserved
10#
11# This program is free software: you can redistribute it and/or modify
12# it under the terms of the GNU Affero General Public License as
13# published by the Free Software Foundation, either version 3 of the
14# License, or (at your option) any later version.
15#
16# This program is distributed in the hope that it will be useful,
17# but WITHOUT ANY WARRANTY; without even the implied warranty of
18# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19# GNU Affero General Public License for more details.
20#
21# You should have received a copy of the GNU Affero General Public License
22# along with this program. If not, see <http://www.gnu.org/licenses/>.
23#
24##############################################################################
25
26'''
27This module contains a single "wizard" for confirming manual
28bank transfers.
29'''
30
31from osv import fields, osv
32import netsvc
33
34
35class payment_manual(osv.osv_memory):
36 _name = 'payment.manual'
37 _description = 'Send payment order(s) manually'
38
39 _columns = {
40 'payment_order_ids': fields.many2many('payment.order',
41 'wiz_manual_payorders_rel', 'wizard_id', 'payment_order_id',
42 'Payment orders', readonly=True),
43 }
44
45 def create(self, cr, uid, vals, context=None):
46 payment_order_ids = context.get('active_ids', [])
47 vals.update({
48 'payment_order_ids': [[6, 0, payment_order_ids]],
49 })
50 return super(payment_manual, self).create(cr, uid,
51 vals, context=context)
52
53 def button_ok(self, cr, uid, ids, context=None):
54 wf_service = netsvc.LocalService('workflow')
55 for wiz in self.browse(cr, uid, ids, context=context):
56 for order_id in wiz.payment_order_ids:
57 wf_service.trg_validate(
58 uid, 'payment.order', order_id.id, 'done', cr)
59 return {'type': 'ir.actions.act_window_close'}
60payment_manual()
061
=== added file 'account_payment_export/model/payment_mode.py'
--- account_payment_export/model/payment_mode.py 1970-01-01 00:00:00 +0000
+++ account_payment_export/model/payment_mode.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,45 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
5# (C) 2011 - 2013 Therp BV (<http://therp.nl>).
6#
7# All other contributions are (C) by their respective contributors
8#
9# All Rights Reserved
10#
11# This program is free software: you can redistribute it and/or modify
12# it under the terms of the GNU Affero General Public License as
13# published by the Free Software Foundation, either version 3 of the
14# License, or (at your option) any later version.
15#
16# This program is distributed in the hope that it will be useful,
17# but WITHOUT ANY WARRANTY; without even the implied warranty of
18# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19# GNU Affero General Public License for more details.
20#
21# You should have received a copy of the GNU Affero General Public License
22# along with this program. If not, see <http://www.gnu.org/licenses/>.
23#
24##############################################################################
25
26from osv import fields, osv
27
28
29class payment_mode(osv.osv):
30 ''' Restoring the payment type from version 5,
31 used to select the export wizard (if any) '''
32 _inherit = "payment.mode"
33
34 def suitable_bank_types(self, cr, uid, ids, payment_mode_id=None, context=None):
35 """ Reinstates functional code for suitable bank type filtering.
36 Current code in account_payment is disfunctional.
37 """
38 res = []
39 payment_mode = self.browse(
40 cr, uid, payment_mode_id, context)
41 if (payment_mode and payment_mode.type and
42 payment_mode.type.suitable_bank_types):
43 res = [t.code for t in payment_mode.type.suitable_bank_types]
44 return res
45payment_mode()
046
=== added file 'account_payment_export/model/payment_order_create.py'
--- account_payment_export/model/payment_order_create.py 1970-01-01 00:00:00 +0000
+++ account_payment_export/model/payment_order_create.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,60 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2013 ACSONE SA/NV (<http://acsone.eu>);.
5#
6# All other contributions are (C) by their respective contributors
7#
8# All Rights Reserved
9#
10# This program is free software: you can redistribute it and/or modify
11# it under the terms of the GNU Affero General Public License as
12# published by the Free Software Foundation, either version 3 of the
13# License, or (at your option) any later version.
14#
15# This program is distributed in the hope that it will be useful,
16# but WITHOUT ANY WARRANTY; without even the implied warranty of
17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18# GNU Affero General Public License for more details.
19#
20# You should have received a copy of the GNU Affero General Public License
21# along with this program. If not, see <http://www.gnu.org/licenses/>.
22#
23##############################################################################
24
25from osv import fields, osv
26
27
28class payment_order_create(osv.osv_memory):
29 _inherit = 'payment.order.create'
30
31 def create_payment(self, cr, uid, ids, context=None):
32 '''This method adapts the core create_payment()
33 to pass the payment mode to line2bank() through the context,
34 so it is in turn propagated to suitable_bank_types().
35
36 This is necessary because the core does not propagate the payment mode to line2bank: t = None in
37 http://bazaar.launchpad.net/~openerp/openobject-addons/7.0/view/head:/account_payment/wizard/account_payment_order.py#L72
38
39 Hack idea courtesy Stefan Rijnhart.
40 '''
41 if context is None:
42 context = {}
43 order_obj = self.pool.get('payment.order')
44 payment = order_obj.browse(cr, uid, context['active_id'], context=context)
45 context['_fix_payment_mode_id'] = payment.mode.id
46 return super(payment_order_create, self).create_payment(cr, uid, ids, context=context)
47
48payment_order_create()
49
50class account_move_line(osv.osv):
51 _inherit = 'account.move.line'
52
53 def line2bank(self, cr, uid, ids, payment_mode_id=None, context=None):
54 '''Obtain payment_type from context, see create_payment above'''
55 if context is None:
56 context = {}
57 payment_mode_id = payment_mode_id or context.get('_fix_payment_mode_id')
58 return super(account_move_line, self).line2bank(cr, uid, ids, payment_mode_id, context=context)
59
60account_move_line()
061
=== added directory 'account_payment_export/view'
=== added file 'account_payment_export/view/account_payment.xml'
--- account_payment_export/view/account_payment.xml 1970-01-01 00:00:00 +0000
+++ account_payment_export/view/account_payment.xml 2014-06-02 14:43:40 +0000
@@ -0,0 +1,22 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4 <!-- restore wizard functionality when making payments
5 -->
6
7 <record id="view_banking_payment_order_form_1" model="ir.ui.view">
8 <field name="name">account.payment.order.form.banking-1</field>
9 <field name="inherit_id" ref="account_payment.view_payment_order_form" />
10 <field name="model">payment.order</field>
11 <field name="arch" type="xml">
12 <data>
13 <xpath expr="//button[@string='Make Payments']"
14 position="attributes">
15 <attribute name="name">launch_wizard</attribute>
16 </xpath>
17 </data>
18 </field>
19 </record>
20
21 </data>
22</openerp>
023
=== added file 'account_payment_export/view/bank_payment_manual.xml'
--- account_payment_export/view/bank_payment_manual.xml 1970-01-01 00:00:00 +0000
+++ account_payment_export/view/bank_payment_manual.xml 2014-06-02 14:43:40 +0000
@@ -0,0 +1,16 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4 <record id="view_payment_manual_form" model="ir.ui.view">
5 <field name="name">Form for manual payment wizard</field>
6 <field name="model">payment.manual</field>
7 <field name="arch" type="xml">
8 <form string="Manual payment">
9 <label string="Please execute payment order manually, and click OK when succesfully sent." colspan="4"/>
10 <button name="button_ok" type="object" string="OK"/>
11 <button special="cancel" string="Cancel"/>
12 </form>
13 </field>
14 </record>
15 </data>
16</openerp>
017
=== added file 'account_payment_export/view/payment_mode.xml'
--- account_payment_export/view/payment_mode.xml 1970-01-01 00:00:00 +0000
+++ account_payment_export/view/payment_mode.xml 2014-06-02 14:43:40 +0000
@@ -0,0 +1,20 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4
5 <!--
6 Add the payment mode type and transfer settings
7 -->
8 <record id="view_payment_mode_tree_inherit" model="ir.ui.view">
9 <field name="name">payment.mode.tree.inherit</field>
10 <field name="model">payment.mode</field>
11 <field name="inherit_id" ref="account_payment.view_payment_mode_tree"/>
12 <field name="arch" type="xml">
13 <field name="company_id" position="after">
14 <field name="type"/>
15 </field>
16 </field>
17 </record>
18
19 </data>
20</openerp>
021
=== added directory 'account_payment_pain_base'
=== renamed directory 'account_payment_pain_base' => 'account_payment_pain_base.moved'
=== added file 'account_payment_pain_base/.directory'
--- account_payment_pain_base/.directory 1970-01-01 00:00:00 +0000
+++ account_payment_pain_base/.directory 2014-06-02 14:43:40 +0000
@@ -0,0 +1,6 @@
1[Dolphin]
2SortOrder=1
3SortRole=date
4Timestamp=2014,1,23,11,48,11
5Version=3
6ViewMode=1
07
=== added file 'account_payment_pain_base/__init__.py'
--- account_payment_pain_base/__init__.py 1970-01-01 00:00:00 +0000
+++ account_payment_pain_base/__init__.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,26 @@
1# -*- encoding: utf-8 -*-
2##############################################################################
3#
4# PAIN Base module for OpenERP
5# Copyright (C) 2013 Akretion (http://www.akretion.com)
6# @author: Alexis de Lattre <alexis.delattre@akretion.com>
7#
8# This program is free software: you can redistribute it and/or modify
9# it under the terms of the GNU Affero General Public License as
10# published by the Free Software Foundation, either version 3 of the
11# License, or (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU Affero General Public License for more details.
17#
18# You should have received a copy of the GNU Affero General Public License
19# along with this program. If not, see <http://www.gnu.org/licenses/>.
20#
21##############################################################################
22
23import payment_line
24import payment_mode
25import company
26import banking_export_pain
027
=== added file 'account_payment_pain_base/__openerp__.py'
--- account_payment_pain_base/__openerp__.py 1970-01-01 00:00:00 +0000
+++ account_payment_pain_base/__openerp__.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,55 @@
1##############################################################################
2#
3# PAIN base module for OpenERP
4# Copyright (C) 2013 Akretion (http://www.akretion.com)
5# @author: Alexis de Lattre <alexis.delattre@akretion.com>
6# Copyright (C) 2014 Acysos S.L. (<http://acysos.com>).
7# @author: Ignacio Ibeas <ignacio@acysos.com>
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU Affero General Public License as
11# published by the Free Software Foundation, either version 3 of the
12# License, or (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU Affero General Public License for more details.
18#
19# You should have received a copy of the GNU Affero General Public License
20# along with this program. If not, see <http://www.gnu.org/licenses/>.
21#
22##############################################################################
23{
24 'name': 'Account Payment PAIN Base Module',
25 'summary': 'Base module for PAIN file generation',
26 'version': '0.1',
27 'license': 'AGPL-3',
28 'author': 'Akretion, Noviat, Acysos',
29 'website': 'http://openerp-community-association.org/',
30 'category': 'Hidden',
31 'depends': ['account_payment_extension','account_payment_export'],
32# 'external_dependencies': {
33# 'python': ['unidecode', 'lxml'],
34# },
35 'data': [
36 'payment_line_view.xml',
37 'payment_mode_view.xml',
38 'company_view.xml',
39 ],
40 'description': '''
41Base module for PAIN file generation
42====================================
43
44This 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.
45
46This module is part of the account payment addons: https://launchpad.net/account-payment
47
48For windows server copy the 'unidecode' folder of https://pypi.python.org/pypi/Unidecode/ to the OpenERP Server Folder.
49
50This module was started during the Akretion-Noviat code sprint of November 21st 2013 in Epiais les Louvres (France).
51Adapted to account_payment_extension by Acysos S.L. <info@acysos.com>
52 ''',
53 'active': False,
54 'installable': True,
55}
056
=== added file 'account_payment_pain_base/banking_export_pain.py'
--- account_payment_pain_base/banking_export_pain.py 1970-01-01 00:00:00 +0000
+++ account_payment_pain_base/banking_export_pain.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,441 @@
1# -*- encoding: utf-8 -*-
2##############################################################################
3#
4# PAIN Base module for OpenERP
5# Copyright (C) 2013 Akretion (http://www.akretion.com)
6# @author: Alexis de Lattre <alexis.delattre@akretion.com>
7#
8# This program is free software: you can redistribute it and/or modify
9# it under the terms of the GNU Affero General Public License as
10# published by the Free Software Foundation, either version 3 of the
11# License, or (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU Affero General Public License for more details.
17#
18# You should have received a copy of the GNU Affero General Public License
19# along with this program. If not, see <http://www.gnu.org/licenses/>.
20#
21##############################################################################
22
23from osv import osv, fields
24from tools.translate import _
25from tools.safe_eval import safe_eval
26from datetime import datetime
27from unidecode import unidecode
28from lxml import etree
29import tools
30import logging
31import base64
32
33logger = logging.getLogger(__name__)
34
35
36class banking_export_pain(osv.osv_memory):
37 _name = 'banking.export.pain'
38
39 def _validate_iban(self, cr, uid, iban, bank_id, context=None):
40 '''if IBAN is valid, returns IBAN
41 if IBAN is NOT valid, raises an error message'''
42 partner_bank_obj = self.pool.get('res.partner.bank')
43 if partner_bank_obj.check_iban(cr, uid, [bank_id], context=context):
44 return iban.replace(' ', '')
45 else:
46 raise osv.except_osv(
47 _('Error:'), _("This IBAN is not valid : %s") % iban)
48
49 def _prepare_field(
50 self, cr, uid, field_name, field_value, eval_ctx, max_size=0,
51 gen_args=None, context=None):
52 '''This function is designed to be inherited !'''
53 if gen_args is None:
54 gen_args = {}
55 assert isinstance(eval_ctx, dict), 'eval_ctx must contain a dict'
56 try:
57 value = safe_eval(field_value, eval_ctx)
58 # SEPA uses XML ; XML = UTF-8 ; UTF-8 = support for all characters
59 # But we are dealing with banks...
60 # and many banks don't want non-ASCCI characters !
61 # cf section 1.4 "Character set" of the SEPA Credit Transfer
62 # Scheme Customer-to-bank guidelines
63 if gen_args.get('convert_to_ascii'):
64 value = unidecode(value)
65 unallowed_ascii_chars = [
66 '"', '#', '$', '%', '&', '*', ';', '<', '>', '=', '@',
67 '[', ']', '^', '_', '`', '{', '}', '|', '~', '\\', '!']
68 for unallowed_ascii_char in unallowed_ascii_chars:
69 value = value.replace(unallowed_ascii_char, '-')
70 except:
71 line = eval_ctx.get('line')
72 if line:
73 raise osv.except_osv(
74 _('Error:'),
75 _("Cannot compute the '%s' of the Payment Line with "
76 "reference '%s'.")
77 % (field_name, line.name))
78 else:
79 raise osv.except_osv(
80 _('Error:'),
81 _("Cannot compute the '%s'.") % field_name)
82 if not isinstance(value, (str, unicode)):
83 raise osv.except_osv(
84 _('Field type error:'),
85 _("The type of the field '%s' is %s. It should be a string "
86 "or unicode.")
87 % (field_name, type(value)))
88 if not value:
89 raise osv.except_osv(
90 _('Error:'),
91 _("The '%s' is empty or 0. It should have a non-null value.")
92 % field_name)
93 if max_size and len(value) > max_size:
94 value = value[0:max_size]
95 return value
96
97 def _prepare_export_sepa(
98 self, cr, uid, total_amount, transactions_count, xml_string,
99 gen_args, context=None):
100 return {
101 'batch_booking': gen_args['sepa_export'].batch_booking,
102 'charge_bearer': gen_args['sepa_export'].charge_bearer,
103 'total_amount': total_amount,
104 'nb_transactions': transactions_count,
105 'file': base64.encodestring(xml_string),
106 'payment_order_ids': [(
107 6, 0, [x.id for x in gen_args['sepa_export'].payment_order_ids]
108 )],
109 }
110
111 def _validate_xml(self, cr, uid, xml_string, gen_args, context=None):
112 xsd_etree_obj = etree.parse(
113 tools.file_open(gen_args['pain_xsd_file']))
114 official_pain_schema = etree.XMLSchema(xsd_etree_obj)
115
116 try:
117 root_to_validate = etree.fromstring(xml_string)
118 official_pain_schema.assertValid(root_to_validate)
119 except Exception, e:
120 logger.warning(
121 "The XML file is invalid against the XML Schema Definition")
122 logger.warning(xml_string)
123 logger.warning(e)
124 raise osv.except_osv(
125 _('Error:'),
126 _("The generated XML file is not valid against the official "
127 "XML Schema Definition. The generated XML file and the "
128 "full error have been written in the server logs. Here "
129 "is the error, which may give you an idea on the cause "
130 "of the problem : %s")
131 % str(e))
132 return True
133
134 def finalize_sepa_file_creation(
135 self, cr, uid, ids, xml_root, total_amount, transactions_count,
136 gen_args, context=None):
137 xml_string = etree.tostring(
138 xml_root, pretty_print=True, encoding='UTF-8',
139 xml_declaration=True)
140 logger.debug(
141 "Generated SEPA XML file in format %s below"
142 % gen_args['pain_flavor'])
143 logger.debug(xml_string)
144 self._validate_xml(cr, uid, xml_string, gen_args, context=context)
145
146 file_id = gen_args['file_obj'].create(
147 cr, uid, self._prepare_export_sepa(
148 cr, uid, total_amount, transactions_count,
149 xml_string, gen_args, context=context),
150 context=context)
151
152 self.write(
153 cr, uid, ids, {
154 'file_id': file_id,
155 'state': 'finish',
156 }, context=context)
157
158 action = {
159 'name': 'SEPA File',
160 'type': 'ir.actions.act_window',
161 'view_type': 'form',
162 'view_mode': 'form,tree',
163 'res_model': self._name,
164 'res_id': ids[0],
165 'target': 'new',
166 }
167 return action
168
169 def generate_group_header_block(
170 self, cr, uid, parent_node, gen_args, context=None):
171 group_header_1_0 = etree.SubElement(parent_node, 'GrpHdr')
172 message_identification_1_1 = etree.SubElement(
173 group_header_1_0, 'MsgId')
174 message_identification_1_1.text = self._prepare_field(
175 cr, uid, 'Message Identification',
176 'sepa_export.payment_order_ids[0].reference',
177 {'sepa_export': gen_args['sepa_export']}, 35,
178 gen_args=gen_args, context=context)
179 creation_date_time_1_2 = etree.SubElement(group_header_1_0, 'CreDtTm')
180 creation_date_time_1_2.text = datetime.strftime(
181 datetime.today(), '%Y-%m-%dT%H:%M:%S')
182 if gen_args.get('pain_flavor') == 'pain.001.001.02':
183 # batch_booking is in "Group header" with pain.001.001.02
184 # and in "Payment info" in pain.001.001.03/04
185 batch_booking = etree.SubElement(group_header_1_0, 'BtchBookg')
186 batch_booking.text = \
187 str(gen_args['sepa_export'].batch_booking).lower()
188 nb_of_transactions_1_6 = etree.SubElement(
189 group_header_1_0, 'NbOfTxs')
190 control_sum_1_7 = etree.SubElement(group_header_1_0, 'CtrlSum')
191 # Grpg removed in pain.001.001.03
192 if gen_args.get('pain_flavor') == 'pain.001.001.02':
193 grouping = etree.SubElement(group_header_1_0, 'Grpg')
194 grouping.text = 'GRPD'
195 self.generate_initiating_party_block(
196 cr, uid, group_header_1_0, gen_args,
197 context=context)
198 return group_header_1_0, nb_of_transactions_1_6, control_sum_1_7
199
200 def generate_start_payment_info_block(
201 self, cr, uid, parent_node, payment_info_ident,
202 priority, local_instrument, sequence_type, requested_date,
203 eval_ctx, gen_args, context=None):
204 payment_info_2_0 = etree.SubElement(parent_node, 'PmtInf')
205 payment_info_identification_2_1 = etree.SubElement(
206 payment_info_2_0, 'PmtInfId')
207 payment_info_identification_2_1.text = self._prepare_field(
208 cr, uid, 'Payment Information Identification',
209 payment_info_ident, eval_ctx, 35,
210 gen_args=gen_args, context=context)
211 payment_method_2_2 = etree.SubElement(payment_info_2_0, 'PmtMtd')
212 payment_method_2_2.text = gen_args['payment_method']
213 if gen_args.get('pain_flavor') != 'pain.001.001.02':
214 batch_booking_2_3 = etree.SubElement(payment_info_2_0, 'BtchBookg')
215 batch_booking_2_3.text = \
216 str(gen_args['sepa_export'].batch_booking).lower()
217 # The "SEPA Customer-to-bank
218 # Implementation guidelines" for SCT and SDD says that control sum
219 # and nb_of_transactions should be present
220 # at both "group header" level and "payment info" level
221 nb_of_transactions_2_4 = etree.SubElement(
222 payment_info_2_0, 'NbOfTxs')
223 control_sum_2_5 = etree.SubElement(payment_info_2_0, 'CtrlSum')
224 payment_type_info_2_6 = etree.SubElement(
225 payment_info_2_0, 'PmtTpInf')
226 if priority:
227 instruction_priority_2_7 = etree.SubElement(
228 payment_type_info_2_6, 'InstrPrty')
229 instruction_priority_2_7.text = priority
230 service_level_2_8 = etree.SubElement(
231 payment_type_info_2_6, 'SvcLvl')
232 service_level_code_2_9 = etree.SubElement(service_level_2_8, 'Cd')
233 service_level_code_2_9.text = 'SEPA'
234 if local_instrument:
235 local_instrument_2_11 = etree.SubElement(
236 payment_type_info_2_6, 'LclInstrm')
237 local_instr_code_2_12 = etree.SubElement(
238 local_instrument_2_11, 'Cd')
239 local_instr_code_2_12.text = local_instrument
240 if sequence_type:
241 sequence_type_2_14 = etree.SubElement(
242 payment_type_info_2_6, 'SeqTp')
243 sequence_type_2_14.text = sequence_type
244
245 if gen_args['payment_method'] == 'DD':
246 request_date_tag = 'ReqdColltnDt'
247 else:
248 request_date_tag = 'ReqdExctnDt'
249 requested_date_2_17 = etree.SubElement(
250 payment_info_2_0, request_date_tag)
251 requested_date_2_17.text = requested_date
252 return payment_info_2_0, nb_of_transactions_2_4, control_sum_2_5
253
254 def generate_initiating_party_block(
255 self, cr, uid, parent_node, gen_args, context=None):
256 my_company_name = self._prepare_field(
257 cr, uid, 'Company Name',
258 'sepa_export.payment_order_ids[0].mode.bank_id.partner_id.name',
259 {'sepa_export': gen_args['sepa_export']},
260 gen_args.get('name_maxsize'), gen_args=gen_args, context=context)
261 initiating_party_1_8 = etree.SubElement(parent_node, 'InitgPty')
262 initiating_party_name = etree.SubElement(initiating_party_1_8, 'Nm')
263 initiating_party_name.text = my_company_name
264 initiating_party_identifier = self.pool.get('res.company').\
265 _get_initiating_party_identifier(
266 cr, uid,
267 gen_args['sepa_export'].payment_order_ids[0].mode.type.company_id.id,
268 context=context)
269 initiating_party_issuer = gen_args['sepa_export'].\
270 payment_order_ids[0].mode.type.company_id.initiating_party_issuer
271 if initiating_party_identifier and initiating_party_issuer:
272 iniparty_id = etree.SubElement(initiating_party_1_8, 'Id')
273 iniparty_org_id = etree.SubElement(iniparty_id, 'OrgId')
274 iniparty_org_other = etree.SubElement(iniparty_org_id, 'Othr')
275 iniparty_org_other_id = etree.SubElement(iniparty_org_other, 'Id')
276 iniparty_org_other_id.text = initiating_party_identifier
277 iniparty_org_other_issuer = etree.SubElement(
278 iniparty_org_other, 'Issr')
279 iniparty_org_other_issuer.text = initiating_party_issuer
280 return True
281
282 def generate_party_agent(
283 self, cr, uid, parent_node, party_type, party_type_label,
284 order, party_name, iban, bic, eval_ctx, gen_args, context=None):
285 '''Generate the piece of the XML file corresponding to BIC
286 This code is mutualized between TRF and DD'''
287 assert order in ('B', 'C'), "Order can be 'B' or 'C'"
288 try:
289 bic = self._prepare_field(
290 cr, uid, '%s BIC' % party_type_label, bic, eval_ctx,
291 gen_args=gen_args, context=context)
292 party_agent = etree.SubElement(parent_node, '%sAgt' % party_type)
293 party_agent_institution = etree.SubElement(
294 party_agent, 'FinInstnId')
295 party_agent_bic = etree.SubElement(
296 party_agent_institution, gen_args.get('bic_xml_tag'))
297 party_agent_bic.text = bic
298 except except_orm:
299 if order == 'C':
300 if iban[0:2] != gen_args['initiating_party_country_code']:
301 raise osv.except_osv(
302 _('Error:'),
303 _("The bank account with IBAN '%s' of partner '%s' "
304 "must have an associated BIC because it is a "
305 "cross-border SEPA operation.")
306 % (iban, party_name))
307 if order == 'B' or (
308 order == 'C' and gen_args['payment_method'] == 'DD'):
309 party_agent = etree.SubElement(
310 parent_node, '%sAgt' % party_type)
311 party_agent_institution = etree.SubElement(
312 party_agent, 'FinInstnId')
313 party_agent_other = etree.SubElement(
314 party_agent_institution, 'Othr')
315 party_agent_other_identification = etree.SubElement(
316 party_agent_other, 'Id')
317 party_agent_other_identification.text = 'NOTPROVIDED'
318 # for Credit Transfers, in the 'C' block, if BIC is not provided,
319 # we should not put the 'Creditor Agent' block at all,
320 # as per the guidelines of the EPC
321 return True
322
323 def generate_party_block(
324 self, cr, uid, parent_node, party_type, order, name, iban, bic,
325 bank_id, eval_ctx, gen_args, context=None):
326 '''Generate the piece of the XML file corresponding to Name+IBAN+BIC
327 This code is mutualized between TRF and DD'''
328 assert order in ('B', 'C'), "Order can be 'B' or 'C'"
329 if party_type == 'Cdtr':
330 party_type_label = 'Creditor'
331 elif party_type == 'Dbtr':
332 party_type_label = 'Debtor'
333 party_name = self._prepare_field(
334 cr, uid, '%s Name' % party_type_label, name, eval_ctx,
335 gen_args.get('name_maxsize'),
336 gen_args=gen_args, context=context)
337 piban = self._prepare_field(
338 cr, uid, '%s IBAN' % party_type_label, iban, eval_ctx,
339 gen_args=gen_args,
340 context=context)
341 viban = self._validate_iban(cr, uid, piban, bank_id, context=context)
342 # At C level, the order is : BIC, Name, IBAN
343 # At B level, the order is : Name, IBAN, BIC
344 if order == 'B':
345 gen_args['initiating_party_country_code'] = viban[0:2]
346 elif order == 'C':
347 self.generate_party_agent(
348 cr, uid, parent_node, party_type, party_type_label,
349 order, party_name, viban, bic,
350 eval_ctx, gen_args, context=context)
351 party = etree.SubElement(parent_node, party_type)
352 party_nm = etree.SubElement(party, 'Nm')
353 party_nm.text = party_name
354 party_account = etree.SubElement(
355 parent_node, '%sAcct' % party_type)
356 party_account_id = etree.SubElement(party_account, 'Id')
357 party_account_iban = etree.SubElement(
358 party_account_id, 'IBAN')
359 party_account_iban.text = viban
360 if order == 'B':
361 self.generate_party_agent(
362 cr, uid, parent_node, party_type, party_type_label,
363 order, party_name, viban, bic,
364 eval_ctx, gen_args, context=context)
365 return True
366
367 def generate_remittance_info_block(
368 self, cr, uid, parent_node, line, gen_args, context=None):
369
370 remittance_info_2_91 = etree.SubElement(
371 parent_node, 'RmtInf')
372 if line.state == 'normal':
373 remittance_info_unstructured_2_99 = etree.SubElement(
374 remittance_info_2_91, 'Ustrd')
375 remittance_info_unstructured_2_99.text = \
376 self._prepare_field(
377 cr, uid, 'Remittance Unstructured Information',
378 'line.communication', {'line': line}, 140,
379 gen_args=gen_args,
380 context=context)
381 else:
382 if not line.struct_communication_type:
383 raise osv.except_osv(
384 _('Error:'),
385 _("Missing 'Structured Communication Type' on payment "
386 "line with reference '%s'.")
387 % (line.name))
388 remittance_info_structured_2_100 = etree.SubElement(
389 remittance_info_2_91, 'Strd')
390 creditor_ref_information_2_120 = etree.SubElement(
391 remittance_info_structured_2_100, 'CdtrRefInf')
392 if gen_args.get('pain_flavor') == 'pain.001.001.02':
393 creditor_ref_info_type_2_121 = etree.SubElement(
394 creditor_ref_information_2_120, 'CdtrRefTp')
395 creditor_ref_info_type_code_2_123 = etree.SubElement(
396 creditor_ref_info_type_2_121, 'Cd')
397 creditor_ref_info_type_issuer_2_125 = etree.SubElement(
398 creditor_ref_info_type_2_121, 'Issr')
399 creditor_reference_2_126 = etree.SubElement(
400 creditor_ref_information_2_120, 'CdtrRef')
401 else:
402 creditor_ref_info_type_2_121 = etree.SubElement(
403 creditor_ref_information_2_120, 'Tp')
404 creditor_ref_info_type_or_2_122 = etree.SubElement(
405 creditor_ref_info_type_2_121, 'CdOrPrtry')
406 creditor_ref_info_type_code_2_123 = etree.SubElement(
407 creditor_ref_info_type_or_2_122, 'Cd')
408 creditor_ref_info_type_issuer_2_125 = etree.SubElement(
409 creditor_ref_info_type_2_121, 'Issr')
410 creditor_reference_2_126 = etree.SubElement(
411 creditor_ref_information_2_120, 'Ref')
412
413 creditor_ref_info_type_code_2_123.text = 'SCOR'
414 creditor_ref_info_type_issuer_2_125.text = \
415 line.struct_communication_type
416 creditor_reference_2_126.text = \
417 self._prepare_field(
418 cr, uid, 'Creditor Structured Reference',
419 'line.communication', {'line': line}, 35,
420 gen_args=gen_args,
421 context=context)
422 return True
423
424 def generate_creditor_scheme_identification(
425 self, cr, uid, parent_node, identification, identification_label,
426 eval_ctx, scheme_name_proprietary, gen_args, context=None):
427 csi_id = etree.SubElement(
428 parent_node, 'Id')
429 csi_privateid = csi_id = etree.SubElement(csi_id, 'PrvtId')
430 csi_other = etree.SubElement(csi_privateid, 'Othr')
431 csi_other_id = etree.SubElement(csi_other, 'Id')
432 csi_other_id.text = self._prepare_field(
433 cr, uid, identification_label, identification, eval_ctx,
434 gen_args=gen_args, context=context)
435 csi_scheme_name = etree.SubElement(csi_other, 'SchmeNm')
436 csi_scheme_name_proprietary = etree.SubElement(
437 csi_scheme_name, 'Prtry')
438 csi_scheme_name_proprietary.text = scheme_name_proprietary
439 return True
440
441banking_export_pain()
0442
=== added file 'account_payment_pain_base/company.py'
--- account_payment_pain_base/company.py 1970-01-01 00:00:00 +0000
+++ account_payment_pain_base/company.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,82 @@
1# -*- encoding: utf-8 -*-
2##############################################################################
3#
4# PAIN Base module for OpenERP
5# Copyright (C) 2013 Akretion (http://www.akretion.com)
6# Copyright (C) 2013 Noviat (http://www.noviat.com)
7# @author: Alexis de Lattre <alexis.delattre@akretion.com>
8# @author: Luc de Meyer (Noviat)
9#
10# This program is free software: you can redistribute it and/or modify
11# it under the terms of the GNU Affero General Public License as
12# published by the Free Software Foundation, either version 3 of the
13# License, or (at your option) any later version.
14#
15# This program is distributed in the hope that it will be useful,
16# but WITHOUT ANY WARRANTY; without even the implied warranty of
17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18# GNU Affero General Public License for more details.
19#
20# You should have received a copy of the GNU Affero General Public License
21# along with this program. If not, see <http://www.gnu.org/licenses/>.
22#
23##############################################################################
24
25from osv import osv, fields
26
27
28class res_company(osv.osv):
29 _inherit = 'res.company'
30
31 _columns = {
32 'initiating_party_issuer': fields.char(
33 'Initiating Party Issuer', size=35,
34 help="This will be used as the 'Initiating Party Issuer' in the "
35 "PAIN files generated by OpenERP."),
36 }
37
38 def _get_initiating_party_identifier(
39 self, cr, uid, company_id, context=None):
40 '''The code here may be different from one country to another.
41 If you need to add support for an additionnal country, you can
42 contribute your code here or inherit this function in the
43 localization modules for your country'''
44 assert isinstance(company_id, int), 'Only one company ID'
45 company = self.browse(cr, uid, company_id, context=context)
46 company_vat = company.partner_id.vat
47 party_identifier = False
48 if company_vat and company_vat[0:2].upper() in ['BE']:
49 party_identifier = company_vat[2:].replace(' ', '')
50 if company_vat and company_vat[0:2].upper() in ['ES']:
51 party_identifier = company.sepa_creditor_identifier
52 return party_identifier
53
54 def _initiating_party_issuer_default(self, cr, uid, context=None):
55 '''If you need to add support for an additionnal country, you can
56 add an entry in the dict "party_issuer_per_country" here
57 or inherit this function in the localization modules for
58 your country'''
59 initiating_party_issuer = ''
60 # If your country require the 'Initiating Party Issuer', you should
61 # contribute the entry for your country in the dict below
62 party_issuer_per_country = {
63 'BE': 'KBO-BCE', # KBO-BCE = the registry of companies in Belgium
64 }
65 company_id = self._company_default_get(
66 cr, uid, 'res.company', context=context)
67 if company_id:
68 company = self.browse(cr, uid, company_id, context=context)
69 country_code = company.partner_id.country.code
70 initiating_party_issuer = party_issuer_per_country.get(
71 country_code, '')
72 return initiating_party_issuer
73
74 def _initiating_party_issuer_def(self, cr, uid, context=None):
75 return self._initiating_party_issuer_default(
76 cr, uid, context=context)
77
78 _defaults = {
79 'initiating_party_issuer': _initiating_party_issuer_def,
80 }
81
82res_company()
083
=== added file 'account_payment_pain_base/company_view.xml'
--- account_payment_pain_base/company_view.xml 1970-01-01 00:00:00 +0000
+++ account_payment_pain_base/company_view.xml 2014-06-02 14:43:40 +0000
@@ -0,0 +1,25 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!--
3 Copyright (C) 2013 Akretion (http://www.akretion.com)
4 @author: Alexis de Lattre <alexis.delattre@akretion.com>
5 The licence is in the file __openerp__.py
6-->
7<openerp>
8<data>
9
10<record id="view_company_form" model="ir.ui.view">
11 <field name="name">pain.group.on.res.company.form</field>
12 <field name="model">res.company</field>
13 <field name="inherit_id" ref="base.view_company_form"/>
14 <field name="arch" type="xml">
15 <page string="Configuration" position="inside">
16 <group colspan="4">
17 <separator string="Payment Initiation" colspan="4" />
18 <field name="initiating_party_issuer"/>
19 </group>
20 </page>
21 </field>
22</record>
23
24</data>
25</openerp>
026
=== added directory 'account_payment_pain_base/i18n'
=== added file 'account_payment_pain_base/i18n/account_banking_pain_base.pot'
--- account_payment_pain_base/i18n/account_banking_pain_base.pot 1970-01-01 00:00:00 +0000
+++ account_payment_pain_base/i18n/account_banking_pain_base.pot 2014-06-02 14:43:40 +0000
@@ -0,0 +1,146 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * account_banking_pain_base
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2013-12-23 21:26+0000\n"
10"PO-Revision-Date: 2013-12-23 21:26+0000\n"
11"Last-Translator: <>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: \n"
16"Plural-Forms: \n"
17
18#. module: account_banking_pain_base
19#: field:res.company,initiating_party_issuer:0
20msgid "Initiating Party Issuer"
21msgstr ""
22
23#. module: account_banking_pain_base
24#: code:addons/account_banking_pain_base/banking_export_pain.py:122
25#, python-format
26msgid "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"
27msgstr ""
28
29#. module: account_banking_pain_base
30#: field:payment.line,priority:0
31msgid "Priority"
32msgstr ""
33
34#. module: account_banking_pain_base
35#: model:ir.model,name:account_banking_pain_base.model_payment_line
36msgid "Payment Line"
37msgstr ""
38
39#. module: account_banking_pain_base
40#: model:ir.model,name:account_banking_pain_base.model_payment_mode
41msgid "Payment Mode"
42msgstr ""
43
44#. module: account_banking_pain_base
45#: help:res.company,initiating_party_issuer:0
46msgid "This will be used as the 'Initiating Party Issuer' in the PAIN files generated by OpenERP."
47msgstr ""
48
49#. module: account_banking_pain_base
50#: code:addons/account_banking_pain_base/banking_export_pain.py:351
51#, python-format
52msgid "Missing 'Structured Communication Type' on payment line with reference '%s'."
53msgstr ""
54
55#. module: account_banking_pain_base
56#: selection:payment.line,priority:0
57msgid "Normal"
58msgstr ""
59
60#. module: account_banking_pain_base
61#: code:addons/account_banking_pain_base/banking_export_pain.py:70
62#, python-format
63msgid "Cannot compute the '%s' of the Payment Line with reference '%s'."
64msgstr ""
65
66#. module: account_banking_pain_base
67#: code:addons/account_banking_pain_base/banking_export_pain.py:77
68#, python-format
69msgid "Cannot compute the '%s'."
70msgstr ""
71
72#. module: account_banking_pain_base
73#: code:addons/account_banking_pain_base/banking_export_pain.py:81
74#, python-format
75msgid "The type of the field '%s' is %s. It should be a string or unicode."
76msgstr ""
77
78#. module: account_banking_pain_base
79#: code:addons/account_banking_pain_base/banking_export_pain.py:47
80#: code:addons/account_banking_pain_base/banking_export_pain.py:69
81#: code:addons/account_banking_pain_base/banking_export_pain.py:76
82#: code:addons/account_banking_pain_base/banking_export_pain.py:86
83#: code:addons/account_banking_pain_base/banking_export_pain.py:121
84#: code:addons/account_banking_pain_base/banking_export_pain.py:350
85#, python-format
86msgid "Error:"
87msgstr ""
88
89#. module: account_banking_pain_base
90#: model:ir.model,name:account_banking_pain_base.model_res_company
91msgid "Companies"
92msgstr ""
93
94#. module: account_banking_pain_base
95#: code:addons/account_banking_pain_base/banking_export_pain.py:47
96#, python-format
97msgid "This IBAN is not valid : %s"
98msgstr ""
99
100#. module: account_banking_pain_base
101#: code:addons/account_banking_pain_base/banking_export_pain.py:80
102#, python-format
103msgid "Field type error:"
104msgstr ""
105
106#. module: account_banking_pain_base
107#: field:payment.line,struct_communication_type:0
108msgid "Structured Communication Type"
109msgstr ""
110
111#. module: account_banking_pain_base
112#: code:addons/account_banking_pain_base/banking_export_pain.py:87
113#, python-format
114msgid "The '%s' is empty or 0. It should have a non-null value."
115msgstr ""
116
117#. module: account_banking_pain_base
118#: model:ir.model,name:account_banking_pain_base.model_banking_export_pain
119msgid "banking.export.pain"
120msgstr ""
121
122#. module: account_banking_pain_base
123#: help:payment.mode,convert_to_ascii:0
124msgid "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."
125msgstr ""
126
127#. module: account_banking_pain_base
128#: help:payment.line,priority:0
129msgid "This field will be used as the 'Instruction Priority' in the generated PAIN file."
130msgstr ""
131
132#. module: account_banking_pain_base
133#: view:res.company:0
134msgid "Payment Initiation"
135msgstr ""
136
137#. module: account_banking_pain_base
138#: selection:payment.line,priority:0
139msgid "High"
140msgstr ""
141
142#. module: account_banking_pain_base
143#: field:payment.mode,convert_to_ascii:0
144msgid "Convert to ASCII"
145msgstr ""
146
0147
=== added file 'account_payment_pain_base/i18n/es.po'
--- account_payment_pain_base/i18n/es.po 1970-01-01 00:00:00 +0000
+++ account_payment_pain_base/i18n/es.po 2014-06-02 14:43:40 +0000
@@ -0,0 +1,153 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * account_payment_pain_base
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0-20131224-002412\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2014-01-25 11:28+0000\n"
10"PO-Revision-Date: 2014-01-25 11:28+0000\n"
11"Last-Translator: <>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: \n"
16"Plural-Forms: \n"
17
18#. module: account_payment_pain_base
19#: field:res.company,initiating_party_issuer:0
20msgid "Initiating Party Issuer"
21msgstr "Initiating Party Issuer"
22
23#. module: account_payment_pain_base
24#: code:addons/account_payment_pain_base/banking_export_pain.py:126
25#, python-format
26msgid "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"
27msgstr "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"
28
29#. module: account_payment_pain_base
30#: field:payment.line,priority:0
31msgid "Priority"
32msgstr "Prioridad"
33
34#. module: account_payment_pain_base
35#: model:ir.model,name:account_payment_pain_base.model_payment_line
36msgid "Payment Line"
37msgstr "Línea de pago"
38
39#. module: account_payment_pain_base
40#: model:ir.model,name:account_payment_pain_base.model_payment_mode
41msgid "Payment Mode"
42msgstr "Modo de pago"
43
44#. module: account_payment_pain_base
45#: code:addons/account_payment_pain_base/banking_export_pain.py:303
46#, python-format
47msgid "The bank account with IBAN '%s' of partner '%s' must have an associated BIC because it is a cross-border SEPA operation."
48msgstr "La cuenta bancaria con IBAN '%s' de la empresa '%s' debe tener un BIC asociado porque es una operación SEPA transfronteriza."
49
50#. module: account_payment_pain_base
51#: help:res.company,initiating_party_issuer:0
52msgid "This will be used as the 'Initiating Party Issuer' in the PAIN files generated by OpenERP."
53msgstr "This will be used as the 'Initiating Party Issuer' in the PAIN files generated by OpenERP."
54
55#. module: account_payment_pain_base
56#: selection:payment.line,priority:0
57msgid "Normal"
58msgstr "Normal"
59
60#. module: account_payment_pain_base
61#: code:addons/account_payment_pain_base/banking_export_pain.py:81
62#, python-format
63msgid "Cannot compute the '%s'."
64msgstr "No se puede computar el '%s'."
65
66#. module: account_payment_pain_base
67#: code:addons/account_payment_pain_base/banking_export_pain.py:85
68#, python-format
69msgid "The type of the field '%s' is %s. It should be a string or unicode."
70msgstr "El tipo de archivo '%s' es %s. Deben ser caracteres o unicode."
71
72#. module: account_payment_pain_base
73#: model:ir.model,name:account_payment_pain_base.model_res_company
74msgid "Companies"
75msgstr "Compañías"
76
77#. module: account_payment_pain_base
78#: code:addons/account_payment_pain_base/banking_export_pain.py:47
79#: code:addons/account_payment_pain_base/banking_export_pain.py:74
80#: code:addons/account_payment_pain_base/banking_export_pain.py:80
81#: code:addons/account_payment_pain_base/banking_export_pain.py:90
82#: code:addons/account_payment_pain_base/banking_export_pain.py:125
83#: code:addons/account_payment_pain_base/banking_export_pain.py:302
84#: code:addons/account_payment_pain_base/banking_export_pain.py:384
85#, python-format
86msgid "Error:"
87msgstr "Error:"
88
89#. module: account_payment_pain_base
90#: help:payment.line,priority:0
91msgid "This field will be used as the 'Instruction Priority' in the generated PAIN file."
92msgstr "Este campo debe ser usuado como 'Instrucción prioritaria' en el archivo PAIN generado."
93
94#. module: account_payment_pain_base
95#: code:addons/account_payment_pain_base/banking_export_pain.py:75
96#, python-format
97msgid "Cannot compute the '%s' of the Payment Line with reference '%s'."
98msgstr "No se puede computar el '%s' de la línea de pago '%s'."
99
100#. module: account_payment_pain_base
101#: code:addons/account_payment_pain_base/banking_export_pain.py:47
102#, python-format
103msgid "This IBAN is not valid : %s"
104msgstr "Este IBAN no es válido : %s"
105
106#. module: account_payment_pain_base
107#: code:addons/account_payment_pain_base/banking_export_pain.py:84
108#, python-format
109msgid "Field type error:"
110msgstr "Error en el ripo de campo:"
111
112#. module: account_payment_pain_base
113#: field:payment.line,struct_communication_type:0
114msgid "Structured Communication Type"
115msgstr "Comunicación estructurada"
116
117#. module: account_payment_pain_base
118#: code:addons/account_payment_pain_base/banking_export_pain.py:91
119#, python-format
120msgid "The '%s' is empty or 0. It should have a non-null value."
121msgstr "Es '%s' esta vacio o es 0. Debe tener un valor no núlo."
122
123#. module: account_payment_pain_base
124#: model:ir.model,name:account_payment_pain_base.model_banking_export_pain
125msgid "banking.export.pain"
126msgstr "banking.export.pain"
127
128#. module: account_payment_pain_base
129#: help:payment.mode,convert_to_ascii:0
130msgid "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."
131msgstr "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."
132
133#. module: account_payment_pain_base
134#: view:res.company:0
135msgid "Payment Initiation"
136msgstr "Inicio de pago"
137
138#. module: account_payment_pain_base
139#: selection:payment.line,priority:0
140msgid "High"
141msgstr "Alto"
142
143#. module: account_payment_pain_base
144#: field:payment.mode,convert_to_ascii:0
145msgid "Convert to ASCII"
146msgstr "Convertir a ASCII"
147
148#. module: account_payment_pain_base
149#: code:addons/account_payment_pain_base/banking_export_pain.py:385
150#, python-format
151msgid "Missing 'Structured Communication Type' on payment line with reference '%s'."
152msgstr "'Comunicación estrecturada' no disponible en la línea de pago con referencia '%s'."
153
0154
=== added file 'account_payment_pain_base/i18n/fr.po'
--- account_payment_pain_base/i18n/fr.po 1970-01-01 00:00:00 +0000
+++ account_payment_pain_base/i18n/fr.po 2014-06-02 14:43:40 +0000
@@ -0,0 +1,146 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * account_banking_pain_base
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2013-12-23 21:27+0000\n"
10"PO-Revision-Date: 2013-12-23 21:27+0000\n"
11"Last-Translator: <>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: \n"
16"Plural-Forms: \n"
17
18#. module: account_banking_pain_base
19#: field:res.company,initiating_party_issuer:0
20msgid "Initiating Party Issuer"
21msgstr "Initiating Party Issuer"
22
23#. module: account_banking_pain_base
24#: code:addons/account_banking_pain_base/banking_export_pain.py:122
25#, python-format
26msgid "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"
27msgstr "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"
28
29#. module: account_banking_pain_base
30#: field:payment.line,priority:0
31msgid "Priority"
32msgstr "Priorité"
33
34#. module: account_banking_pain_base
35#: model:ir.model,name:account_banking_pain_base.model_payment_line
36msgid "Payment Line"
37msgstr "Ligne de paiement"
38
39#. module: account_banking_pain_base
40#: model:ir.model,name:account_banking_pain_base.model_payment_mode
41msgid "Payment Mode"
42msgstr "Mode de paiement"
43
44#. module: account_banking_pain_base
45#: help:res.company,initiating_party_issuer:0
46msgid "This will be used as the 'Initiating Party Issuer' in the PAIN files generated by OpenERP."
47msgstr "Ce champ sera le 'Initiating Party Issuer' dans les fichiers PAIN générés par OpenERP."
48
49#. module: account_banking_pain_base
50#: code:addons/account_banking_pain_base/banking_export_pain.py:351
51#, python-format
52msgid "Missing 'Structured Communication Type' on payment line with reference '%s'."
53msgstr "Le 'Type de communication structuré' n'est pas renseigné sur la ligne de paiement ayant la référence '%s'."
54
55#. module: account_banking_pain_base
56#: selection:payment.line,priority:0
57msgid "Normal"
58msgstr "Normal"
59
60#. module: account_banking_pain_base
61#: code:addons/account_banking_pain_base/banking_export_pain.py:70
62#, python-format
63msgid "Cannot compute the '%s' of the Payment Line with reference '%s'."
64msgstr "Impossible de calculer le '%s' de la ligne de paiement ayant la référence '%s'."
65
66#. module: account_banking_pain_base
67#: code:addons/account_banking_pain_base/banking_export_pain.py:77
68#, python-format
69msgid "Cannot compute the '%s'."
70msgstr "Impossible de calculer le '%s'."
71
72#. module: account_banking_pain_base
73#: code:addons/account_banking_pain_base/banking_export_pain.py:81
74#, python-format
75msgid "The type of the field '%s' is %s. It should be a string or unicode."
76msgstr "Le type du champ '%s' est %s. Il devrait être de type string ou unicode."
77
78#. module: account_banking_pain_base
79#: code:addons/account_banking_pain_base/banking_export_pain.py:47
80#: code:addons/account_banking_pain_base/banking_export_pain.py:69
81#: code:addons/account_banking_pain_base/banking_export_pain.py:76
82#: code:addons/account_banking_pain_base/banking_export_pain.py:86
83#: code:addons/account_banking_pain_base/banking_export_pain.py:121
84#: code:addons/account_banking_pain_base/banking_export_pain.py:350
85#, python-format
86msgid "Error:"
87msgstr "Erreur :"
88
89#. module: account_banking_pain_base
90#: model:ir.model,name:account_banking_pain_base.model_res_company
91msgid "Companies"
92msgstr "Sociétés"
93
94#. module: account_banking_pain_base
95#: code:addons/account_banking_pain_base/banking_export_pain.py:47
96#, python-format
97msgid "This IBAN is not valid : %s"
98msgstr "Cet IBAN n'est pas valide : %s"
99
100#. module: account_banking_pain_base
101#: code:addons/account_banking_pain_base/banking_export_pain.py:80
102#, python-format
103msgid "Field type error:"
104msgstr "Erreur dans le type de champ :"
105
106#. module: account_banking_pain_base
107#: field:payment.line,struct_communication_type:0
108msgid "Structured Communication Type"
109msgstr "Type de communication structurée"
110
111#. module: account_banking_pain_base
112#: code:addons/account_banking_pain_base/banking_export_pain.py:87
113#, python-format
114msgid "The '%s' is empty or 0. It should have a non-null value."
115msgstr "Le '%s' est vide ou égal à 0. Il devrait avoir une valeur non-nulle."
116
117#. module: account_banking_pain_base
118#: model:ir.model,name:account_banking_pain_base.model_banking_export_pain
119msgid "banking.export.pain"
120msgstr "banking.export.pain"
121
122#. module: account_banking_pain_base
123#: help:payment.mode,convert_to_ascii:0
124msgid "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."
125msgstr "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é."
126
127#. module: account_banking_pain_base
128#: help:payment.line,priority:0
129msgid "This field will be used as the 'Instruction Priority' in the generated PAIN file."
130msgstr "Ce champ sera le 'Instruction Priority' dans le fichier PAIN généré."
131
132#. module: account_banking_pain_base
133#: view:res.company:0
134msgid "Payment Initiation"
135msgstr "Payment Initiation"
136
137#. module: account_banking_pain_base
138#: selection:payment.line,priority:0
139msgid "High"
140msgstr "Élevé"
141
142#. module: account_banking_pain_base
143#: field:payment.mode,convert_to_ascii:0
144msgid "Convert to ASCII"
145msgstr "Convertir en ASCII"
146
0147
=== added file 'account_payment_pain_base/payment_line.py'
--- account_payment_pain_base/payment_line.py 1970-01-01 00:00:00 +0000
+++ account_payment_pain_base/payment_line.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,54 @@
1# -*- encoding: utf-8 -*-
2##############################################################################
3#
4# PAIN Base module for OpenERP
5# Copyright (C) 2013 Akretion (http://www.akretion.com)
6# @author: Alexis de Lattre <alexis.delattre@akretion.com>
7#
8# This program is free software: you can redistribute it and/or modify
9# it under the terms of the GNU Affero General Public License as
10# published by the Free Software Foundation, either version 3 of the
11# License, or (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU Affero General Public License for more details.
17#
18# You should have received a copy of the GNU Affero General Public License
19# along with this program. If not, see <http://www.gnu.org/licenses/>.
20#
21##############################################################################
22
23from osv import osv, fields
24
25
26class payment_line(osv.osv):
27 _inherit = 'payment.line'
28
29 def _get_struct_communication_types(self, cr, uid, context=None):
30 return [('ISO', 'ISO')]
31
32 _columns = {
33 'priority': fields.selection([
34 ('NORM', 'Normal'),
35 ('HIGH', 'High'),
36 ], 'Priority',
37 help="This field will be used as the 'Instruction Priority' in "
38 "the generated PAIN file."),
39 # Update size from 64 to 140, because PAIN allows 140 caracters
40 'communication': fields.char(
41 'Communication', size=140, required=True,
42 help="Used as the message between ordering customer and current "
43 "company. Depicts 'What do you want to say to the recipient "
44 "about this order ?'"),
45 'struct_communication_type': fields.selection(
46 _get_struct_communication_types, 'Structured Communication Type'),
47 }
48
49 _defaults = {
50 'priority': 'NORM',
51 'struct_communication_type': 'ISO',
52 }
53
54payment_line()
055
=== added file 'account_payment_pain_base/payment_line_view.xml'
--- account_payment_pain_base/payment_line_view.xml 1970-01-01 00:00:00 +0000
+++ account_payment_pain_base/payment_line_view.xml 2014-06-02 14:43:40 +0000
@@ -0,0 +1,41 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!--
3 Copyright (C) 2013 Akretion (http://www.akretion.com)
4 @author: Alexis de Lattre <alexis.delattre@akretion.com>
5 The licence is in the file __openerp__.py
6-->
7<openerp>
8<data>
9
10<record id="view_payment_line_form" model="ir.ui.view">
11 <field name="name">pain.base.payment.line.form</field>
12 <field name="model">payment.line</field>
13 <field name="inherit_id" ref="account_payment.view_payment_line_form"/>
14 <field name="arch" type="xml">
15 <field name="bank_id" position="after">
16 <field name="priority"/>
17 <newline />
18 </field>
19 <field name="state" position="after">
20 <field name="struct_communication_type" attrs="{'invisible': [('state', '!=', 'structured')], 'required': [('state', '=', 'structured')]}"/>
21 </field>
22 </field>
23</record>
24
25<record id="view_payment_order_form" model="ir.ui.view">
26 <field name="name">pain.base.payment.line.inside.order.form</field>
27 <field name="model">payment.order</field>
28 <field name="inherit_id" ref="account_payment.view_payment_order_form"/>
29 <field name="arch" type="xml">
30 <xpath expr="//field[@name='line_ids']/form//field[@name='bank_id']" position="after">
31 <field name="priority"/>
32 <newline />
33 </xpath>
34 <xpath expr="//field[@name='line_ids']/form//field[@name='state']" position="after">
35 <field name="struct_communication_type" attrs="{'invisible': [('state', '!=', 'structured')], 'required': [('state', '=', 'structured')]}"/>
36 </xpath>
37 </field>
38</record>
39
40</data>
41</openerp>
042
=== added file 'account_payment_pain_base/payment_mode.py'
--- account_payment_pain_base/payment_mode.py 1970-01-01 00:00:00 +0000
+++ account_payment_pain_base/payment_mode.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,41 @@
1# -*- encoding: utf-8 -*-
2##############################################################################
3#
4# PAIN Base module for OpenERP
5# Copyright (C) 2013 Akretion (http://www.akretion.com)
6# @author: Alexis de Lattre <alexis.delattre@akretion.com>
7#
8# This program is free software: you can redistribute it and/or modify
9# it under the terms of the GNU Affero General Public License as
10# published by the Free Software Foundation, either version 3 of the
11# License, or (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU Affero General Public License for more details.
17#
18# You should have received a copy of the GNU Affero General Public License
19# along with this program. If not, see <http://www.gnu.org/licenses/>.
20#
21##############################################################################
22
23from osv import osv, fields
24
25
26class payment_mode(osv.osv):
27 _inherit = 'payment.mode'
28
29 _columns = {
30 'convert_to_ascii': fields.boolean(
31 'Convert to ASCII',
32 help="If active, OpenERP will convert each accented caracter to "
33 "the corresponding unaccented caracter, so that only ASCII "
34 "caracters are used in the generated PAIN file."),
35 }
36
37 _defaults = {
38 'convert_to_ascii': True,
39 }
40
41payment_mode()
042
=== added file 'account_payment_pain_base/payment_mode_view.xml'
--- account_payment_pain_base/payment_mode_view.xml 1970-01-01 00:00:00 +0000
+++ account_payment_pain_base/payment_mode_view.xml 2014-06-02 14:43:40 +0000
@@ -0,0 +1,22 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!--
3 Copyright (C) 2013 Akretion (http://www.akretion.com)
4 @author: Alexis de Lattre <alexis.delattre@akretion.com>
5 The licence is in the file __openerp__.py
6-->
7<openerp>
8<data>
9
10<record id="view_payment_mode_form_inherit" model="ir.ui.view">
11 <field name="name">add.convert_to_ascii.in.payment.mode.form</field>
12 <field name="model">payment.mode</field>
13 <field name="inherit_id" ref="account_payment_extension.view_payment_mode_form_require_bank_account"/>
14 <field name="arch" type="xml">
15 <field name="type" position="after">
16 <field name="convert_to_ascii"/>
17 </field>
18 </field>
19</record>
20
21</data>
22</openerp>
023
=== added directory 'account_payment_sepa_credit_transfer'
=== renamed directory 'account_payment_sepa_credit_transfer' => 'account_payment_sepa_credit_transfer.moved'
=== added file 'account_payment_sepa_credit_transfer/__init__.py'
--- account_payment_sepa_credit_transfer/__init__.py 1970-01-01 00:00:00 +0000
+++ account_payment_sepa_credit_transfer/__init__.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,24 @@
1# -*- encoding: utf-8 -*-
2##############################################################################
3#
4# SEPA Credit Transfer module for OpenERP
5# Copyright (C) 2010-2013 Akretion (http://www.akretion.com)
6# @author: Alexis de Lattre <alexis.delattre@akretion.com>
7#
8# This program is free software: you can redistribute it and/or modify
9# it under the terms of the GNU Affero General Public License as
10# published by the Free Software Foundation, either version 3 of the
11# License, or (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU Affero General Public License for more details.
17#
18# You should have received a copy of the GNU Affero General Public License
19# along with this program. If not, see <http://www.gnu.org/licenses/>.
20#
21##############################################################################
22
23import wizard
24import account_banking_sepa
025
=== added file 'account_payment_sepa_credit_transfer/__openerp__.py'
--- account_payment_sepa_credit_transfer/__openerp__.py 1970-01-01 00:00:00 +0000
+++ account_payment_sepa_credit_transfer/__openerp__.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,57 @@
1##############################################################################
2#
3# SEPA Credit Transfer module for OpenERP
4# Copyright (C) 2010-2013 Akretion (http://www.akretion.com)
5# @author: Alexis de Lattre <alexis.delattre@akretion.com>
6# Copyright (C) 2014 Acysos S.L. (<http://acysos.com>).
7# @author: Ignacio Ibeas <ignacio@acysos.com>
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU Affero General Public License as
11# published by the Free Software Foundation, either version 3 of the
12# License, or (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU Affero General Public License for more details.
18#
19# You should have received a copy of the GNU Affero General Public License
20# along with this program. If not, see <http://www.gnu.org/licenses/>.
21#
22##############################################################################
23{
24 'name': 'Account Payment SEPA Credit Transfer',
25 'summary': 'Create SEPA XML files for Credit Transfers',
26 'version': '0.2',
27 'license': 'AGPL-3',
28 'author': 'Akretion',
29 'website': 'http://www.akretion.com',
30 'category': 'Banking addons',
31 'depends': ['account_payment_pain_base'],
32# 'external_dependencies': {
33# 'python': ['unidecode', 'lxml'],
34# },
35 'data': [
36 'account_banking_sepa_view.xml',
37 'wizard/export_sepa_view.xml',
38 'data/payment_type_sepa_sct.xml',
39 'security/ir.model.access.csv',
40 ],
41 'description': '''
42Module to export payment orders in SEPA XML file format.
43
44SEPA 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.
45
46The 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.
47
48This module uses the framework provided by the account payment addons, cf https://launchpad.net/account-payment
49
50For windows server copy the 'unidecode' folder of https://pypi.python.org/pypi/Unidecode/ to the OpenERP Server Folder.
51
52Please contact Alexis de Lattre from Akretion <alexis.delattre@akretion.com> for any help or question about this module.
53Adapted to account_payment_extension by Acysos S.L. <info@acysos.com>
54 ''',
55 'active': False,
56 'installable': True,
57}
058
=== added file 'account_payment_sepa_credit_transfer/account_banking_sepa.py'
--- account_payment_sepa_credit_transfer/account_banking_sepa.py 1970-01-01 00:00:00 +0000
+++ account_payment_sepa_credit_transfer/account_banking_sepa.py 2014-06-02 14:43:40 +0000
@@ -0,0 +1,91 @@
1##############################################################################
2#
3# SEPA Credit Transfer module for OpenERP
4# Copyright (C) 2010-2013 Akretion (http://www.akretion.com)
5# @author: Alexis de Lattre <alexis.delattre@akretion.com>
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22from osv import fields, osv
23import decimal_precision as dp
24from unidecode import unidecode
25
26
27class banking_export_sepa(osv.osv):
28 '''SEPA export'''
29 _name = 'banking.export.sepa'
30 _description = __doc__
31 _rec_name = 'filename'
32
33 def _generate_filename(self, cr, uid, ids, name, arg, context=None):
34 res = {}
35 for sepa_file in self.browse(cr, uid, ids, context=context):
36 ref = sepa_file.payment_order_ids[0].reference
37 if ref:
38 label = unidecode(ref.replace('/', '-'))
39 else:
40 label = 'error'
41 res[sepa_file.id] = 'sct_%s.xml' % label
42 return res
43
44 _columns = {
45 'payment_order_ids': fields.many2many(
46 'payment.order',
47 'account_payment_order_sepa_rel',
48 'banking_export_sepa_id', 'account_order_id',
49 'Payment Orders',
50 readonly=True),
51 'nb_transactions': fields.integer(
52 'Number of Transactions', readonly=True),
53 'total_amount': fields.float(
54 'Total Amount', digits_compute=dp.get_precision('Account'),
55 readonly=True),
56 'batch_booking': fields.boolean(
57 'Batch Booking', readonly=True,
58 help="If true, the bank statement will display only one debit "
59 "line for all the wire transfers of the SEPA XML file ; "
60 "if false, the bank statement will display one debit line "
61 "per wire transfer of the SEPA XML file."),
62 'charge_bearer': fields.selection([
63 ('SLEV', 'Following Service Level'),
64 ('SHAR', 'Shared'),
65 ('CRED', 'Borne by Creditor'),
66 ('DEBT', 'Borne by Debtor'),
67 ], 'Charge Bearer', readonly=True,
68 help="Following service level : transaction charges are to be "
69 "applied following the rules agreed in the service level and/or "
70 "scheme (SEPA Core messages must use this). Shared : "
71 "transaction charges on the creditor side are to be borne by "
72 "the creditor, transaction charges on the debtor side are to "
73 "be borne by the debtor. Borne by creditor : all transaction "
74 "charges are to be borne by the creditor. Borne by debtor : "
75 "all transaction charges are to be borne by the debtor."),
76 'create_date': fields.datetime('Generation Date', readonly=True),
77 'file': fields.binary('SEPA XML File', readonly=True),
78 'filename': fields.function(
79 _generate_filename, type='char', size=256, string='Filename',
80 method=True, readonly=True, store=True),
81 'state': fields.selection([
82 ('draft', 'Draft'),
83 ('sent', 'Sent'),
84 ('done', 'Reconciled'),
85 ], 'State', readonly=True),
86 }
87
88 _defaults = {
89 'state': 'draft',
90 }
91banking_export_sepa()
092
=== added file 'account_payment_sepa_credit_transfer/account_banking_sepa_view.xml'
--- account_payment_sepa_credit_transfer/account_banking_sepa_view.xml 1970-01-01 00:00:00 +0000
+++ account_payment_sepa_credit_transfer/account_banking_sepa_view.xml 2014-06-02 14:43:40 +0000
@@ -0,0 +1,80 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!--
3 Copyright (C) 2010-2013 Akretion (http://www.akretion.com)
4 @author: Alexis de Lattre <alexis.delattre@akretion.com>
5 The licence is in the file __openerp__.py
6-->
7<openerp>
8<data>
9
10<record id="view_banking_export_sepa_form" model="ir.ui.view">
11 <field name="name">account.banking.export.sepa.form</field>
12 <field name="model">banking.export.sepa</field>
13 <field name="arch" type="xml">
14 <form string="SEPA Credit Transfer">
15 <notebook>
16 <page string="General Information">
17 <field name="total_amount" />
18 <field name="nb_transactions" />
19 <field name="batch_booking" />
20 <field name="charge_bearer"/>
21 <field name="create_date" />
22 <newline />
23 <field name="file" filename="filename"/>
24 <field name="filename" invisible="True"/>
25 </page>
26 <page string="Payment Orders">
27 <field name="payment_order_ids" colspan="4" nolabel="1">
28 <tree colors="blue:state in ('draft');gray:state in ('cancel','done');black:state in ('open')" string="Payment Orders">
29 <field name="reference"/>
30 <field name="date_created"/>
31 <field name="date_done"/>
32 <field name="total"/>
33 <field name="state"/>
34 </tree>
35 </field>
36 </page>
37 </notebook>
38 </form>
39 </field>
40</record>
41
42
43<record id="view_banking_export_sepa_tree" model="ir.ui.view">
44 <field name="name">account.banking.export.sepa.tree</field>
45 <field name="model">banking.export.sepa</field>
46 <field name="arch" type="xml">
47 <tree string="SEPA Credit Transfer">
48 <field name="filename"/>
49 <field name="create_date"/>
50 <field name="nb_transactions"/>
51 </tree>
52 </field>
53</record>
54
55
56<record id="action_account_banking_sepa" model="ir.actions.act_window">
57 <field name="name">SEPA Credit Transfer Files</field>
58 <field name="res_model">banking.export.sepa</field>
59 <field name="view_type">form</field>
60 <field name="view_mode">tree,form</field>
61</record>
62
63
64<menuitem id="menu_account_banking_sepa"
65 parent="account_payment.menu_main_payment"
66 action="action_account_banking_sepa"
67 sequence="15"
68 />
69
70<act_window id="act_banking_export_sepa_payment_order"
71 name="SEPA Credit Transfer Files"
72 domain="[('payment_order_ids', '=', active_id)]"
73 res_model="banking.export.sepa"
74 src_model="payment.order"
75 view_type="form"
76 view_mode="tree,form"
77/>
78
79</data>
80</openerp>
081
=== added directory 'account_payment_sepa_credit_transfer/data'
=== added file 'account_payment_sepa_credit_transfer/data/pain.001.001.02.xsd'
--- account_payment_sepa_credit_transfer/data/pain.001.001.02.xsd 1970-01-01 00:00:00 +0000
+++ account_payment_sepa_credit_transfer/data/pain.001.001.02.xsd 2014-06-02 14:43:40 +0000
@@ -0,0 +1,784 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!--Generated by SWIFTStandards Workstation (build:R5.1.0.4) on 2006 Sep 08 11:58:39-->
3<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">
4<xs:element name="Document" type="Document"/>
5<xs:complexType name="AccountIdentification3Choice">
6<xs:sequence>
7<xs:choice>
8<xs:element name="IBAN" type="IBANIdentifier"/>
9<xs:element name="BBAN" type="BBANIdentifier"/>
10<xs:element name="UPIC" type="UPICIdentifier"/>
11<xs:element name="PrtryAcct" type="SimpleIdentificationInformation2"/>
12</xs:choice>
13</xs:sequence>
14</xs:complexType>
15<xs:simpleType name="AddressType2Code">
16<xs:restriction base="xs:string">
17<xs:enumeration value="ADDR"/>
18<xs:enumeration value="PBOX"/>
19<xs:enumeration value="HOME"/>
20<xs:enumeration value="BIZZ"/>
21<xs:enumeration value="MLTO"/>
22<xs:enumeration value="DLVY"/>
23</xs:restriction>
24</xs:simpleType>
25<xs:complexType name="AmountType2Choice">
26<xs:sequence>
27<xs:choice>
28<xs:element name="InstdAmt" type="CurrencyAndAmount"/>
29<xs:element name="EqvtAmt" type="EquivalentAmount"/>
30</xs:choice>
31</xs:sequence>
32</xs:complexType>
33<xs:simpleType name="BBANIdentifier">
34<xs:restriction base="xs:string">
35<xs:pattern value="[a-zA-Z0-9]{1,30}"/>
36</xs:restriction>
37</xs:simpleType>
38<xs:simpleType name="BEIIdentifier">
39<xs:restriction base="xs:string">
40<xs:pattern value="[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"/>
41</xs:restriction>
42</xs:simpleType>
43<xs:simpleType name="BICIdentifier">
44<xs:restriction base="xs:string">
45<xs:pattern value="[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"/>
46</xs:restriction>
47</xs:simpleType>
48<xs:simpleType name="BaseOneRate">
49<xs:restriction base="xs:decimal">
50<xs:fractionDigits value="10"/>
51<xs:totalDigits value="11"/>
52</xs:restriction>
53</xs:simpleType>
54<xs:simpleType name="BatchBookingIndicator">
55<xs:restriction base="xs:boolean"/>
56</xs:simpleType>
57<xs:complexType name="BranchAndFinancialInstitutionIdentification3">
58<xs:sequence>
59<xs:element name="FinInstnId" type="FinancialInstitutionIdentification5Choice"/>
60<xs:element name="BrnchId" type="BranchData" minOccurs="0" maxOccurs="1"/>
61</xs:sequence>
62</xs:complexType>
63<xs:complexType name="BranchData">
64<xs:sequence>
65<xs:element name="Id" type="Max35Text" minOccurs="0" maxOccurs="1"/>
66<xs:element name="Nm" type="Max35Text" minOccurs="0" maxOccurs="1"/>
67<xs:element name="PstlAdr" type="PostalAddress1" minOccurs="0" maxOccurs="1"/>
68</xs:sequence>
69</xs:complexType>
70<xs:simpleType name="CHIPSUniversalIdentifier">
71<xs:restriction base="xs:string">
72<xs:pattern value="CH[0-9]{6,6}"/>
73</xs:restriction>
74</xs:simpleType>
75<xs:complexType name="CashAccount7">
76<xs:sequence>
77<xs:element name="Id" type="AccountIdentification3Choice"/>
78<xs:element name="Tp" type="CashAccountType2" minOccurs="0" maxOccurs="1"/>
79<xs:element name="Ccy" type="CurrencyCode" minOccurs="0" maxOccurs="1"/>
80<xs:element name="Nm" type="Max70Text" minOccurs="0" maxOccurs="1"/>
81</xs:sequence>
82</xs:complexType>
83<xs:complexType name="CashAccountType2">
84<xs:sequence>
85<xs:choice>
86<xs:element name="Cd" type="CashAccountType4Code"/>
87<xs:element name="Prtry" type="Max35Text"/>
88</xs:choice>
89</xs:sequence>
90</xs:complexType>
91<xs:simpleType name="CashAccountType4Code">
92<xs:restriction base="xs:string">
93<xs:enumeration value="CASH"/>
94<xs:enumeration value="CHAR"/>
95<xs:enumeration value="COMM"/>
96<xs:enumeration value="TAXE"/>
97<xs:enumeration value="CISH"/>
98<xs:enumeration value="TRAS"/>
99<xs:enumeration value="SACC"/>
100<xs:enumeration value="CACC"/>
101<xs:enumeration value="SVGS"/>
102<xs:enumeration value="ONDP"/>
103<xs:enumeration value="MGLD"/>
104<xs:enumeration value="NREX"/>
105<xs:enumeration value="MOMA"/>
106<xs:enumeration value="LOAN"/>
107<xs:enumeration value="SLRY"/>
108<xs:enumeration value="ODFT"/>
109</xs:restriction>
110</xs:simpleType>
111<xs:simpleType name="ChargeBearerType1Code">
112<xs:restriction base="xs:string">
113<xs:enumeration value="DEBT"/>
114<xs:enumeration value="CRED"/>
115<xs:enumeration value="SHAR"/>
116<xs:enumeration value="SLEV"/>
117</xs:restriction>
118</xs:simpleType>
119<xs:complexType name="Cheque5">
120<xs:sequence>
121<xs:element name="ChqTp" type="ChequeType2Code" minOccurs="0" maxOccurs="1"/>
122<xs:element name="ChqNb" type="Max35Text" minOccurs="0" maxOccurs="1"/>
123<xs:element name="ChqFr" type="NameAndAddress3" minOccurs="0" maxOccurs="1"/>
124<xs:element name="DlvryMtd" type="ChequeDeliveryMethod1Choice" minOccurs="0" maxOccurs="1"/>
125<xs:element name="DlvrTo" type="NameAndAddress3" minOccurs="0" maxOccurs="1"/>
126<xs:element name="InstrPrty" type="Priority2Code" minOccurs="0" maxOccurs="1"/>
127<xs:element name="ChqMtrtyDt" type="ISODate" minOccurs="0" maxOccurs="1"/>
128<xs:element name="FrmsCd" type="Max35Text" minOccurs="0" maxOccurs="1"/>
129<xs:element name="MemoFld" type="Max35Text" minOccurs="0" maxOccurs="1"/>
130<xs:element name="RgnlClrZone" type="Max35Text" minOccurs="0" maxOccurs="1"/>
131<xs:element name="PrtLctn" type="Max35Text" minOccurs="0" maxOccurs="1"/>
132</xs:sequence>
133</xs:complexType>
134<xs:simpleType name="ChequeDelivery1Code">
135<xs:restriction base="xs:string">
136<xs:enumeration value="MLDB"/>
137<xs:enumeration value="MLCD"/>
138<xs:enumeration value="MLFA"/>
139<xs:enumeration value="CRDB"/>
140<xs:enumeration value="CRCD"/>
141<xs:enumeration value="CRFA"/>
142<xs:enumeration value="PUDB"/>
143<xs:enumeration value="PUCD"/>
144<xs:enumeration value="PUFA"/>
145<xs:enumeration value="RGDB"/>
146<xs:enumeration value="RGCD"/>
147<xs:enumeration value="RGFA"/>
148</xs:restriction>
149</xs:simpleType>
150<xs:complexType name="ChequeDeliveryMethod1Choice">
151<xs:sequence>
152<xs:choice>
153<xs:element name="Cd" type="ChequeDelivery1Code"/>
154<xs:element name="Prtry" type="Max35Text"/>
155</xs:choice>
156</xs:sequence>
157</xs:complexType>
158<xs:simpleType name="ChequeType2Code">
159<xs:restriction base="xs:string">
160<xs:enumeration value="CCHQ"/>
161<xs:enumeration value="CCCH"/>
162<xs:enumeration value="BCHQ"/>
163<xs:enumeration value="DRFT"/>
164<xs:enumeration value="ELDR"/>
165</xs:restriction>
166</xs:simpleType>
167<xs:simpleType name="ClearingChannel2Code">
168<xs:restriction base="xs:string">
169<xs:enumeration value="RTGS"/>
170<xs:enumeration value="RTNS"/>
171<xs:enumeration value="MPNS"/>
172<xs:enumeration value="BOOK"/>
173</xs:restriction>
174</xs:simpleType>
175<xs:complexType name="ClearingSystemMemberIdentification3Choice">
176<xs:sequence>
177<xs:choice>
178<xs:element name="Id" type="ExternalClearingSystemMemberCode"/>
179<xs:element name="Prtry" type="Max35Text"/>
180</xs:choice>
181</xs:sequence>
182</xs:complexType>
183<xs:simpleType name="CountryCode">
184<xs:restriction base="xs:string">
185<xs:pattern value="[A-Z]{2,2}"/>
186</xs:restriction>
187</xs:simpleType>
188<xs:complexType name="CreditTransferTransactionInformation1">
189<xs:sequence>
190<xs:element name="PmtId" type="PaymentIdentification1"/>
191<xs:element name="PmtTpInf" type="PaymentTypeInformation1" minOccurs="0" maxOccurs="1"/>
192<xs:element name="Amt" type="AmountType2Choice"/>
193<xs:element name="XchgRateInf" type="ExchangeRateInformation1" minOccurs="0" maxOccurs="1"/>
194<xs:element name="ChrgBr" type="ChargeBearerType1Code" minOccurs="0" maxOccurs="1"/>
195<xs:element name="ChqInstr" type="Cheque5" minOccurs="0" maxOccurs="1"/>
196<xs:element name="UltmtDbtr" type="PartyIdentification8" minOccurs="0" maxOccurs="1"/>
197<xs:element name="IntrmyAgt1" type="BranchAndFinancialInstitutionIdentification3" minOccurs="0" maxOccurs="1"/>
198<xs:element name="IntrmyAgt1Acct" type="CashAccount7" minOccurs="0" maxOccurs="1"/>
199<xs:element name="IntrmyAgt2" type="BranchAndFinancialInstitutionIdentification3" minOccurs="0" maxOccurs="1"/>
200<xs:element name="IntrmyAgt2Acct" type="CashAccount7" minOccurs="0" maxOccurs="1"/>
201<xs:element name="IntrmyAgt3" type="BranchAndFinancialInstitutionIdentification3" minOccurs="0" maxOccurs="1"/>
202<xs:element name="IntrmyAgt3Acct" type="CashAccount7" minOccurs="0" maxOccurs="1"/>
203<xs:element name="CdtrAgt" type="BranchAndFinancialInstitutionIdentification3" minOccurs="0" maxOccurs="1"/>
204<xs:element name="CdtrAgtAcct" type="CashAccount7" minOccurs="0" maxOccurs="1"/>
205<xs:element name="Cdtr" type="PartyIdentification8" minOccurs="0" maxOccurs="1"/>
206<xs:element name="CdtrAcct" type="CashAccount7" minOccurs="0" maxOccurs="1"/>
207<xs:element name="UltmtCdtr" type="PartyIdentification8" minOccurs="0" maxOccurs="1"/>
208<xs:element name="InstrForCdtrAgt" type="InstructionForCreditorAgent1" minOccurs="0" maxOccurs="unbounded"/>
209<xs:element name="InstrForDbtrAgt" type="Max140Text" minOccurs="0" maxOccurs="1"/>
210<xs:element name="Purp" type="Purpose1Choice" minOccurs="0" maxOccurs="1"/>
211<xs:element name="RgltryRptg" type="RegulatoryReporting2" minOccurs="0" maxOccurs="10"/>
212<xs:element name="Tax" type="TaxInformation2" minOccurs="0" maxOccurs="1"/>
213<xs:element name="RltdRmtInf" type="RemittanceLocation1" minOccurs="0" maxOccurs="10"/>
214<xs:element name="RmtInf" type="RemittanceInformation1" minOccurs="0" maxOccurs="1"/>
215</xs:sequence>
216</xs:complexType>
217<xs:complexType name="CreditorReferenceInformation1">
218<xs:sequence>
219<xs:element name="CdtrRefTp" type="CreditorReferenceType1" minOccurs="0" maxOccurs="1"/>
220<xs:element name="CdtrRef" type="Max35Text" minOccurs="0" maxOccurs="1"/>
221</xs:sequence>
222</xs:complexType>
223<xs:complexType name="CreditorReferenceType1">
224<xs:sequence>
225<xs:choice>
226<xs:element name="Cd" type="DocumentType3Code"/>
227<xs:element name="Prtry" type="Max35Text"/>
228</xs:choice>
229<xs:element name="Issr" type="Max35Text" minOccurs="0" maxOccurs="1"/>
230</xs:sequence>
231</xs:complexType>
232<xs:simpleType name="CurrencyAndAmount_SimpleType">
233<xs:restriction base="xs:decimal">
234<xs:minInclusive value="0"/>
235<xs:fractionDigits value="5"/>
236<xs:totalDigits value="18"/>
237</xs:restriction>
238</xs:simpleType>
239<xs:complexType name="CurrencyAndAmount">
240<xs:simpleContent>
241<xs:extension base="CurrencyAndAmount_SimpleType">
242<xs:attribute name="Ccy" type="CurrencyCode" use="required"/>
243</xs:extension>
244</xs:simpleContent>
245</xs:complexType>
246<xs:simpleType name="CurrencyCode">
247<xs:restriction base="xs:string">
248<xs:pattern value="[A-Z]{3,3}"/>
249</xs:restriction>
250</xs:simpleType>
251<xs:complexType name="DateAndPlaceOfBirth">
252<xs:sequence>
253<xs:element name="BirthDt" type="ISODate"/>
254<xs:element name="PrvcOfBirth" type="Max35Text" minOccurs="0" maxOccurs="1"/>
255<xs:element name="CityOfBirth" type="Max35Text"/>
256<xs:element name="CtryOfBirth" type="CountryCode"/>
257</xs:sequence>
258</xs:complexType>
259<xs:simpleType name="DecimalNumber">
260<xs:restriction base="xs:decimal">
261<xs:fractionDigits value="17"/>
262<xs:totalDigits value="18"/>
263</xs:restriction>
264</xs:simpleType>
265<xs:complexType name="Document">
266<xs:sequence>
267<xs:element name="pain.001.001.02" type="pain.001.001.02"/>
268</xs:sequence>
269</xs:complexType>
270<xs:simpleType name="DocumentType2Code">
271<xs:restriction base="xs:string">
272<xs:enumeration value="MSIN"/>
273<xs:enumeration value="CNFA"/>
274<xs:enumeration value="DNFA"/>
275<xs:enumeration value="CINV"/>
276<xs:enumeration value="CREN"/>
277<xs:enumeration value="DEBN"/>
278<xs:enumeration value="HIRI"/>
279<xs:enumeration value="SBIN"/>
280<xs:enumeration value="CMCN"/>
281<xs:enumeration value="SOAC"/>
282<xs:enumeration value="DISP"/>
283</xs:restriction>
284</xs:simpleType>
285<xs:simpleType name="DocumentType3Code">
286<xs:restriction base="xs:string">
287<xs:enumeration value="RADM"/>
288<xs:enumeration value="RPIN"/>
289<xs:enumeration value="FXDR"/>
290<xs:enumeration value="DISP"/>
291<xs:enumeration value="PUOR"/>
292<xs:enumeration value="SCOR"/>
293</xs:restriction>
294</xs:simpleType>
295<xs:simpleType name="DunsIdentifier">
296<xs:restriction base="xs:string">
297<xs:pattern value="[0-9]{9,9}"/>
298</xs:restriction>
299</xs:simpleType>
300<xs:simpleType name="EANGLNIdentifier">
301<xs:restriction base="xs:string">
302<xs:pattern value="[0-9]{13,13}"/>
303</xs:restriction>
304</xs:simpleType>
305<xs:complexType name="EquivalentAmount">
306<xs:sequence>
307<xs:element name="Amt" type="CurrencyAndAmount"/>
308<xs:element name="CcyOfTrf" type="CurrencyCode"/>
309</xs:sequence>
310</xs:complexType>
311<xs:complexType name="ExchangeRateInformation1">
312<xs:sequence>
313<xs:element name="XchgRate" type="BaseOneRate" minOccurs="0" maxOccurs="1"/>
314<xs:element name="RateTp" type="ExchangeRateType1Code" minOccurs="0" maxOccurs="1"/>
315<xs:element name="CtrctId" type="Max35Text" minOccurs="0" maxOccurs="1"/>
316</xs:sequence>
317</xs:complexType>
318<xs:simpleType name="ExchangeRateType1Code">
319<xs:restriction base="xs:string">
320<xs:enumeration value="SPOT"/>
321<xs:enumeration value="SALE"/>
322<xs:enumeration value="AGRD"/>
323</xs:restriction>
324</xs:simpleType>
325<xs:simpleType name="ExternalClearingSystemMemberCode">
326<xs:restriction base="xs:string">
327<xs:minLength value="1"/>
328<xs:maxLength value="35"/>
329</xs:restriction>
330</xs:simpleType>
331<xs:simpleType name="ExternalLocalInstrumentCode">
332<xs:restriction base="xs:string">
333<xs:minLength value="1"/>
334<xs:maxLength value="35"/>
335</xs:restriction>
336</xs:simpleType>
337<xs:simpleType name="ExternalPurposeCode">
338<xs:restriction base="xs:string">
339<xs:minLength value="1"/>
340<xs:maxLength value="35"/>
341</xs:restriction>
342</xs:simpleType>
343<xs:complexType name="FinancialInstitutionIdentification3">
344<xs:sequence>
345<xs:element name="BIC" type="BICIdentifier" minOccurs="0" maxOccurs="1"/>
346<xs:element name="ClrSysMmbId" type="ClearingSystemMemberIdentification3Choice" minOccurs="0" maxOccurs="1"/>
347<xs:element name="Nm" type="Max70Text" minOccurs="0" maxOccurs="1"/>
348<xs:element name="PstlAdr" type="PostalAddress1" minOccurs="0" maxOccurs="1"/>
349<xs:element name="PrtryId" type="GenericIdentification3" minOccurs="0" maxOccurs="1"/>
350</xs:sequence>
351</xs:complexType>
352<xs:complexType name="FinancialInstitutionIdentification5Choice">
353<xs:sequence>
354<xs:choice>
355<xs:element name="BIC" type="BICIdentifier"/>
356<xs:element name="ClrSysMmbId" type="ClearingSystemMemberIdentification3Choice"/>
357<xs:element name="NmAndAdr" type="NameAndAddress7"/>
358<xs:element name="PrtryId" type="GenericIdentification3"/>
359<xs:element name="CmbndId" type="FinancialInstitutionIdentification3"/>
360</xs:choice>
361</xs:sequence>
362</xs:complexType>
363<xs:complexType name="GenericIdentification3">
364<xs:sequence>
365<xs:element name="Id" type="Max35Text"/>
366<xs:element name="Issr" type="Max35Text" minOccurs="0" maxOccurs="1"/>
367</xs:sequence>
368</xs:complexType>
369<xs:complexType name="GenericIdentification4">
370<xs:sequence>
371<xs:element name="Id" type="Max35Text"/>
372<xs:element name="IdTp" type="Max35Text"/>
373</xs:sequence>
374</xs:complexType>
375<xs:complexType name="GroupHeader1">
376<xs:sequence>
377<xs:element name="MsgId" type="Max35Text"/>
378<xs:element name="CreDtTm" type="ISODateTime"/>
379<xs:element name="Authstn" type="Max128Text" minOccurs="0" maxOccurs="2"/>
380<xs:element name="BtchBookg" type="BatchBookingIndicator" minOccurs="0" maxOccurs="1"/>
381<xs:element name="NbOfTxs" type="Max15NumericText"/>
382<xs:element name="CtrlSum" type="DecimalNumber" minOccurs="0" maxOccurs="1"/>
383<xs:element name="Grpg" type="Grouping1Code"/>
384<xs:element name="InitgPty" type="PartyIdentification8"/>
385<xs:element name="FwdgAgt" type="BranchAndFinancialInstitutionIdentification3" minOccurs="0" maxOccurs="1"/>
386</xs:sequence>
387</xs:complexType>
388<xs:simpleType name="Grouping1Code">
389<xs:restriction base="xs:string">
390<xs:enumeration value="SNGL"/>
391<xs:enumeration value="GRPD"/>
392<xs:enumeration value="MIXD"/>
393</xs:restriction>
394</xs:simpleType>
395<xs:simpleType name="IBANIdentifier">
396<xs:restriction base="xs:string">
397<xs:pattern value="[a-zA-Z]{2,2}[0-9]{2,2}[a-zA-Z0-9]{1,30}"/>
398</xs:restriction>
399</xs:simpleType>
400<xs:simpleType name="IBEIIdentifier">
401<xs:restriction base="xs:string">
402<xs:pattern value="[A-Z]{2,2}[B-DF-HJ-NP-TV-XZ0-9]{7,7}[0-9]{1,1}"/>
403</xs:restriction>
404</xs:simpleType>
405<xs:simpleType name="ISODate">
406<xs:restriction base="xs:date"/>
407</xs:simpleType>
408<xs:simpleType name="ISODateTime">
409<xs:restriction base="xs:dateTime"/>
410</xs:simpleType>
411<xs:simpleType name="Instruction3Code">
412<xs:restriction base="xs:string">
413<xs:enumeration value="CHQB"/>
414<xs:enumeration value="HOLD"/>
415<xs:enumeration value="PHOB"/>
416<xs:enumeration value="TELB"/>
417</xs:restriction>
418</xs:simpleType>
419<xs:complexType name="InstructionForCreditorAgent1">
420<xs:sequence>
421<xs:element name="Cd" type="Instruction3Code" minOccurs="0" maxOccurs="1"/>
422<xs:element name="InstrInf" type="Max140Text" minOccurs="0" maxOccurs="1"/>
423</xs:sequence>
424</xs:complexType>
425<xs:complexType name="LocalInstrument1Choice">
426<xs:sequence>
427<xs:choice>
428<xs:element name="Cd" type="ExternalLocalInstrumentCode"/>
429<xs:element name="Prtry" type="Max35Text"/>
430</xs:choice>
431</xs:sequence>
432</xs:complexType>
433<xs:simpleType name="Max128Text">
434<xs:restriction base="xs:string">
435<xs:minLength value="1"/>
436<xs:maxLength value="128"/>
437</xs:restriction>
438</xs:simpleType>
439<xs:simpleType name="Max140Text">
440<xs:restriction base="xs:string">
441<xs:minLength value="1"/>
442<xs:maxLength value="140"/>
443</xs:restriction>
444</xs:simpleType>
445<xs:simpleType name="Max15NumericText">
446<xs:restriction base="xs:string">
447<xs:pattern value="[0-9]{1,15}"/>
448</xs:restriction>
449</xs:simpleType>
450<xs:simpleType name="Max16Text">
451<xs:restriction base="xs:string">
452<xs:minLength value="1"/>
453<xs:maxLength value="16"/>
454</xs:restriction>
455</xs:simpleType>
456<xs:simpleType name="Max256Text">
457<xs:restriction base="xs:string">
458<xs:minLength value="1"/>
459<xs:maxLength value="256"/>
460</xs:restriction>
461</xs:simpleType>
462<xs:simpleType name="Max34Text">
463<xs:restriction base="xs:string">
464<xs:minLength value="1"/>
465<xs:maxLength value="34"/>
466</xs:restriction>
467</xs:simpleType>
468<xs:simpleType name="Max35Text">
469<xs:restriction base="xs:string">
470<xs:minLength value="1"/>
471<xs:maxLength value="35"/>
472</xs:restriction>
473</xs:simpleType>
474<xs:simpleType name="Max3Text">
475<xs:restriction base="xs:string">
476<xs:minLength value="1"/>
477<xs:maxLength value="3"/>
478</xs:restriction>
479</xs:simpleType>
480<xs:simpleType name="Max70Text">
481<xs:restriction base="xs:string">
482<xs:minLength value="1"/>
483<xs:maxLength value="70"/>
484</xs:restriction>
485</xs:simpleType>
486<xs:complexType name="NameAndAddress3">
487<xs:sequence>
488<xs:element name="Nm" type="Max70Text"/>
489<xs:element name="Adr" type="PostalAddress1"/>
490</xs:sequence>
491</xs:complexType>
492<xs:complexType name="NameAndAddress7">
493<xs:sequence>
494<xs:element name="Nm" type="Max70Text"/>
495<xs:element name="PstlAdr" type="PostalAddress1"/>
496</xs:sequence>
497</xs:complexType>
498<xs:complexType name="OrganisationIdentification2">
499<xs:sequence>
500<xs:element name="BIC" type="BICIdentifier" minOccurs="0" maxOccurs="1"/>
501<xs:element name="IBEI" type="IBEIIdentifier" minOccurs="0" maxOccurs="1"/>
502<xs:element name="BEI" type="BEIIdentifier" minOccurs="0" maxOccurs="1"/>
503<xs:element name="EANGLN" type="EANGLNIdentifier" minOccurs="0" maxOccurs="1"/>
504<xs:element name="USCHU" type="CHIPSUniversalIdentifier" minOccurs="0" maxOccurs="1"/>
505<xs:element name="DUNS" type="DunsIdentifier" minOccurs="0" maxOccurs="1"/>
506<xs:element name="BkPtyId" type="Max35Text" minOccurs="0" maxOccurs="1"/>
507<xs:element name="TaxIdNb" type="Max35Text" minOccurs="0" maxOccurs="1"/>
508<xs:element name="PrtryId" type="GenericIdentification3" minOccurs="0" maxOccurs="1"/>
509</xs:sequence>
510</xs:complexType>
511<xs:complexType name="Party2Choice">
512<xs:sequence>
513<xs:choice>
514<xs:element name="OrgId" type="OrganisationIdentification2"/>
515<xs:element name="PrvtId" type="PersonIdentification3" minOccurs="1" maxOccurs="4"/>
516</xs:choice>
517</xs:sequence>
518</xs:complexType>
519<xs:complexType name="PartyIdentification8">
520<xs:sequence>
521<xs:element name="Nm" type="Max70Text" minOccurs="0" maxOccurs="1"/>
522<xs:element name="PstlAdr" type="PostalAddress1" minOccurs="0" maxOccurs="1"/>
523<xs:element name="Id" type="Party2Choice" minOccurs="0" maxOccurs="1"/>
524<xs:element name="CtryOfRes" type="CountryCode" minOccurs="0" maxOccurs="1"/>
525</xs:sequence>
526</xs:complexType>
527<xs:simpleType name="PaymentCategoryPurpose1Code">
528<xs:restriction base="xs:string">
529<xs:enumeration value="CORT"/>
530<xs:enumeration value="SALA"/>
531<xs:enumeration value="TREA"/>
532<xs:enumeration value="CASH"/>
533<xs:enumeration value="DIVI"/>
534<xs:enumeration value="GOVT"/>
535<xs:enumeration value="INTE"/>
536<xs:enumeration value="LOAN"/>
537<xs:enumeration value="PENS"/>
538<xs:enumeration value="SECU"/>
539<xs:enumeration value="SSBE"/>
540<xs:enumeration value="SUPP"/>
541<xs:enumeration value="TAXS"/>
542<xs:enumeration value="TRAD"/>
543<xs:enumeration value="VATX"/>
544<xs:enumeration value="HEDG"/>
545<xs:enumeration value="INTC"/>
546<xs:enumeration value="WHLD"/>
547</xs:restriction>
548</xs:simpleType>
549<xs:complexType name="PaymentIdentification1">
550<xs:sequence>
551<xs:element name="InstrId" type="Max35Text" minOccurs="0" maxOccurs="1"/>
552<xs:element name="EndToEndId" type="Max35Text"/>
553</xs:sequence>
554</xs:complexType>
555<xs:complexType name="PaymentInstructionInformation1">
556<xs:sequence>
557<xs:element name="PmtInfId" type="Max35Text" minOccurs="0" maxOccurs="1"/>
558<xs:element name="PmtMtd" type="PaymentMethod3Code"/>
559<xs:element name="PmtTpInf" type="PaymentTypeInformation1" minOccurs="0" maxOccurs="1"/>
560<xs:element name="ReqdExctnDt" type="ISODate"/>
561<xs:element name="PoolgAdjstmntDt" type="ISODate" minOccurs="0" maxOccurs="1"/>
562<xs:element name="Dbtr" type="PartyIdentification8"/>
563<xs:element name="DbtrAcct" type="CashAccount7"/>
564<xs:element name="DbtrAgt" type="BranchAndFinancialInstitutionIdentification3"/>
565<xs:element name="DbtrAgtAcct" type="CashAccount7" minOccurs="0" maxOccurs="1"/>
566<xs:element name="UltmtDbtr" type="PartyIdentification8" minOccurs="0" maxOccurs="1"/>
567<xs:element name="ChrgBr" type="ChargeBearerType1Code" minOccurs="0" maxOccurs="1"/>
568<xs:element name="ChrgsAcct" type="CashAccount7" minOccurs="0" maxOccurs="1"/>
569<xs:element name="ChrgsAcctAgt" type="BranchAndFinancialInstitutionIdentification3" minOccurs="0" maxOccurs="1"/>
570<xs:element name="CdtTrfTxInf" type="CreditTransferTransactionInformation1" minOccurs="1" maxOccurs="unbounded"/>
571</xs:sequence>
572</xs:complexType>
573<xs:simpleType name="PaymentMethod3Code">
574<xs:restriction base="xs:string">
575<xs:enumeration value="CHK"/>
576<xs:enumeration value="TRF"/>
577<xs:enumeration value="TRA"/>
578</xs:restriction>
579</xs:simpleType>
580<xs:complexType name="PaymentTypeInformation1">
581<xs:sequence>
582<xs:element name="InstrPrty" type="Priority2Code" minOccurs="0" maxOccurs="1"/>
583<xs:choice>
584<xs:element name="SvcLvl" type="ServiceLevel2Choice" minOccurs="0" maxOccurs="1"/>
585<xs:element name="ClrChanl" type="ClearingChannel2Code" minOccurs="0" maxOccurs="1"/>
586</xs:choice>
587<xs:element name="LclInstrm" type="LocalInstrument1Choice" minOccurs="0" maxOccurs="1"/>
588<xs:element name="CtgyPurp" type="PaymentCategoryPurpose1Code" minOccurs="0" maxOccurs="1"/>
589</xs:sequence>
590</xs:complexType>
591<xs:simpleType name="PercentageRate">
592<xs:restriction base="xs:decimal">
593<xs:fractionDigits value="10"/>
594<xs:totalDigits value="11"/>
595</xs:restriction>
596</xs:simpleType>
597<xs:complexType name="PersonIdentification3">
598<xs:sequence>
599<xs:choice>
600<xs:element name="DrvrsLicNb" type="Max35Text"/>
601<xs:element name="CstmrNb" type="Max35Text"/>
602<xs:element name="SclSctyNb" type="Max35Text"/>
603<xs:element name="AlnRegnNb" type="Max35Text"/>
604<xs:element name="PsptNb" type="Max35Text"/>
605<xs:element name="TaxIdNb" type="Max35Text"/>
606<xs:element name="IdntyCardNb" type="Max35Text"/>
607<xs:element name="MplyrIdNb" type="Max35Text"/>
608<xs:element name="DtAndPlcOfBirth" type="DateAndPlaceOfBirth"/>
609<xs:element name="OthrId" type="GenericIdentification4"/>
610</xs:choice>
611<xs:element name="Issr" type="Max35Text" minOccurs="0" maxOccurs="1"/>
612</xs:sequence>
613</xs:complexType>
614<xs:complexType name="PostalAddress1">
615<xs:sequence>
616<xs:element name="AdrTp" type="AddressType2Code" minOccurs="0" maxOccurs="1"/>
617<xs:element name="AdrLine" type="Max70Text" minOccurs="0" maxOccurs="5"/>
618<xs:element name="StrtNm" type="Max70Text" minOccurs="0" maxOccurs="1"/>
619<xs:element name="BldgNb" type="Max16Text" minOccurs="0" maxOccurs="1"/>
620<xs:element name="PstCd" type="Max16Text" minOccurs="0" maxOccurs="1"/>
621<xs:element name="TwnNm" type="Max35Text" minOccurs="0" maxOccurs="1"/>
622<xs:element name="CtrySubDvsn" type="Max35Text" minOccurs="0" maxOccurs="1"/>
623<xs:element name="Ctry" type="CountryCode"/>
624</xs:sequence>
625</xs:complexType>
626<xs:simpleType name="Priority2Code">
627<xs:restriction base="xs:string">
628<xs:enumeration value="HIGH"/>
629<xs:enumeration value="NORM"/>
630</xs:restriction>
631</xs:simpleType>
632<xs:complexType name="Purpose1Choice">
633<xs:sequence>
634<xs:choice>
635<xs:element name="Cd" type="ExternalPurposeCode"/>
636<xs:element name="Prtry" type="Max35Text"/>
637</xs:choice>
638</xs:sequence>
639</xs:complexType>
640<xs:complexType name="ReferredDocumentAmount1Choice">
641<xs:sequence>
642<xs:choice>
643<xs:element name="DuePyblAmt" type="CurrencyAndAmount"/>
644<xs:element name="DscntApldAmt" type="CurrencyAndAmount"/>
645<xs:element name="RmtdAmt" type="CurrencyAndAmount"/>
646<xs:element name="CdtNoteAmt" type="CurrencyAndAmount"/>
647<xs:element name="TaxAmt" type="CurrencyAndAmount"/>
648</xs:choice>
649</xs:sequence>
650</xs:complexType>
651<xs:complexType name="ReferredDocumentInformation1">
652<xs:sequence>
653<xs:element name="RfrdDocTp" type="ReferredDocumentType1" minOccurs="0" maxOccurs="1"/>
654<xs:element name="RfrdDocNb" type="Max35Text" minOccurs="0" maxOccurs="1"/>
655</xs:sequence>
656</xs:complexType>
657<xs:complexType name="ReferredDocumentType1">
658<xs:sequence>
659<xs:choice>
660<xs:element name="Cd" type="DocumentType2Code"/>
661<xs:element name="Prtry" type="Max35Text"/>
662</xs:choice>
663<xs:element name="Issr" type="Max35Text" minOccurs="0" maxOccurs="1"/>
664</xs:sequence>
665</xs:complexType>
666<xs:complexType name="RegulatoryAuthority">
667<xs:sequence>
668<xs:element name="AuthrtyNm" type="Max70Text" minOccurs="0" maxOccurs="1"/>
669<xs:element name="AuthrtyCtry" type="CountryCode" minOccurs="0" maxOccurs="1"/>
670</xs:sequence>
671</xs:complexType>
672<xs:complexType name="RegulatoryReporting2">
673<xs:sequence>
674<xs:element name="DbtCdtRptgInd" type="RegulatoryReportingType1Code" minOccurs="0" maxOccurs="1"/>
675<xs:element name="Authrty" type="RegulatoryAuthority" minOccurs="0" maxOccurs="1"/>
676<xs:element name="RgltryDtls" type="StructuredRegulatoryReporting2" minOccurs="0" maxOccurs="1"/>
677</xs:sequence>
678</xs:complexType>
679<xs:simpleType name="RegulatoryReportingType1Code">
680<xs:restriction base="xs:string">
681<xs:enumeration value="CRED"/>
682<xs:enumeration value="DEBT"/>
683<xs:enumeration value="BOTH"/>
684</xs:restriction>
685</xs:simpleType>
686<xs:complexType name="RemittanceInformation1">
687<xs:sequence>
688<xs:element name="Ustrd" type="Max140Text" minOccurs="0" maxOccurs="unbounded"/>
689<xs:element name="Strd" type="StructuredRemittanceInformation6" minOccurs="0" maxOccurs="unbounded"/>
690</xs:sequence>
691</xs:complexType>
692<xs:complexType name="RemittanceLocation1">
693<xs:sequence>
694<xs:element name="RmtId" type="Max35Text" minOccurs="0" maxOccurs="1"/>
695<xs:element name="RmtLctnMtd" type="RemittanceLocationMethod1Code" minOccurs="0" maxOccurs="1"/>
696<xs:element name="RmtLctnElctrncAdr" type="Max256Text" minOccurs="0" maxOccurs="1"/>
697<xs:element name="RmtLctnPstlAdr" type="NameAndAddress3" minOccurs="0" maxOccurs="1"/>
698</xs:sequence>
699</xs:complexType>
700<xs:simpleType name="RemittanceLocationMethod1Code">
701<xs:restriction base="xs:string">
702<xs:enumeration value="FAXI"/>
703<xs:enumeration value="EDIC"/>
704<xs:enumeration value="URID"/>
705<xs:enumeration value="EMAL"/>
706<xs:enumeration value="POST"/>
707</xs:restriction>
708</xs:simpleType>
709<xs:simpleType name="ServiceLevel1Code">
710<xs:restriction base="xs:string">
711<xs:enumeration value="SEPA"/>
712<xs:enumeration value="SDVA"/>
713<xs:enumeration value="PRPT"/>
714</xs:restriction>
715</xs:simpleType>
716<xs:complexType name="ServiceLevel2Choice">
717<xs:sequence>
718<xs:choice>
719<xs:element name="Cd" type="ServiceLevel1Code"/>
720<xs:element name="Prtry" type="Max35Text"/>
721</xs:choice>
722</xs:sequence>
723</xs:complexType>
724<xs:complexType name="SimpleIdentificationInformation2">
725<xs:sequence>
726<xs:element name="Id" type="Max34Text"/>
727</xs:sequence>
728</xs:complexType>
729<xs:complexType name="StructuredRegulatoryReporting2">
730<xs:sequence>
731<xs:element name="Cd" type="Max3Text" minOccurs="0" maxOccurs="1"/>
732<xs:element name="Amt" type="CurrencyAndAmount" minOccurs="0" maxOccurs="1"/>
733<xs:element name="Inf" type="Max35Text" minOccurs="0" maxOccurs="1"/>
734</xs:sequence>
735</xs:complexType>
736<xs:complexType name="StructuredRemittanceInformation6">
737<xs:sequence>
738<xs:element name="RfrdDocInf" type="ReferredDocumentInformation1" minOccurs="0" maxOccurs="1"/>
739<xs:element name="RfrdDocRltdDt" type="ISODate" minOccurs="0" maxOccurs="1"/>
740<xs:element name="RfrdDocAmt" type="ReferredDocumentAmount1Choice" minOccurs="0" maxOccurs="unbounded"/>
741<xs:element name="CdtrRefInf" type="CreditorReferenceInformation1" minOccurs="0" maxOccurs="1"/>
742<xs:element name="Invcr" type="PartyIdentification8" minOccurs="0" maxOccurs="1"/>
743<xs:element name="Invcee" type="PartyIdentification8" minOccurs="0" maxOccurs="1"/>
744<xs:element name="AddtlRmtInf" type="Max140Text" minOccurs="0" maxOccurs="1"/>
745</xs:sequence>
746</xs:complexType>
747<xs:complexType name="TaxDetails">
748<xs:sequence>
749<xs:element name="CertId" type="Max35Text" minOccurs="0" maxOccurs="1"/>
750<xs:element name="TaxTp" type="TaxType" minOccurs="0" maxOccurs="1"/>
751</xs:sequence>
752</xs:complexType>
753<xs:complexType name="TaxInformation2">
754<xs:sequence>
755<xs:element name="CdtrTaxId" type="Max35Text" minOccurs="0" maxOccurs="1"/>
756<xs:element name="CdtrTaxTp" type="Max35Text" minOccurs="0" maxOccurs="1"/>
757<xs:element name="DbtrTaxId" type="Max35Text" minOccurs="0" maxOccurs="1"/>
758<xs:element name="TaxRefNb" type="Max140Text" minOccurs="0" maxOccurs="1"/>
759<xs:element name="TtlTaxblBaseAmt" type="CurrencyAndAmount" minOccurs="0" maxOccurs="1"/>
760<xs:element name="TtlTaxAmt" type="CurrencyAndAmount" minOccurs="0" maxOccurs="1"/>
761<xs:element name="TaxDt" type="ISODate" minOccurs="0" maxOccurs="1"/>
762<xs:element name="TaxTpInf" type="TaxDetails" minOccurs="0" maxOccurs="unbounded"/>
763</xs:sequence>
764</xs:complexType>
765<xs:complexType name="TaxType">
766<xs:sequence>
767<xs:element name="CtgyDesc" type="Max35Text" minOccurs="0" maxOccurs="1"/>
768<xs:element name="Rate" type="PercentageRate" minOccurs="0" maxOccurs="1"/>
769<xs:element name="TaxblBaseAmt" type="CurrencyAndAmount" minOccurs="0" maxOccurs="1"/>
770<xs:element name="Amt" type="CurrencyAndAmount" minOccurs="0" maxOccurs="1"/>
771</xs:sequence>
772</xs:complexType>
773<xs:simpleType name="UPICIdentifier">
774<xs:restriction base="xs:string">
775<xs:pattern value="[0-9]{8,17}"/>
776</xs:restriction>
777</xs:simpleType>
778<xs:complexType name="pain.001.001.02">
779<xs:sequence>
780<xs:element name="GrpHdr" type="GroupHeader1"/>
781<xs:element name="PmtInf" type="PaymentInstructionInformation1" minOccurs="1" maxOccurs="unbounded"/>
782</xs:sequence>
783</xs:complexType>
784</xs:schema>
0785
=== added file 'account_payment_sepa_credit_transfer/data/pain.001.001.03.xsd'
--- account_payment_sepa_credit_transfer/data/pain.001.001.03.xsd 1970-01-01 00:00:00 +0000
+++ account_payment_sepa_credit_transfer/data/pain.001.001.03.xsd 2014-06-02 14:43:40 +0000
@@ -0,0 +1,921 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!--Generated by SWIFTStandards Workstation (build:R6.1.0.2) on 2009 Jan 08 17:30:53-->
3<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">
4 <xs:element name="Document" type="Document"/>
5 <xs:complexType name="AccountIdentification4Choice">
6 <xs:sequence>
7 <xs:choice>
8 <xs:element name="IBAN" type="IBAN2007Identifier"/>
9 <xs:element name="Othr" type="GenericAccountIdentification1"/>
10 </xs:choice>
11 </xs:sequence>
12 </xs:complexType>
13 <xs:complexType name="AccountSchemeName1Choice">
14 <xs:sequence>
15 <xs:choice>
16 <xs:element name="Cd" type="ExternalAccountIdentification1Code"/>
17 <xs:element name="Prtry" type="Max35Text"/>
18 </xs:choice>
19 </xs:sequence>
20 </xs:complexType>
21 <xs:simpleType name="ActiveOrHistoricCurrencyAndAmount_SimpleType">
22 <xs:restriction base="xs:decimal">
23 <xs:minInclusive value="0"/>
24 <xs:fractionDigits value="5"/>
25 <xs:totalDigits value="18"/>
26 </xs:restriction>
27 </xs:simpleType>
28 <xs:complexType name="ActiveOrHistoricCurrencyAndAmount">
29 <xs:simpleContent>
30 <xs:extension base="ActiveOrHistoricCurrencyAndAmount_SimpleType">
31 <xs:attribute name="Ccy" type="ActiveOrHistoricCurrencyCode" use="required"/>
32 </xs:extension>
33 </xs:simpleContent>
34 </xs:complexType>
35 <xs:simpleType name="ActiveOrHistoricCurrencyCode">
36 <xs:restriction base="xs:string">
37 <xs:pattern value="[A-Z]{3,3}"/>
38 </xs:restriction>
39 </xs:simpleType>
40 <xs:simpleType name="AddressType2Code">
41 <xs:restriction base="xs:string">
42 <xs:enumeration value="ADDR"/>
43 <xs:enumeration value="PBOX"/>
44 <xs:enumeration value="HOME"/>
45 <xs:enumeration value="BIZZ"/>
46 <xs:enumeration value="MLTO"/>
47 <xs:enumeration value="DLVY"/>
48 </xs:restriction>
49 </xs:simpleType>
50 <xs:complexType name="AmountType3Choice">
51 <xs:sequence>
52 <xs:choice>
53 <xs:element name="InstdAmt" type="ActiveOrHistoricCurrencyAndAmount"/>
54 <xs:element name="EqvtAmt" type="EquivalentAmount2"/>
55 </xs:choice>
56 </xs:sequence>
57 </xs:complexType>
58 <xs:simpleType name="AnyBICIdentifier">
59 <xs:restriction base="xs:string">
60 <xs:pattern value="[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"/>
61 </xs:restriction>
62 </xs:simpleType>
63 <xs:complexType name="Authorisation1Choice">
64 <xs:sequence>
65 <xs:choice>
66 <xs:element name="Cd" type="Authorisation1Code"/>
67 <xs:element name="Prtry" type="Max128Text"/>
68 </xs:choice>
69 </xs:sequence>
70 </xs:complexType>
71 <xs:simpleType name="Authorisation1Code">
72 <xs:restriction base="xs:string">
73 <xs:enumeration value="AUTH"/>
74 <xs:enumeration value="FDET"/>
75 <xs:enumeration value="FSUM"/>
76 <xs:enumeration value="ILEV"/>
77 </xs:restriction>
78 </xs:simpleType>
79 <xs:simpleType name="BICIdentifier">
80 <xs:restriction base="xs:string">
81 <xs:pattern value="[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"/>
82 </xs:restriction>
83 </xs:simpleType>
84 <xs:simpleType name="BaseOneRate">
85 <xs:restriction base="xs:decimal">
86 <xs:fractionDigits value="10"/>
87 <xs:totalDigits value="11"/>
88 </xs:restriction>
89 </xs:simpleType>
90 <xs:simpleType name="BatchBookingIndicator">
91 <xs:restriction base="xs:boolean"/>
92 </xs:simpleType>
93 <xs:complexType name="BranchAndFinancialInstitutionIdentification4">
94 <xs:sequence>
95 <xs:element name="FinInstnId" type="FinancialInstitutionIdentification7"/>
96 <xs:element maxOccurs="1" minOccurs="0" name="BrnchId" type="BranchData2"/>
97 </xs:sequence>
98 </xs:complexType>
99 <xs:complexType name="BranchData2">
100 <xs:sequence>
101 <xs:element maxOccurs="1" minOccurs="0" name="Id" type="Max35Text"/>
102 <xs:element maxOccurs="1" minOccurs="0" name="Nm" type="Max140Text"/>
103 <xs:element maxOccurs="1" minOccurs="0" name="PstlAdr" type="PostalAddress6"/>
104 </xs:sequence>
105 </xs:complexType>
106 <xs:complexType name="CashAccount16">
107 <xs:sequence>
108 <xs:element name="Id" type="AccountIdentification4Choice"/>
109 <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="CashAccountType2"/>
110 <xs:element maxOccurs="1" minOccurs="0" name="Ccy" type="ActiveOrHistoricCurrencyCode"/>
111 <xs:element maxOccurs="1" minOccurs="0" name="Nm" type="Max70Text"/>
112 </xs:sequence>
113 </xs:complexType>
114 <xs:complexType name="CashAccountType2">
115 <xs:sequence>
116 <xs:choice>
117 <xs:element name="Cd" type="CashAccountType4Code"/>
118 <xs:element name="Prtry" type="Max35Text"/>
119 </xs:choice>
120 </xs:sequence>
121 </xs:complexType>
122 <xs:simpleType name="CashAccountType4Code">
123 <xs:restriction base="xs:string">
124 <xs:enumeration value="CASH"/>
125 <xs:enumeration value="CHAR"/>
126 <xs:enumeration value="COMM"/>
127 <xs:enumeration value="TAXE"/>
128 <xs:enumeration value="CISH"/>
129 <xs:enumeration value="TRAS"/>
130 <xs:enumeration value="SACC"/>
131 <xs:enumeration value="CACC"/>
132 <xs:enumeration value="SVGS"/>
133 <xs:enumeration value="ONDP"/>
134 <xs:enumeration value="MGLD"/>
135 <xs:enumeration value="NREX"/>
136 <xs:enumeration value="MOMA"/>
137 <xs:enumeration value="LOAN"/>
138 <xs:enumeration value="SLRY"/>
139 <xs:enumeration value="ODFT"/>
140 </xs:restriction>
141 </xs:simpleType>
142 <xs:complexType name="CategoryPurpose1Choice">
143 <xs:sequence>
144 <xs:choice>
145 <xs:element name="Cd" type="ExternalCategoryPurpose1Code"/>
146 <xs:element name="Prtry" type="Max35Text"/>
147 </xs:choice>
148 </xs:sequence>
149 </xs:complexType>
150 <xs:simpleType name="ChargeBearerType1Code">
151 <xs:restriction base="xs:string">
152 <xs:enumeration value="DEBT"/>
153 <xs:enumeration value="CRED"/>
154 <xs:enumeration value="SHAR"/>
155 <xs:enumeration value="SLEV"/>
156 </xs:restriction>
157 </xs:simpleType>
158 <xs:complexType name="Cheque6">
159 <xs:sequence>
160 <xs:element maxOccurs="1" minOccurs="0" name="ChqTp" type="ChequeType2Code"/>
161 <xs:element maxOccurs="1" minOccurs="0" name="ChqNb" type="Max35Text"/>
162 <xs:element maxOccurs="1" minOccurs="0" name="ChqFr" type="NameAndAddress10"/>
163 <xs:element maxOccurs="1" minOccurs="0" name="DlvryMtd" type="ChequeDeliveryMethod1Choice"/>
164 <xs:element maxOccurs="1" minOccurs="0" name="DlvrTo" type="NameAndAddress10"/>
165 <xs:element maxOccurs="1" minOccurs="0" name="InstrPrty" type="Priority2Code"/>
166 <xs:element maxOccurs="1" minOccurs="0" name="ChqMtrtyDt" type="ISODate"/>
167 <xs:element maxOccurs="1" minOccurs="0" name="FrmsCd" type="Max35Text"/>
168 <xs:element maxOccurs="2" minOccurs="0" name="MemoFld" type="Max35Text"/>
169 <xs:element maxOccurs="1" minOccurs="0" name="RgnlClrZone" type="Max35Text"/>
170 <xs:element maxOccurs="1" minOccurs="0" name="PrtLctn" type="Max35Text"/>
171 </xs:sequence>
172 </xs:complexType>
173 <xs:simpleType name="ChequeDelivery1Code">
174 <xs:restriction base="xs:string">
175 <xs:enumeration value="MLDB"/>
176 <xs:enumeration value="MLCD"/>
177 <xs:enumeration value="MLFA"/>
178 <xs:enumeration value="CRDB"/>
179 <xs:enumeration value="CRCD"/>
180 <xs:enumeration value="CRFA"/>
181 <xs:enumeration value="PUDB"/>
182 <xs:enumeration value="PUCD"/>
183 <xs:enumeration value="PUFA"/>
184 <xs:enumeration value="RGDB"/>
185 <xs:enumeration value="RGCD"/>
186 <xs:enumeration value="RGFA"/>
187 </xs:restriction>
188 </xs:simpleType>
189 <xs:complexType name="ChequeDeliveryMethod1Choice">
190 <xs:sequence>
191 <xs:choice>
192 <xs:element name="Cd" type="ChequeDelivery1Code"/>
193 <xs:element name="Prtry" type="Max35Text"/>
194 </xs:choice>
195 </xs:sequence>
196 </xs:complexType>
197 <xs:simpleType name="ChequeType2Code">
198 <xs:restriction base="xs:string">
199 <xs:enumeration value="CCHQ"/>
200 <xs:enumeration value="CCCH"/>
201 <xs:enumeration value="BCHQ"/>
202 <xs:enumeration value="DRFT"/>
203 <xs:enumeration value="ELDR"/>
204 </xs:restriction>
205 </xs:simpleType>
206 <xs:complexType name="ClearingSystemIdentification2Choice">
207 <xs:sequence>
208 <xs:choice>
209 <xs:element name="Cd" type="ExternalClearingSystemIdentification1Code"/>
210 <xs:element name="Prtry" type="Max35Text"/>
211 </xs:choice>
212 </xs:sequence>
213 </xs:complexType>
214 <xs:complexType name="ClearingSystemMemberIdentification2">
215 <xs:sequence>
216 <xs:element maxOccurs="1" minOccurs="0" name="ClrSysId" type="ClearingSystemIdentification2Choice"/>
217 <xs:element name="MmbId" type="Max35Text"/>
218 </xs:sequence>
219 </xs:complexType>
220 <xs:complexType name="ContactDetails2">
221 <xs:sequence>
222 <xs:element maxOccurs="1" minOccurs="0" name="NmPrfx" type="NamePrefix1Code"/>
223 <xs:element maxOccurs="1" minOccurs="0" name="Nm" type="Max140Text"/>
224 <xs:element maxOccurs="1" minOccurs="0" name="PhneNb" type="PhoneNumber"/>
225 <xs:element maxOccurs="1" minOccurs="0" name="MobNb" type="PhoneNumber"/>
226 <xs:element maxOccurs="1" minOccurs="0" name="FaxNb" type="PhoneNumber"/>
227 <xs:element maxOccurs="1" minOccurs="0" name="EmailAdr" type="Max2048Text"/>
228 <xs:element maxOccurs="1" minOccurs="0" name="Othr" type="Max35Text"/>
229 </xs:sequence>
230 </xs:complexType>
231 <xs:simpleType name="CountryCode">
232 <xs:restriction base="xs:string">
233 <xs:pattern value="[A-Z]{2,2}"/>
234 </xs:restriction>
235 </xs:simpleType>
236 <xs:simpleType name="CreditDebitCode">
237 <xs:restriction base="xs:string">
238 <xs:enumeration value="CRDT"/>
239 <xs:enumeration value="DBIT"/>
240 </xs:restriction>
241 </xs:simpleType>
242 <xs:complexType name="CreditTransferTransactionInformation10">
243 <xs:sequence>
244 <xs:element name="PmtId" type="PaymentIdentification1"/>
245 <xs:element maxOccurs="1" minOccurs="0" name="PmtTpInf" type="PaymentTypeInformation19"/>
246 <xs:element name="Amt" type="AmountType3Choice"/>
247 <xs:element maxOccurs="1" minOccurs="0" name="XchgRateInf" type="ExchangeRateInformation1"/>
248 <xs:element maxOccurs="1" minOccurs="0" name="ChrgBr" type="ChargeBearerType1Code"/>
249 <xs:element maxOccurs="1" minOccurs="0" name="ChqInstr" type="Cheque6"/>
250 <xs:element maxOccurs="1" minOccurs="0" name="UltmtDbtr" type="PartyIdentification32"/>
251 <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt1" type="BranchAndFinancialInstitutionIdentification4"/>
252 <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt1Acct" type="CashAccount16"/>
253 <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt2" type="BranchAndFinancialInstitutionIdentification4"/>
254 <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt2Acct" type="CashAccount16"/>
255 <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt3" type="BranchAndFinancialInstitutionIdentification4"/>
256 <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt3Acct" type="CashAccount16"/>
257 <xs:element maxOccurs="1" minOccurs="0" name="CdtrAgt" type="BranchAndFinancialInstitutionIdentification4"/>
258 <xs:element maxOccurs="1" minOccurs="0" name="CdtrAgtAcct" type="CashAccount16"/>
259 <xs:element maxOccurs="1" minOccurs="0" name="Cdtr" type="PartyIdentification32"/>
260 <xs:element maxOccurs="1" minOccurs="0" name="CdtrAcct" type="CashAccount16"/>
261 <xs:element maxOccurs="1" minOccurs="0" name="UltmtCdtr" type="PartyIdentification32"/>
262 <xs:element maxOccurs="unbounded" minOccurs="0" name="InstrForCdtrAgt" type="InstructionForCreditorAgent1"/>
263 <xs:element maxOccurs="1" minOccurs="0" name="InstrForDbtrAgt" type="Max140Text"/>
264 <xs:element maxOccurs="1" minOccurs="0" name="Purp" type="Purpose2Choice"/>
265 <xs:element maxOccurs="10" minOccurs="0" name="RgltryRptg" type="RegulatoryReporting3"/>
266 <xs:element maxOccurs="1" minOccurs="0" name="Tax" type="TaxInformation3"/>
267 <xs:element maxOccurs="10" minOccurs="0" name="RltdRmtInf" type="RemittanceLocation2"/>
268 <xs:element maxOccurs="1" minOccurs="0" name="RmtInf" type="RemittanceInformation5"/>
269 </xs:sequence>
270 </xs:complexType>
271 <xs:complexType name="CreditorReferenceInformation2">
272 <xs:sequence>
273 <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="CreditorReferenceType2"/>
274 <xs:element maxOccurs="1" minOccurs="0" name="Ref" type="Max35Text"/>
275 </xs:sequence>
276 </xs:complexType>
277 <xs:complexType name="CreditorReferenceType1Choice">
278 <xs:sequence>
279 <xs:choice>
280 <xs:element name="Cd" type="DocumentType3Code"/>
281 <xs:element name="Prtry" type="Max35Text"/>
282 </xs:choice>
283 </xs:sequence>
284 </xs:complexType>
285 <xs:complexType name="CreditorReferenceType2">
286 <xs:sequence>
287 <xs:element name="CdOrPrtry" type="CreditorReferenceType1Choice"/>
288 <xs:element maxOccurs="1" minOccurs="0" name="Issr" type="Max35Text"/>
289 </xs:sequence>
290 </xs:complexType>
291 <xs:complexType name="CustomerCreditTransferInitiationV03">
292 <xs:sequence>
293 <xs:element name="GrpHdr" type="GroupHeader32"/>
294 <xs:element maxOccurs="unbounded" minOccurs="1" name="PmtInf" type="PaymentInstructionInformation3"/>
295 </xs:sequence>
296 </xs:complexType>
297 <xs:complexType name="DateAndPlaceOfBirth">
298 <xs:sequence>
299 <xs:element name="BirthDt" type="ISODate"/>
300 <xs:element maxOccurs="1" minOccurs="0" name="PrvcOfBirth" type="Max35Text"/>
301 <xs:element name="CityOfBirth" type="Max35Text"/>
302 <xs:element name="CtryOfBirth" type="CountryCode"/>
303 </xs:sequence>
304 </xs:complexType>
305 <xs:complexType name="DatePeriodDetails">
306 <xs:sequence>
307 <xs:element name="FrDt" type="ISODate"/>
308 <xs:element name="ToDt" type="ISODate"/>
309 </xs:sequence>
310 </xs:complexType>
311 <xs:simpleType name="DecimalNumber">
312 <xs:restriction base="xs:decimal">
313 <xs:fractionDigits value="17"/>
314 <xs:totalDigits value="18"/>
315 </xs:restriction>
316 </xs:simpleType>
317 <xs:complexType name="Document">
318 <xs:sequence>
319 <xs:element name="CstmrCdtTrfInitn" type="CustomerCreditTransferInitiationV03"/>
320 </xs:sequence>
321 </xs:complexType>
322 <xs:complexType name="DocumentAdjustment1">
323 <xs:sequence>
324 <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
325 <xs:element maxOccurs="1" minOccurs="0" name="CdtDbtInd" type="CreditDebitCode"/>
326 <xs:element maxOccurs="1" minOccurs="0" name="Rsn" type="Max4Text"/>
327 <xs:element maxOccurs="1" minOccurs="0" name="AddtlInf" type="Max140Text"/>
328 </xs:sequence>
329 </xs:complexType>
330 <xs:simpleType name="DocumentType3Code">
331 <xs:restriction base="xs:string">
332 <xs:enumeration value="RADM"/>
333 <xs:enumeration value="RPIN"/>
334 <xs:enumeration value="FXDR"/>
335 <xs:enumeration value="DISP"/>
336 <xs:enumeration value="PUOR"/>
337 <xs:enumeration value="SCOR"/>
338 </xs:restriction>
339 </xs:simpleType>
340 <xs:simpleType name="DocumentType5Code">
341 <xs:restriction base="xs:string">
342 <xs:enumeration value="MSIN"/>
343 <xs:enumeration value="CNFA"/>
344 <xs:enumeration value="DNFA"/>
345 <xs:enumeration value="CINV"/>
346 <xs:enumeration value="CREN"/>
347 <xs:enumeration value="DEBN"/>
348 <xs:enumeration value="HIRI"/>
349 <xs:enumeration value="SBIN"/>
350 <xs:enumeration value="CMCN"/>
351 <xs:enumeration value="SOAC"/>
352 <xs:enumeration value="DISP"/>
353 <xs:enumeration value="BOLD"/>
354 <xs:enumeration value="VCHR"/>
355 <xs:enumeration value="AROI"/>
356 <xs:enumeration value="TSUT"/>
357 </xs:restriction>
358 </xs:simpleType>
359 <xs:complexType name="EquivalentAmount2">
360 <xs:sequence>
361 <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
362 <xs:element name="CcyOfTrf" type="ActiveOrHistoricCurrencyCode"/>
363 </xs:sequence>
364 </xs:complexType>
365 <xs:complexType name="ExchangeRateInformation1">
366 <xs:sequence>
367 <xs:element maxOccurs="1" minOccurs="0" name="XchgRate" type="BaseOneRate"/>
368 <xs:element maxOccurs="1" minOccurs="0" name="RateTp" type="ExchangeRateType1Code"/>
369 <xs:element maxOccurs="1" minOccurs="0" name="CtrctId" type="Max35Text"/>
370 </xs:sequence>
371 </xs:complexType>
372 <xs:simpleType name="ExchangeRateType1Code">
373 <xs:restriction base="xs:string">
374 <xs:enumeration value="SPOT"/>
375 <xs:enumeration value="SALE"/>
376 <xs:enumeration value="AGRD"/>
377 </xs:restriction>
378 </xs:simpleType>
379 <xs:simpleType name="ExternalAccountIdentification1Code">
380 <xs:restriction base="xs:string">
381 <xs:minLength value="1"/>
382 <xs:maxLength value="4"/>
383 </xs:restriction>
384 </xs:simpleType>
385 <xs:simpleType name="ExternalCategoryPurpose1Code">
386 <xs:restriction base="xs:string">
387 <xs:minLength value="1"/>
388 <xs:maxLength value="4"/>
389 </xs:restriction>
390 </xs:simpleType>
391 <xs:simpleType name="ExternalClearingSystemIdentification1Code">
392 <xs:restriction base="xs:string">
393 <xs:minLength value="1"/>
394 <xs:maxLength value="5"/>
395 </xs:restriction>
396 </xs:simpleType>
397 <xs:simpleType name="ExternalFinancialInstitutionIdentification1Code">
398 <xs:restriction base="xs:string">
399 <xs:minLength value="1"/>
400 <xs:maxLength value="4"/>
401 </xs:restriction>
402 </xs:simpleType>
403 <xs:simpleType name="ExternalLocalInstrument1Code">
404 <xs:restriction base="xs:string">
405 <xs:minLength value="1"/>
406 <xs:maxLength value="35"/>
407 </xs:restriction>
408 </xs:simpleType>
409 <xs:simpleType name="ExternalOrganisationIdentification1Code">
410 <xs:restriction base="xs:string">
411 <xs:minLength value="1"/>
412 <xs:maxLength value="4"/>
413 </xs:restriction>
414 </xs:simpleType>
415 <xs:simpleType name="ExternalPersonIdentification1Code">
416 <xs:restriction base="xs:string">
417 <xs:minLength value="1"/>
418 <xs:maxLength value="4"/>
419 </xs:restriction>
420 </xs:simpleType>
421 <xs:simpleType name="ExternalPurpose1Code">
422 <xs:restriction base="xs:string">
423 <xs:minLength value="1"/>
424 <xs:maxLength value="4"/>
425 </xs:restriction>
426 </xs:simpleType>
427 <xs:simpleType name="ExternalServiceLevel1Code">
428 <xs:restriction base="xs:string">
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches