mirror of
https://github.com/OCA/bank-payment.git
synced 2025-02-02 10:37:31 +02:00
[ADD] account_banking_mandate_contact: new module
This commit is contained in:
committed by
Ernesto Tejeda
parent
0d9fa7785f
commit
c98a7ae021
78
account_banking_mandate_contact/README.rst
Normal file
78
account_banking_mandate_contact/README.rst
Normal file
@@ -0,0 +1,78 @@
|
||||
===============================
|
||||
Account Banking Mandate Contact
|
||||
===============================
|
||||
|
||||
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
|
||||
:target: https://odoo-community.org/page/development-status
|
||||
:alt: Production/Stable
|
||||
.. |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_mandate_contact
|
||||
: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_mandate_contact
|
||||
: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|
|
||||
|
||||
Manage specific banking mandate in contact level
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
To use this module you need to:
|
||||
|
||||
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_mandate_contact%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
|
||||
~~~~~~~
|
||||
|
||||
* Tecnativa
|
||||
|
||||
Contributors
|
||||
~~~~~~~~~~~~
|
||||
|
||||
* Carlos Dauden <carlos.dauden@tecnativa.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_mandate_contact>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
||||
2
account_banking_mandate_contact/__init__.py
Normal file
2
account_banking_mandate_contact/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
from . import models
|
||||
18
account_banking_mandate_contact/__manifest__.py
Normal file
18
account_banking_mandate_contact/__manifest__.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Copyright 2019 Tecnativa - Carlos Dauden
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
{
|
||||
"name": "Account Banking Mandate Contact",
|
||||
"summary": "Assign specific banking mandates in contact level",
|
||||
"version": "13.0.1.0.0",
|
||||
"development_status": "Production/Stable",
|
||||
"category": "Banking addons",
|
||||
"website": "https://github.com/OCA/bank-payment",
|
||||
"author": "Tecnativa, Odoo Community Association (OCA)",
|
||||
"license": "AGPL-3",
|
||||
"application": False,
|
||||
"installable": True,
|
||||
"depends": ["account_banking_mandate", "sale"],
|
||||
"data": [
|
||||
"views/res_partner.xml",
|
||||
],
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_banking_mandate_contact
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 13.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_mandate_contact
|
||||
#: model:ir.model,name:account_banking_mandate_contact.model_res_partner
|
||||
msgid "Contact"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate_contact
|
||||
#: model:ir.model.fields,field_description:account_banking_mandate_contact.field_res_partner__contact_mandate_id
|
||||
#: model:ir.model.fields,field_description:account_banking_mandate_contact.field_res_users__contact_mandate_id
|
||||
msgid "Contact Mandate"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_banking_mandate_contact
|
||||
#: model:ir.model,name:account_banking_mandate_contact.model_account_move_line
|
||||
msgid "Journal Item"
|
||||
msgstr ""
|
||||
34
account_banking_mandate_contact/i18n/es.po
Normal file
34
account_banking_mandate_contact/i18n/es.po
Normal file
@@ -0,0 +1,34 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_banking_mandate_contact
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 11.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-02-21 12:57+0100\n"
|
||||
"PO-Revision-Date: 2020-02-21 12:58+0100\n"
|
||||
"Last-Translator: Carlos Dauden <carlos.dauden@tecnativa.com>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Poedit 1.8.7.1\n"
|
||||
|
||||
#. module: account_banking_mandate_contact
|
||||
#: model:ir.model,name:account_banking_mandate_contact.model_res_partner
|
||||
msgid "Contact"
|
||||
msgstr "Contacto"
|
||||
|
||||
#. module: account_banking_mandate_contact
|
||||
#: model:ir.model.fields,field_description:account_banking_mandate_contact.field_res_partner__contact_mandate_id
|
||||
#: model:ir.model.fields,field_description:account_banking_mandate_contact.field_res_users__contact_mandate_id
|
||||
msgid "Contact Mandate"
|
||||
msgstr "Mandato del contacto"
|
||||
|
||||
#. module: account_banking_mandate_contact
|
||||
#: model:ir.model,name:account_banking_mandate_contact.model_account_move_line
|
||||
msgid "Journal Item"
|
||||
msgstr "Apunte contable"
|
||||
3
account_banking_mandate_contact/models/__init__.py
Normal file
3
account_banking_mandate_contact/models/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
from . import account_move_line
|
||||
from . import res_partner
|
||||
27
account_banking_mandate_contact/models/account_move_line.py
Normal file
27
account_banking_mandate_contact/models/account_move_line.py
Normal file
@@ -0,0 +1,27 @@
|
||||
# Copyright 2019 Tecnativa - Carlos Dauden
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
|
||||
from odoo import models
|
||||
|
||||
|
||||
class AccountMoveLine(models.Model):
|
||||
_inherit = "account.move.line"
|
||||
|
||||
# Extended to use partner_shipping_id mandate if it have set
|
||||
def _prepare_payment_line_vals(self, payment_order):
|
||||
vals = super(AccountMoveLine, self)._prepare_payment_line_vals(payment_order)
|
||||
if payment_order.payment_type != "inbound" or self.mandate_id:
|
||||
return vals
|
||||
mandate = (
|
||||
self.move_id.partner_shipping_id.valid_mandate_id
|
||||
or self.move_id.partner_id.valid_mandate_id
|
||||
)
|
||||
if mandate:
|
||||
vals.update(
|
||||
{
|
||||
"mandate_id": mandate.id,
|
||||
"partner_bank_id": mandate.partner_bank_id.id,
|
||||
}
|
||||
)
|
||||
return vals
|
||||
21
account_banking_mandate_contact/models/res_partner.py
Normal file
21
account_banking_mandate_contact/models/res_partner.py
Normal file
@@ -0,0 +1,21 @@
|
||||
# Copyright 2019 Tecnativa - Carlos Dauden
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class ResPartner(models.Model):
|
||||
_inherit = "res.partner"
|
||||
|
||||
contact_mandate_id = fields.Many2one(
|
||||
comodel_name="account.banking.mandate",
|
||||
string="Contact Mandate",
|
||||
)
|
||||
|
||||
def _compute_valid_mandate_id(self):
|
||||
procesed_partners = self.browse()
|
||||
for partner in self:
|
||||
if partner.contact_mandate_id.state == "valid":
|
||||
partner.valid_mandate_id = partner.contact_mandate_id
|
||||
procesed_partners |= partner
|
||||
super(ResPartner, self - procesed_partners)._compute_valid_mandate_id()
|
||||
1
account_banking_mandate_contact/readme/CONTRIBUTORS.rst
Normal file
1
account_banking_mandate_contact/readme/CONTRIBUTORS.rst
Normal file
@@ -0,0 +1 @@
|
||||
* Carlos Dauden <carlos.dauden@tecnativa.com>
|
||||
1
account_banking_mandate_contact/readme/DESCRIPTION.rst
Normal file
1
account_banking_mandate_contact/readme/DESCRIPTION.rst
Normal file
@@ -0,0 +1 @@
|
||||
Manage specific banking mandate in contact level
|
||||
1
account_banking_mandate_contact/readme/USAGE.rst
Normal file
1
account_banking_mandate_contact/readme/USAGE.rst
Normal file
@@ -0,0 +1 @@
|
||||
To use this module you need to:
|
||||
BIN
account_banking_mandate_contact/static/description/icon.png
Normal file
BIN
account_banking_mandate_contact/static/description/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.2 KiB |
4
account_banking_mandate_contact/tests/__init__.py
Normal file
4
account_banking_mandate_contact/tests/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
# Copyright 2021 Tecnativa - Víctor Martínez
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl
|
||||
|
||||
from . import test_account_payment_order
|
||||
@@ -0,0 +1,117 @@
|
||||
# Copyright 2021 Tecnativa - Víctor Martínez
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl
|
||||
from odoo import fields
|
||||
from odoo.tests.common import Form, TransactionCase
|
||||
|
||||
|
||||
class TestAccountPaymentOrder(TransactionCase):
|
||||
def setUp(self):
|
||||
super(TestAccountPaymentOrder, self).setUp()
|
||||
self.partner = self.env["res.partner"].create({"name": "Test Partner"})
|
||||
self.product = self.env["product.product"].create({"name": "Test product"})
|
||||
self.partner_bank_core = self._create_res_partner_bank("N-CORE")
|
||||
self.mandate_core = self._create_mandate(self.partner_bank_core, "CORE")
|
||||
self.partner_bank_b2b = self._create_res_partner_bank("N-B2B")
|
||||
self.mandate_b2b = self._create_mandate(self.partner_bank_b2b, "B2B")
|
||||
self.method_sepa = self.env["account.payment.method"].create(
|
||||
{
|
||||
"name": "SEPA",
|
||||
"code": "sepa_direct_debit",
|
||||
"payment_type": "inbound",
|
||||
"bank_account_required": True,
|
||||
}
|
||||
)
|
||||
self.journal_bank = self.env["account.journal"].create(
|
||||
{"name": "BANK", "type": "bank", "code": "bank"}
|
||||
)
|
||||
payment_form = Form(self.env["account.payment.mode"])
|
||||
payment_form.name = "SEPA (CORE)"
|
||||
payment_form.payment_method_id = self.method_sepa
|
||||
payment_form.bank_account_link = "fixed"
|
||||
payment_form.fixed_journal_id = self.journal_bank
|
||||
payment_form.payment_order_ok = True
|
||||
self.payment_core = payment_form.save()
|
||||
self.payment_b2b = self.payment_core.copy({"name": "SEPA B2B"})
|
||||
self.partner.customer_payment_mode_id = self.payment_core.id
|
||||
self.env["account.journal"].create(
|
||||
{"name": "SALE", "type": "sale", "code": "sale"}
|
||||
)
|
||||
self.invoice = self._create_invoice()
|
||||
payment_order_form = Form(
|
||||
self.env["account.payment.order"].with_context(
|
||||
default_payment_type="inbound"
|
||||
)
|
||||
)
|
||||
payment_order_form.payment_mode_id = self.payment_core
|
||||
self.payment_order = payment_order_form.save()
|
||||
|
||||
def _create_res_partner_bank(self, acc_number):
|
||||
res_partner_bank_form = Form(self.env["res.partner.bank"])
|
||||
res_partner_bank_form.partner_id = self.partner
|
||||
res_partner_bank_form.acc_number = acc_number
|
||||
return res_partner_bank_form.save()
|
||||
|
||||
def _create_mandate(self, partner_bank, scheme):
|
||||
mandate_form = Form(self.env["account.banking.mandate"])
|
||||
mandate_form.partner_bank_id = partner_bank
|
||||
mandate_form.signature_date = fields.Date.from_string("2021-01-01")
|
||||
mandate = mandate_form.save()
|
||||
mandate.validate()
|
||||
return mandate
|
||||
|
||||
def _create_invoice(self):
|
||||
invoice_form = Form(
|
||||
self.env["account.move"].with_context(default_type="out_invoice")
|
||||
)
|
||||
invoice_form.partner_id = self.partner
|
||||
invoice_form.invoice_date = fields.Date.from_string("2021-01-01")
|
||||
with invoice_form.invoice_line_ids.new() as line_form:
|
||||
line_form.product_id = self.product
|
||||
line_form.quantity = 1
|
||||
line_form.price_unit = 30
|
||||
line_form.tax_ids.clear()
|
||||
invoice = invoice_form.save()
|
||||
invoice.action_post()
|
||||
return invoice
|
||||
|
||||
def test_invoice_payment_mode(self):
|
||||
self.assertEqual(self.invoice.state, "posted")
|
||||
self.assertEqual(self.invoice.payment_mode_id, self.payment_core)
|
||||
self.assertEqual(
|
||||
self.invoice.invoice_date_due, fields.Date.from_string("2021-01-01")
|
||||
)
|
||||
|
||||
def test_account_payment_order_core(self):
|
||||
line_create_form = Form(
|
||||
self.env["account.payment.line.create"].with_context(
|
||||
active_model="account.payment.order", active_id=self.payment_order.id
|
||||
)
|
||||
)
|
||||
line_create_form.date_type = "due"
|
||||
line_create_form.due_date = fields.Date.from_string("2021-01-01")
|
||||
line_create = line_create_form.save()
|
||||
line_create.populate()
|
||||
line_create.create_payment_lines()
|
||||
self.assertAlmostEqual(len(self.payment_order.payment_line_ids), 1)
|
||||
payment_line = self.payment_order.payment_line_ids.filtered(
|
||||
lambda x: x.partner_id == self.partner
|
||||
)
|
||||
self.assertEqual(payment_line.partner_bank_id, self.partner_bank_core)
|
||||
|
||||
def test_account_payment_order_core_extra(self):
|
||||
self.partner.contact_mandate_id = self.mandate_b2b
|
||||
line_create_form = Form(
|
||||
self.env["account.payment.line.create"].with_context(
|
||||
active_model="account.payment.order", active_id=self.payment_order.id
|
||||
)
|
||||
)
|
||||
line_create_form.date_type = "due"
|
||||
line_create_form.due_date = fields.Date.from_string("2021-01-01")
|
||||
line_create = line_create_form.save()
|
||||
line_create.populate()
|
||||
line_create.create_payment_lines()
|
||||
self.assertAlmostEqual(len(self.payment_order.payment_line_ids), 1)
|
||||
payment_line = self.payment_order.payment_line_ids.filtered(
|
||||
lambda x: x.partner_id == self.partner
|
||||
)
|
||||
self.assertEqual(payment_line.partner_bank_id, self.partner_bank_b2b)
|
||||
21
account_banking_mandate_contact/views/res_partner.xml
Normal file
21
account_banking_mandate_contact/views/res_partner.xml
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
|
||||
<record id="view_partner_property_form" model="ir.ui.view">
|
||||
<field name="model">res.partner</field>
|
||||
<field
|
||||
name="inherit_id"
|
||||
ref="account_payment_partner.view_partner_property_form"
|
||||
/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="customer_payment_mode_id" position="after">
|
||||
<field
|
||||
name="contact_mandate_id"
|
||||
options="{'no_create': True}"
|
||||
domain="[('partner_id', '=', commercial_partner_id), ('state', '=', 'valid')]"
|
||||
/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user