From 9d420da1ab018f8d188ca153fa91a2072ed55996 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Wed, 29 Jun 2016 17:50:32 +0200 Subject: [PATCH 01/23] Migrate to a new architecture with 3 modules for PAIN --- l10n_ch_pain_credit_transfer/README.rst | 62 + l10n_ch_pain_credit_transfer/__init__.py | 3 + l10n_ch_pain_credit_transfer/__openerp__.py | 17 + .../data/pain.001.001.03.ch.02.xsd | 1212 +++++++++++++++++ .../models/__init__.py | 3 + .../models/account_payment_method.py | 23 + .../tests/__init__.py | 3 + .../tests/test_ch_sct.py | 180 +++ 8 files changed, 1503 insertions(+) create mode 100644 l10n_ch_pain_credit_transfer/README.rst create mode 100644 l10n_ch_pain_credit_transfer/__init__.py create mode 100644 l10n_ch_pain_credit_transfer/__openerp__.py create mode 100644 l10n_ch_pain_credit_transfer/data/pain.001.001.03.ch.02.xsd create mode 100644 l10n_ch_pain_credit_transfer/models/__init__.py create mode 100644 l10n_ch_pain_credit_transfer/models/account_payment_method.py create mode 100644 l10n_ch_pain_credit_transfer/tests/__init__.py create mode 100644 l10n_ch_pain_credit_transfer/tests/test_ch_sct.py diff --git a/l10n_ch_pain_credit_transfer/README.rst b/l10n_ch_pain_credit_transfer/README.rst new file mode 100644 index 000000000..620e8c9e8 --- /dev/null +++ b/l10n_ch_pain_credit_transfer/README.rst @@ -0,0 +1,62 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +======================================= +Switzerland - ISO 20022 credit transfer +======================================= + +This module adds support for *pain.001.001.03.ch.02* which is used for ISO 20022 credit transfers in Switzerland (SEPA or not SEPA). + +It implements the guidelines for `ISO 20022 credit transfers `_ published by SIX Interbank Clearing. + +Configuration +============= + +In the menu *Accounting > Configuration > Management > Payment Methods*, +select the payment method that has the code *sepa_credit_transfer* and +set the *PAIN Version* to *pain.001.001.03.ch.02 (credit transfer in Switzerland)*. + +Usage +===== + +On the payment order, you will see a new computed boolean field named +*BVR* which shows if the payment order is BVR or not. + +This module doesn't modify the standard usage of the modules +*account_payment_order* and *account_banking_sepa_credit_transfer*. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/125/9.0 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed feedback. + +Credits +======= + +Contributors +------------ + +* Alexis de Lattre + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/l10n_ch_pain_credit_transfer/__init__.py b/l10n_ch_pain_credit_transfer/__init__.py new file mode 100644 index 000000000..cde864bae --- /dev/null +++ b/l10n_ch_pain_credit_transfer/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import models diff --git a/l10n_ch_pain_credit_transfer/__openerp__.py b/l10n_ch_pain_credit_transfer/__openerp__.py new file mode 100644 index 000000000..d29b58cda --- /dev/null +++ b/l10n_ch_pain_credit_transfer/__openerp__.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# © 2016 Akretion (Alexis de Lattre ) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Switzerland - PAIN Credit Transfer", + "summary": "Generate ISO 20022 credit transfert (SEPA and not SEPA)", + "version": "9.0.1.0.0", + "category": "Finance", + "author": "Akretion,Camptocamp,Odoo Community Association (OCA)", + "license": "AGPL-3", + "depends": [ + "l10n_ch_pain_base", + "account_banking_sepa_credit_transfer", + ], + 'installable': True, +} diff --git a/l10n_ch_pain_credit_transfer/data/pain.001.001.03.ch.02.xsd b/l10n_ch_pain_credit_transfer/data/pain.001.001.03.ch.02.xsd new file mode 100644 index 000000000..0f2180220 --- /dev/null +++ b/l10n_ch_pain_credit_transfer/data/pain.001.001.03.ch.02.xsd @@ -0,0 +1,1212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/l10n_ch_pain_credit_transfer/models/__init__.py b/l10n_ch_pain_credit_transfer/models/__init__.py new file mode 100644 index 000000000..3d6351629 --- /dev/null +++ b/l10n_ch_pain_credit_transfer/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import account_payment_method diff --git a/l10n_ch_pain_credit_transfer/models/account_payment_method.py b/l10n_ch_pain_credit_transfer/models/account_payment_method.py new file mode 100644 index 000000000..c883bf7e1 --- /dev/null +++ b/l10n_ch_pain_credit_transfer/models/account_payment_method.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# © 2016 Akretion (Alexis de Lattre ) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, fields, api + + +class AccountPaymentMethod(models.Model): + _inherit = 'account.payment.method' + + pain_version = fields.Selection(selection_add=[ + ('pain.001.001.03.ch.02', + 'pain.001.001.03.ch.02 (credit transfer in Switzerland)'), + ]) + + @api.multi + def get_xsd_file_path(self): + self.ensure_one() + painv = self.pain_version + if painv == 'pain.001.001.03.ch.02': + path = 'l10n_ch_pain_credit_transfer/data/%s.xsd' % painv + return path + return super(AccountPaymentMethod, self).get_xsd_file_path() diff --git a/l10n_ch_pain_credit_transfer/tests/__init__.py b/l10n_ch_pain_credit_transfer/tests/__init__.py new file mode 100644 index 000000000..f6a4dbf9a --- /dev/null +++ b/l10n_ch_pain_credit_transfer/tests/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import test_ch_sct diff --git a/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py b/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py new file mode 100644 index 000000000..ee4f50b42 --- /dev/null +++ b/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py @@ -0,0 +1,180 @@ +# -*- coding: utf-8 -*- +# © 2016 Akretion (Alexis de Lattre ) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp.addons.account.tests.account_test_classes\ + import AccountingTestCase +from openerp.tools import float_compare +import time +from lxml import etree + + +class TestSCT_CH(AccountingTestCase): + + def test_sct_ch(self): + self.company = self.env['res.company'] + self.account_model = self.env['account.account'] + self.move_model = self.env['account.move'] + self.journal_model = self.env['account.journal'] + self.payment_mode_model = self.env['account.payment.mode'] + self.payment_order_model = self.env['account.payment.order'] + self.payment_line_model = self.env['account.payment.line'] + self.bank_line_model = self.env['bank.payment.line'] + self.partner_bank_model = self.env['res.partner.bank'] + self.bank_model = self.env['res.bank'] + self.attachment_model = self.env['ir.attachment'] + self.invoice_model = self.env['account.invoice'] + self.invoice_line_model = self.env['account.invoice.line'] + company = self.env.ref('base.main_company') + self.partner_agrolait = self.env.ref('base.res_partner_2') + self.account_expense = self.account_model.search([( + 'user_type_id', + '=', + self.env.ref('account.data_account_type_expenses').id)], limit=1) + self.account_payable = self.account_model.search([( + 'user_type_id', + '=', + self.env.ref('account.data_account_type_payable').id)], limit=1) + # Create a swiss bank + ch_bank = self.bank_model.create({ + 'name': 'Big swiss bank', + 'bic': 'DRESDEFF300', + 'ccp': '01-1234-1', + }) + # create a ch bank account for my company + my_ch_partner_bank = self.partner_bank_model.create({ + 'acc_number': 'CH0909000000100080607', + 'partner_id': self.env.ref('base.main_partner').id, + 'bank_id': ch_bank.id, + }) + # create journal + self.bank_journal = self.journal_model.create({ + 'name': 'Company Bank journal', + 'type': 'bank', + 'code': 'BNKFB', + 'bank_account_id': my_ch_partner_bank.id, + 'bank_id': ch_bank.id, + }) + # create a payment mode + pay_method_id = self.env.ref( + 'account_banking_sepa_credit_transfer.sepa_credit_transfer').id + self.payment_mode = self.payment_mode_model.create({ + 'name': 'CH credit transfer', + 'bank_account_link': 'fixed', + 'fixed_journal_id': self.bank_journal.id, + 'payment_method_id': pay_method_id, + }) + self.payment_mode.payment_method_id.pain_version =\ + 'pain.001.001.03.ch.02' + chf_currency_id = self.env.ref('base.CHF').id + company.currency_id = chf_currency_id + # Create a bank account + ch_partner_bank = self.partner_bank_model.create({ + 'acc_number': 'CH9100767000S00023455', + 'partner_id': self.partner_agrolait.id, + 'bank_id': ch_bank.id, + }) + invoice1 = self.create_bvr_invoice( + self.partner_agrolait.id, + ch_partner_bank.id, 42.0, '132000000000000000000000014') + invoice2 = self.create_bvr_invoice( + self.partner_agrolait.id, + ch_partner_bank.id, 12.0, '132000000000004') + for inv in [invoice1, invoice2]: + action = inv.create_account_payment_line() + self.assertEquals(action['res_model'], 'account.payment.order') + self.payment_order = self.payment_order_model.browse(action['res_id']) + self.assertEquals( + self.payment_order.payment_type, 'outbound') + self.assertEquals( + self.payment_order.payment_mode_id, self.payment_mode) + self.assertEquals( + self.payment_order.journal_id, self.bank_journal) + pay_lines = self.payment_line_model.search([ + ('partner_id', '=', self.partner_agrolait.id), + ('order_id', '=', self.payment_order.id)]) + self.assertEquals(len(pay_lines), 2) + agrolait_pay_line1 = pay_lines[0] + accpre = self.env['decimal.precision'].precision_get('Account') + self.assertEquals(agrolait_pay_line1.currency_id.id, chf_currency_id) + self.assertEquals( + agrolait_pay_line1.partner_bank_id, invoice1.partner_bank_id) + self.assertEquals(float_compare( + agrolait_pay_line1.amount_currency, 42, precision_digits=accpre), + 0) + self.assertEquals(agrolait_pay_line1.communication_type, 'bvr') + self.assertEquals( + agrolait_pay_line1.communication, + '132000000000000000000000014') + self.payment_order.draft2open() + self.assertEquals(self.payment_order.state, 'open') + self.assertEquals(self.payment_order.sepa, False) + bank_lines = self.bank_line_model.search([ + ('partner_id', '=', self.partner_agrolait.id)]) + self.assertEquals(len(bank_lines), 2) + for bank_line in bank_lines: + self.assertEquals(bank_line.currency_id.id, chf_currency_id) + self.assertEquals(bank_line.communication_type, 'bvr') + self.assertEquals( + bank_line.communication in [ + '132000000000000000000000014', + '132000000000004'], True) + self.assertEquals( + bank_line.partner_bank_id, invoice1.partner_bank_id) + + action = self.payment_order.open2generated() + self.assertEquals(self.payment_order.state, 'generated') + self.assertEquals(action['res_model'], 'ir.attachment') + attachment = self.attachment_model.browse(action['res_id']) + self.assertEquals(attachment.datas_fname[-4:], '.xml') + xml_file = attachment.datas.decode('base64') + xml_root = etree.fromstring(xml_file) + # print "xml_file=", etree.tostring(xml_root, pretty_print=True) + namespaces = xml_root.nsmap + namespaces['p'] = xml_root.nsmap[None] + namespaces.pop(None) + pay_method_xpath = xml_root.xpath( + '//p:PmtInf/p:PmtMtd', namespaces=namespaces) + self.assertEquals( + namespaces['p'], + 'http://www.six-interbank-clearing.com/de/' + 'pain.001.001.03.ch.02.xsd') + self.assertEquals(pay_method_xpath[0].text, 'TRF') + sepa_xpath = xml_root.xpath( + '//p:PmtInf/p:PmtTpInf/p:SvcLvl/p:Cd', namespaces=namespaces) + self.assertEquals(len(sepa_xpath), 0) + debtor_acc_xpath = xml_root.xpath( + '//p:PmtInf/p:DbtrAcct/p:Id/p:IBAN', namespaces=namespaces) + self.assertEquals( + debtor_acc_xpath[0].text, + self.payment_order.company_partner_bank_id.sanitized_acc_number) + self.payment_order.generated2uploaded() + self.assertEquals(self.payment_order.state, 'uploaded') + for inv in [invoice1, invoice2]: + self.assertEquals(inv.state, 'paid') + return + + def create_bvr_invoice( + self, partner_id, partner_bank_id, price_unit, reference, + type='in_invoice'): + invoice = self.invoice_model.create({ + 'partner_id': partner_id, + 'reference_type': 'bvr', + 'reference': reference, + 'currency_id': self.env.ref('base.CHF').id, + 'name': 'test', + 'account_id': self.account_payable.id, + 'type': type, + 'date_invoice': time.strftime('%Y-%m-%d'), + 'payment_mode_id': self.payment_mode.id, + 'partner_bank_id': partner_bank_id, + }) + self.invoice_line_model.create({ + 'invoice_id': invoice.id, + 'price_unit': price_unit, + 'quantity': 1, + 'name': 'Great service', + 'account_id': self.account_expense.id, + }) + invoice.signal_workflow('invoice_open') + return invoice From d5836271f943b34a484b232cc7eb35a0166ea704 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Wed, 29 Jun 2016 18:02:57 +0200 Subject: [PATCH 02/23] Use setUp method in unit-test --- .../tests/test_ch_sct.py | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py b/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py index ee4f50b42..f187d4027 100644 --- a/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py +++ b/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py @@ -11,8 +11,8 @@ class TestSCT_CH(AccountingTestCase): - def test_sct_ch(self): - self.company = self.env['res.company'] + def setUp(self): + super(TestSCT_CH, self).setUp() self.account_model = self.env['account.account'] self.move_model = self.env['account.move'] self.journal_model = self.env['account.journal'] @@ -25,7 +25,7 @@ def test_sct_ch(self): self.attachment_model = self.env['ir.attachment'] self.invoice_model = self.env['account.invoice'] self.invoice_line_model = self.env['account.invoice.line'] - company = self.env.ref('base.main_company') + self.main_company = self.env.ref('base.main_company') self.partner_agrolait = self.env.ref('base.res_partner_2') self.account_expense = self.account_model.search([( 'user_type_id', @@ -42,7 +42,7 @@ def test_sct_ch(self): 'ccp': '01-1234-1', }) # create a ch bank account for my company - my_ch_partner_bank = self.partner_bank_model.create({ + self.agrolait_partner_bank = self.partner_bank_model.create({ 'acc_number': 'CH0909000000100080607', 'partner_id': self.env.ref('base.main_partner').id, 'bank_id': ch_bank.id, @@ -52,7 +52,7 @@ def test_sct_ch(self): 'name': 'Company Bank journal', 'type': 'bank', 'code': 'BNKFB', - 'bank_account_id': my_ch_partner_bank.id, + 'bank_account_id': self.agrolait_partner_bank.id, 'bank_id': ch_bank.id, }) # create a payment mode @@ -66,20 +66,22 @@ def test_sct_ch(self): }) self.payment_mode.payment_method_id.pain_version =\ 'pain.001.001.03.ch.02' - chf_currency_id = self.env.ref('base.CHF').id - company.currency_id = chf_currency_id + self.chf_currency = self.env.ref('base.CHF') + self.main_company.currency_id = self.chf_currency.id # Create a bank account - ch_partner_bank = self.partner_bank_model.create({ + self.agrolait_partner_bank = self.partner_bank_model.create({ 'acc_number': 'CH9100767000S00023455', 'partner_id': self.partner_agrolait.id, 'bank_id': ch_bank.id, }) + + def test_sct_ch(self): invoice1 = self.create_bvr_invoice( self.partner_agrolait.id, - ch_partner_bank.id, 42.0, '132000000000000000000000014') + self.agrolait_partner_bank.id, 42.0, '132000000000000000000000014') invoice2 = self.create_bvr_invoice( self.partner_agrolait.id, - ch_partner_bank.id, 12.0, '132000000000004') + self.agrolait_partner_bank.id, 12.0, '132000000000004') for inv in [invoice1, invoice2]: action = inv.create_account_payment_line() self.assertEquals(action['res_model'], 'account.payment.order') @@ -96,7 +98,7 @@ def test_sct_ch(self): self.assertEquals(len(pay_lines), 2) agrolait_pay_line1 = pay_lines[0] accpre = self.env['decimal.precision'].precision_get('Account') - self.assertEquals(agrolait_pay_line1.currency_id.id, chf_currency_id) + self.assertEquals(agrolait_pay_line1.currency_id, self.chf_currency) self.assertEquals( agrolait_pay_line1.partner_bank_id, invoice1.partner_bank_id) self.assertEquals(float_compare( @@ -113,7 +115,7 @@ def test_sct_ch(self): ('partner_id', '=', self.partner_agrolait.id)]) self.assertEquals(len(bank_lines), 2) for bank_line in bank_lines: - self.assertEquals(bank_line.currency_id.id, chf_currency_id) + self.assertEquals(bank_line.currency_id, self.chf_currency) self.assertEquals(bank_line.communication_type, 'bvr') self.assertEquals( bank_line.communication in [ @@ -161,7 +163,7 @@ def create_bvr_invoice( 'partner_id': partner_id, 'reference_type': 'bvr', 'reference': reference, - 'currency_id': self.env.ref('base.CHF').id, + 'currency_id': self.chf_currency.id, 'name': 'test', 'account_id': self.account_payable.id, 'type': type, From 44a5de94e58fed745a7067bfdebb8d8c8f00a168 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Wed, 29 Jun 2016 18:41:34 +0200 Subject: [PATCH 03/23] Add a unit-test for payment type 3 Fix sepa compute method --- l10n_ch_pain_credit_transfer/i18n/en.po | 21 ++++ l10n_ch_pain_credit_transfer/i18n/fr.po | 24 ++++ l10n_ch_pain_credit_transfer/i18n/nb_NO.po | 24 ++++ .../tests/test_ch_sct.py | 112 ++++++++++++++++-- 4 files changed, 170 insertions(+), 11 deletions(-) create mode 100644 l10n_ch_pain_credit_transfer/i18n/en.po create mode 100644 l10n_ch_pain_credit_transfer/i18n/fr.po create mode 100644 l10n_ch_pain_credit_transfer/i18n/nb_NO.po diff --git a/l10n_ch_pain_credit_transfer/i18n/en.po b/l10n_ch_pain_credit_transfer/i18n/en.po new file mode 100644 index 000000000..a96d65401 --- /dev/null +++ b/l10n_ch_pain_credit_transfer/i18n/en.po @@ -0,0 +1,21 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_ch_pain_credit_transfer +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-07-02 02:47+0000\n" +"PO-Revision-Date: 2016-07-02 02:47+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: l10n_ch_pain_credit_transfer +#: model:ir.model,name:l10n_ch_pain_credit_transfer.model_account_payment_method +msgid "Payment Methods" +msgstr "Payment Methods" diff --git a/l10n_ch_pain_credit_transfer/i18n/fr.po b/l10n_ch_pain_credit_transfer/i18n/fr.po new file mode 100644 index 000000000..d65c56f36 --- /dev/null +++ b/l10n_ch_pain_credit_transfer/i18n/fr.po @@ -0,0 +1,24 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_ch_pain_credit_transfer +# +# Translators: +# leemannd , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-03-07 03:41+0000\n" +"PO-Revision-Date: 2017-03-07 03:41+0000\n" +"Last-Translator: leemannd , 2017\n" +"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: l10n_ch_pain_credit_transfer +#: model:ir.model,name:l10n_ch_pain_credit_transfer.model_account_payment_method +msgid "Payment Methods" +msgstr "Moyens de Paiement" diff --git a/l10n_ch_pain_credit_transfer/i18n/nb_NO.po b/l10n_ch_pain_credit_transfer/i18n/nb_NO.po new file mode 100644 index 000000000..f331b5e0a --- /dev/null +++ b/l10n_ch_pain_credit_transfer/i18n/nb_NO.po @@ -0,0 +1,24 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_ch_pain_credit_transfer +# +# Translators: +# Imre Kristoffer Eilertsen , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-07-31 03:43+0000\n" +"PO-Revision-Date: 2016-07-31 03:43+0000\n" +"Last-Translator: Imre Kristoffer Eilertsen , 2016\n" +"Language-Team: Norwegian Bokmål (Norway) (https://www.transifex.com/oca/teams/23907/nb_NO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nb_NO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: l10n_ch_pain_credit_transfer +#: model:ir.model,name:l10n_ch_pain_credit_transfer.model_account_payment_method +msgid "Payment Methods" +msgstr "Betalingsmetoder" diff --git a/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py b/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py index f187d4027..55ed1b46a 100644 --- a/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py +++ b/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py @@ -67,6 +67,7 @@ def setUp(self): self.payment_mode.payment_method_id.pain_version =\ 'pain.001.001.03.ch.02' self.chf_currency = self.env.ref('base.CHF') + self.eur_currency = self.env.ref('base.EUR') self.main_company.currency_id = self.chf_currency.id # Create a bank account self.agrolait_partner_bank = self.partner_bank_model.create({ @@ -75,13 +76,15 @@ def setUp(self): 'bank_id': ch_bank.id, }) - def test_sct_ch(self): - invoice1 = self.create_bvr_invoice( + def test_sct_ch_payment_type1(self): + invoice1 = self.create_invoice( self.partner_agrolait.id, - self.agrolait_partner_bank.id, 42.0, '132000000000000000000000014') - invoice2 = self.create_bvr_invoice( + self.agrolait_partner_bank.id, self.chf_currency, 42.0, + 'bvr', '132000000000000000000000014') + invoice2 = self.create_invoice( self.partner_agrolait.id, - self.agrolait_partner_bank.id, 12.0, '132000000000004') + self.agrolait_partner_bank.id, self.chf_currency, 12.0, + 'bvr', '132000000000004') for inv in [invoice1, invoice2]: action = inv.create_account_payment_line() self.assertEquals(action['res_model'], 'account.payment.order') @@ -145,6 +148,93 @@ def test_sct_ch(self): sepa_xpath = xml_root.xpath( '//p:PmtInf/p:PmtTpInf/p:SvcLvl/p:Cd', namespaces=namespaces) self.assertEquals(len(sepa_xpath), 0) + local_instrument_xpath = xml_root.xpath( + '//p:PmtInf/p:PmtTpInf/p:LclInstrm/p:Prtry', namespaces=namespaces) + self.assertEquals(local_instrument_xpath[0].text, 'CH01') + + debtor_acc_xpath = xml_root.xpath( + '//p:PmtInf/p:DbtrAcct/p:Id/p:IBAN', namespaces=namespaces) + self.assertEquals( + debtor_acc_xpath[0].text, + self.payment_order.company_partner_bank_id.sanitized_acc_number) + self.payment_order.generated2uploaded() + self.assertEquals(self.payment_order.state, 'uploaded') + for inv in [invoice1, invoice2]: + self.assertEquals(inv.state, 'paid') + return + + def test_sct_ch_payment_type3(self): + invoice1 = self.create_invoice( + self.partner_agrolait.id, + self.agrolait_partner_bank.id, self.eur_currency, 4042.0, + 'none', 'Inv1242') + invoice2 = self.create_invoice( + self.partner_agrolait.id, + self.agrolait_partner_bank.id, self.eur_currency, 1012.55, + 'none', 'Inv1248') + for inv in [invoice1, invoice2]: + action = inv.create_account_payment_line() + self.assertEquals(action['res_model'], 'account.payment.order') + self.payment_order = self.payment_order_model.browse(action['res_id']) + self.assertEquals( + self.payment_order.payment_type, 'outbound') + self.assertEquals( + self.payment_order.payment_mode_id, self.payment_mode) + self.assertEquals( + self.payment_order.journal_id, self.bank_journal) + pay_lines = self.payment_line_model.search([ + ('partner_id', '=', self.partner_agrolait.id), + ('order_id', '=', self.payment_order.id)]) + self.assertEquals(len(pay_lines), 2) + agrolait_pay_line1 = pay_lines[0] + accpre = self.env['decimal.precision'].precision_get('Account') + self.assertEquals(agrolait_pay_line1.currency_id, self.eur_currency) + self.assertEquals( + agrolait_pay_line1.partner_bank_id, invoice1.partner_bank_id) + self.assertEquals(float_compare( + agrolait_pay_line1.amount_currency, 4042.0, + precision_digits=accpre), 0) + self.assertEquals(agrolait_pay_line1.communication_type, 'normal') + self.assertEquals( + agrolait_pay_line1.communication, 'Inv1242') + self.payment_order.draft2open() + self.assertEquals(self.payment_order.state, 'open') + self.assertEquals(self.payment_order.sepa, False) + bank_lines = self.bank_line_model.search([ + ('partner_id', '=', self.partner_agrolait.id)]) + self.assertEquals(len(bank_lines), 1) + bank_line = bank_lines[0] + self.assertEquals(bank_line.currency_id, self.eur_currency) + self.assertEquals(bank_line.communication_type, 'normal') + self.assertEquals(bank_line.communication, 'Inv1242-Inv1248') + self.assertEquals( + bank_line.partner_bank_id, invoice1.partner_bank_id) + + action = self.payment_order.open2generated() + self.assertEquals(self.payment_order.state, 'generated') + self.assertEquals(action['res_model'], 'ir.attachment') + attachment = self.attachment_model.browse(action['res_id']) + self.assertEquals(attachment.datas_fname[-4:], '.xml') + xml_file = attachment.datas.decode('base64') + xml_root = etree.fromstring(xml_file) + # print "xml_file=", etree.tostring(xml_root, pretty_print=True) + namespaces = xml_root.nsmap + namespaces['p'] = xml_root.nsmap[None] + namespaces.pop(None) + pay_method_xpath = xml_root.xpath( + '//p:PmtInf/p:PmtMtd', namespaces=namespaces) + self.assertEquals( + namespaces['p'], + 'http://www.six-interbank-clearing.com/de/' + 'pain.001.001.03.ch.02.xsd') + self.assertEquals(pay_method_xpath[0].text, 'TRF') + sepa_xpath = xml_root.xpath( + '//p:PmtInf/p:PmtTpInf/p:SvcLvl/p:Cd', namespaces=namespaces) + self.assertEquals(len(sepa_xpath), 0) + local_instrument_xpath = xml_root.xpath( + '//p:PmtInf/p:PmtTpInf/p:LclInstrm/p:Prtry', namespaces=namespaces) + self.assertEquals(len(local_instrument_xpath), 0) + debtor_acc_xpath = xml_root.xpath( '//p:PmtInf/p:DbtrAcct/p:Id/p:IBAN', namespaces=namespaces) self.assertEquals( @@ -156,14 +246,14 @@ def test_sct_ch(self): self.assertEquals(inv.state, 'paid') return - def create_bvr_invoice( - self, partner_id, partner_bank_id, price_unit, reference, - type='in_invoice'): + def create_invoice( + self, partner_id, partner_bank_id, currency, price_unit, + ref_type, ref, type='in_invoice'): invoice = self.invoice_model.create({ 'partner_id': partner_id, - 'reference_type': 'bvr', - 'reference': reference, - 'currency_id': self.chf_currency.id, + 'reference_type': ref_type, + 'reference': ref, + 'currency_id': currency.id, 'name': 'test', 'account_id': self.account_payable.id, 'type': type, From 19e421c2b5e38ef6651a3d85ca344def8163f1e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul=20=28ACSONE=29?= Date: Fri, 26 Aug 2016 17:08:48 +0200 Subject: [PATCH 04/23] [FIX] remove en.po that was erroneously created by transbot --- l10n_ch_pain_credit_transfer/i18n/en.po | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 l10n_ch_pain_credit_transfer/i18n/en.po diff --git a/l10n_ch_pain_credit_transfer/i18n/en.po b/l10n_ch_pain_credit_transfer/i18n/en.po deleted file mode 100644 index a96d65401..000000000 --- a/l10n_ch_pain_credit_transfer/i18n/en.po +++ /dev/null @@ -1,21 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * l10n_ch_pain_credit_transfer -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 9.0c\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-02 02:47+0000\n" -"PO-Revision-Date: 2016-07-02 02:47+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: l10n_ch_pain_credit_transfer -#: model:ir.model,name:l10n_ch_pain_credit_transfer.model_account_payment_method -msgid "Payment Methods" -msgstr "Payment Methods" From 3ae0bd6995f1af64b6be7ef5a25652c81c29f693 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 6 Oct 2016 14:56:38 +0200 Subject: [PATCH 05/23] [MIG] Make modules uninstallable --- l10n_ch_pain_credit_transfer/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/l10n_ch_pain_credit_transfer/__openerp__.py b/l10n_ch_pain_credit_transfer/__openerp__.py index d29b58cda..86470f2aa 100644 --- a/l10n_ch_pain_credit_transfer/__openerp__.py +++ b/l10n_ch_pain_credit_transfer/__openerp__.py @@ -13,5 +13,5 @@ "l10n_ch_pain_base", "account_banking_sepa_credit_transfer", ], - 'installable': True, + 'installable': False, } From cb4a75ef0e856346f0dfc25036ee818021d46419 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 6 Oct 2016 14:56:43 +0200 Subject: [PATCH 06/23] [MIG] Rename manifest files --- l10n_ch_pain_credit_transfer/{__openerp__.py => __manifest__.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename l10n_ch_pain_credit_transfer/{__openerp__.py => __manifest__.py} (100%) diff --git a/l10n_ch_pain_credit_transfer/__openerp__.py b/l10n_ch_pain_credit_transfer/__manifest__.py similarity index 100% rename from l10n_ch_pain_credit_transfer/__openerp__.py rename to l10n_ch_pain_credit_transfer/__manifest__.py From 894920204234e4d338257b85b5996243aa52eb87 Mon Sep 17 00:00:00 2001 From: Denis Leemann Date: Tue, 28 Feb 2017 18:16:52 +0100 Subject: [PATCH 07/23] [MIG] l10n_ch_pain_credit_transfer: Migrated to 10.0 --- l10n_ch_pain_credit_transfer/README.rst | 1 + l10n_ch_pain_credit_transfer/__manifest__.py | 6 +++--- .../models/account_payment_method.py | 4 ++-- l10n_ch_pain_credit_transfer/tests/test_ch_sct.py | 7 ++++--- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/l10n_ch_pain_credit_transfer/README.rst b/l10n_ch_pain_credit_transfer/README.rst index 620e8c9e8..45643d617 100644 --- a/l10n_ch_pain_credit_transfer/README.rst +++ b/l10n_ch_pain_credit_transfer/README.rst @@ -45,6 +45,7 @@ Contributors ------------ * Alexis de Lattre +* Denis Leemann Maintainer ---------- diff --git a/l10n_ch_pain_credit_transfer/__manifest__.py b/l10n_ch_pain_credit_transfer/__manifest__.py index 86470f2aa..014753c38 100644 --- a/l10n_ch_pain_credit_transfer/__manifest__.py +++ b/l10n_ch_pain_credit_transfer/__manifest__.py @@ -1,11 +1,11 @@ # -*- coding: utf-8 -*- -# © 2016 Akretion (Alexis de Lattre ) +# copyright 2016 Akretion (Alexis de Lattre ) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { "name": "Switzerland - PAIN Credit Transfer", "summary": "Generate ISO 20022 credit transfert (SEPA and not SEPA)", - "version": "9.0.1.0.0", + "version": "10.0.1.0.0", "category": "Finance", "author": "Akretion,Camptocamp,Odoo Community Association (OCA)", "license": "AGPL-3", @@ -13,5 +13,5 @@ "l10n_ch_pain_base", "account_banking_sepa_credit_transfer", ], - 'installable': False, + 'installable': True, } diff --git a/l10n_ch_pain_credit_transfer/models/account_payment_method.py b/l10n_ch_pain_credit_transfer/models/account_payment_method.py index c883bf7e1..9652f654f 100644 --- a/l10n_ch_pain_credit_transfer/models/account_payment_method.py +++ b/l10n_ch_pain_credit_transfer/models/account_payment_method.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- -# © 2016 Akretion (Alexis de Lattre ) +# copyright 2016 Akretion (Alexis de Lattre ) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, fields, api +from odoo import models, fields, api class AccountPaymentMethod(models.Model): diff --git a/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py b/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py index 55ed1b46a..a3e35c6e1 100644 --- a/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py +++ b/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py @@ -2,9 +2,9 @@ # © 2016 Akretion (Alexis de Lattre ) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp.addons.account.tests.account_test_classes\ +from odoo.addons.account.tests.account_test_classes\ import AccountingTestCase -from openerp.tools import float_compare +from odoo.tools import float_compare import time from lxml import etree @@ -268,5 +268,6 @@ def create_invoice( 'name': 'Great service', 'account_id': self.account_expense.id, }) - invoice.signal_workflow('invoice_open') + invoice.invoice_validate() + invoice.action_move_create() return invoice From 0cde6bfc94da19b338ac61a34fa5e793c6f7ee3a Mon Sep 17 00:00:00 2001 From: Yannick Vaucher Date: Thu, 16 Mar 2017 11:23:33 +0100 Subject: [PATCH 08/23] Adapt tests to editable ccp on partner bank form --- .../tests/test_ch_sct.py | 53 +++++++++++-------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py b/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py index a3e35c6e1..064327bca 100644 --- a/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py +++ b/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py @@ -8,57 +8,61 @@ import time from lxml import etree +ch_iban = 'CH15 3881 5158 3845 3843 7' + class TestSCT_CH(AccountingTestCase): def setUp(self): super(TestSCT_CH, self).setUp() - self.account_model = self.env['account.account'] - self.move_model = self.env['account.move'] - self.journal_model = self.env['account.journal'] - self.payment_mode_model = self.env['account.payment.mode'] + Account = self.env['account.account'] + Journal = self.env['account.journal'] + PaymentMode = self.env['account.payment.mode'] + self.payment_order_model = self.env['account.payment.order'] self.payment_line_model = self.env['account.payment.line'] self.bank_line_model = self.env['bank.payment.line'] self.partner_bank_model = self.env['res.partner.bank'] - self.bank_model = self.env['res.bank'] self.attachment_model = self.env['ir.attachment'] self.invoice_model = self.env['account.invoice'] self.invoice_line_model = self.env['account.invoice.line'] + self.main_company = self.env.ref('base.main_company') self.partner_agrolait = self.env.ref('base.res_partner_2') - self.account_expense = self.account_model.search([( + + self.account_expense = Account.search([( 'user_type_id', '=', self.env.ref('account.data_account_type_expenses').id)], limit=1) - self.account_payable = self.account_model.search([( + self.account_payable = Account.search([( 'user_type_id', '=', self.env.ref('account.data_account_type_payable').id)], limit=1) # Create a swiss bank - ch_bank = self.bank_model.create({ - 'name': 'Big swiss bank', - 'bic': 'DRESDEFF300', - 'ccp': '01-1234-1', - }) + ch_bank1 = self.env['res.bank'].create({ + 'name': 'Alternative Bank Schweiz AG', + 'bic': 'ALSWCH21XXX', + 'clearing': '38815', + 'ccp': '46-110-7', + }) # create a ch bank account for my company - self.agrolait_partner_bank = self.partner_bank_model.create({ - 'acc_number': 'CH0909000000100080607', + self.cp_partner_bank = self.partner_bank_model.create({ + 'acc_number': ch_iban, 'partner_id': self.env.ref('base.main_partner').id, - 'bank_id': ch_bank.id, }) + self.cp_partner_bank.onchange_acc_number_set_swiss_bank() # create journal - self.bank_journal = self.journal_model.create({ + self.bank_journal = Journal.create({ 'name': 'Company Bank journal', 'type': 'bank', 'code': 'BNKFB', - 'bank_account_id': self.agrolait_partner_bank.id, - 'bank_id': ch_bank.id, + 'bank_account_id': self.cp_partner_bank.id, + 'bank_id': ch_bank1.id, }) # create a payment mode pay_method_id = self.env.ref( 'account_banking_sepa_credit_transfer.sepa_credit_transfer').id - self.payment_mode = self.payment_mode_model.create({ + self.payment_mode = PaymentMode.create({ 'name': 'CH credit transfer', 'bank_account_link': 'fixed', 'fixed_journal_id': self.bank_journal.id, @@ -69,11 +73,18 @@ def setUp(self): self.chf_currency = self.env.ref('base.CHF') self.eur_currency = self.env.ref('base.EUR') self.main_company.currency_id = self.chf_currency.id - # Create a bank account + ch_bank2 = self.env['res.bank'].create({ + 'name': 'Banque Cantonale Vaudoise', + 'bic': 'BCVLCH2LXXX', + 'clearing': '767', + 'ccp': '01-1234-1', + }) + # Create a bank account with clearing 767 self.agrolait_partner_bank = self.partner_bank_model.create({ 'acc_number': 'CH9100767000S00023455', 'partner_id': self.partner_agrolait.id, - 'bank_id': ch_bank.id, + 'bank_id': ch_bank2.id, + 'ccp': '01-1234-1', }) def test_sct_ch_payment_type1(self): From 53347e8b8a3ebd052515b95b1f8c3eed275b6d92 Mon Sep 17 00:00:00 2001 From: mpanarin Date: Mon, 18 Dec 2017 20:14:03 +0200 Subject: [PATCH 09/23] [MIG] l10n_ch_pain_credit_transfer: Migration to odoo 11 --- l10n_ch_pain_credit_transfer/README.rst | 5 ++-- l10n_ch_pain_credit_transfer/__init__.py | 2 -- l10n_ch_pain_credit_transfer/__manifest__.py | 5 ++-- l10n_ch_pain_credit_transfer/i18n/fr.po | 4 ++-- .../i18n/l10n_ch_pain_credit_transfer.pot | 20 ++++++++++++++++ l10n_ch_pain_credit_transfer/i18n/nb_NO.po | 24 ------------------- .../models/__init__.py | 2 -- .../models/account_payment_method.py | 3 +-- .../tests/__init__.py | 2 -- .../tests/test_ch_sct.py | 16 ++++++------- 10 files changed, 37 insertions(+), 46 deletions(-) create mode 100644 l10n_ch_pain_credit_transfer/i18n/l10n_ch_pain_credit_transfer.pot delete mode 100644 l10n_ch_pain_credit_transfer/i18n/nb_NO.po diff --git a/l10n_ch_pain_credit_transfer/README.rst b/l10n_ch_pain_credit_transfer/README.rst index 45643d617..aa21f5571 100644 --- a/l10n_ch_pain_credit_transfer/README.rst +++ b/l10n_ch_pain_credit_transfer/README.rst @@ -21,14 +21,14 @@ Usage ===== On the payment order, you will see a new computed boolean field named -*BVR* which shows if the payment order is BVR or not. +*ISR* which shows if the payment order is BVR or not. This module doesn't modify the standard usage of the modules *account_payment_order* and *account_banking_sepa_credit_transfer*. .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/125/9.0 + :target: https://runbot.odoo-community.org/runbot/125/11.0 Bug Tracker =========== @@ -46,6 +46,7 @@ Contributors * Alexis de Lattre * Denis Leemann +* Mykhailo Panarin Maintainer ---------- diff --git a/l10n_ch_pain_credit_transfer/__init__.py b/l10n_ch_pain_credit_transfer/__init__.py index cde864bae..0650744f6 100644 --- a/l10n_ch_pain_credit_transfer/__init__.py +++ b/l10n_ch_pain_credit_transfer/__init__.py @@ -1,3 +1 @@ -# -*- coding: utf-8 -*- - from . import models diff --git a/l10n_ch_pain_credit_transfer/__manifest__.py b/l10n_ch_pain_credit_transfer/__manifest__.py index 014753c38..8f09b3886 100644 --- a/l10n_ch_pain_credit_transfer/__manifest__.py +++ b/l10n_ch_pain_credit_transfer/__manifest__.py @@ -1,16 +1,17 @@ -# -*- coding: utf-8 -*- # copyright 2016 Akretion (Alexis de Lattre ) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { "name": "Switzerland - PAIN Credit Transfer", "summary": "Generate ISO 20022 credit transfert (SEPA and not SEPA)", - "version": "10.0.1.0.0", + "version": "11.0.1.0.0", "category": "Finance", "author": "Akretion,Camptocamp,Odoo Community Association (OCA)", "license": "AGPL-3", + "website": "https://github.com/OCA/l10n-switzerland", "depends": [ "l10n_ch_pain_base", + "l10n_ch_base_bank", "account_banking_sepa_credit_transfer", ], 'installable': True, diff --git a/l10n_ch_pain_credit_transfer/i18n/fr.po b/l10n_ch_pain_credit_transfer/i18n/fr.po index d65c56f36..5d093746e 100644 --- a/l10n_ch_pain_credit_transfer/i18n/fr.po +++ b/l10n_ch_pain_credit_transfer/i18n/fr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * l10n_ch_pain_credit_transfer -# +# # Translators: # leemannd , 2017 msgid "" @@ -12,10 +12,10 @@ msgstr "" "PO-Revision-Date: 2017-03-07 03:41+0000\n" "Last-Translator: leemannd , 2017\n" "Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: l10n_ch_pain_credit_transfer diff --git a/l10n_ch_pain_credit_transfer/i18n/l10n_ch_pain_credit_transfer.pot b/l10n_ch_pain_credit_transfer/i18n/l10n_ch_pain_credit_transfer.pot new file mode 100644 index 000000000..52a21ce6e --- /dev/null +++ b/l10n_ch_pain_credit_transfer/i18n/l10n_ch_pain_credit_transfer.pot @@ -0,0 +1,20 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_ch_pain_credit_transfer +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: l10n_ch_pain_credit_transfer +#: model:ir.model,name:l10n_ch_pain_credit_transfer.model_account_payment_method +msgid "Payment Methods" +msgstr "" + diff --git a/l10n_ch_pain_credit_transfer/i18n/nb_NO.po b/l10n_ch_pain_credit_transfer/i18n/nb_NO.po deleted file mode 100644 index f331b5e0a..000000000 --- a/l10n_ch_pain_credit_transfer/i18n/nb_NO.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * l10n_ch_pain_credit_transfer -# -# Translators: -# Imre Kristoffer Eilertsen , 2016 -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 9.0c\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-31 03:43+0000\n" -"PO-Revision-Date: 2016-07-31 03:43+0000\n" -"Last-Translator: Imre Kristoffer Eilertsen , 2016\n" -"Language-Team: Norwegian Bokmål (Norway) (https://www.transifex.com/oca/teams/23907/nb_NO/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Language: nb_NO\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#. module: l10n_ch_pain_credit_transfer -#: model:ir.model,name:l10n_ch_pain_credit_transfer.model_account_payment_method -msgid "Payment Methods" -msgstr "Betalingsmetoder" diff --git a/l10n_ch_pain_credit_transfer/models/__init__.py b/l10n_ch_pain_credit_transfer/models/__init__.py index 3d6351629..2f2249e15 100644 --- a/l10n_ch_pain_credit_transfer/models/__init__.py +++ b/l10n_ch_pain_credit_transfer/models/__init__.py @@ -1,3 +1 @@ -# -*- coding: utf-8 -*- - from . import account_payment_method diff --git a/l10n_ch_pain_credit_transfer/models/account_payment_method.py b/l10n_ch_pain_credit_transfer/models/account_payment_method.py index 9652f654f..915b62efb 100644 --- a/l10n_ch_pain_credit_transfer/models/account_payment_method.py +++ b/l10n_ch_pain_credit_transfer/models/account_payment_method.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # copyright 2016 Akretion (Alexis de Lattre ) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). @@ -20,4 +19,4 @@ def get_xsd_file_path(self): if painv == 'pain.001.001.03.ch.02': path = 'l10n_ch_pain_credit_transfer/data/%s.xsd' % painv return path - return super(AccountPaymentMethod, self).get_xsd_file_path() + return super().get_xsd_file_path() diff --git a/l10n_ch_pain_credit_transfer/tests/__init__.py b/l10n_ch_pain_credit_transfer/tests/__init__.py index f6a4dbf9a..0c2b82cc9 100644 --- a/l10n_ch_pain_credit_transfer/tests/__init__.py +++ b/l10n_ch_pain_credit_transfer/tests/__init__.py @@ -1,3 +1 @@ -# -*- coding: utf-8 -*- - from . import test_ch_sct diff --git a/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py b/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py index 064327bca..407198597 100644 --- a/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py +++ b/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2016 Akretion (Alexis de Lattre ) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). @@ -7,6 +6,7 @@ from odoo.tools import float_compare import time from lxml import etree +import base64 ch_iban = 'CH15 3881 5158 3845 3843 7' @@ -14,7 +14,7 @@ class TestSCT_CH(AccountingTestCase): def setUp(self): - super(TestSCT_CH, self).setUp() + super().setUp() Account = self.env['account.account'] Journal = self.env['account.journal'] PaymentMode = self.env['account.payment.mode'] @@ -91,11 +91,11 @@ def test_sct_ch_payment_type1(self): invoice1 = self.create_invoice( self.partner_agrolait.id, self.agrolait_partner_bank.id, self.chf_currency, 42.0, - 'bvr', '132000000000000000000000014') + 'isr', '132000000000000000000000014') invoice2 = self.create_invoice( self.partner_agrolait.id, self.agrolait_partner_bank.id, self.chf_currency, 12.0, - 'bvr', '132000000000004') + 'isr', '132000000000004') for inv in [invoice1, invoice2]: action = inv.create_account_payment_line() self.assertEquals(action['res_model'], 'account.payment.order') @@ -118,7 +118,7 @@ def test_sct_ch_payment_type1(self): self.assertEquals(float_compare( agrolait_pay_line1.amount_currency, 42, precision_digits=accpre), 0) - self.assertEquals(agrolait_pay_line1.communication_type, 'bvr') + self.assertEquals(agrolait_pay_line1.communication_type, 'isr') self.assertEquals( agrolait_pay_line1.communication, '132000000000000000000000014') @@ -130,7 +130,7 @@ def test_sct_ch_payment_type1(self): self.assertEquals(len(bank_lines), 2) for bank_line in bank_lines: self.assertEquals(bank_line.currency_id, self.chf_currency) - self.assertEquals(bank_line.communication_type, 'bvr') + self.assertEquals(bank_line.communication_type, 'isr') self.assertEquals( bank_line.communication in [ '132000000000000000000000014', @@ -143,7 +143,7 @@ def test_sct_ch_payment_type1(self): self.assertEquals(action['res_model'], 'ir.attachment') attachment = self.attachment_model.browse(action['res_id']) self.assertEquals(attachment.datas_fname[-4:], '.xml') - xml_file = attachment.datas.decode('base64') + xml_file = base64.b64decode(attachment.datas) xml_root = etree.fromstring(xml_file) # print "xml_file=", etree.tostring(xml_root, pretty_print=True) namespaces = xml_root.nsmap @@ -226,7 +226,7 @@ def test_sct_ch_payment_type3(self): self.assertEquals(action['res_model'], 'ir.attachment') attachment = self.attachment_model.browse(action['res_id']) self.assertEquals(attachment.datas_fname[-4:], '.xml') - xml_file = attachment.datas.decode('base64') + xml_file = base64.b64decode(attachment.datas) xml_root = etree.fromstring(xml_file) # print "xml_file=", etree.tostring(xml_root, pretty_print=True) namespaces = xml_root.nsmap From 7d46c1cbbdc5251de3e772d20a628f783c3f2be7 Mon Sep 17 00:00:00 2001 From: OCA git bot Date: Fri, 28 Sep 2018 17:53:42 +0200 Subject: [PATCH 10/23] [MIG] Make modules uninstallable --- l10n_ch_pain_credit_transfer/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/l10n_ch_pain_credit_transfer/__manifest__.py b/l10n_ch_pain_credit_transfer/__manifest__.py index 8f09b3886..67b7f5499 100644 --- a/l10n_ch_pain_credit_transfer/__manifest__.py +++ b/l10n_ch_pain_credit_transfer/__manifest__.py @@ -14,5 +14,5 @@ "l10n_ch_base_bank", "account_banking_sepa_credit_transfer", ], - 'installable': True, + 'installable': False, } From f9044528c676a6c4a4b0e7602e36a8853058d830 Mon Sep 17 00:00:00 2001 From: Iryna Vyshnevska Date: Tue, 26 Mar 2019 14:59:30 +0200 Subject: [PATCH 11/23] [IMP] cleanup pylint --- l10n_ch_pain_credit_transfer/i18n/de.po | 22 +++++++++++++++++++ .../tests/test_ch_sct.py | 6 ++--- 2 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 l10n_ch_pain_credit_transfer/i18n/de.po diff --git a/l10n_ch_pain_credit_transfer/i18n/de.po b/l10n_ch_pain_credit_transfer/i18n/de.po new file mode 100644 index 000000000..af2b265d4 --- /dev/null +++ b/l10n_ch_pain_credit_transfer/i18n/de.po @@ -0,0 +1,22 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_ch_pain_credit_transfer +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2018-11-23 21:12+0000\n" +"Last-Translator: chrispi-ch \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.2.2\n" + +#. module: l10n_ch_pain_credit_transfer +#: model:ir.model,name:l10n_ch_pain_credit_transfer.model_account_payment_method +msgid "Payment Methods" +msgstr "Zahlungsmethoden" diff --git a/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py b/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py index 407198597..d2559e518 100644 --- a/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py +++ b/l10n_ch_pain_credit_transfer/tests/test_ch_sct.py @@ -11,7 +11,7 @@ ch_iban = 'CH15 3881 5158 3845 3843 7' -class TestSCT_CH(AccountingTestCase): +class TestSCTCH(AccountingTestCase): def setUp(self): super().setUp() @@ -259,7 +259,7 @@ def test_sct_ch_payment_type3(self): def create_invoice( self, partner_id, partner_bank_id, currency, price_unit, - ref_type, ref, type='in_invoice'): + ref_type, ref, inv_type='in_invoice'): invoice = self.invoice_model.create({ 'partner_id': partner_id, 'reference_type': ref_type, @@ -267,7 +267,7 @@ def create_invoice( 'currency_id': currency.id, 'name': 'test', 'account_id': self.account_payable.id, - 'type': type, + 'type': inv_type, 'date_invoice': time.strftime('%Y-%m-%d'), 'payment_mode_id': self.payment_mode.id, 'partner_bank_id': partner_bank_id, From 28530b704322dc856790dfe0d543045f2c8d3449 Mon Sep 17 00:00:00 2001 From: Alexandre Saunier Date: Fri, 8 Feb 2019 17:34:39 +0100 Subject: [PATCH 12/23] [MIG] l10n_ch_pain_credit_transfer: Migration to odoo 12 --- l10n_ch_pain_credit_transfer/README.rst | 72 ++- l10n_ch_pain_credit_transfer/__manifest__.py | 4 +- .../readme/CONFIGURE.rst | 3 + .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 3 + l10n_ch_pain_credit_transfer/readme/USAGE.rst | 5 + .../static/description/index.html | 438 ++++++++++++++++++ 7 files changed, 505 insertions(+), 23 deletions(-) create mode 100644 l10n_ch_pain_credit_transfer/readme/CONFIGURE.rst create mode 100644 l10n_ch_pain_credit_transfer/readme/CONTRIBUTORS.rst create mode 100644 l10n_ch_pain_credit_transfer/readme/DESCRIPTION.rst create mode 100644 l10n_ch_pain_credit_transfer/readme/USAGE.rst create mode 100644 l10n_ch_pain_credit_transfer/static/description/index.html diff --git a/l10n_ch_pain_credit_transfer/README.rst b/l10n_ch_pain_credit_transfer/README.rst index aa21f5571..29d72bdf2 100644 --- a/l10n_ch_pain_credit_transfer/README.rst +++ b/l10n_ch_pain_credit_transfer/README.rst @@ -1,15 +1,39 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html - :alt: License: AGPL-3 - -======================================= -Switzerland - ISO 20022 credit transfer -======================================= +================================== +Switzerland - PAIN Credit Transfer +================================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fl10n--switzerland-lightgray.png?logo=github + :target: https://github.com/OCA/l10n-switzerland/tree/12.0/l10n_ch_pain_credit_transfer + :alt: OCA/l10n-switzerland +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/l10n-switzerland-12-0/l10n-switzerland-12-0-l10n_ch_pain_credit_transfer + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/125/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| This module adds support for *pain.001.001.03.ch.02* which is used for ISO 20022 credit transfers in Switzerland (SEPA or not SEPA). It implements the guidelines for `ISO 20022 credit transfers `_ published by SIX Interbank Clearing. +**Table of contents** + +.. contents:: + :local: + Configuration ============= @@ -26,39 +50,45 @@ On the payment order, you will see a new computed boolean field named This module doesn't modify the standard usage of the modules *account_payment_order* and *account_banking_sepa_credit_transfer*. -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/125/11.0 - Bug Tracker =========== -Bugs are tracked on `GitHub Issues -`_. In case of trouble, please -check there if your issue has already been reported. If you spotted it first, -help us smashing it by providing a detailed and welcomed feedback. +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. Credits ======= +Authors +~~~~~~~ + +* Akretion +* Camptocamp + Contributors ------------- +~~~~~~~~~~~~ * Alexis de Lattre * Denis Leemann * Mykhailo Panarin -Maintainer ----------- +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. .. image:: https://odoo-community.org/logo.png :alt: Odoo Community Association :target: https://odoo-community.org -This module is maintained by the OCA. - OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -To contribute to this module, please visit https://odoo-community.org. +This module is part of the `OCA/l10n-switzerland `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/l10n_ch_pain_credit_transfer/__manifest__.py b/l10n_ch_pain_credit_transfer/__manifest__.py index 67b7f5499..59071bc19 100644 --- a/l10n_ch_pain_credit_transfer/__manifest__.py +++ b/l10n_ch_pain_credit_transfer/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Switzerland - PAIN Credit Transfer", "summary": "Generate ISO 20022 credit transfert (SEPA and not SEPA)", - "version": "11.0.1.0.0", + "version": "12.0.1.0.0", "category": "Finance", "author": "Akretion,Camptocamp,Odoo Community Association (OCA)", "license": "AGPL-3", @@ -14,5 +14,5 @@ "l10n_ch_base_bank", "account_banking_sepa_credit_transfer", ], - 'installable': False, + 'installable': True, } diff --git a/l10n_ch_pain_credit_transfer/readme/CONFIGURE.rst b/l10n_ch_pain_credit_transfer/readme/CONFIGURE.rst new file mode 100644 index 000000000..a4e8413a8 --- /dev/null +++ b/l10n_ch_pain_credit_transfer/readme/CONFIGURE.rst @@ -0,0 +1,3 @@ +In the menu *Accounting > Configuration > Management > Payment Methods*, +select the payment method that has the code *sepa_credit_transfer* and +set the *PAIN Version* to *pain.001.001.03.ch.02 (credit transfer in Switzerland)*. diff --git a/l10n_ch_pain_credit_transfer/readme/CONTRIBUTORS.rst b/l10n_ch_pain_credit_transfer/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..4f35f64a5 --- /dev/null +++ b/l10n_ch_pain_credit_transfer/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* Alexis de Lattre +* Denis Leemann +* Mykhailo Panarin diff --git a/l10n_ch_pain_credit_transfer/readme/DESCRIPTION.rst b/l10n_ch_pain_credit_transfer/readme/DESCRIPTION.rst new file mode 100644 index 000000000..954f87fbb --- /dev/null +++ b/l10n_ch_pain_credit_transfer/readme/DESCRIPTION.rst @@ -0,0 +1,3 @@ +This module adds support for *pain.001.001.03.ch.02* which is used for ISO 20022 credit transfers in Switzerland (SEPA or not SEPA). + +It implements the guidelines for `ISO 20022 credit transfers `_ published by SIX Interbank Clearing. diff --git a/l10n_ch_pain_credit_transfer/readme/USAGE.rst b/l10n_ch_pain_credit_transfer/readme/USAGE.rst new file mode 100644 index 000000000..baa7a7412 --- /dev/null +++ b/l10n_ch_pain_credit_transfer/readme/USAGE.rst @@ -0,0 +1,5 @@ +On the payment order, you will see a new computed boolean field named +*ISR* which shows if the payment order is BVR or not. + +This module doesn't modify the standard usage of the modules +*account_payment_order* and *account_banking_sepa_credit_transfer*. diff --git a/l10n_ch_pain_credit_transfer/static/description/index.html b/l10n_ch_pain_credit_transfer/static/description/index.html new file mode 100644 index 000000000..a290d83ad --- /dev/null +++ b/l10n_ch_pain_credit_transfer/static/description/index.html @@ -0,0 +1,438 @@ + + + + + + +Switzerland - PAIN Credit Transfer + + + +
+

Switzerland - PAIN Credit Transfer

+ + +

Beta License: AGPL-3 OCA/l10n-switzerland Translate me on Weblate Try me on Runbot

+

This module adds support for pain.001.001.03.ch.02 which is used for ISO 20022 credit transfers in Switzerland (SEPA or not SEPA).

+

It implements the guidelines for ISO 20022 credit transfers published by SIX Interbank Clearing.

+

Table of contents

+ +
+

Configuration

+

In the menu Accounting > Configuration > Management > Payment Methods, +select the payment method that has the code sepa_credit_transfer and +set the PAIN Version to pain.001.001.03.ch.02 (credit transfer in Switzerland).

+
+
+

Usage

+

On the payment order, you will see a new computed boolean field named +ISR which shows if the payment order is BVR or not.

+

This module doesn’t modify the standard usage of the modules +account_payment_order and account_banking_sepa_credit_transfer.

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Akretion
  • +
  • Camptocamp
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/l10n-switzerland project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + From 9bda13625c3c8e2cdc718b238abd18667ed3d5f6 Mon Sep 17 00:00:00 2001 From: Alexandre Saunier Date: Mon, 11 Feb 2019 16:13:23 +0100 Subject: [PATCH 13/23] [MIG] l10n_ch_pain_base: Migration to odoo 12 --- l10n_ch_pain_credit_transfer/i18n/de.po | 37 +++++++++++++++++- l10n_ch_pain_credit_transfer/i18n/fr.po | 35 +++++++++++++++++ .../i18n/l10n_ch_pain_credit_transfer.pot | 37 +++++++++++++++++- .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 2 +- .../tests/test_ch_sct.py | 13 +++--- 6 files changed, 114 insertions(+), 10 deletions(-) create mode 100644 l10n_ch_pain_credit_transfer/static/description/icon.png diff --git a/l10n_ch_pain_credit_transfer/i18n/de.po b/l10n_ch_pain_credit_transfer/i18n/de.po index af2b265d4..3c8adf26e 100644 --- a/l10n_ch_pain_credit_transfer/i18n/de.po +++ b/l10n_ch_pain_credit_transfer/i18n/de.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * l10n_ch_pain_credit_transfer +# * l10n_ch_pain_credit_transfer # msgid "" msgstr "" @@ -16,7 +16,42 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.2.2\n" +#. module: l10n_ch_pain_credit_transfer +#: model:ir.model.fields,field_description:l10n_ch_pain_credit_transfer.field_account_payment_method__pain_version +msgid "PAIN Version" +msgstr "" + #. module: l10n_ch_pain_credit_transfer #: model:ir.model,name:l10n_ch_pain_credit_transfer.model_account_payment_method msgid "Payment Methods" msgstr "Zahlungsmethoden" + +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.001.02" +msgstr "" + +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.001.03 (recommended for credit transfer)" +msgstr "" + +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.001.03.ch.02 (credit transfer in Switzerland)" +msgstr "" + +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.001.04" +msgstr "" + +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.001.05" +msgstr "" + +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.003.03 (credit transfer in Germany)" +msgstr "" diff --git a/l10n_ch_pain_credit_transfer/i18n/fr.po b/l10n_ch_pain_credit_transfer/i18n/fr.po index 5d093746e..7db644ebc 100644 --- a/l10n_ch_pain_credit_transfer/i18n/fr.po +++ b/l10n_ch_pain_credit_transfer/i18n/fr.po @@ -18,7 +18,42 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +#. module: l10n_ch_pain_credit_transfer +#: model:ir.model.fields,field_description:l10n_ch_pain_credit_transfer.field_account_payment_method__pain_version +msgid "PAIN Version" +msgstr "" + #. module: l10n_ch_pain_credit_transfer #: model:ir.model,name:l10n_ch_pain_credit_transfer.model_account_payment_method msgid "Payment Methods" msgstr "Moyens de Paiement" + +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.001.02" +msgstr "" + +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.001.03 (recommended for credit transfer)" +msgstr "" + +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.001.03.ch.02 (credit transfer in Switzerland)" +msgstr "" + +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.001.04" +msgstr "" + +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.001.05" +msgstr "" + +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.003.03 (credit transfer in Germany)" +msgstr "" diff --git a/l10n_ch_pain_credit_transfer/i18n/l10n_ch_pain_credit_transfer.pot b/l10n_ch_pain_credit_transfer/i18n/l10n_ch_pain_credit_transfer.pot index 52a21ce6e..9897ceb67 100644 --- a/l10n_ch_pain_credit_transfer/i18n/l10n_ch_pain_credit_transfer.pot +++ b/l10n_ch_pain_credit_transfer/i18n/l10n_ch_pain_credit_transfer.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 11.0\n" +"Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" @@ -13,8 +13,43 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: l10n_ch_pain_credit_transfer +#: model:ir.model.fields,field_description:l10n_ch_pain_credit_transfer.field_account_payment_method__pain_version +msgid "PAIN Version" +msgstr "" + #. module: l10n_ch_pain_credit_transfer #: model:ir.model,name:l10n_ch_pain_credit_transfer.model_account_payment_method msgid "Payment Methods" msgstr "" +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.001.02" +msgstr "" + +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.001.03 (recommended for credit transfer)" +msgstr "" + +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.001.03.ch.02 (credit transfer in Switzerland)" +msgstr "" + +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.001.04" +msgstr "" + +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.001.05" +msgstr "" + +#. module: l10n_ch_pain_credit_transfer +#: selection:account.payment.method,pain_version:0 +msgid "pain.001.003.03 (credit transfer in Germany)" +msgstr "" + diff --git a/l10n_ch_pain_credit_transfer/static/description/icon.png b/l10n_ch_pain_credit_transfer/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/l10n_ch_pain_credit_transfer/static/description/index.html b/l10n_ch_pain_credit_transfer/static/description/index.html index a290d83ad..ea9caa1c0 100644 --- a/l10n_ch_pain_credit_transfer/static/description/index.html +++ b/l10n_ch_pain_credit_transfer/static/description/index.html @@ -3,7 +3,7 @@ - + Switzerland - PAIN Credit Transfer