mirror of
https://github.com/OCA/bank-payment.git
synced 2025-02-02 10:37:31 +02:00
119
account_banking_pain_base/README.rst
Normal file
119
account_banking_pain_base/README.rst
Normal file
@@ -0,0 +1,119 @@
|
||||
================================
|
||||
Account Banking PAIN Base Module
|
||||
================================
|
||||
|
||||
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! 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%2Fbank--payment-lightgray.png?logo=github
|
||||
:target: https://github.com/OCA/bank-payment/tree/12.0/account_banking_pain_base
|
||||
:alt: OCA/bank-payment
|
||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
||||
:target: https://translation.odoo-community.org/projects/bank-payment-12-0/bank-payment-12-0-account_banking_pain_base
|
||||
:alt: Translate me on Weblate
|
||||
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
|
||||
:target: https://runbot.odoo-community.org/runbot/173/12.0
|
||||
:alt: Try me on Runbot
|
||||
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||
|
||||
This module contains fields and functions that are used by the module for SEPA
|
||||
Credit Transfer (account_banking_sepa_credit_transfer) and SEPA Direct Debit
|
||||
(account_banking_sepa_direct_debit). This module doesn't provide any
|
||||
functionality by itself.
|
||||
|
||||
This module was started during the Akretion-Noviat code sprint of November
|
||||
21st 2013 in Epiais les Louvres (France).
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
This module depends on :
|
||||
|
||||
- account_payment_order
|
||||
|
||||
This module is part of the OCA/bank-payment suite.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
#. Go to Invoicing/Accounting > Configuration > Settings.
|
||||
#. On the fields "Initiating Party Issuer" and "Initiating Party Identifier",
|
||||
in the section *SEPA/PAIN*, you can fill the corresponding identifiers.
|
||||
|
||||
If your country requires several identifiers (like Spain), you must:
|
||||
|
||||
#. Go to *Invoicing/Accounting > Configuration > Settings*.
|
||||
#. On the section *SEPA/PAIN*, check the mark "Multiple identifiers".
|
||||
#. Now go to *Invoicing/Accounting > Configuration > Management > Payment Modes*.
|
||||
#. Create a payment mode for your specific bank.
|
||||
#. Fill the specific identifiers on the fields "Initiating Party Identifier"
|
||||
and "Initiating Party Issuer".
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
See 'readme' files of the OCA/bank-payment suite.
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/bank-payment/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 <https://github.com/OCA/bank-payment/issues/new?body=module:%20account_banking_pain_base%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Authors
|
||||
~~~~~~~
|
||||
|
||||
* Akretion
|
||||
* Noviat
|
||||
* Tecnativa
|
||||
|
||||
Contributors
|
||||
~~~~~~~~~~~~
|
||||
|
||||
* Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
* Pedro M. Baeza
|
||||
* Stéphane Bidoul <stephane.bidoul@acsone.eu>
|
||||
* Ignacio Ibeas - Acysos S.L.
|
||||
* Alexandre Fayolle
|
||||
* Raphaël Valyi
|
||||
* Sandy Carter
|
||||
* Stefan Rijnhart (Therp)
|
||||
* Antonio Espinosa <antonioea@antiun.com>
|
||||
|
||||
Maintainers
|
||||
~~~~~~~~~~~
|
||||
|
||||
This module is maintained by the OCA.
|
||||
|
||||
.. image:: https://odoo-community.org/logo.png
|
||||
:alt: Odoo Community Association
|
||||
:target: https://odoo-community.org
|
||||
|
||||
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/bank-payment <https://github.com/OCA/bank-payment/tree/12.0/account_banking_pain_base>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
||||
6
account_banking_pain_base/__init__.py
Normal file
6
account_banking_pain_base/__init__.py
Normal file
@@ -0,0 +1,6 @@
|
||||
# © 2013 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from . import models
|
||||
from .post_install import set_default_initiating_party
|
||||
27
account_banking_pain_base/__manifest__.py
Normal file
27
account_banking_pain_base/__manifest__.py
Normal file
@@ -0,0 +1,27 @@
|
||||
# Copyright 2013-2016 Akretion - Alexis de Lattre
|
||||
# Copyright 2014-2017 Tecnativa - Pedro M. Baeza
|
||||
# Copyright 2016 Tecnativa - Antonio Espinosa
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
{
|
||||
"name": "Account Banking PAIN Base Module",
|
||||
"summary": "Base module for PAIN file generation",
|
||||
"version": "13.0.1.0.0",
|
||||
"license": "AGPL-3",
|
||||
"author": "Akretion, " "Noviat, " "Tecnativa, " "Odoo Community Association (OCA)",
|
||||
"website": "https://github.com/OCA/bank-payment",
|
||||
"category": "Hidden",
|
||||
"depends": ["account_payment_order"],
|
||||
"external_dependencies": {"python": ["unidecode", "lxml"]},
|
||||
"data": [
|
||||
"security/security.xml",
|
||||
"views/account_payment_line.xml",
|
||||
"views/account_payment_order.xml",
|
||||
"views/bank_payment_line_view.xml",
|
||||
"views/account_payment_mode.xml",
|
||||
"views/res_config_settings.xml",
|
||||
"views/account_payment_method.xml",
|
||||
],
|
||||
"post_init_hook": "set_default_initiating_party",
|
||||
"installable": True,
|
||||
}
|
||||
982
account_banking_pain_base/i18n/account_banking_pain_base.pot
Normal file
982
account_banking_pain_base/i18n/account_banking_pain_base.pot
Normal file
@@ -0,0 +1,982 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_banking_pain_base
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 12.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: account_banking_pain_base
|
||||
#: sql_constraint:account.payment.method:0
|
||||
msgid "A payment method of the same type already exists with this code and PAIN version"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Account Management"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Advance Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Agricultural Transfer"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Air"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Alimony Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Anesthesia Services"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Annuity"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model,name:account_banking_pain_base.model_res_bank
|
||||
msgid "Bank"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model,name:account_banking_pain_base.model_bank_payment_line
|
||||
msgid "Bank Payment Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_account_payment_order__batch_booking
|
||||
msgid "Batch Booking"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
msgid "Bonus Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Bonus Payment."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.order,charge_bearer:0
|
||||
msgid "Borne by Creditor"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.order,charge_bearer:0
|
||||
msgid "Borne by Debtor"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Bus"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Business Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Cable TV Bill"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Cancellation Fee"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: code:addons/account_banking_pain_base/models/account_payment_order.py:101
|
||||
#, python-format
|
||||
msgid "Cannot compute the field '{field_name}'."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Car Loan Principal Repayment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
msgid "Card Bulk Clearing"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Cash Management Transfer"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_account_payment_line__category_purpose
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_bank_payment_line__category_purpose
|
||||
msgid "Category Purpose"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_account_payment_order__charge_bearer
|
||||
msgid "Charge Bearer"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Charity Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Child Benefit"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Collection Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Commercial Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Commission"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Commodity Transfer"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_account_payment_line__communication
|
||||
msgid "Communication"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_account_payment_line__communication_type
|
||||
msgid "Communication Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model,name:account_banking_pain_base.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model,name:account_banking_pain_base.model_res_config_settings
|
||||
msgid "Config Settings"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Consumer Third Party Consolidated Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Convalescent Care Facility"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_account_payment_method__convert_to_ascii
|
||||
msgid "Convert to ASCII"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Copyright"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Costs"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
msgid "Credit Card Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Credit Card Payment "
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: code:addons/account_banking_pain_base/models/account_payment_order.py:451
|
||||
#, python-format
|
||||
msgid "Creditor name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: code:addons/account_banking_pain_base/models/account_payment_order.py:107
|
||||
#, python-format
|
||||
msgid "Data for evaluation:\n"
|
||||
" context: {eval_ctx}\n"
|
||||
" field path: {field_value}"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Debit Card Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
msgid "Debit Card Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: code:addons/account_banking_pain_base/models/account_payment_order.py:453
|
||||
#, python-format
|
||||
msgid "Debtor name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
msgid "Deliver Against Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Dental Services"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Derivatives"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Dividend"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Durable Medicale Equipment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Electricity Bill"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_res_config_settings__group_pain_multiple_identifier
|
||||
msgid "Enable this option if your country requires several SEPA/PAIN identifiers like in Spain."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Energies"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Estate Tax"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
msgid "Fee Collection"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Ferry"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.order,charge_bearer:0
|
||||
msgid "Following Service Level"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_account_payment_order__charge_bearer
|
||||
msgid "Following service level : transaction charges are to be applied following the rules agreed in the service level and/or scheme (SEPA Core messages must use this). Shared : transaction charges on the debtor side are to be borne by the debtor, transaction charges on the creditor side are to be borne by the creditor. Borne by creditor : all transaction charges are to be borne by the creditor. Borne by debtor : all transaction charges are to be borne by the debtor."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Foreign Exchange"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,communication_type:0
|
||||
msgid "Free"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Gas Bill"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Government Insurance"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Government Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Health Insurance"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Hedging"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,priority:0
|
||||
msgid "High"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Home Health Care"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Hospital Care"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Housing Loan Repayment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Housing Tax"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,communication_type:0
|
||||
msgid "ISO"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_account_payment_method__convert_to_ascii
|
||||
msgid "If active, Odoo will convert each accented character to the corresponding unaccented character, so that only ASCII characters are used in the generated PAIN file."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_account_payment_line__category_purpose
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_account_payment_line__purpose
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_bank_payment_line__category_purpose
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_bank_payment_line__purpose
|
||||
msgid "If neither your bank nor your local regulations oblige you to set the category purpose, leave the field empty."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_account_payment_order__batch_booking
|
||||
msgid "If true, the bank statement will display only one debit line for all the wire transfers of the SEPA XML file ; if false, the bank statement will display one debit line per wire transfer of the SEPA XML file."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Income Tax"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_account_payment_mode__initiating_party_identifier
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_res_company__initiating_party_identifier
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_res_config_settings__initiating_party_identifier
|
||||
msgid "Initiating Party Identifier"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_account_payment_mode__initiating_party_issuer
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_res_company__initiating_party_issuer
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_res_config_settings__initiating_party_issuer
|
||||
msgid "Initiating Party Issuer"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_account_payment_mode__initiating_party_scheme
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_res_company__initiating_party_scheme
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_res_config_settings__initiating_party_scheme
|
||||
msgid "Initiating Party Scheme"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Installment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Instalment Hire Purchase Agreement"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,local_instrument:0
|
||||
msgid "Instant Transfer"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Insurance Premium"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Interest"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Intermediate Care Facility"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Intra Company Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
msgid "Intra-Company Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
msgid "Irrevocable Credit Card Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
msgid "Irrevocable Debit Card Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_account_payment_line__communication
|
||||
msgid "Label of the payment that will be seen by the destinee"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Labor Insurance"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "License Fee"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Life Insurance"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Liquidity Management"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Loan"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Loan Repayment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_account_payment_line__local_instrument
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_bank_payment_line__local_instrument
|
||||
msgid "Local Instrument"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Long Term Care Facility"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Medical Services"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: code:addons/account_banking_pain_base/models/account_payment_order.py:337
|
||||
#, python-format
|
||||
msgid "Missing 'Initiating Party Issuer' and/or 'Initiating Party Identifier' for the company '%s'. Both fields must have a value."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Multiple Service Types"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_res_config_settings__group_pain_multiple_identifier
|
||||
msgid "Multiple identifiers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Netting"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Network Charge"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Network Communication"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: code:addons/account_banking_pain_base/models/account_payment_method.py:22
|
||||
#, python-format
|
||||
msgid "No XSD file path found for payment method '%s'"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,priority:0
|
||||
msgid "Normal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Not Otherwise Specified"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Opening Fee"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Other"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
msgid "Other Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Other Telecom Related Bill"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_account_payment_method__pain_version
|
||||
msgid "PAIN Version"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: code:addons/account_banking_pain_base/models/account_payment_order.py:449
|
||||
#, python-format
|
||||
msgid "Partner name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: code:addons/account_banking_pain_base/models/account_payment_order.py:146
|
||||
#, python-format
|
||||
msgid "Partner's bank account is '%s'."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: code:addons/account_banking_pain_base/models/account_payment_order.py:142
|
||||
#, python-format
|
||||
msgid "Payment Line has reference '%s'."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model,name:account_banking_pain_base.model_account_payment_line
|
||||
msgid "Payment Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model,name:account_banking_pain_base.model_account_payment_method
|
||||
msgid "Payment Methods"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model,name:account_banking_pain_base.model_account_payment_mode
|
||||
msgid "Payment Modes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model,name:account_banking_pain_base.model_account_payment_order
|
||||
msgid "Payment Order"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Payment Terms"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Pension Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Preauthorized debit"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Precious Metal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Price Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_account_payment_line__priority
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_bank_payment_line__priority
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Property Insurance"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Purchase Sale Of Goods"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Purchase Sale Of Services"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_account_payment_line__purpose
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_bank_payment_line__purpose
|
||||
msgid "Purpose"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Railway"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Receipt Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
msgid "Receive Against Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Recurring Installment Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Rent"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Royalties"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,field_description:account_banking_pain_base.field_account_payment_order__sepa
|
||||
msgid "SEPA Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model_terms:ir.ui.view,arch_db:account_banking_pain_base.view_account_config_settings
|
||||
msgid "SEPA/PAIN"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:res.groups,name:account_banking_pain_base.group_pain_multiple_identifier
|
||||
msgid "SEPA/PAIN Identifiers on Payment Modes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Salary Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Savings"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Securities"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.order,charge_bearer:0
|
||||
msgid "Shared"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Social Security Benefit"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Study"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Subscription"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Supplier Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Tax Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Telephone Bill"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: code:addons/account_banking_pain_base/models/account_payment_order.py:125
|
||||
#, python-format
|
||||
msgid "The '%s' is empty or 0. It should have a non-null value."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: code:addons/account_banking_pain_base/models/res_bank.py:29
|
||||
#, python-format
|
||||
msgid "The following Bank Identifier Codes (BIC) do not respect the SEPA pattern:\n"
|
||||
"{bic_list}\n"
|
||||
"\n"
|
||||
"SEPA pattern: {sepa_pattern}"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: code:addons/account_banking_pain_base/models/account_payment_order.py:165
|
||||
#, python-format
|
||||
msgid "The generated XML file is not valid against the official XML Schema Definition. The generated XML file and the full error have been written in the server logs. Here is the error, which may give you an idea on the cause of the problem : %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: code:addons/account_banking_pain_base/models/account_payment_order.py:120
|
||||
#, python-format
|
||||
msgid "The type of the field '%s' is %s. It should be a string or unicode."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_account_payment_line__priority
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_bank_payment_line__priority
|
||||
msgid "This field will be used as 'Instruction Priority' in the generated PAIN file."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_res_company__initiating_party_identifier
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_res_config_settings__initiating_party_identifier
|
||||
msgid "This will be used as the 'Initiating Party Identifier' in the PAIN files generated by Odoo."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_account_payment_mode__initiating_party_identifier
|
||||
msgid "This will be used as the 'Initiating Party Identifier' in the PAIN files generated by Odoo. If not defined, Initiating Party Identifier from company will be used.\n"
|
||||
"Common format (13): \n"
|
||||
"- Country code (2, optional)\n"
|
||||
"- Company idenfier (N, VAT)\n"
|
||||
"- Service suffix (N, issued by bank)"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_res_company__initiating_party_issuer
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_res_config_settings__initiating_party_issuer
|
||||
msgid "This will be used as the 'Initiating Party Issuer' in the PAIN files generated by Odoo."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_account_payment_mode__initiating_party_issuer
|
||||
msgid "This will be used as the 'Initiating Party Issuer' in the PAIN files generated by Odoo. If not defined, Initiating Party Issuer from company will be used.\n"
|
||||
"Common format (13): \n"
|
||||
"- Country code (2, optional)\n"
|
||||
"- Company idenfier (N, VAT)\n"
|
||||
"- Service suffix (N, issued by bank)"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_res_company__initiating_party_scheme
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_res_config_settings__initiating_party_scheme
|
||||
msgid "This will be used as the 'Initiating Party Scheme Name' in the PAIN files generated by Odoo."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: model:ir.model.fields,help:account_banking_pain_base.field_account_payment_mode__initiating_party_scheme
|
||||
msgid "This will be used as the 'Initiating Party Scheme Name' in the PAIN files generated by Odoo. This value is determined by the financial institution that will process the file. If not defined, no scheme will be used.\n"
|
||||
""
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
msgid "Trade"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Trade Services"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
msgid "Trade Settlement Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Treasury Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Trust Fund"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Unemployment Disability Benefit"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
msgid "VAT Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Value Added Tax Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Vision Care"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,purpose:0
|
||||
msgid "Water Bill"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
msgid "WithHolding"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.line,category_purpose:0
|
||||
msgid "ePayment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.method,pain_version:0
|
||||
msgid "pain.001.001.02"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.method,pain_version:0
|
||||
msgid "pain.001.001.03 (recommended for credit transfer)"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.method,pain_version:0
|
||||
msgid "pain.001.001.04"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.method,pain_version:0
|
||||
msgid "pain.001.001.05"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.method,pain_version:0
|
||||
msgid "pain.001.003.03 (credit transfer in Germany)"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.method,pain_version:0
|
||||
msgid "pain.008.001.02 (recommended for direct debit)"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.method,pain_version:0
|
||||
msgid "pain.008.001.03"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.method,pain_version:0
|
||||
msgid "pain.008.001.04"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_pain_base
|
||||
#: selection:account.payment.method,pain_version:0
|
||||
msgid "pain.008.003.02 (direct debit in Germany)"
|
||||
msgstr ""
|
||||
|
||||
1109
account_banking_pain_base/i18n/de.po
Normal file
1109
account_banking_pain_base/i18n/de.po
Normal file
File diff suppressed because it is too large
Load Diff
1089
account_banking_pain_base/i18n/es.po
Normal file
1089
account_banking_pain_base/i18n/es.po
Normal file
File diff suppressed because it is too large
Load Diff
1051
account_banking_pain_base/i18n/fr.po
Normal file
1051
account_banking_pain_base/i18n/fr.po
Normal file
File diff suppressed because it is too large
Load Diff
1042
account_banking_pain_base/i18n/hr.po
Normal file
1042
account_banking_pain_base/i18n/hr.po
Normal file
File diff suppressed because it is too large
Load Diff
1082
account_banking_pain_base/i18n/it.po
Normal file
1082
account_banking_pain_base/i18n/it.po
Normal file
File diff suppressed because it is too large
Load Diff
1040
account_banking_pain_base/i18n/nb_NO.po
Normal file
1040
account_banking_pain_base/i18n/nb_NO.po
Normal file
File diff suppressed because it is too large
Load Diff
1080
account_banking_pain_base/i18n/nl.po
Normal file
1080
account_banking_pain_base/i18n/nl.po
Normal file
File diff suppressed because it is too large
Load Diff
1042
account_banking_pain_base/i18n/pt_BR.po
Normal file
1042
account_banking_pain_base/i18n/pt_BR.po
Normal file
File diff suppressed because it is too large
Load Diff
1067
account_banking_pain_base/i18n/sl.po
Normal file
1067
account_banking_pain_base/i18n/sl.po
Normal file
File diff suppressed because it is too large
Load Diff
8
account_banking_pain_base/models/__init__.py
Normal file
8
account_banking_pain_base/models/__init__.py
Normal file
@@ -0,0 +1,8 @@
|
||||
from . import account_payment_line
|
||||
from . import account_payment_order
|
||||
from . import bank_payment_line
|
||||
from . import account_payment_mode
|
||||
from . import res_company
|
||||
from . import res_config_settings
|
||||
from . import account_payment_method
|
||||
from . import res_bank
|
||||
172
account_banking_pain_base/models/account_payment_line.py
Normal file
172
account_banking_pain_base/models/account_payment_line.py
Normal file
@@ -0,0 +1,172 @@
|
||||
# © 2013-2016 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class AccountPaymentLine(models.Model):
|
||||
_inherit = "account.payment.line"
|
||||
|
||||
priority = fields.Selection(
|
||||
[("NORM", "Normal"), ("HIGH", "High")],
|
||||
string="Priority",
|
||||
default="NORM",
|
||||
help="This field will be used as 'Instruction Priority' in "
|
||||
"the generated PAIN file.",
|
||||
)
|
||||
# local_instrument is used for instant credit transfers which
|
||||
# will begin on November 2017, cf account_banking_sepa_credit_transfer
|
||||
# It is also used in some countries such as switzerland,
|
||||
# cf l10n_ch_pain_base that adds some entries in the selection field
|
||||
local_instrument = fields.Selection([], string="Local Instrument")
|
||||
category_purpose = fields.Selection(
|
||||
[
|
||||
# Full category purpose list found on:
|
||||
# https://www.iso20022.org/external_code_list.page
|
||||
# Document "External Code Sets spreadsheet" version Feb 8th 2017
|
||||
("BONU", "Bonus Payment"),
|
||||
("CASH", "Cash Management Transfer"),
|
||||
("CBLK", "Card Bulk Clearing"),
|
||||
("CCRD", "Credit Card Payment"),
|
||||
("CORT", "Trade Settlement Payment"),
|
||||
("DCRD", "Debit Card Payment"),
|
||||
("DIVI", "Dividend"),
|
||||
("DVPM", "Deliver Against Payment"),
|
||||
("EPAY", "ePayment"),
|
||||
("FCOL", "Fee Collection"),
|
||||
("GOVT", "Government Payment"),
|
||||
("HEDG", "Hedging"),
|
||||
("ICCP", "Irrevocable Credit Card Payment"),
|
||||
("IDCP", "Irrevocable Debit Card Payment"),
|
||||
("INTC", "Intra-Company Payment"),
|
||||
("INTE", "Interest"),
|
||||
("LOAN", "Loan"),
|
||||
("OTHR", "Other Payment"),
|
||||
("PENS", "Pension Payment"),
|
||||
("RVPM", "Receive Against Payment"),
|
||||
("SALA", "Salary Payment"),
|
||||
("SECU", "Securities"),
|
||||
("SSBE", "Social Security Benefit"),
|
||||
("SUPP", "Supplier Payment"),
|
||||
("TAXS", "Tax Payment"),
|
||||
("TRAD", "Trade"),
|
||||
("TREA", "Treasury Payment"),
|
||||
("VATX", "VAT Payment"),
|
||||
("WHLD", "WithHolding"),
|
||||
],
|
||||
string="Category Purpose",
|
||||
help="If neither your bank nor your local regulations oblige you to "
|
||||
"set the category purpose, leave the field empty.",
|
||||
)
|
||||
purpose = fields.Selection(
|
||||
# Full category purpose list found on:
|
||||
# https://www.iso20022.org/external_code_list.page
|
||||
# Document "External Code Sets spreadsheet" version 31 August, 2018
|
||||
selection=[
|
||||
("ACCT", "Account Management"),
|
||||
("CASH", "Cash Management Transfer"),
|
||||
("COLL", "Collection Payment"),
|
||||
("INTC", "Intra Company Payment"),
|
||||
("LIMA", "Liquidity Management"),
|
||||
("NETT", "Netting"),
|
||||
("AGRT", "Agricultural Transfer"),
|
||||
("BEXP", "Business Expenses"),
|
||||
("COMC", "Commercial Payment"),
|
||||
("CPYR", "Copyright"),
|
||||
("GDDS", "Purchase Sale Of Goods"),
|
||||
("LICF", "License Fee"),
|
||||
("ROYA", "Royalties"),
|
||||
("SCVE", "Purchase Sale Of Services"),
|
||||
("SUBS", "Subscription"),
|
||||
("SUPP", "Supplier Payment"),
|
||||
("TRAD", "Trade Services"),
|
||||
("CHAR", "Charity Payment"),
|
||||
("COMT", "Consumer Third Party Consolidated Payment"),
|
||||
("CLPR", "Car Loan Principal Repayment"),
|
||||
("GOVI", "Government Insurance"),
|
||||
("HLRP", "Housing Loan Repayment"),
|
||||
("INSU", "Insurance Premium"),
|
||||
("INTE", "Interest"),
|
||||
("LBRI", "Labor Insurance"),
|
||||
("LIFI", "Life Insurance"),
|
||||
("LOAN", "Loan"),
|
||||
("LOAR", "Loan Repayment"),
|
||||
("PPTI", "Property Insurance"),
|
||||
("RINP", "Recurring Installment Payment"),
|
||||
("TRFD", "Trust Fund"),
|
||||
("ADVA", "Advance Payment"),
|
||||
("CCRD", "Credit Card Payment "),
|
||||
("CFEE", "Cancellation Fee"),
|
||||
("COST", "Costs"),
|
||||
("DCRD", "Debit Card Payment"),
|
||||
("GOVT", "Government Payment"),
|
||||
("IHRP", "Instalment Hire Purchase Agreement"),
|
||||
("INSM", "Installment"),
|
||||
("MSVC", "Multiple Service Types"),
|
||||
("NOWS", "Not Otherwise Specified"),
|
||||
("OFEE", "Opening Fee"),
|
||||
("OTHR", "Other"),
|
||||
("PADD", "Preauthorized debit"),
|
||||
("PTSP", "Payment Terms"),
|
||||
("RCPT", "Receipt Payment"),
|
||||
("RENT", "Rent"),
|
||||
("STDY", "Study"),
|
||||
("ANNI", "Annuity"),
|
||||
("CMDT", "Commodity Transfer"),
|
||||
("DERI", "Derivatives"),
|
||||
("DIVD", "Dividend"),
|
||||
("FREX", "Foreign Exchange"),
|
||||
("HEDG", "Hedging"),
|
||||
("PRME", "Precious Metal"),
|
||||
("SAVG", "Savings"),
|
||||
("SECU", "Securities"),
|
||||
("TREA", "Treasury Payment"),
|
||||
("ANTS", "Anesthesia Services"),
|
||||
("CVCF", "Convalescent Care Facility"),
|
||||
("DMEQ", "Durable Medicale Equipment"),
|
||||
("DNTS", "Dental Services"),
|
||||
("HLTC", "Home Health Care"),
|
||||
("HLTI", "Health Insurance"),
|
||||
("HSPC", "Hospital Care"),
|
||||
("ICRF", "Intermediate Care Facility"),
|
||||
("LTCF", "Long Term Care Facility"),
|
||||
("MDCS", "Medical Services"),
|
||||
("VIEW", "Vision Care"),
|
||||
("ALMY", "Alimony Payment"),
|
||||
("BECH", "Child Benefit"),
|
||||
("BENE", "Unemployment Disability Benefit"),
|
||||
("BONU", "Bonus Payment."),
|
||||
("COMM", "Commission"),
|
||||
("PENS", "Pension Payment"),
|
||||
("PRCP", "Price Payment"),
|
||||
("SALA", "Salary Payment"),
|
||||
("SSBE", "Social Security Benefit"),
|
||||
("ESTX", "Estate Tax"),
|
||||
("HSTX", "Housing Tax"),
|
||||
("INTX", "Income Tax"),
|
||||
("TAXS", "Tax Payment"),
|
||||
("VATX", "Value Added Tax Payment"),
|
||||
("AIRB", "Air"),
|
||||
("BUSB", "Bus"),
|
||||
("FERB", "Ferry"),
|
||||
("RLWY", "Railway"),
|
||||
("CBTV", "Cable TV Bill"),
|
||||
("ELEC", "Electricity Bill"),
|
||||
("ENRG", "Energies"),
|
||||
("GASB", "Gas Bill"),
|
||||
("NWCH", "Network Charge"),
|
||||
("NWCM", "Network Communication"),
|
||||
("OTLC", "Other Telecom Related Bill"),
|
||||
("PHON", "Telephone Bill"),
|
||||
("WTER", "Water Bill"),
|
||||
],
|
||||
help="If neither your bank nor your local regulations oblige you to "
|
||||
"set the category purpose, leave the field empty.",
|
||||
)
|
||||
# PAIN allows 140 characters
|
||||
communication = fields.Char(size=140)
|
||||
# The field struct_communication_type has been dropped in v9
|
||||
# We now use communication_type ; you should add an option
|
||||
# in communication_type with selection_add=[]
|
||||
communication_type = fields.Selection(selection_add=[("ISO", "ISO")])
|
||||
33
account_banking_pain_base/models/account_payment_method.py
Normal file
33
account_banking_pain_base/models/account_payment_method.py
Normal file
@@ -0,0 +1,33 @@
|
||||
# © 2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import _, fields, models
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
|
||||
class AccountPaymentMethod(models.Model):
|
||||
_inherit = "account.payment.method"
|
||||
|
||||
pain_version = fields.Selection([], string="PAIN Version")
|
||||
convert_to_ascii = fields.Boolean(
|
||||
string="Convert to ASCII",
|
||||
default=True,
|
||||
help="If active, Odoo will convert each accented character to "
|
||||
"the corresponding unaccented character, so that only ASCII "
|
||||
"characters are used in the generated PAIN file.",
|
||||
)
|
||||
|
||||
def get_xsd_file_path(self):
|
||||
"""This method is designed to be inherited in the SEPA modules"""
|
||||
self.ensure_one()
|
||||
raise UserError(_("No XSD file path found for payment method '%s'") % self.name)
|
||||
|
||||
_sql_constraints = [
|
||||
(
|
||||
# Extending this constraint from account_payment_mode
|
||||
"code_payment_type_unique",
|
||||
"unique(code, payment_type, pain_version)",
|
||||
"A payment method of the same type already exists with this code"
|
||||
" and PAIN version",
|
||||
)
|
||||
]
|
||||
41
account_banking_pain_base/models/account_payment_mode.py
Normal file
41
account_banking_pain_base/models/account_payment_mode.py
Normal file
@@ -0,0 +1,41 @@
|
||||
# © 2013-2016 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza
|
||||
# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class AccountPaymentMode(models.Model):
|
||||
_inherit = "account.payment.mode"
|
||||
|
||||
initiating_party_issuer = fields.Char(
|
||||
string="Initiating Party Issuer",
|
||||
size=35,
|
||||
help="This will be used as the 'Initiating Party Issuer' in the "
|
||||
"PAIN files generated by Odoo. If not defined, Initiating Party "
|
||||
"Issuer from company will be used.\n"
|
||||
"Common format (13): \n"
|
||||
"- Country code (2, optional)\n"
|
||||
"- Company idenfier (N, VAT)\n"
|
||||
"- Service suffix (N, issued by bank)",
|
||||
)
|
||||
initiating_party_identifier = fields.Char(
|
||||
string="Initiating Party Identifier",
|
||||
size=35,
|
||||
help="This will be used as the 'Initiating Party Identifier' in "
|
||||
"the PAIN files generated by Odoo. If not defined, Initiating Party "
|
||||
"Identifier from company will be used.\n"
|
||||
"Common format (13): \n"
|
||||
"- Country code (2, optional)\n"
|
||||
"- Company idenfier (N, VAT)\n"
|
||||
"- Service suffix (N, issued by bank)",
|
||||
)
|
||||
initiating_party_scheme = fields.Char(
|
||||
string="Initiating Party Scheme",
|
||||
size=35,
|
||||
help="This will be used as the 'Initiating Party Scheme Name' in "
|
||||
"the PAIN files generated by Odoo. This value is determined by the "
|
||||
"financial institution that will process the file. If not defined, "
|
||||
"no scheme will be used.\n",
|
||||
)
|
||||
625
account_banking_pain_base/models/account_payment_order.py
Normal file
625
account_banking_pain_base/models/account_payment_order.py
Normal file
@@ -0,0 +1,625 @@
|
||||
# © 2013-2016 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza
|
||||
# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
import logging
|
||||
from datetime import datetime
|
||||
|
||||
from lxml import etree
|
||||
|
||||
from odoo import _, api, fields, models, tools
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.tools.safe_eval import safe_eval
|
||||
|
||||
try:
|
||||
from unidecode import unidecode
|
||||
except ImportError:
|
||||
unidecode = None
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class AccountPaymentOrder(models.Model):
|
||||
_inherit = "account.payment.order"
|
||||
|
||||
sepa = fields.Boolean(compute="_compute_sepa", readonly=True, string="SEPA Payment")
|
||||
charge_bearer = fields.Selection(
|
||||
[
|
||||
("SLEV", "Following Service Level"),
|
||||
("SHAR", "Shared"),
|
||||
("CRED", "Borne by Creditor"),
|
||||
("DEBT", "Borne by Debtor"),
|
||||
],
|
||||
string="Charge Bearer",
|
||||
default="SLEV",
|
||||
readonly=True,
|
||||
states={"draft": [("readonly", False)], "open": [("readonly", False)]},
|
||||
track_visibility="onchange",
|
||||
help="Following service level : transaction charges are to be "
|
||||
"applied following the rules agreed in the service level "
|
||||
"and/or scheme (SEPA Core messages must use this). Shared : "
|
||||
"transaction charges on the debtor side are to be borne by "
|
||||
"the debtor, transaction charges on the creditor side are to "
|
||||
"be borne by the creditor. Borne by creditor : all "
|
||||
"transaction charges are to be borne by the creditor. Borne "
|
||||
"by debtor : all transaction charges are to be borne by the "
|
||||
"debtor.",
|
||||
)
|
||||
batch_booking = fields.Boolean(
|
||||
string="Batch Booking",
|
||||
readonly=True,
|
||||
states={"draft": [("readonly", False)], "open": [("readonly", False)]},
|
||||
track_visibility="onchange",
|
||||
help="If true, the bank statement will display only one debit "
|
||||
"line for all the wire transfers of the SEPA XML file ; if "
|
||||
"false, the bank statement will display one debit line per wire "
|
||||
"transfer of the SEPA XML file.",
|
||||
)
|
||||
|
||||
@api.depends(
|
||||
"company_partner_bank_id.acc_type",
|
||||
"payment_line_ids.currency_id",
|
||||
"payment_line_ids.partner_bank_id.acc_type",
|
||||
)
|
||||
def _compute_sepa(self):
|
||||
eur = self.env.ref("base.EUR")
|
||||
for order in self:
|
||||
sepa = True
|
||||
if order.company_partner_bank_id.acc_type != "iban":
|
||||
sepa = False
|
||||
for pline in order.payment_line_ids:
|
||||
if pline.currency_id != eur:
|
||||
sepa = False
|
||||
break
|
||||
if pline.partner_bank_id.acc_type != "iban":
|
||||
sepa = False
|
||||
break
|
||||
sepa = order.compute_sepa_final_hook(sepa)
|
||||
self.sepa = sepa
|
||||
|
||||
def compute_sepa_final_hook(self, sepa):
|
||||
self.ensure_one()
|
||||
return sepa
|
||||
|
||||
@api.model
|
||||
def _prepare_field(
|
||||
self, field_name, field_value, eval_ctx, max_size=0, gen_args=None
|
||||
):
|
||||
"""This function is designed to be inherited !"""
|
||||
if gen_args is None:
|
||||
gen_args = {}
|
||||
assert isinstance(eval_ctx, dict), "eval_ctx must contain a dict"
|
||||
try:
|
||||
value = safe_eval(field_value, eval_ctx)
|
||||
# SEPA uses XML ; XML = UTF-8 ; UTF-8 = support for all characters
|
||||
# But we are dealing with banks...
|
||||
# and many banks don't want non-ASCCI characters !
|
||||
# cf section 1.4 "Character set" of the SEPA Credit Transfer
|
||||
# Scheme Customer-to-bank guidelines
|
||||
if gen_args.get("convert_to_ascii"):
|
||||
value = unidecode(value)
|
||||
unallowed_ascii_chars = [
|
||||
'"',
|
||||
"#",
|
||||
"$",
|
||||
"%",
|
||||
"&",
|
||||
"*",
|
||||
";",
|
||||
"<",
|
||||
">",
|
||||
"=",
|
||||
"@",
|
||||
"[",
|
||||
"]",
|
||||
"^",
|
||||
"_",
|
||||
"`",
|
||||
"{",
|
||||
"}",
|
||||
"|",
|
||||
"~",
|
||||
"\\",
|
||||
"!",
|
||||
]
|
||||
for unallowed_ascii_char in unallowed_ascii_chars:
|
||||
value = value.replace(unallowed_ascii_char, "-")
|
||||
except Exception:
|
||||
error_msg_prefix = _("Cannot compute the field '{field_name}'.").format(
|
||||
field_name=field_name
|
||||
)
|
||||
|
||||
error_msg_details_list = self.except_messages_prepare_field(
|
||||
eval_ctx, field_name
|
||||
)
|
||||
error_msg_data = _(
|
||||
"Data for evaluation:\n"
|
||||
"\tcontext: {eval_ctx}\n"
|
||||
"\tfield path: {field_value}"
|
||||
).format(eval_ctx=eval_ctx, field_value=field_value)
|
||||
raise UserError(
|
||||
"\n".join(
|
||||
[error_msg_prefix] + error_msg_details_list + [error_msg_data]
|
||||
)
|
||||
)
|
||||
|
||||
if not isinstance(value, str):
|
||||
raise UserError(
|
||||
_(
|
||||
"The type of the field '%s' is %s. It should be a string "
|
||||
"or unicode."
|
||||
)
|
||||
% (field_name, type(value))
|
||||
)
|
||||
if not value:
|
||||
raise UserError(
|
||||
_("The '%s' is empty or 0. It should have a non-null value.")
|
||||
% field_name
|
||||
)
|
||||
if max_size and len(value) > max_size:
|
||||
value = value[0:max_size]
|
||||
return value
|
||||
|
||||
@api.model
|
||||
def except_messages_prepare_field(self, eval_ctx, field_name):
|
||||
"""
|
||||
Inherit this method to provide more detailed error messages for
|
||||
exceptions to be raised while evaluating `field_name` using `eval_ctx`.
|
||||
:return: List containing the error messages.
|
||||
"""
|
||||
error_messages = list()
|
||||
line = eval_ctx.get("line")
|
||||
if line:
|
||||
error_messages.append(_("Payment Line has reference '%s'.") % line.name)
|
||||
partner_bank = eval_ctx.get("partner_bank")
|
||||
if partner_bank:
|
||||
error_messages.append(
|
||||
_("Partner's bank account is '%s'.") % partner_bank.display_name
|
||||
)
|
||||
return error_messages
|
||||
|
||||
@api.model
|
||||
def _validate_xml(self, xml_string, gen_args):
|
||||
xsd_etree_obj = etree.parse(tools.file_open(gen_args["pain_xsd_file"]))
|
||||
official_pain_schema = etree.XMLSchema(xsd_etree_obj)
|
||||
|
||||
try:
|
||||
root_to_validate = etree.fromstring(xml_string)
|
||||
official_pain_schema.assertValid(root_to_validate)
|
||||
except Exception as e:
|
||||
logger.warning("The XML file is invalid against the XML Schema Definition")
|
||||
logger.warning(xml_string)
|
||||
logger.warning(e)
|
||||
raise UserError(
|
||||
_(
|
||||
"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"
|
||||
)
|
||||
% str(e)
|
||||
)
|
||||
return True
|
||||
|
||||
def finalize_sepa_file_creation(self, xml_root, gen_args):
|
||||
xml_string = etree.tostring(
|
||||
xml_root, pretty_print=True, encoding="UTF-8", xml_declaration=True
|
||||
)
|
||||
logger.debug(
|
||||
"Generated SEPA XML file in format %s below" % gen_args["pain_flavor"]
|
||||
)
|
||||
logger.debug(xml_string)
|
||||
self._validate_xml(xml_string, gen_args)
|
||||
|
||||
filename = "{}{}.xml".format(gen_args["file_prefix"], self.name)
|
||||
return (xml_string, filename)
|
||||
|
||||
def generate_pain_nsmap(self):
|
||||
self.ensure_one()
|
||||
pain_flavor = self.payment_mode_id.payment_method_id.pain_version
|
||||
nsmap = {
|
||||
"xsi": "http://www.w3.org/2001/XMLSchema-instance",
|
||||
None: "urn:iso:std:iso:20022:tech:xsd:%s" % pain_flavor,
|
||||
}
|
||||
return nsmap
|
||||
|
||||
def generate_pain_attrib(self):
|
||||
self.ensure_one()
|
||||
return {}
|
||||
|
||||
@api.model
|
||||
def generate_group_header_block(self, parent_node, gen_args):
|
||||
group_header = etree.SubElement(parent_node, "GrpHdr")
|
||||
message_identification = etree.SubElement(group_header, "MsgId")
|
||||
message_identification.text = self._prepare_field(
|
||||
"Message Identification", "self.name", {"self": self}, 35, gen_args=gen_args
|
||||
)
|
||||
creation_date_time = etree.SubElement(group_header, "CreDtTm")
|
||||
creation_date_time.text = datetime.strftime(
|
||||
datetime.today(), "%Y-%m-%dT%H:%M:%S"
|
||||
)
|
||||
if gen_args.get("pain_flavor") == "pain.001.001.02":
|
||||
# batch_booking is in "Group header" with pain.001.001.02
|
||||
# and in "Payment info" in pain.001.001.03/04
|
||||
batch_booking = etree.SubElement(group_header, "BtchBookg")
|
||||
batch_booking.text = str(self.batch_booking).lower()
|
||||
nb_of_transactions = etree.SubElement(group_header, "NbOfTxs")
|
||||
control_sum = etree.SubElement(group_header, "CtrlSum")
|
||||
# Grpg removed in pain.001.001.03
|
||||
if gen_args.get("pain_flavor") == "pain.001.001.02":
|
||||
grouping = etree.SubElement(group_header, "Grpg")
|
||||
grouping.text = "GRPD"
|
||||
self.generate_initiating_party_block(group_header, gen_args)
|
||||
return group_header, nb_of_transactions, control_sum
|
||||
|
||||
@api.model
|
||||
def generate_start_payment_info_block(
|
||||
self,
|
||||
parent_node,
|
||||
payment_info_ident,
|
||||
priority,
|
||||
local_instrument,
|
||||
category_purpose,
|
||||
sequence_type,
|
||||
requested_date,
|
||||
eval_ctx,
|
||||
gen_args,
|
||||
):
|
||||
payment_info = etree.SubElement(parent_node, "PmtInf")
|
||||
payment_info_identification = etree.SubElement(payment_info, "PmtInfId")
|
||||
payment_info_identification.text = self._prepare_field(
|
||||
"Payment Information Identification",
|
||||
payment_info_ident,
|
||||
eval_ctx,
|
||||
35,
|
||||
gen_args=gen_args,
|
||||
)
|
||||
payment_method = etree.SubElement(payment_info, "PmtMtd")
|
||||
payment_method.text = gen_args["payment_method"]
|
||||
nb_of_transactions = False
|
||||
control_sum = False
|
||||
if gen_args.get("pain_flavor") != "pain.001.001.02":
|
||||
batch_booking = etree.SubElement(payment_info, "BtchBookg")
|
||||
batch_booking.text = str(self.batch_booking).lower()
|
||||
# The "SEPA Customer-to-bank
|
||||
# Implementation guidelines" for SCT and SDD says that control sum
|
||||
# and nb_of_transactions should be present
|
||||
# at both "group header" level and "payment info" level
|
||||
nb_of_transactions = etree.SubElement(payment_info, "NbOfTxs")
|
||||
control_sum = etree.SubElement(payment_info, "CtrlSum")
|
||||
payment_type_info = etree.SubElement(payment_info, "PmtTpInf")
|
||||
if priority and gen_args["payment_method"] != "DD":
|
||||
instruction_priority = etree.SubElement(payment_type_info, "InstrPrty")
|
||||
instruction_priority.text = priority
|
||||
if self.sepa:
|
||||
service_level = etree.SubElement(payment_type_info, "SvcLvl")
|
||||
service_level_code = etree.SubElement(service_level, "Cd")
|
||||
service_level_code.text = "SEPA"
|
||||
if local_instrument:
|
||||
local_instrument_root = etree.SubElement(payment_type_info, "LclInstrm")
|
||||
if gen_args.get("local_instrument_type") == "proprietary":
|
||||
local_instr_value = etree.SubElement(local_instrument_root, "Prtry")
|
||||
else:
|
||||
local_instr_value = etree.SubElement(local_instrument_root, "Cd")
|
||||
local_instr_value.text = local_instrument
|
||||
if sequence_type:
|
||||
sequence_type_node = etree.SubElement(payment_type_info, "SeqTp")
|
||||
sequence_type_node.text = sequence_type
|
||||
if category_purpose:
|
||||
category_purpose_node = etree.SubElement(payment_type_info, "CtgyPurp")
|
||||
category_purpose_code = etree.SubElement(category_purpose_node, "Cd")
|
||||
category_purpose_code.text = category_purpose
|
||||
if gen_args["payment_method"] == "DD":
|
||||
request_date_tag = "ReqdColltnDt"
|
||||
else:
|
||||
request_date_tag = "ReqdExctnDt"
|
||||
requested_date_node = etree.SubElement(payment_info, request_date_tag)
|
||||
requested_date_node.text = requested_date
|
||||
return payment_info, nb_of_transactions, control_sum
|
||||
|
||||
@api.model
|
||||
def _must_have_initiating_party(self, gen_args):
|
||||
"""This method is designed to be inherited in localization modules for
|
||||
countries in which the initiating party is required"""
|
||||
return False
|
||||
|
||||
@api.model
|
||||
def generate_initiating_party_block(self, parent_node, gen_args):
|
||||
my_company_name = self._prepare_field(
|
||||
"Company Name",
|
||||
"self.company_partner_bank_id.partner_id.name",
|
||||
{"self": self},
|
||||
gen_args.get("name_maxsize"),
|
||||
gen_args=gen_args,
|
||||
)
|
||||
initiating_party = etree.SubElement(parent_node, "InitgPty")
|
||||
initiating_party_name = etree.SubElement(initiating_party, "Nm")
|
||||
initiating_party_name.text = my_company_name
|
||||
initiating_party_identifier = (
|
||||
self.payment_mode_id.initiating_party_identifier
|
||||
or self.payment_mode_id.company_id.initiating_party_identifier
|
||||
)
|
||||
initiating_party_issuer = (
|
||||
self.payment_mode_id.initiating_party_issuer
|
||||
or self.payment_mode_id.company_id.initiating_party_issuer
|
||||
)
|
||||
initiating_party_scheme = (
|
||||
self.payment_mode_id.initiating_party_scheme
|
||||
or self.payment_mode_id.company_id.initiating_party_scheme
|
||||
)
|
||||
# in pain.008.001.02.ch.01.xsd files they use
|
||||
# initiating_party_identifier but not initiating_party_issuer
|
||||
if initiating_party_identifier:
|
||||
iniparty_id = etree.SubElement(initiating_party, "Id")
|
||||
iniparty_org_id = etree.SubElement(iniparty_id, "OrgId")
|
||||
iniparty_org_other = etree.SubElement(iniparty_org_id, "Othr")
|
||||
iniparty_org_other_id = etree.SubElement(iniparty_org_other, "Id")
|
||||
iniparty_org_other_id.text = initiating_party_identifier
|
||||
if initiating_party_scheme:
|
||||
iniparty_org_other_scheme = etree.SubElement(
|
||||
iniparty_org_other, "SchmeNm"
|
||||
)
|
||||
iniparty_org_other_scheme_name = etree.SubElement(
|
||||
iniparty_org_other_scheme, "Prtry"
|
||||
)
|
||||
iniparty_org_other_scheme_name.text = initiating_party_scheme
|
||||
if initiating_party_issuer:
|
||||
iniparty_org_other_issuer = etree.SubElement(iniparty_org_other, "Issr")
|
||||
iniparty_org_other_issuer.text = initiating_party_issuer
|
||||
elif self._must_have_initiating_party(gen_args):
|
||||
raise UserError(
|
||||
_(
|
||||
"Missing 'Initiating Party Issuer' and/or "
|
||||
"'Initiating Party Identifier' for the company '%s'. "
|
||||
"Both fields must have a value."
|
||||
)
|
||||
% self.company_id.name
|
||||
)
|
||||
return True
|
||||
|
||||
@api.model
|
||||
def generate_party_agent(
|
||||
self, parent_node, party_type, order, partner_bank, gen_args, bank_line=None
|
||||
):
|
||||
"""Generate the piece of the XML file corresponding to BIC
|
||||
This code is mutualized between TRF and DD
|
||||
Starting from Feb 1st 2016, we should be able to do
|
||||
cross-border SEPA transfers without BIC, cf
|
||||
http://www.europeanpaymentscouncil.eu/index.cfm/
|
||||
sepa-credit-transfer/iban-and-bic/
|
||||
In some localization (l10n_ch_sepa for example), they need the
|
||||
bank_line argument"""
|
||||
assert order in ("B", "C"), "Order can be 'B' or 'C'"
|
||||
if partner_bank.bank_bic:
|
||||
party_agent = etree.SubElement(parent_node, "%sAgt" % party_type)
|
||||
party_agent_institution = etree.SubElement(party_agent, "FinInstnId")
|
||||
party_agent_bic = etree.SubElement(
|
||||
party_agent_institution, gen_args.get("bic_xml_tag")
|
||||
)
|
||||
party_agent_bic.text = partner_bank.bank_bic
|
||||
else:
|
||||
if order == "B" or (order == "C" and gen_args["payment_method"] == "DD"):
|
||||
party_agent = etree.SubElement(parent_node, "%sAgt" % party_type)
|
||||
party_agent_institution = etree.SubElement(party_agent, "FinInstnId")
|
||||
party_agent_other = etree.SubElement(party_agent_institution, "Othr")
|
||||
party_agent_other_identification = etree.SubElement(
|
||||
party_agent_other, "Id"
|
||||
)
|
||||
party_agent_other_identification.text = "NOTPROVIDED"
|
||||
# for Credit Transfers, in the 'C' block, if BIC is not provided,
|
||||
# we should not put the 'Creditor Agent' block at all,
|
||||
# as per the guidelines of the EPC
|
||||
return True
|
||||
|
||||
@api.model
|
||||
def generate_party_id(self, parent_node, party_type, partner):
|
||||
"""Generate an Id element for partner inside the parent node.
|
||||
party_type can currently be Cdtr or Dbtr. Notably, the initiating
|
||||
party orgid is generated with another mechanism and configured
|
||||
at the company or payment mode level.
|
||||
"""
|
||||
return
|
||||
|
||||
@api.model
|
||||
def generate_party_acc_number(
|
||||
self, parent_node, party_type, order, partner_bank, gen_args, bank_line=None
|
||||
):
|
||||
party_account = etree.SubElement(parent_node, "%sAcct" % party_type)
|
||||
party_account_id = etree.SubElement(party_account, "Id")
|
||||
if partner_bank.acc_type == "iban":
|
||||
party_account_iban = etree.SubElement(party_account_id, "IBAN")
|
||||
party_account_iban.text = partner_bank.sanitized_acc_number
|
||||
else:
|
||||
party_account_other = etree.SubElement(party_account_id, "Othr")
|
||||
party_account_other_id = etree.SubElement(party_account_other, "Id")
|
||||
party_account_other_id.text = partner_bank.sanitized_acc_number
|
||||
return True
|
||||
|
||||
@api.model
|
||||
def generate_address_block(self, parent_node, partner, gen_args):
|
||||
"""Generate the piece of the XML corresponding to PstlAdr"""
|
||||
if partner.country_id:
|
||||
postal_address = etree.SubElement(parent_node, "PstlAdr")
|
||||
if gen_args.get("pain_flavor").startswith("pain.001.001.") or gen_args.get(
|
||||
"pain_flavor"
|
||||
).startswith("pain.008.001."):
|
||||
if partner.zip:
|
||||
pstcd = etree.SubElement(postal_address, "PstCd")
|
||||
pstcd.text = self._prepare_field(
|
||||
"Postal Code",
|
||||
"partner.zip",
|
||||
{"partner": partner},
|
||||
16,
|
||||
gen_args=gen_args,
|
||||
)
|
||||
if partner.city:
|
||||
twnnm = etree.SubElement(postal_address, "TwnNm")
|
||||
twnnm.text = self._prepare_field(
|
||||
"Town Name",
|
||||
"partner.city",
|
||||
{"partner": partner},
|
||||
35,
|
||||
gen_args=gen_args,
|
||||
)
|
||||
country = etree.SubElement(postal_address, "Ctry")
|
||||
country.text = self._prepare_field(
|
||||
"Country",
|
||||
"partner.country_id.code",
|
||||
{"partner": partner},
|
||||
2,
|
||||
gen_args=gen_args,
|
||||
)
|
||||
if partner.street:
|
||||
adrline1 = etree.SubElement(postal_address, "AdrLine")
|
||||
adrline1.text = self._prepare_field(
|
||||
"Adress Line1",
|
||||
"partner.street",
|
||||
{"partner": partner},
|
||||
70,
|
||||
gen_args=gen_args,
|
||||
)
|
||||
|
||||
return True
|
||||
|
||||
@api.model
|
||||
def generate_party_block(
|
||||
self, parent_node, party_type, order, partner_bank, gen_args, bank_line=None
|
||||
):
|
||||
"""Generate the piece of the XML file corresponding to Name+IBAN+BIC
|
||||
This code is mutualized between TRF and DD
|
||||
In some localization (l10n_ch_sepa for example), they need the
|
||||
bank_line argument"""
|
||||
assert order in ("B", "C"), "Order can be 'B' or 'C'"
|
||||
party_type_label = _("Partner name")
|
||||
if party_type == "Cdtr":
|
||||
party_type_label = _("Creditor name")
|
||||
elif party_type == "Dbtr":
|
||||
party_type_label = _("Debtor name")
|
||||
name = "partner_bank.partner_id.name"
|
||||
eval_ctx = {"partner_bank": partner_bank}
|
||||
party_name = self._prepare_field(
|
||||
party_type_label,
|
||||
name,
|
||||
eval_ctx,
|
||||
gen_args.get("name_maxsize"),
|
||||
gen_args=gen_args,
|
||||
)
|
||||
# At C level, the order is : BIC, Name, IBAN
|
||||
# At B level, the order is : Name, IBAN, BIC
|
||||
if order == "C":
|
||||
self.generate_party_agent(
|
||||
parent_node,
|
||||
party_type,
|
||||
order,
|
||||
partner_bank,
|
||||
gen_args,
|
||||
bank_line=bank_line,
|
||||
)
|
||||
party = etree.SubElement(parent_node, party_type)
|
||||
party_nm = etree.SubElement(party, "Nm")
|
||||
party_nm.text = party_name
|
||||
partner = partner_bank.partner_id
|
||||
|
||||
self.generate_address_block(party, partner, gen_args)
|
||||
|
||||
self.generate_party_id(party, party_type, partner)
|
||||
|
||||
self.generate_party_acc_number(
|
||||
parent_node, party_type, order, partner_bank, gen_args, bank_line=bank_line
|
||||
)
|
||||
|
||||
if order == "B":
|
||||
self.generate_party_agent(
|
||||
parent_node,
|
||||
party_type,
|
||||
order,
|
||||
partner_bank,
|
||||
gen_args,
|
||||
bank_line=bank_line,
|
||||
)
|
||||
return True
|
||||
|
||||
@api.model
|
||||
def generate_remittance_info_block(self, parent_node, line, gen_args):
|
||||
remittance_info = etree.SubElement(parent_node, "RmtInf")
|
||||
if line.communication_type == "normal":
|
||||
remittance_info_unstructured = etree.SubElement(remittance_info, "Ustrd")
|
||||
remittance_info_unstructured.text = self._prepare_field(
|
||||
"Remittance Unstructured Information",
|
||||
"line.communication",
|
||||
{"line": line},
|
||||
140,
|
||||
gen_args=gen_args,
|
||||
)
|
||||
else:
|
||||
remittance_info_structured = etree.SubElement(remittance_info, "Strd")
|
||||
creditor_ref_information = etree.SubElement(
|
||||
remittance_info_structured, "CdtrRefInf"
|
||||
)
|
||||
if gen_args.get("pain_flavor") == "pain.001.001.02":
|
||||
creditor_ref_info_type = etree.SubElement(
|
||||
creditor_ref_information, "CdtrRefTp"
|
||||
)
|
||||
creditor_ref_info_type_code = etree.SubElement(
|
||||
creditor_ref_info_type, "Cd"
|
||||
)
|
||||
creditor_ref_info_type_code.text = "SCOR"
|
||||
# SCOR means "Structured Communication Reference"
|
||||
creditor_ref_info_type_issuer = etree.SubElement(
|
||||
creditor_ref_info_type, "Issr"
|
||||
)
|
||||
creditor_ref_info_type_issuer.text = line.communication_type
|
||||
creditor_reference = etree.SubElement(
|
||||
creditor_ref_information, "CdtrRef"
|
||||
)
|
||||
else:
|
||||
if gen_args.get("structured_remittance_issuer", True):
|
||||
creditor_ref_info_type = etree.SubElement(
|
||||
creditor_ref_information, "Tp"
|
||||
)
|
||||
creditor_ref_info_type_or = etree.SubElement(
|
||||
creditor_ref_info_type, "CdOrPrtry"
|
||||
)
|
||||
creditor_ref_info_type_code = etree.SubElement(
|
||||
creditor_ref_info_type_or, "Cd"
|
||||
)
|
||||
creditor_ref_info_type_code.text = "SCOR"
|
||||
creditor_ref_info_type_issuer = etree.SubElement(
|
||||
creditor_ref_info_type, "Issr"
|
||||
)
|
||||
creditor_ref_info_type_issuer.text = line.communication_type
|
||||
|
||||
creditor_reference = etree.SubElement(creditor_ref_information, "Ref")
|
||||
|
||||
creditor_reference.text = self._prepare_field(
|
||||
"Creditor Structured Reference",
|
||||
"line.communication",
|
||||
{"line": line},
|
||||
35,
|
||||
gen_args=gen_args,
|
||||
)
|
||||
return True
|
||||
|
||||
@api.model
|
||||
def generate_creditor_scheme_identification(
|
||||
self,
|
||||
parent_node,
|
||||
identification,
|
||||
identification_label,
|
||||
eval_ctx,
|
||||
scheme_name_proprietary,
|
||||
gen_args,
|
||||
):
|
||||
csi_id = etree.SubElement(parent_node, "Id")
|
||||
csi_privateid = etree.SubElement(csi_id, "PrvtId")
|
||||
csi_other = etree.SubElement(csi_privateid, "Othr")
|
||||
csi_other_id = etree.SubElement(csi_other, "Id")
|
||||
csi_other_id.text = self._prepare_field(
|
||||
identification_label, identification, eval_ctx, gen_args=gen_args
|
||||
)
|
||||
csi_scheme_name = etree.SubElement(csi_other, "SchmeNm")
|
||||
csi_scheme_name_proprietary = etree.SubElement(csi_scheme_name, "Prtry")
|
||||
csi_scheme_name_proprietary.text = scheme_name_proprietary
|
||||
return True
|
||||
25
account_banking_pain_base/models/bank_payment_line.py
Normal file
25
account_banking_pain_base/models/bank_payment_line.py
Normal file
@@ -0,0 +1,25 @@
|
||||
# © 2013-2016 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class BankPaymentLine(models.Model):
|
||||
_inherit = "bank.payment.line"
|
||||
|
||||
priority = fields.Selection(related="payment_line_ids.priority", string="Priority")
|
||||
local_instrument = fields.Selection(
|
||||
related="payment_line_ids.local_instrument", string="Local Instrument"
|
||||
)
|
||||
category_purpose = fields.Selection(
|
||||
related="payment_line_ids.category_purpose", string="Category Purpose"
|
||||
)
|
||||
purpose = fields.Selection(related="payment_line_ids.purpose")
|
||||
|
||||
@api.model
|
||||
def same_fields_payment_line_and_bank_payment_line(self):
|
||||
res = super(
|
||||
BankPaymentLine, self
|
||||
).same_fields_payment_line_and_bank_payment_line()
|
||||
res += ["priority", "local_instrument", "category_purpose", "purpose"]
|
||||
return res
|
||||
35
account_banking_pain_base/models/res_bank.py
Normal file
35
account_banking_pain_base/models/res_bank.py
Normal file
@@ -0,0 +1,35 @@
|
||||
# Copyright 2019 ACSONE SA/NV
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
import re
|
||||
|
||||
from odoo import _, api, models
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
BIC_REGEX = re.compile(r"[A-Z]{6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3})?$")
|
||||
|
||||
|
||||
class ResBank(models.Model):
|
||||
_inherit = "res.bank"
|
||||
|
||||
@api.constrains("bic")
|
||||
def _check_bic(self):
|
||||
"""
|
||||
This method strengthens the constraint on the BIC of the bank account
|
||||
(The account_payment_order module already checks the length in the
|
||||
check_bic_length method).
|
||||
:raise: ValidationError if the BIC doesn't respect the regex of the
|
||||
SEPA pain schemas.
|
||||
"""
|
||||
invalid_banks = self.filtered(lambda r: r.bic and not BIC_REGEX.match(r.bic))
|
||||
if invalid_banks:
|
||||
raise ValidationError(
|
||||
_(
|
||||
"The following Bank Identifier Codes (BIC) do not respect "
|
||||
"the SEPA pattern:\n{bic_list}\n\nSEPA pattern: "
|
||||
"{sepa_pattern}"
|
||||
).format(
|
||||
sepa_pattern=BIC_REGEX.pattern,
|
||||
bic_list="\n".join(invalid_banks.mapped("bic")),
|
||||
)
|
||||
)
|
||||
58
account_banking_pain_base/models/res_company.py
Normal file
58
account_banking_pain_base/models/res_company.py
Normal file
@@ -0,0 +1,58 @@
|
||||
# © 2013-2016 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# © 2013 Noviat (http://www.noviat.com) - Luc de Meyer
|
||||
# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
import logging
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ResCompany(models.Model):
|
||||
_inherit = "res.company"
|
||||
|
||||
initiating_party_issuer = fields.Char(
|
||||
string="Initiating Party Issuer",
|
||||
size=35,
|
||||
help="This will be used as the 'Initiating Party Issuer' in the "
|
||||
"PAIN files generated by Odoo.",
|
||||
)
|
||||
initiating_party_identifier = fields.Char(
|
||||
string="Initiating Party Identifier",
|
||||
size=35,
|
||||
help="This will be used as the 'Initiating Party Identifier' in "
|
||||
"the PAIN files generated by Odoo.",
|
||||
)
|
||||
initiating_party_scheme = fields.Char(
|
||||
string="Initiating Party Scheme",
|
||||
size=35,
|
||||
help="This will be used as the 'Initiating Party Scheme Name' in "
|
||||
"the PAIN files generated by Odoo.",
|
||||
)
|
||||
|
||||
def _default_initiating_party(self):
|
||||
"""This method is called from post_install.py"""
|
||||
self.ensure_one()
|
||||
party_issuer_per_country = {
|
||||
"BE": "KBO-BCE" # KBO-BCE = the registry of companies in Belgium
|
||||
}
|
||||
logger.debug("Calling _default_initiating_party on company %s", self.name)
|
||||
country_code = self.country_id.code
|
||||
if not self.initiating_party_issuer:
|
||||
if country_code and country_code in party_issuer_per_country:
|
||||
self.write(
|
||||
{"initiating_party_issuer": party_issuer_per_country[country_code]}
|
||||
)
|
||||
logger.info("Updated initiating_party_issuer on company %s", self.name)
|
||||
party_identifier = False
|
||||
if not self.initiating_party_identifier:
|
||||
if self.vat and country_code:
|
||||
if country_code == "BE":
|
||||
party_identifier = self.vat[2:].replace(" ", "")
|
||||
if party_identifier:
|
||||
self.write({"initiating_party_identifier": party_identifier})
|
||||
logger.info(
|
||||
"Updated initiating_party_identifier on company %s", self.name
|
||||
)
|
||||
25
account_banking_pain_base/models/res_config_settings.py
Normal file
25
account_banking_pain_base/models/res_config_settings.py
Normal file
@@ -0,0 +1,25 @@
|
||||
# Copyright 2016 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# Copyright 2017 Tecnativa - Pedro M. Baeza
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class ResConfigSettings(models.TransientModel):
|
||||
_inherit = "res.config.settings"
|
||||
|
||||
initiating_party_issuer = fields.Char(
|
||||
related="company_id.initiating_party_issuer", readonly=False
|
||||
)
|
||||
initiating_party_identifier = fields.Char(
|
||||
related="company_id.initiating_party_identifier", readonly=False
|
||||
)
|
||||
initiating_party_scheme = fields.Char(
|
||||
related="company_id.initiating_party_scheme", readonly=False
|
||||
)
|
||||
group_pain_multiple_identifier = fields.Boolean(
|
||||
string="Multiple identifiers",
|
||||
implied_group="account_banking_pain_base." "group_pain_multiple_identifier",
|
||||
help="Enable this option if your country requires several SEPA/PAIN "
|
||||
"identifiers like in Spain.",
|
||||
)
|
||||
13
account_banking_pain_base/post_install.py
Normal file
13
account_banking_pain_base/post_install.py
Normal file
@@ -0,0 +1,13 @@
|
||||
# © 2015-2016 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
|
||||
from odoo import SUPERUSER_ID, api
|
||||
|
||||
|
||||
def set_default_initiating_party(cr, registry):
|
||||
with api.Environment.manage():
|
||||
env = api.Environment(cr, SUPERUSER_ID, {})
|
||||
for company in env["res.company"].search([]):
|
||||
company._default_initiating_party()
|
||||
return
|
||||
12
account_banking_pain_base/readme/CONFIGURE.rst
Normal file
12
account_banking_pain_base/readme/CONFIGURE.rst
Normal file
@@ -0,0 +1,12 @@
|
||||
#. Go to Invoicing/Accounting > Configuration > Settings.
|
||||
#. On the fields "Initiating Party Issuer" and "Initiating Party Identifier",
|
||||
in the section *SEPA/PAIN*, you can fill the corresponding identifiers.
|
||||
|
||||
If your country requires several identifiers (like Spain), you must:
|
||||
|
||||
#. Go to *Invoicing/Accounting > Configuration > Settings*.
|
||||
#. On the section *SEPA/PAIN*, check the mark "Multiple identifiers".
|
||||
#. Now go to *Invoicing/Accounting > Configuration > Management > Payment Modes*.
|
||||
#. Create a payment mode for your specific bank.
|
||||
#. Fill the specific identifiers on the fields "Initiating Party Identifier"
|
||||
and "Initiating Party Issuer".
|
||||
12
account_banking_pain_base/readme/CONTRIBUTORS.rst
Normal file
12
account_banking_pain_base/readme/CONTRIBUTORS.rst
Normal file
@@ -0,0 +1,12 @@
|
||||
* Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
* Pedro M. Baeza
|
||||
* Stéphane Bidoul <stephane.bidoul@acsone.eu>
|
||||
* Ignacio Ibeas - Acysos S.L.
|
||||
* Alexandre Fayolle
|
||||
* Raphaël Valyi
|
||||
* Sandy Carter
|
||||
* Stefan Rijnhart (Therp)
|
||||
* Antonio Espinosa <antonioea@antiun.com>
|
||||
* `DynApps NV <https://www.dynapps.be>`_:
|
||||
|
||||
* Axel Priem <axel.priem@dynapps.be>
|
||||
7
account_banking_pain_base/readme/DESCRIPTION.rst
Normal file
7
account_banking_pain_base/readme/DESCRIPTION.rst
Normal file
@@ -0,0 +1,7 @@
|
||||
This module contains fields and functions that are used by the module for SEPA
|
||||
Credit Transfer (account_banking_sepa_credit_transfer) and SEPA Direct Debit
|
||||
(account_banking_sepa_direct_debit). This module doesn't provide any
|
||||
functionality by itself.
|
||||
|
||||
This module was started during the Akretion-Noviat code sprint of November
|
||||
21st 2013 in Epiais les Louvres (France).
|
||||
5
account_banking_pain_base/readme/INSTALL.rst
Normal file
5
account_banking_pain_base/readme/INSTALL.rst
Normal file
@@ -0,0 +1,5 @@
|
||||
This module depends on :
|
||||
|
||||
- account_payment_order
|
||||
|
||||
This module is part of the OCA/bank-payment suite.
|
||||
1
account_banking_pain_base/readme/USAGE.rst
Normal file
1
account_banking_pain_base/readme/USAGE.rst
Normal file
@@ -0,0 +1 @@
|
||||
See 'readme' files of the OCA/bank-payment suite.
|
||||
7
account_banking_pain_base/security/security.xml
Normal file
7
account_banking_pain_base/security/security.xml
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<record id="group_pain_multiple_identifier" model="res.groups">
|
||||
<field name="name">SEPA/PAIN Identifiers on Payment Modes</field>
|
||||
<field name="category_id" ref="base.module_category_hidden" />
|
||||
</record>
|
||||
</odoo>
|
||||
BIN
account_banking_pain_base/static/description/icon.png
Normal file
BIN
account_banking_pain_base/static/description/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.2 KiB |
466
account_banking_pain_base/static/description/index.html
Normal file
466
account_banking_pain_base/static/description/index.html
Normal file
@@ -0,0 +1,466 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
|
||||
<title>Account Banking PAIN Base Module</title>
|
||||
<style type="text/css">
|
||||
|
||||
/*
|
||||
:Author: David Goodger (goodger@python.org)
|
||||
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
|
||||
:Copyright: This stylesheet has been placed in the public domain.
|
||||
|
||||
Default cascading style sheet for the HTML output of Docutils.
|
||||
|
||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
||||
customize this style sheet.
|
||||
*/
|
||||
|
||||
/* used to remove borders from tables and images */
|
||||
.borderless, table.borderless td, table.borderless th {
|
||||
border: 0 }
|
||||
|
||||
table.borderless td, table.borderless th {
|
||||
/* Override padding for "table.docutils td" with "! important".
|
||||
The right padding separates the table cells. */
|
||||
padding: 0 0.5em 0 0 ! important }
|
||||
|
||||
.first {
|
||||
/* Override more specific margin styles with "! important". */
|
||||
margin-top: 0 ! important }
|
||||
|
||||
.last, .with-subtitle {
|
||||
margin-bottom: 0 ! important }
|
||||
|
||||
.hidden {
|
||||
display: none }
|
||||
|
||||
.subscript {
|
||||
vertical-align: sub;
|
||||
font-size: smaller }
|
||||
|
||||
.superscript {
|
||||
vertical-align: super;
|
||||
font-size: smaller }
|
||||
|
||||
a.toc-backref {
|
||||
text-decoration: none ;
|
||||
color: black }
|
||||
|
||||
blockquote.epigraph {
|
||||
margin: 2em 5em ; }
|
||||
|
||||
dl.docutils dd {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
||||
dl.docutils dt {
|
||||
font-weight: bold }
|
||||
*/
|
||||
|
||||
div.abstract {
|
||||
margin: 2em 5em }
|
||||
|
||||
div.abstract p.topic-title {
|
||||
font-weight: bold ;
|
||||
text-align: center }
|
||||
|
||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
||||
div.hint, div.important, div.note, div.tip, div.warning {
|
||||
margin: 2em ;
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
||||
div.important p.admonition-title, div.note p.admonition-title,
|
||||
div.tip p.admonition-title {
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
||||
div.danger p.admonition-title, div.error p.admonition-title,
|
||||
div.warning p.admonition-title, .code .error {
|
||||
color: red ;
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
||||
compound paragraphs.
|
||||
div.compound .compound-first, div.compound .compound-middle {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
div.compound .compound-last, div.compound .compound-middle {
|
||||
margin-top: 0.5em }
|
||||
*/
|
||||
|
||||
div.dedication {
|
||||
margin: 2em 5em ;
|
||||
text-align: center ;
|
||||
font-style: italic }
|
||||
|
||||
div.dedication p.topic-title {
|
||||
font-weight: bold ;
|
||||
font-style: normal }
|
||||
|
||||
div.figure {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
div.footer, div.header {
|
||||
clear: both;
|
||||
font-size: smaller }
|
||||
|
||||
div.line-block {
|
||||
display: block ;
|
||||
margin-top: 1em ;
|
||||
margin-bottom: 1em }
|
||||
|
||||
div.line-block div.line-block {
|
||||
margin-top: 0 ;
|
||||
margin-bottom: 0 ;
|
||||
margin-left: 1.5em }
|
||||
|
||||
div.sidebar {
|
||||
margin: 0 0 0.5em 1em ;
|
||||
border: medium outset ;
|
||||
padding: 1em ;
|
||||
background-color: #ffffee ;
|
||||
width: 40% ;
|
||||
float: right ;
|
||||
clear: right }
|
||||
|
||||
div.sidebar p.rubric {
|
||||
font-family: sans-serif ;
|
||||
font-size: medium }
|
||||
|
||||
div.system-messages {
|
||||
margin: 5em }
|
||||
|
||||
div.system-messages h1 {
|
||||
color: red }
|
||||
|
||||
div.system-message {
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.system-message p.system-message-title {
|
||||
color: red ;
|
||||
font-weight: bold }
|
||||
|
||||
div.topic {
|
||||
margin: 2em }
|
||||
|
||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
||||
margin-top: 0.4em }
|
||||
|
||||
h1.title {
|
||||
text-align: center }
|
||||
|
||||
h2.subtitle {
|
||||
text-align: center }
|
||||
|
||||
hr.docutils {
|
||||
width: 75% }
|
||||
|
||||
img.align-left, .figure.align-left, object.align-left, table.align-left {
|
||||
clear: left ;
|
||||
float: left ;
|
||||
margin-right: 1em }
|
||||
|
||||
img.align-right, .figure.align-right, object.align-right, table.align-right {
|
||||
clear: right ;
|
||||
float: right ;
|
||||
margin-left: 1em }
|
||||
|
||||
img.align-center, .figure.align-center, object.align-center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.align-center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left }
|
||||
|
||||
.align-center {
|
||||
clear: both ;
|
||||
text-align: center }
|
||||
|
||||
.align-right {
|
||||
text-align: right }
|
||||
|
||||
/* reset inner alignment in figures */
|
||||
div.align-right {
|
||||
text-align: inherit }
|
||||
|
||||
/* div.align-center * { */
|
||||
/* text-align: left } */
|
||||
|
||||
.align-top {
|
||||
vertical-align: top }
|
||||
|
||||
.align-middle {
|
||||
vertical-align: middle }
|
||||
|
||||
.align-bottom {
|
||||
vertical-align: bottom }
|
||||
|
||||
ol.simple, ul.simple {
|
||||
margin-bottom: 1em }
|
||||
|
||||
ol.arabic {
|
||||
list-style: decimal }
|
||||
|
||||
ol.loweralpha {
|
||||
list-style: lower-alpha }
|
||||
|
||||
ol.upperalpha {
|
||||
list-style: upper-alpha }
|
||||
|
||||
ol.lowerroman {
|
||||
list-style: lower-roman }
|
||||
|
||||
ol.upperroman {
|
||||
list-style: upper-roman }
|
||||
|
||||
p.attribution {
|
||||
text-align: right ;
|
||||
margin-left: 50% }
|
||||
|
||||
p.caption {
|
||||
font-style: italic }
|
||||
|
||||
p.credits {
|
||||
font-style: italic ;
|
||||
font-size: smaller }
|
||||
|
||||
p.label {
|
||||
white-space: nowrap }
|
||||
|
||||
p.rubric {
|
||||
font-weight: bold ;
|
||||
font-size: larger ;
|
||||
color: maroon ;
|
||||
text-align: center }
|
||||
|
||||
p.sidebar-title {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold ;
|
||||
font-size: larger }
|
||||
|
||||
p.sidebar-subtitle {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
p.topic-title {
|
||||
font-weight: bold }
|
||||
|
||||
pre.address {
|
||||
margin-bottom: 0 ;
|
||||
margin-top: 0 ;
|
||||
font: inherit }
|
||||
|
||||
pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
pre.code .ln { color: grey; } /* line numbers */
|
||||
pre.code, code { background-color: #eeeeee }
|
||||
pre.code .comment, code .comment { color: #5C6576 }
|
||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
||||
pre.code .literal.string, code .literal.string { color: #0C5404 }
|
||||
pre.code .name.builtin, code .name.builtin { color: #352B84 }
|
||||
pre.code .deleted, code .deleted { background-color: #DEB0A1}
|
||||
pre.code .inserted, code .inserted { background-color: #A3D289}
|
||||
|
||||
span.classifier {
|
||||
font-family: sans-serif ;
|
||||
font-style: oblique }
|
||||
|
||||
span.classifier-delimiter {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
span.interpreted {
|
||||
font-family: sans-serif }
|
||||
|
||||
span.option {
|
||||
white-space: nowrap }
|
||||
|
||||
span.pre {
|
||||
white-space: pre }
|
||||
|
||||
span.problematic {
|
||||
color: red }
|
||||
|
||||
span.section-subtitle {
|
||||
/* font-size relative to parent (h1..h6 element) */
|
||||
font-size: 80% }
|
||||
|
||||
table.citation {
|
||||
border-left: solid 1px gray;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docinfo {
|
||||
margin: 2em 4em }
|
||||
|
||||
table.docutils {
|
||||
margin-top: 0.5em ;
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
table.footnote {
|
||||
border-left: solid 1px black;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docutils td, table.docutils th,
|
||||
table.docinfo td, table.docinfo th {
|
||||
padding-left: 0.5em ;
|
||||
padding-right: 0.5em ;
|
||||
vertical-align: top }
|
||||
|
||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
||||
font-weight: bold ;
|
||||
text-align: left ;
|
||||
white-space: nowrap ;
|
||||
padding-left: 0 }
|
||||
|
||||
/* "booktabs" style (no vertical lines) */
|
||||
table.docutils.booktabs {
|
||||
border: 0px;
|
||||
border-top: 2px solid;
|
||||
border-bottom: 2px solid;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
table.docutils.booktabs * {
|
||||
border: 0px;
|
||||
}
|
||||
table.docutils.booktabs th {
|
||||
border-bottom: thin solid;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
||||
font-size: 100% }
|
||||
|
||||
ul.auto-toc {
|
||||
list-style-type: none }
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="account-banking-pain-base-module">
|
||||
<h1 class="title">Account Banking PAIN Base Module</h1>
|
||||
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/bank-payment/tree/12.0/account_banking_pain_base"><img alt="OCA/bank-payment" src="https://img.shields.io/badge/github-OCA%2Fbank--payment-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/bank-payment-12-0/bank-payment-12-0-account_banking_pain_base"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/173/12.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
|
||||
<p>This module contains fields and functions that are used by the module for SEPA
|
||||
Credit Transfer (account_banking_sepa_credit_transfer) and SEPA Direct Debit
|
||||
(account_banking_sepa_direct_debit). This module doesn’t provide any
|
||||
functionality by itself.</p>
|
||||
<p>This module was started during the Akretion-Noviat code sprint of November
|
||||
21st 2013 in Epiais les Louvres (France).</p>
|
||||
<p><strong>Table of contents</strong></p>
|
||||
<div class="contents local topic" id="contents">
|
||||
<ul class="simple">
|
||||
<li><a class="reference internal" href="#installation" id="id1">Installation</a></li>
|
||||
<li><a class="reference internal" href="#configuration" id="id2">Configuration</a></li>
|
||||
<li><a class="reference internal" href="#usage" id="id3">Usage</a></li>
|
||||
<li><a class="reference internal" href="#bug-tracker" id="id4">Bug Tracker</a></li>
|
||||
<li><a class="reference internal" href="#credits" id="id5">Credits</a><ul>
|
||||
<li><a class="reference internal" href="#authors" id="id6">Authors</a></li>
|
||||
<li><a class="reference internal" href="#contributors" id="id7">Contributors</a></li>
|
||||
<li><a class="reference internal" href="#maintainers" id="id8">Maintainers</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="installation">
|
||||
<h1><a class="toc-backref" href="#id1">Installation</a></h1>
|
||||
<p>This module depends on :</p>
|
||||
<ul class="simple">
|
||||
<li>account_payment_order</li>
|
||||
</ul>
|
||||
<p>This module is part of the OCA/bank-payment suite.</p>
|
||||
</div>
|
||||
<div class="section" id="configuration">
|
||||
<h1><a class="toc-backref" href="#id2">Configuration</a></h1>
|
||||
<ol class="arabic simple">
|
||||
<li>Go to Invoicing/Accounting > Configuration > Settings.</li>
|
||||
<li>On the fields “Initiating Party Issuer” and “Initiating Party Identifier”,
|
||||
in the section <em>SEPA/PAIN</em>, you can fill the corresponding identifiers.</li>
|
||||
</ol>
|
||||
<p>If your country requires several identifiers (like Spain), you must:</p>
|
||||
<ol class="arabic simple">
|
||||
<li>Go to <em>Invoicing/Accounting > Configuration > Settings</em>.</li>
|
||||
<li>On the section <em>SEPA/PAIN</em>, check the mark “Multiple identifiers”.</li>
|
||||
<li>Now go to <em>Invoicing/Accounting > Configuration > Management > Payment Modes</em>.</li>
|
||||
<li>Create a payment mode for your specific bank.</li>
|
||||
<li>Fill the specific identifiers on the fields “Initiating Party Identifier”
|
||||
and “Initiating Party Issuer”.</li>
|
||||
</ol>
|
||||
</div>
|
||||
<div class="section" id="usage">
|
||||
<h1><a class="toc-backref" href="#id3">Usage</a></h1>
|
||||
<p>See ‘readme’ files of the OCA/bank-payment suite.</p>
|
||||
</div>
|
||||
<div class="section" id="bug-tracker">
|
||||
<h1><a class="toc-backref" href="#id4">Bug Tracker</a></h1>
|
||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/bank-payment/issues">GitHub Issues</a>.
|
||||
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
|
||||
<a class="reference external" href="https://github.com/OCA/bank-payment/issues/new?body=module:%20account_banking_pain_base%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
||||
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
||||
</div>
|
||||
<div class="section" id="credits">
|
||||
<h1><a class="toc-backref" href="#id5">Credits</a></h1>
|
||||
<div class="section" id="authors">
|
||||
<h2><a class="toc-backref" href="#id6">Authors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Akretion</li>
|
||||
<li>Noviat</li>
|
||||
<li>Tecnativa</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="contributors">
|
||||
<h2><a class="toc-backref" href="#id7">Contributors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Alexis de Lattre <<a class="reference external" href="mailto:alexis.delattre@akretion.com">alexis.delattre@akretion.com</a>></li>
|
||||
<li>Pedro M. Baeza</li>
|
||||
<li>Stéphane Bidoul <<a class="reference external" href="mailto:stephane.bidoul@acsone.eu">stephane.bidoul@acsone.eu</a>></li>
|
||||
<li>Ignacio Ibeas - Acysos S.L.</li>
|
||||
<li>Alexandre Fayolle</li>
|
||||
<li>Raphaël Valyi</li>
|
||||
<li>Sandy Carter</li>
|
||||
<li>Stefan Rijnhart (Therp)</li>
|
||||
<li>Antonio Espinosa <<a class="reference external" href="mailto:antonioea@antiun.com">antonioea@antiun.com</a>></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="maintainers">
|
||||
<h2><a class="toc-backref" href="#id8">Maintainers</a></h2>
|
||||
<p>This module is maintained by the OCA.</p>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
|
||||
<p>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.</p>
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/bank-payment/tree/12.0/account_banking_pain_base">OCA/bank-payment</a> project on GitHub.</p>
|
||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
23
account_banking_pain_base/views/account_payment_line.xml
Normal file
23
account_banking_pain_base/views/account_payment_line.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
© 2013-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="account_payment_line_form" model="ir.ui.view">
|
||||
<field name="name">pain.base.account.payment.line</field>
|
||||
<field name="model">account.payment.line</field>
|
||||
<field
|
||||
name="inherit_id"
|
||||
ref="account_payment_order.account_payment_line_form"
|
||||
/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="communication_type" position="before">
|
||||
<field name="priority" />
|
||||
<field name="local_instrument" />
|
||||
<field name="category_purpose" />
|
||||
<field name="purpose" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
33
account_banking_pain_base/views/account_payment_method.xml
Normal file
33
account_banking_pain_base/views/account_payment_method.xml
Normal file
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<record id="account_payment_method_form" model="ir.ui.view">
|
||||
<field name="name">pain_base.account_payment_method.form</field>
|
||||
<field name="model">account.payment.method</field>
|
||||
<field
|
||||
name="inherit_id"
|
||||
ref="account_payment_mode.account_payment_method_form"
|
||||
/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="payment_type" position="after">
|
||||
<field name="pain_version" />
|
||||
<field
|
||||
name="convert_to_ascii"
|
||||
attrs="{'invisible': [('pain_version', '=', False)]}"
|
||||
/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
<record id="account_payment_method_tree" model="ir.ui.view">
|
||||
<field name="name">pain_base.account_payment_method.tree</field>
|
||||
<field name="model">account.payment.method</field>
|
||||
<field
|
||||
name="inherit_id"
|
||||
ref="account_payment_mode.account_payment_method_tree"
|
||||
/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="payment_type" position="after">
|
||||
<field name="pain_version" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
32
account_banking_pain_base/views/account_payment_mode.xml
Normal file
32
account_banking_pain_base/views/account_payment_mode.xml
Normal file
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright (C) 2013-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
Copyright 2015-2017 Tecnativa
|
||||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="account_payment_mode_form" model="ir.ui.view">
|
||||
<field name="name">pain_base.account.payment.mode.form</field>
|
||||
<field name="model">account.payment.mode</field>
|
||||
<field
|
||||
name="inherit_id"
|
||||
ref="account_payment_order.account_payment_mode_form"
|
||||
/>
|
||||
<field name="arch" type="xml">
|
||||
<group name="main" position="inside">
|
||||
<field
|
||||
name="initiating_party_identifier"
|
||||
groups="account_banking_pain_base.group_pain_multiple_identifier"
|
||||
/>
|
||||
<field
|
||||
name="initiating_party_issuer"
|
||||
groups="account_banking_pain_base.group_pain_multiple_identifier"
|
||||
/>
|
||||
<field
|
||||
name="initiating_party_scheme"
|
||||
groups="account_banking_pain_base.group_pain_multiple_identifier"
|
||||
/>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
25
account_banking_pain_base/views/account_payment_order.xml
Normal file
25
account_banking_pain_base/views/account_payment_order.xml
Normal file
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
© 2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="account_payment_order_form" model="ir.ui.view">
|
||||
<field name="name">pain.base.account.payment.order.form</field>
|
||||
<field name="model">account.payment.order</field>
|
||||
<field
|
||||
name="inherit_id"
|
||||
ref="account_payment_order.account_payment_order_form"
|
||||
/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="company_partner_bank_id" position="after">
|
||||
<field name="sepa" />
|
||||
<field name="batch_booking" />
|
||||
<field
|
||||
name="charge_bearer"
|
||||
attrs="{'invisible': [('sepa', '=', True)]}"
|
||||
/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
20
account_banking_pain_base/views/bank_payment_line_view.xml
Normal file
20
account_banking_pain_base/views/bank_payment_line_view.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
© 2015-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="bank_payment_line_form" model="ir.ui.view">
|
||||
<field name="name">pain.base.bank.payment.line.form</field>
|
||||
<field name="model">bank.payment.line</field>
|
||||
<field name="inherit_id" ref="account_payment_order.bank_payment_line_form" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_bank_id" position="after">
|
||||
<field name="priority" />
|
||||
<field name="local_instrument" />
|
||||
<field name="category_purpose" />
|
||||
<field name="purpose" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
46
account_banking_pain_base/views/res_config_settings.xml
Normal file
46
account_banking_pain_base/views/res_config_settings.xml
Normal file
@@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
© 2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="view_account_config_settings" model="ir.ui.view">
|
||||
<field name="name">pain.group.on.account.config.settings</field>
|
||||
<field name="model">res.config.settings</field>
|
||||
<field name="inherit_id" ref="account.res_config_settings_view_form" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@id='analytic']" position="after">
|
||||
<h2>SEPA/PAIN</h2>
|
||||
<div class="row mt16 o_settings_container" id="pain">
|
||||
<div class="col-xs-12 col-md-6 o_setting_box">
|
||||
<div class="o_setting_right_pane">
|
||||
<div class="content-group">
|
||||
<div class="row mt16">
|
||||
<label
|
||||
for="initiating_party_identifier"
|
||||
class="col-md-3 o_light_label"
|
||||
/>
|
||||
<field name="initiating_party_identifier" />
|
||||
</div>
|
||||
<div class="row mt16">
|
||||
<label
|
||||
for="initiating_party_issuer"
|
||||
class="col-md-3 o_light_label"
|
||||
/>
|
||||
<field name="initiating_party_issuer" />
|
||||
</div>
|
||||
<div class="row mt16">
|
||||
<label
|
||||
for="group_pain_multiple_identifier"
|
||||
class="col-md-3 o_light_label"
|
||||
/>
|
||||
<field name="group_pain_multiple_identifier" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
1
requirements.txt
Normal file
1
requirements.txt
Normal file
@@ -0,0 +1 @@
|
||||
unidecode
|
||||
@@ -0,0 +1 @@
|
||||
../../../../account_banking_pain_base
|
||||
6
setup/account_banking_pain_base/setup.py
Normal file
6
setup/account_banking_pain_base/setup.py
Normal file
@@ -0,0 +1,6 @@
|
||||
import setuptools
|
||||
|
||||
setuptools.setup(
|
||||
setup_requires=['setuptools-odoo'],
|
||||
odoo_addon=True,
|
||||
)
|
||||
Reference in New Issue
Block a user