mirror of
https://github.com/OCA/bank-payment.git
synced 2025-02-02 10:37:31 +02:00
[ADD] account_banking_mandate, spliting functionality in two modules
This commit is contained in:
committed by
Stefan Rijnhart
parent
3ada27b98e
commit
8cc1f76969
22
account_banking_mandate/__init__.py
Normal file
22
account_banking_mandate/__init__.py
Normal file
@@ -0,0 +1,22 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Mandate module for openERP
|
||||
# Copyright (C) 2014 Compassion CH (http://www.compassion.ch)
|
||||
# @author: Cyril Sester <csester@compassion.ch>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
from . import models
|
||||
59
account_banking_mandate/__openerp__.py
Normal file
59
account_banking_mandate/__openerp__.py
Normal file
@@ -0,0 +1,59 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Mandate module for openERP
|
||||
# Copyright (C) 2014 Compassion CH (http://www.compassion.ch)
|
||||
# @author: Cyril Sester <csester@compassion.ch>,
|
||||
# Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
{
|
||||
'name': 'Account Banking Mandate',
|
||||
'summary': 'Banking mandates',
|
||||
'version': '8.0.0.1.0',
|
||||
'license': 'AGPL-3',
|
||||
'author': "Compassion CH, "
|
||||
"Serv. Tecnol. Avanzados - Pedro M. Baeza, "
|
||||
"Akretion, "
|
||||
"Odoo Community Association (OCA)",
|
||||
'website': 'https://github.com/OCA/bank-payment',
|
||||
'category': 'Banking addons',
|
||||
'depends': [
|
||||
'account_payment',
|
||||
],
|
||||
'data': [
|
||||
'views/account_banking_mandate_view.xml',
|
||||
'views/account_invoice_view.xml',
|
||||
'views/account_payment_view.xml',
|
||||
'views/res_partner_bank_view.xml',
|
||||
'data/mandate_reference_sequence.xml',
|
||||
'security/ir.model.access.csv',
|
||||
],
|
||||
'demo': [],
|
||||
'test': ['test/banking_mandate.yml'],
|
||||
'description': '''
|
||||
This module adds a generic model for banking mandates.
|
||||
These mandates can be specialized to fit any banking mandates (such as
|
||||
sepa or lsv).
|
||||
|
||||
A banking mandate is attached to a bank account and represents an
|
||||
authorization that the bank account owner gives to a company for a
|
||||
specific operation (such as direct debit).
|
||||
You can setup mandates from the accounting menu or directly from a bank
|
||||
account.
|
||||
''',
|
||||
'installable': True,
|
||||
}
|
||||
20
account_banking_mandate/data/mandate_reference_sequence.xml
Normal file
20
account_banking_mandate/data/mandate_reference_sequence.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data noupdate="1">
|
||||
|
||||
|
||||
<record id="dd_mandate_seq_type" model="ir.sequence.type">
|
||||
<field name="name">DD Mandate Reference</field>
|
||||
<field name="code">account.banking.mandate</field>
|
||||
</record>
|
||||
|
||||
<record id="dd_mandate_seq" model="ir.sequence">
|
||||
<field name="name">DD Mandate Reference</field>
|
||||
<field name="code">account.banking.mandate</field>
|
||||
<field name="prefix">BM</field>
|
||||
<field name="padding" eval="7"/>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
355
account_banking_mandate/i18n/account_banking_mandate.pot
Normal file
355
account_banking_mandate/i18n/account_banking_mandate.pot
Normal file
@@ -0,0 +1,355 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_banking_mandate
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 8.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-10-31 23:00+0000\n"
|
||||
"PO-Revision-Date: 2014-10-31 23:00+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:ir.actions.act_window,help:account_banking_mandate.mandate_action
|
||||
msgid "<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to create a new Banking Mandate.\n"
|
||||
" </p><p>\n"
|
||||
" A Banking Mandate is a document signed by your customer that gives you the autorization to do one or several operations on his bank account.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: sql_constraint:account.banking.mandate:0
|
||||
msgid "A Mandate with the same reference already exists for this company !"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:ir.model,name:account_banking_mandate.model_account_banking_mandate
|
||||
msgid "A generic banking mandate"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_form
|
||||
msgid "Back to Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,partner_bank_id:0
|
||||
msgid "Bank Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:ir.model,name:account_banking_mandate.model_res_partner_bank
|
||||
msgid "Bank Accounts"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_form
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_tree
|
||||
msgid "Banking Mandate"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:mail.message.subtype,description:account_banking_mandate.mandate_cancel
|
||||
msgid "Banking Mandate Cancelled"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:mail.message.subtype,description:account_banking_mandate.mandate_valid
|
||||
msgid "Banking Mandate Validated"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:mail.message.subtype,description:account_banking_mandate.mandate_expired
|
||||
msgid "Banking Mandate has Expired"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:ir.actions.act_window,name:account_banking_mandate.mandate_action
|
||||
msgid "Banking Mandates"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: help:res.partner.bank,mandate_ids:0
|
||||
msgid "Banking mandates represents an authorization that the bank account owner gives to a company for a specific operation"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_form
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_search
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: code:addons/account_banking_mandate/models/account_banking_mandate.py:110
|
||||
#, python-format
|
||||
msgid "Cannot validate the mandate '%s' because it is not attached to a bank account."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: code:addons/account_banking_mandate/models/account_banking_mandate.py:106
|
||||
#, python-format
|
||||
msgid "Cannot validate the mandate '%s' without a date of signature."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,company_id:0
|
||||
msgid "Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,create_uid:0
|
||||
msgid "Created by"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,create_date:0
|
||||
msgid "Created on"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:payment.order:account_banking_mandate.view_mandate_payment_order_form
|
||||
msgid "DD Mandate"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:res.partner:account_banking_mandate.mandate_partner_form
|
||||
#: view:res.partner.bank:account_banking_mandate.mandate_partner_bank_tree
|
||||
msgid "DD Mandates"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,signature_date:0
|
||||
msgid "Date of Signature of the Mandate"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,last_debit_date:0
|
||||
msgid "Date of the Last Debit"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: help:account.banking.mandate,message_last_post:0
|
||||
msgid "Date of the last message posted on the record."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.invoice,mandate_id:0
|
||||
#: field:payment.line,mandate_id:0
|
||||
msgid "Direct Debit Mandate"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:res.partner.bank:account_banking_mandate.mandate_partner_bank_form
|
||||
#: field:res.partner.bank,mandate_ids:0
|
||||
msgid "Direct Debit Mandates"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_search
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_search
|
||||
msgid "Expired"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,message_follower_ids:0
|
||||
msgid "Followers"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: help:account.banking.mandate,message_summary:0
|
||||
msgid "Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,id:0
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: help:account.banking.mandate,message_unread:0
|
||||
msgid "If checked new messages require your attention."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:ir.model,name:account_banking_mandate.model_account_invoice
|
||||
msgid "Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,message_is_follower:0
|
||||
msgid "Is a Follower"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,message_last_post:0
|
||||
msgid "Last Message Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,write_uid:0
|
||||
msgid "Last Updated by"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,write_date:0
|
||||
msgid "Last Updated on"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:mail.message.subtype,name:account_banking_mandate.mandate_cancel
|
||||
msgid "Mandate Cancelled"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:mail.message.subtype,name:account_banking_mandate.mandate_expired
|
||||
msgid "Mandate Expired"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:mail.message.subtype,name:account_banking_mandate.mandate_valid
|
||||
msgid "Mandate Validated"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: code:addons/account_banking_mandate/models/account_banking_mandate.py:152
|
||||
#, python-format
|
||||
msgid "Mandate should be in cancel state"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: code:addons/account_banking_mandate/models/account_banking_mandate.py:140
|
||||
#, python-format
|
||||
msgid "Mandate should be in draft or valid state"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: code:addons/account_banking_mandate/models/account_banking_mandate.py:131
|
||||
#, python-format
|
||||
msgid "Mandate should be in draft state"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,message_ids:0
|
||||
msgid "Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: help:account.banking.mandate,message_ids:0
|
||||
msgid "Messages and communication history"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: help:account.banking.mandate,state:0
|
||||
msgid "Only valid mandates can be used in a payment line. A cancelled mandate is a mandate that has been cancelled by the customer."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,partner_id:0
|
||||
msgid "Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:ir.model,name:account_banking_mandate.model_payment_line
|
||||
msgid "Payment Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_tree
|
||||
msgid "Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_form
|
||||
#: field:account.banking.mandate,payment_line_ids:0
|
||||
msgid "Related Payment Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:ir.ui.menu,name:account_banking_mandate.mandate_menu
|
||||
msgid "SEPA Direct Debit Mandates"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,scan:0
|
||||
msgid "Scan of the Mandate"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_search
|
||||
msgid "Search Banking Mandates"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_tree
|
||||
msgid "Signature Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,state:0
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,message_summary:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: code:addons/account_banking_mandate/models/account_banking_mandate.py:92
|
||||
#, python-format
|
||||
msgid "The date of signature of mandate '%s' is in the future !"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: code:addons/account_banking_mandate/models/account_banking_mandate.py:97
|
||||
#, python-format
|
||||
msgid "The mandate '%s' can't have a date of last debit before the date of signature."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: code:addons/account_banking_mandate/models/payment_line.py:68
|
||||
#, python-format
|
||||
msgid "The payment line with reference '%s' has the bank account '%s' which is not attached to the mandate '%s' (this mandate is attached to the bank account '%s')."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,unique_mandate_reference:0
|
||||
msgid "Unique Mandate Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,message_unread:0
|
||||
msgid "Unread Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_search
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_form
|
||||
msgid "Validate"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_form
|
||||
msgid "You should set a mandate back to draft only if you cancelled it by mistake. Do you want to continue?"
|
||||
msgstr ""
|
||||
|
||||
360
account_banking_mandate/i18n/es.po
Normal file
360
account_banking_mandate/i18n/es.po
Normal file
@@ -0,0 +1,360 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_banking_mandate
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 8.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-10-31 23:00+0000\n"
|
||||
"PO-Revision-Date: 2014-10-31 23:00+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:ir.actions.act_window,help:account_banking_mandate.mandate_action
|
||||
msgid "<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to create a new Banking Mandate.\n"
|
||||
" </p><p>\n"
|
||||
" A Banking Mandate is a document signed by your customer that gives you the autorization to do one or several operations on his bank account.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr "<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Pulse para crear un nuevo mandato bancario.\n"
|
||||
" </p><p>\n"
|
||||
" Un mandato bancario es un documento firmado por su cliente que le da autorización a hacer una o varias operaciones en su cuenta bancaria.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: sql_constraint:account.banking.mandate:0
|
||||
msgid "A Mandate with the same reference already exists for this company !"
|
||||
msgstr "Ya existe un mandato con la misma referencia para esta compañía"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:ir.model,name:account_banking_mandate.model_account_banking_mandate
|
||||
msgid "A generic banking mandate"
|
||||
msgstr "Un mandato bancario genérico"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_form
|
||||
msgid "Back to Draft"
|
||||
msgstr "Volver a borrador"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,partner_bank_id:0
|
||||
msgid "Bank Account"
|
||||
msgstr "Cuenta bancaria"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:ir.model,name:account_banking_mandate.model_res_partner_bank
|
||||
msgid "Bank Accounts"
|
||||
msgstr "Cuentas bancarias"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_form
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_tree
|
||||
msgid "Banking Mandate"
|
||||
msgstr "Mandato bancario"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:mail.message.subtype,description:account_banking_mandate.mandate_cancel
|
||||
msgid "Banking Mandate Cancelled"
|
||||
msgstr "Mandato bancario cancelado"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:mail.message.subtype,description:account_banking_mandate.mandate_valid
|
||||
msgid "Banking Mandate Validated"
|
||||
msgstr "Mandato bancario validado"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:mail.message.subtype,description:account_banking_mandate.mandate_expired
|
||||
msgid "Banking Mandate has Expired"
|
||||
msgstr "El mandato bancario ha expirado"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:ir.actions.act_window,name:account_banking_mandate.mandate_action
|
||||
msgid "Banking Mandates"
|
||||
msgstr "Mandatos bancarios"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: help:res.partner.bank,mandate_ids:0
|
||||
msgid "Banking mandates represents an authorization that the bank account owner gives to a company for a specific operation"
|
||||
msgstr "Los mandatos bancarios representan una autorización que el propietario de la cuenta bancaria da a la compañía para un operación específica"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_form
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_search
|
||||
msgid "Cancelled"
|
||||
msgstr "Cancelado"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: code:addons/account_banking_mandate/models/account_banking_mandate.py:110
|
||||
#, python-format
|
||||
msgid "Cannot validate the mandate '%s' because it is not attached to a bank account."
|
||||
msgstr "No se puede validar el mandato '%s' porque no tiene ninguna cuenta bancaria asociada."
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: code:addons/account_banking_mandate/models/account_banking_mandate.py:106
|
||||
#, python-format
|
||||
msgid "Cannot validate the mandate '%s' without a date of signature."
|
||||
msgstr "No se puede validar el mandato '%s' sin una fecha de firma."
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,company_id:0
|
||||
msgid "Company"
|
||||
msgstr "Compañía"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,create_uid:0
|
||||
msgid "Created by"
|
||||
msgstr "Creado por"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,create_date:0
|
||||
msgid "Created on"
|
||||
msgstr "Creado en"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:payment.order:account_banking_mandate.view_mandate_payment_order_form
|
||||
msgid "DD Mandate"
|
||||
msgstr "Mandato bancario"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:res.partner:account_banking_mandate.mandate_partner_form
|
||||
#: view:res.partner.bank:account_banking_mandate.mandate_partner_bank_tree
|
||||
msgid "DD Mandates"
|
||||
msgstr "Mandatos bancarios"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,signature_date:0
|
||||
msgid "Date of Signature of the Mandate"
|
||||
msgstr "Fecha de la firma del mandato"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,last_debit_date:0
|
||||
msgid "Date of the Last Debit"
|
||||
msgstr "Fecha del último cobro"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: help:account.banking.mandate,message_last_post:0
|
||||
msgid "Date of the last message posted on the record."
|
||||
msgstr "Fecha del último mensaje publicado en el registro."
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.invoice,mandate_id:0
|
||||
#: field:payment.line,mandate_id:0
|
||||
msgid "Direct Debit Mandate"
|
||||
msgstr "Mandato de adeudo directo"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:res.partner.bank:account_banking_mandate.mandate_partner_bank_form
|
||||
#: field:res.partner.bank,mandate_ids:0
|
||||
msgid "Direct Debit Mandates"
|
||||
msgstr "Mandatos de adeudo directo"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_search
|
||||
msgid "Draft"
|
||||
msgstr "Borrador"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_search
|
||||
msgid "Expired"
|
||||
msgstr "Expirado"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,message_follower_ids:0
|
||||
msgid "Followers"
|
||||
msgstr "Seguidores"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: help:account.banking.mandate,message_summary:0
|
||||
msgid "Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views."
|
||||
msgstr "Contiene el resumen del chatter (nº de mensajes, ...). Este resumen está directamente en formato html para ser insertado en vistas kanban."
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,id:0
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: help:account.banking.mandate,message_unread:0
|
||||
msgid "If checked new messages require your attention."
|
||||
msgstr "Si está marcado, hay nuevos mensajes que requieren su atención"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:ir.model,name:account_banking_mandate.model_account_invoice
|
||||
msgid "Invoice"
|
||||
msgstr "Factura"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,message_is_follower:0
|
||||
msgid "Is a Follower"
|
||||
msgstr "Es un seguidor"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,message_last_post:0
|
||||
msgid "Last Message Date"
|
||||
msgstr "Fecha del último mensaje"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,write_uid:0
|
||||
msgid "Last Updated by"
|
||||
msgstr "Última actualización por"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,write_date:0
|
||||
msgid "Last Updated on"
|
||||
msgstr "Última actualización en"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:mail.message.subtype,name:account_banking_mandate.mandate_cancel
|
||||
msgid "Mandate Cancelled"
|
||||
msgstr "Mandato cancelado"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:mail.message.subtype,name:account_banking_mandate.mandate_expired
|
||||
msgid "Mandate Expired"
|
||||
msgstr "Mandato expirado"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:mail.message.subtype,name:account_banking_mandate.mandate_valid
|
||||
msgid "Mandate Validated"
|
||||
msgstr "Mandato validado"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: code:addons/account_banking_mandate/models/account_banking_mandate.py:152
|
||||
#, python-format
|
||||
msgid "Mandate should be in cancel state"
|
||||
msgstr "El mandato debe estar en estado cancelado"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: code:addons/account_banking_mandate/models/account_banking_mandate.py:140
|
||||
#, python-format
|
||||
msgid "Mandate should be in draft or valid state"
|
||||
msgstr "El mandato debe estar en estado borrador o validado"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: code:addons/account_banking_mandate/models/account_banking_mandate.py:131
|
||||
#, python-format
|
||||
msgid "Mandate should be in draft state"
|
||||
msgstr "El mandato debe estar en estado borrador"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,message_ids:0
|
||||
msgid "Messages"
|
||||
msgstr "Mensajes"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: help:account.banking.mandate,message_ids:0
|
||||
msgid "Messages and communication history"
|
||||
msgstr "Mensajes e historial de comunicación"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: help:account.banking.mandate,state:0
|
||||
msgid "Only valid mandates can be used in a payment line. A cancelled mandate is a mandate that has been cancelled by the customer."
|
||||
msgstr "Sólo se pueden usar mandatos validados en una línea de pago. Un mandato cancelado en un mandato que ha sido invalidado por el cliente."
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,partner_id:0
|
||||
msgid "Partner"
|
||||
msgstr "Empresa"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:ir.model,name:account_banking_mandate.model_payment_line
|
||||
msgid "Payment Line"
|
||||
msgstr "Línea de pago"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_tree
|
||||
msgid "Reference"
|
||||
msgstr "Referencia"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_form
|
||||
#: field:account.banking.mandate,payment_line_ids:0
|
||||
msgid "Related Payment Lines"
|
||||
msgstr "Líneas de pago relacionadas"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: model:ir.ui.menu,name:account_banking_mandate.mandate_menu
|
||||
msgid "SEPA Direct Debit Mandates"
|
||||
msgstr "Mandatos de adeudo directo SEPA"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,scan:0
|
||||
msgid "Scan of the Mandate"
|
||||
msgstr "Escaneado del mandato"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_search
|
||||
msgid "Search Banking Mandates"
|
||||
msgstr "Buscar mandatos bancarios"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_tree
|
||||
msgid "Signature Date"
|
||||
msgstr "Fecha de firma"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,state:0
|
||||
msgid "Status"
|
||||
msgstr "Estado"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,message_summary:0
|
||||
msgid "Summary"
|
||||
msgstr "Resumen"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: code:addons/account_banking_mandate/models/account_banking_mandate.py:92
|
||||
#, python-format
|
||||
msgid "The date of signature of mandate '%s' is in the future !"
|
||||
msgstr "La fecha de firma del mandato '%s' no puede ser superior a la actual"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: code:addons/account_banking_mandate/models/account_banking_mandate.py:97
|
||||
#, python-format
|
||||
msgid "The mandate '%s' can't have a date of last debit before the date of signature."
|
||||
msgstr "El mandato '%s' no puede tener una fecha de último cobro antes de la fecha de firma."
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: code:addons/account_banking_mandate/models/payment_line.py:68
|
||||
#, python-format
|
||||
msgid "The payment line with reference '%s' has the bank account '%s' which is not attached to the mandate '%s' (this mandate is attached to the bank account '%s')."
|
||||
msgstr "La línea de pago con referencia '%s' tiene la cuenta bancaria '%s', que no está puesta en el mandato '%s' (este mandato tiene como cuenta bancaria '%s')."
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,unique_mandate_reference:0
|
||||
msgid "Unique Mandate Reference"
|
||||
msgstr "Referencia única del mandato"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: field:account.banking.mandate,message_unread:0
|
||||
msgid "Unread Messages"
|
||||
msgstr "Mensajes sin leer"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_search
|
||||
msgid "Valid"
|
||||
msgstr "Válido"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_form
|
||||
msgid "Validate"
|
||||
msgstr "Validar"
|
||||
|
||||
#. module: account_banking_mandate
|
||||
#: view:account.banking.mandate:account_banking_mandate.view_mandate_form
|
||||
msgid "You should set a mandate back to draft only if you cancelled it by mistake. Do you want to continue?"
|
||||
msgstr "Debe establecer un mandato de vuelta a borrador sólo si lo cancelo por error. ¿Desea continuar?"
|
||||
|
||||
26
account_banking_mandate/models/__init__.py
Normal file
26
account_banking_mandate/models/__init__.py
Normal file
@@ -0,0 +1,26 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Mandate module for openERP
|
||||
# Copyright (C) 2014 Compassion CH (http://www.compassion.ch)
|
||||
# @author: Cyril Sester <csester@compassion.ch>,
|
||||
# Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
from . import account_banking_mandate
|
||||
from . import account_invoice
|
||||
from . import res_partner_bank
|
||||
from . import payment_line
|
||||
154
account_banking_mandate/models/account_banking_mandate.py
Normal file
154
account_banking_mandate/models/account_banking_mandate.py
Normal file
@@ -0,0 +1,154 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Mandate module for openERP
|
||||
# Copyright (C) 2014 Compassion CH (http://www.compassion.ch)
|
||||
# @author: Cyril Sester <csester@compassion.ch>,
|
||||
# Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from openerp import models, fields, exceptions, api, _
|
||||
|
||||
|
||||
class AccountBankingMandate(models.Model):
|
||||
''' The banking mandate is attached to a bank account and represents an
|
||||
authorization that the bank account owner gives to a company for a
|
||||
specific operation (such as direct debit)
|
||||
'''
|
||||
_name = 'account.banking.mandate'
|
||||
_description = "A generic banking mandate"
|
||||
_rec_name = 'unique_mandate_reference'
|
||||
_inherit = ['mail.thread']
|
||||
_order = 'signature_date desc'
|
||||
_track = {
|
||||
'state': {
|
||||
'account_banking_mandate.mandate_valid': (
|
||||
lambda self, cr, uid, obj, ctx=None: obj['state'] == 'valid'),
|
||||
'account_banking_mandate.mandate_expired': (
|
||||
lambda self, cr, uid, obj, ctx=None:
|
||||
obj['state'] == 'expired'),
|
||||
'account_banking_mandate.mandate_cancel': (
|
||||
lambda self, cr, uid, obj, ctx=None: obj['state'] == 'cancel'),
|
||||
},
|
||||
}
|
||||
|
||||
def _get_states(self):
|
||||
return [('draft', 'Draft'),
|
||||
('valid', 'Valid'),
|
||||
('expired', 'Expired'),
|
||||
('cancel', 'Cancelled')]
|
||||
|
||||
partner_bank_id = fields.Many2one(
|
||||
comodel_name='res.partner.bank', string='Bank Account',
|
||||
track_visibility='onchange')
|
||||
partner_id = fields.Many2one(
|
||||
comodel_name='res.partner', related='partner_bank_id.partner_id',
|
||||
string='Partner', store=True)
|
||||
company_id = fields.Many2one(
|
||||
comodel_name='res.company', string='Company', required=True,
|
||||
default=lambda self: self.env['res.company']._company_default_get(
|
||||
'account.banking.mandate'))
|
||||
unique_mandate_reference = fields.Char(
|
||||
string='Unique Mandate Reference', track_visibility='always',
|
||||
default='/')
|
||||
signature_date = fields.Date(string='Date of Signature of the Mandate',
|
||||
track_visibility='onchange')
|
||||
scan = fields.Binary(string='Scan of the Mandate')
|
||||
last_debit_date = fields.Date(string='Date of the Last Debit',
|
||||
readonly=True)
|
||||
state = fields.Selection(
|
||||
_get_states, string='Status', default='draft',
|
||||
help="Only valid mandates can be used in a payment line. A cancelled "
|
||||
"mandate is a mandate that has been cancelled by the customer.")
|
||||
payment_line_ids = fields.One2many(
|
||||
comodel_name='payment.line', inverse_name='mandate_id',
|
||||
string="Related Payment Lines")
|
||||
|
||||
_sql_constraints = [(
|
||||
'mandate_ref_company_uniq',
|
||||
'unique(unique_mandate_reference, company_id)',
|
||||
'A Mandate with the same reference already exists for this company !')]
|
||||
|
||||
@api.one
|
||||
@api.constrains('signature_date', 'last_debit_date')
|
||||
def _check_dates(self):
|
||||
if (self.signature_date and
|
||||
self.signature_date > fields.Date.context_today(self)):
|
||||
raise exceptions.Warning(
|
||||
_("The date of signature of mandate '%s' is in the future !")
|
||||
% self.unique_mandate_reference)
|
||||
if (self.signature_date and self.last_debit_date and
|
||||
self.signature_date > self.last_debit_date):
|
||||
raise exceptions.Warning(
|
||||
_("The mandate '%s' can't have a date of last debit before "
|
||||
"the date of signature.") % self.unique_mandate_reference)
|
||||
|
||||
@api.one
|
||||
@api.constrains('state', 'partner_bank_id')
|
||||
def _check_valid_state(self):
|
||||
if self.state == 'valid':
|
||||
if not self.signature_date:
|
||||
raise exceptions.Warning(
|
||||
_("Cannot validate the mandate '%s' without a date of "
|
||||
"signature.") % self.unique_mandate_reference)
|
||||
if not self.partner_bank_id:
|
||||
raise exceptions.Warning(
|
||||
_("Cannot validate the mandate '%s' because it is not "
|
||||
"attached to a bank account.") %
|
||||
self.unique_mandate_reference)
|
||||
|
||||
@api.model
|
||||
def create(self, vals=None):
|
||||
if vals.get('unique_mandate_reference', '/') == '/':
|
||||
vals['unique_mandate_reference'] = \
|
||||
self.env['ir.sequence'].next_by_code('account.banking.mandate')
|
||||
return super(AccountBankingMandate, self).create(vals)
|
||||
|
||||
@api.one
|
||||
@api.onchange('partner_bank_id')
|
||||
def mandate_partner_bank_change(self):
|
||||
self.partner_id = self.partner_bank_id.partner_id
|
||||
|
||||
@api.multi
|
||||
def validate(self):
|
||||
for mandate in self:
|
||||
if mandate.state != 'draft':
|
||||
raise exceptions.Warning(
|
||||
_('Mandate should be in draft state'))
|
||||
self.write({'state': 'valid'})
|
||||
return True
|
||||
|
||||
@api.multi
|
||||
def cancel(self):
|
||||
for mandate in self:
|
||||
if mandate.state not in ('draft', 'valid'):
|
||||
raise exceptions.Warning(
|
||||
_('Mandate should be in draft or valid state'))
|
||||
self.write({'state': 'cancel'})
|
||||
return True
|
||||
|
||||
@api.multi
|
||||
def back2draft(self):
|
||||
"""Allows to set the mandate back to the draft state.
|
||||
This is for mandates cancelled by mistake.
|
||||
"""
|
||||
for mandate in self:
|
||||
if mandate.state != 'cancel':
|
||||
raise exceptions.Warning(
|
||||
_('Mandate should be in cancel state'))
|
||||
self.write({'state': 'draft'})
|
||||
return True
|
||||
33
account_banking_mandate/models/account_invoice.py
Normal file
33
account_banking_mandate/models/account_invoice.py
Normal file
@@ -0,0 +1,33 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Mandate module for openERP
|
||||
# Copyright (C) 2014 Compassion CH (http://www.compassion.ch)
|
||||
# @author: Cyril Sester <csester@compassion.ch>,
|
||||
# Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from openerp import models, fields
|
||||
|
||||
|
||||
class AccountInvoice(models.Model):
|
||||
_inherit = 'account.invoice'
|
||||
|
||||
mandate_id = fields.Many2one(
|
||||
'account.banking.mandate', string='Direct Debit Mandate',
|
||||
domain=[('state', '=', 'valid')], readonly=True,
|
||||
states={'draft': [('readonly', False)]})
|
||||
76
account_banking_mandate/models/payment_line.py
Normal file
76
account_banking_mandate/models/payment_line.py
Normal file
@@ -0,0 +1,76 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Mandate module for openERP
|
||||
# Copyright (C) 2014 Compassion CH (http://www.compassion.ch)
|
||||
# @author: Cyril Sester <csester@compassion.ch>,
|
||||
# Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from openerp import models, fields, api, exceptions, _
|
||||
|
||||
|
||||
class PaymentLine(models.Model):
|
||||
_inherit = 'payment.line'
|
||||
|
||||
mandate_id = fields.Many2one(
|
||||
comodel_name='account.banking.mandate', string='Direct Debit Mandate',
|
||||
domain=[('state', '=', 'valid')])
|
||||
|
||||
@api.multi
|
||||
def create(self, vals=None):
|
||||
"""If the customer invoice has a mandate, take it
|
||||
otherwise, take the first valid mandate of the bank account
|
||||
"""
|
||||
if vals is None:
|
||||
vals = {}
|
||||
partner_bank_id = vals.get('bank_id')
|
||||
move_line_id = vals.get('move_line_id')
|
||||
if (self.env.context.get('search_payment_order_type') == 'debit'
|
||||
and 'mandate_id' not in vals):
|
||||
if move_line_id:
|
||||
line = self.env['account.move.line'].browse(move_line_id)
|
||||
if (line.invoice and line.invoice.type == 'out_invoice'
|
||||
and line.invoice.mandate_id):
|
||||
vals.update({
|
||||
'mandate_id': line.invoice.mandate_id.id,
|
||||
'bank_id': line.invoice.mandate_id.partner_bank_id.id,
|
||||
})
|
||||
if partner_bank_id and 'mandate_id' not in vals:
|
||||
mandates = self.env['account.banking.mandate'].search(
|
||||
[('partner_bank_id', '=', partner_bank_id),
|
||||
('state', '=', 'valid')])
|
||||
if mandates:
|
||||
vals['mandate_id'] = mandates[0].id
|
||||
return super(PaymentLine, self).create(vals)
|
||||
|
||||
@api.one
|
||||
@api.constrains('mandate_id', 'bank_id')
|
||||
def _check_mandate_bank_link(self):
|
||||
if (self.mandate_id and self.bank_id
|
||||
and self.mandate_id.partner_bank_id.id !=
|
||||
self.bank_id.id):
|
||||
raise exceptions.Warning(
|
||||
_("The payment line with reference '%s' has the bank account "
|
||||
"'%s' which is not attached to the mandate '%s' (this "
|
||||
"mandate is attached to the bank account '%s').") %
|
||||
(self.name,
|
||||
self.env['res.partner.bank'].name_get(
|
||||
[self.bank_id.id])[0][1],
|
||||
self.mandate_id.unique_mandate_reference,
|
||||
self.env['res.partner.bank'].name_get(
|
||||
[self.mandate_id.partner_bank_id.id])[0][1]))
|
||||
34
account_banking_mandate/models/res_partner_bank.py
Normal file
34
account_banking_mandate/models/res_partner_bank.py
Normal file
@@ -0,0 +1,34 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Mandate module for openERP
|
||||
# Copyright (C) 2014 Compassion CH (http://www.compassion.ch)
|
||||
# @author: Cyril Sester <csester@compassion.ch>,
|
||||
# Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from openerp import models, fields
|
||||
|
||||
|
||||
class ResPartnerBank(models.Model):
|
||||
_inherit = 'res.partner.bank'
|
||||
|
||||
mandate_ids = fields.One2many(
|
||||
comodel_name='account.banking.mandate', inverse_name='partner_bank_id',
|
||||
string='Direct Debit Mandates',
|
||||
help='Banking mandates represents an authorization that the bank '
|
||||
'account owner gives to a company for a specific operation')
|
||||
3
account_banking_mandate/security/ir.model.access.csv
Normal file
3
account_banking_mandate/security/ir.model.access.csv
Normal file
@@ -0,0 +1,3 @@
|
||||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_account_banking_mandate","Full access on account.banking.mandate","model_account_banking_mandate","account_payment.group_account_payment",1,1,1,1
|
||||
"access_account_banking_mandate_read","Read access on account.banking.mandate","model_account_banking_mandate","base.group_user",1,0,0,0
|
||||
|
BIN
account_banking_mandate/static/description/icon.png
Normal file
BIN
account_banking_mandate/static/description/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.2 KiB |
36
account_banking_mandate/test/banking_mandate.yml
Normal file
36
account_banking_mandate/test/banking_mandate.yml
Normal file
@@ -0,0 +1,36 @@
|
||||
-
|
||||
In order to test mandate, I create a partner with a bank account.
|
||||
Then, I create a mandate, validate it, cancel it and the set it back to draft
|
||||
|
||||
I create a partner
|
||||
-
|
||||
!record {model: res.partner, id: mandate_partner, view: False}:
|
||||
name: "Mandate test"
|
||||
-
|
||||
I create a partner bank account
|
||||
-
|
||||
!record {model: res.partner.bank, id: mandate_partner_bank, view: False}:
|
||||
state: 'bank'
|
||||
acc_number: '1234'
|
||||
partner_id: mandate_partner
|
||||
-
|
||||
I create a mandate on 1st January
|
||||
-
|
||||
!record {model: account.banking.mandate, id: test_mandate, view: False}:
|
||||
partner_bank_id: mandate_partner_bank
|
||||
signature_date: "2014-01-01"
|
||||
|
||||
-
|
||||
I check that the state field is automatically set by default
|
||||
-
|
||||
!assert {model: account.banking.mandate, id: test_mandate}:
|
||||
- state == 'draft'
|
||||
-
|
||||
I go through all states by clicking on buttons and check that cancel state is reached
|
||||
-
|
||||
!python {model: account.banking.mandate}: |
|
||||
self.validate(cr, uid, [ref('test_mandate')])
|
||||
self.cancel(cr, uid, [ref('test_mandate')])
|
||||
mandate = self.browse(cr, uid, ref('test_mandate'))
|
||||
assert mandate.state == 'cancel', 'Mandate is not in cancel state'
|
||||
self.back2draft(cr, uid, [ref('test_mandate')])
|
||||
122
account_banking_mandate/views/account_banking_mandate_view.xml
Normal file
122
account_banking_mandate/views/account_banking_mandate_view.xml
Normal file
@@ -0,0 +1,122 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 Akretion (http://www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
The licence is in the file __openerp__.py
|
||||
-->
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="view_mandate_form" model="ir.ui.view">
|
||||
<field name="name">view.mandate.form</field>
|
||||
<field name="model">account.banking.mandate</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Banking Mandate" version="7.0">
|
||||
<header>
|
||||
<button name="validate" type="object" string="Validate" states="draft" class="oe_highlight"/>
|
||||
<button name="cancel" type="object" string="Cancel" states="draft,valid"/>
|
||||
<button name="back2draft" type="object" string="Back to Draft"
|
||||
states="cancel" groups="account.group_account_manager"
|
||||
confirm="You should set a mandate back to draft only if you cancelled it by mistake. Do you want to continue?"/>
|
||||
<field name="state" widget="statusbar"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="unique_mandate_reference"
|
||||
class="oe_inline"
|
||||
readonly="1"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group name="main">
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="partner_bank_id"
|
||||
invisible="context.get('mandate_bank_partner_view')" />
|
||||
<field name="partner_id" invisible="context.get('mandate_bank_partner_view')" readonly="True"/>
|
||||
<field name="signature_date"/>
|
||||
<field name="scan"/>
|
||||
<field name="last_debit_date"/>
|
||||
</group>
|
||||
<group name="payment_lines" string="Related Payment Lines">
|
||||
<field name="payment_line_ids" nolabel="1"/>
|
||||
</group>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers"/>
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_mandate_tree" model="ir.ui.view">
|
||||
<field name="name">view.mandate.tree</field>
|
||||
<field name="model">account.banking.mandate</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Banking Mandate" colors="blue:state=='draft';black:state in ('expired', 'cancel')">
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="partner_id" invisible="context.get('mandate_bank_partner_view')"/>
|
||||
<field name="unique_mandate_reference" string="Reference"/>
|
||||
<field name="signature_date" string="Signature Date"/>
|
||||
<field name="last_debit_date"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_mandate_search" model="ir.ui.view">
|
||||
<field name="name">view.mandate.search</field>
|
||||
<field name="model">account.banking.mandate</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Banking Mandates">
|
||||
<field name="partner_id"/>
|
||||
<filter name="draft" string="Draft" domain="[('state', '=', 'draft')]" />
|
||||
<filter name="valid" string="Valid" domain="[('state', '=', 'valid')]" />
|
||||
<filter name="cancel" string="Cancelled" domain="[('state', '=', 'cancel')]" />
|
||||
<filter name="expired" string="Expired" domain="[('state', '=', 'expired')]" />
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mandate_action" model="ir.actions.act_window">
|
||||
<field name="name">Banking Mandates</field>
|
||||
<field name="res_model">account.banking.mandate</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to create a new Banking Mandate.
|
||||
</p><p>
|
||||
A Banking Mandate is a document signed by your customer that gives you the autorization to do one or several operations on his bank account.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="mandate_menu"
|
||||
parent="account_payment.menu_main_payment"
|
||||
action="mandate_action"
|
||||
sequence="20"
|
||||
/>
|
||||
|
||||
<!-- notifications in the chatter -->
|
||||
<record id="mandate_valid" model="mail.message.subtype">
|
||||
<field name="name">Mandate Validated</field>
|
||||
<field name="res_model">account.banking.mandate</field>
|
||||
<field name="default" eval="False"/>
|
||||
<field name="description">Banking Mandate Validated</field>
|
||||
</record>
|
||||
|
||||
<record id="mandate_expired" model="mail.message.subtype">
|
||||
<field name="name">Mandate Expired</field>
|
||||
<field name="res_model">account.banking.mandate</field>
|
||||
<field name="default" eval="False"/>
|
||||
<field name="description">Banking Mandate has Expired</field>
|
||||
</record>
|
||||
|
||||
<record id="mandate_cancel" model="mail.message.subtype">
|
||||
<field name="name">Mandate Cancelled</field>
|
||||
<field name="res_model">account.banking.mandate</field>
|
||||
<field name="default" eval="False"/>
|
||||
<field name="description">Banking Mandate Cancelled</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
22
account_banking_mandate/views/account_invoice_view.xml
Normal file
22
account_banking_mandate/views/account_invoice_view.xml
Normal file
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 Akretion (http://www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
The licence is in the file __openerp__.py
|
||||
-->
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="invoice_form" model="ir.ui.view">
|
||||
<field name="name">add.mandate.on.customer.invoice.form</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="inherit_id" ref="account.invoice_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_bank_id" position="after">
|
||||
<field name="mandate_id" domain="[('partner_id', '=', partner_id), ('state', '=', 'valid')]" attrs="{'invisible': [('type', '=', 'out_refund')]}"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
26
account_banking_mandate/views/account_payment_view.xml
Normal file
26
account_banking_mandate/views/account_payment_view.xml
Normal file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 Akretion (http://www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
The licence is in the file __openerp__.py
|
||||
-->
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="view_mandate_payment_order_form" model="ir.ui.view">
|
||||
<field name="name">mandate.payment.order.form</field>
|
||||
<field name="model">payment.order</field>
|
||||
<field name="inherit_id" ref="account_payment.view_payment_order_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='line_ids']/form/notebook/page/group/field[@name='bank_id']" position="after">
|
||||
<field name="mandate_id" domain="[('partner_bank_id', '=', bank_id), ('state', '=', 'valid')]" invisible="context.get('search_payment_order_type')!='debit'" context="{'default_partner_bank_id': bank_id}"/>
|
||||
<newline />
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='line_ids']/tree/field[@name='bank_id']" position="after">
|
||||
<field name="mandate_id" string="DD Mandate" invisible="context.get('search_payment_order_type')!='debit'"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
48
account_banking_mandate/views/res_partner_bank_view.xml
Normal file
48
account_banking_mandate/views/res_partner_bank_view.xml
Normal file
@@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 Akretion (http://www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
The licence is in the file __openerp__.py
|
||||
-->
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="mandate_partner_bank_form" model="ir.ui.view">
|
||||
<field name="name">mandate.res.partner.bank.form</field>
|
||||
<field name="model">res.partner.bank</field>
|
||||
<field name="inherit_id" ref="base.view_partner_bank_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<group name="bank" position="after">
|
||||
<group name="mandates" string="Direct Debit Mandates" colspan="4">
|
||||
<field name="mandate_ids" context="{'default_partner_bank_id': active_id, 'mandate_bank_partner_view': True}" nolabel="1"/>
|
||||
</group>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mandate_partner_bank_tree" model="ir.ui.view">
|
||||
<field name="name">mandate.res.partner.bank.tree</field>
|
||||
<field name="model">res.partner.bank</field>
|
||||
<field name="inherit_id" ref="base.view_partner_bank_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_id" position="after">
|
||||
<field name="mandate_ids" string="DD Mandates"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- add number of mandates in this list of bank accounts
|
||||
on the partner form -->
|
||||
<record id="mandate_partner_form" model="ir.ui.view">
|
||||
<field name="name">mandate.partner.form</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="account.view_partner_property_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='bank_ids']/tree/field[@name='owner_name']" position="after">
|
||||
<field name="mandate_ids" string="DD Mandates"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
Reference in New Issue
Block a user