From 7fd57e0b12f63771cf50949d5707ce41f07a0035 Mon Sep 17 00:00:00 2001 From: Carlos Dauden Date: Fri, 9 Dec 2022 09:52:06 +0100 Subject: [PATCH 1/8] [ADD] account_banking_mandate_contact: new module --- account_banking_mandate_contact/README.rst | 78 ++++++++++++ account_banking_mandate_contact/__init__.py | 2 + .../__manifest__.py | 18 +++ .../i18n/account_banking_mandate_contact.pot | 30 +++++ account_banking_mandate_contact/i18n/es.po | 34 +++++ .../models/__init__.py | 3 + .../models/account_move_line.py | 27 ++++ .../models/res_partner.py | 21 ++++ .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 1 + .../readme/USAGE.rst | 1 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../tests/__init__.py | 4 + .../tests/test_account_payment_order.py | 117 ++++++++++++++++++ .../views/res_partner.xml | 21 ++++ 15 files changed, 358 insertions(+) create mode 100644 account_banking_mandate_contact/README.rst create mode 100644 account_banking_mandate_contact/__init__.py create mode 100644 account_banking_mandate_contact/__manifest__.py create mode 100644 account_banking_mandate_contact/i18n/account_banking_mandate_contact.pot create mode 100644 account_banking_mandate_contact/i18n/es.po create mode 100644 account_banking_mandate_contact/models/__init__.py create mode 100644 account_banking_mandate_contact/models/account_move_line.py create mode 100644 account_banking_mandate_contact/models/res_partner.py create mode 100644 account_banking_mandate_contact/readme/CONTRIBUTORS.rst create mode 100644 account_banking_mandate_contact/readme/DESCRIPTION.rst create mode 100644 account_banking_mandate_contact/readme/USAGE.rst create mode 100644 account_banking_mandate_contact/static/description/icon.png create mode 100644 account_banking_mandate_contact/tests/__init__.py create mode 100644 account_banking_mandate_contact/tests/test_account_payment_order.py create mode 100644 account_banking_mandate_contact/views/res_partner.xml diff --git a/account_banking_mandate_contact/README.rst b/account_banking_mandate_contact/README.rst new file mode 100644 index 000000000..b858bc439 --- /dev/null +++ b/account_banking_mandate_contact/README.rst @@ -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 `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* Carlos Dauden + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_banking_mandate_contact/__init__.py b/account_banking_mandate_contact/__init__.py new file mode 100644 index 000000000..3275ac2ad --- /dev/null +++ b/account_banking_mandate_contact/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import models diff --git a/account_banking_mandate_contact/__manifest__.py b/account_banking_mandate_contact/__manifest__.py new file mode 100644 index 000000000..b87ba80f8 --- /dev/null +++ b/account_banking_mandate_contact/__manifest__.py @@ -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", + ], +} diff --git a/account_banking_mandate_contact/i18n/account_banking_mandate_contact.pot b/account_banking_mandate_contact/i18n/account_banking_mandate_contact.pot new file mode 100644 index 000000000..7a501e0b3 --- /dev/null +++ b/account_banking_mandate_contact/i18n/account_banking_mandate_contact.pot @@ -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 "" diff --git a/account_banking_mandate_contact/i18n/es.po b/account_banking_mandate_contact/i18n/es.po new file mode 100644 index 000000000..393756256 --- /dev/null +++ b/account_banking_mandate_contact/i18n/es.po @@ -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 \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" diff --git a/account_banking_mandate_contact/models/__init__.py b/account_banking_mandate_contact/models/__init__.py new file mode 100644 index 000000000..a9f523dd9 --- /dev/null +++ b/account_banking_mandate_contact/models/__init__.py @@ -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 diff --git a/account_banking_mandate_contact/models/account_move_line.py b/account_banking_mandate_contact/models/account_move_line.py new file mode 100644 index 000000000..cf979797e --- /dev/null +++ b/account_banking_mandate_contact/models/account_move_line.py @@ -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 diff --git a/account_banking_mandate_contact/models/res_partner.py b/account_banking_mandate_contact/models/res_partner.py new file mode 100644 index 000000000..d8906e70b --- /dev/null +++ b/account_banking_mandate_contact/models/res_partner.py @@ -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() diff --git a/account_banking_mandate_contact/readme/CONTRIBUTORS.rst b/account_banking_mandate_contact/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..d4af61ff6 --- /dev/null +++ b/account_banking_mandate_contact/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Carlos Dauden diff --git a/account_banking_mandate_contact/readme/DESCRIPTION.rst b/account_banking_mandate_contact/readme/DESCRIPTION.rst new file mode 100644 index 000000000..f53813c8c --- /dev/null +++ b/account_banking_mandate_contact/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Manage specific banking mandate in contact level diff --git a/account_banking_mandate_contact/readme/USAGE.rst b/account_banking_mandate_contact/readme/USAGE.rst new file mode 100644 index 000000000..334d594cb --- /dev/null +++ b/account_banking_mandate_contact/readme/USAGE.rst @@ -0,0 +1 @@ +To use this module you need to: diff --git a/account_banking_mandate_contact/static/description/icon.png b/account_banking_mandate_contact/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/account_banking_mandate_contact/tests/__init__.py b/account_banking_mandate_contact/tests/__init__.py new file mode 100644 index 000000000..46e0b61ff --- /dev/null +++ b/account_banking_mandate_contact/tests/__init__.py @@ -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 diff --git a/account_banking_mandate_contact/tests/test_account_payment_order.py b/account_banking_mandate_contact/tests/test_account_payment_order.py new file mode 100644 index 000000000..79da668f7 --- /dev/null +++ b/account_banking_mandate_contact/tests/test_account_payment_order.py @@ -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) diff --git a/account_banking_mandate_contact/views/res_partner.xml b/account_banking_mandate_contact/views/res_partner.xml new file mode 100644 index 000000000..abda1a955 --- /dev/null +++ b/account_banking_mandate_contact/views/res_partner.xml @@ -0,0 +1,21 @@ + + + + + res.partner + + + + + + + + + From 7775d105f4dcaf0996cf668c7aa80e76cb502933 Mon Sep 17 00:00:00 2001 From: Ernesto Tejeda Date: Fri, 9 Dec 2022 09:55:37 +0100 Subject: [PATCH 2/8] [MIG] account_banking_mandate_contact: Migration to 15.0 --- account_banking_mandate_contact/README.rst | 46 +- .../__manifest__.py | 2 +- .../i18n/account_banking_mandate_contact.pot | 2 +- .../models/account_move_line.py | 2 +- .../models/res_partner.py | 2 +- .../readme/CONTRIBUTORS.rst | 6 +- .../readme/DESCRIPTION.rst | 4 +- .../readme/USAGE.rst | 15 +- .../static/description/index.html | 447 ++++++++++++++++++ .../tests/test_account_payment_order.py | 44 +- 10 files changed, 541 insertions(+), 29 deletions(-) create mode 100644 account_banking_mandate_contact/static/description/index.html diff --git a/account_banking_mandate_contact/README.rst b/account_banking_mandate_contact/README.rst index b858bc439..b5390d6bd 100644 --- a/account_banking_mandate_contact/README.rst +++ b/account_banking_mandate_contact/README.rst @@ -2,10 +2,13 @@ Account Banking Mandate Contact =============================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:72ef0855d177fa6dd1f3596940a04f53c849846bbe4590ff8a273197d0eaea1e + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png :target: https://odoo-community.org/page/development-status @@ -14,18 +17,20 @@ Account Banking Mandate Contact :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 + :target: https://github.com/OCA/bank-payment/tree/15.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 + :target: https://translation.odoo-community.org/projects/bank-payment-15-0/bank-payment-15-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 +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/bank-payment&target_branch=15.0 + :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| -Manage specific banking mandate in contact level +This module allows to select a specific banking mandate +(and thus, a specific bank account) at contact level, so that when doing +a debit order, such mandate is used for the invoices issued to that contact. **Table of contents** @@ -35,15 +40,28 @@ Manage specific banking mandate in contact level Usage ===== -To use this module you need to: +For selecting the mandate at contact level: + +#. Go to *Invoicing > Customers > Customers*. +#. Open or create one contact that has a parent. +#. On the "..." page, fill *Contact Mandate*. +#. That mandate will be populated in the debit order. + +Then the normal flow will be: + +#. Go to Invoicing > Customers > Customer invoices. +#. Create a new invoice for that contact. +#. Post the invoice. +#. Add it to a payment order, by any of the options that you can check on the *account_payment_order* module. +#. The populated mandate will be the one on the contact. Bug Tracker =========== Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -58,7 +76,11 @@ Authors Contributors ~~~~~~~~~~~~ -* Carlos Dauden +* `Tecnativa `_: + + * Carlos Dauden + * Ernesto Tejeda + * Pedro M. Baeza Maintainers ~~~~~~~~~~~ @@ -73,6 +95,6 @@ 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 `_ project on GitHub. +This module is part of the `OCA/bank-payment `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_banking_mandate_contact/__manifest__.py b/account_banking_mandate_contact/__manifest__.py index b87ba80f8..026a6a89c 100644 --- a/account_banking_mandate_contact/__manifest__.py +++ b/account_banking_mandate_contact/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Account Banking Mandate Contact", "summary": "Assign specific banking mandates in contact level", - "version": "13.0.1.0.0", + "version": "15.0.1.0.0", "development_status": "Production/Stable", "category": "Banking addons", "website": "https://github.com/OCA/bank-payment", diff --git a/account_banking_mandate_contact/i18n/account_banking_mandate_contact.pot b/account_banking_mandate_contact/i18n/account_banking_mandate_contact.pot index 7a501e0b3..f129f31cf 100644 --- a/account_banking_mandate_contact/i18n/account_banking_mandate_contact.pot +++ b/account_banking_mandate_contact/i18n/account_banking_mandate_contact.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 13.0\n" +"Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/account_banking_mandate_contact/models/account_move_line.py b/account_banking_mandate_contact/models/account_move_line.py index cf979797e..3ff0fd57a 100644 --- a/account_banking_mandate_contact/models/account_move_line.py +++ b/account_banking_mandate_contact/models/account_move_line.py @@ -11,7 +11,7 @@ class AccountMoveLine(models.Model): # 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: + if payment_order.payment_type != "inbound" or self.move_id.mandate_id: return vals mandate = ( self.move_id.partner_shipping_id.valid_mandate_id diff --git a/account_banking_mandate_contact/models/res_partner.py b/account_banking_mandate_contact/models/res_partner.py index d8906e70b..4a397d3a3 100644 --- a/account_banking_mandate_contact/models/res_partner.py +++ b/account_banking_mandate_contact/models/res_partner.py @@ -18,4 +18,4 @@ class ResPartner(models.Model): 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() + return super(ResPartner, self - procesed_partners)._compute_valid_mandate_id() diff --git a/account_banking_mandate_contact/readme/CONTRIBUTORS.rst b/account_banking_mandate_contact/readme/CONTRIBUTORS.rst index d4af61ff6..35b76b8b0 100644 --- a/account_banking_mandate_contact/readme/CONTRIBUTORS.rst +++ b/account_banking_mandate_contact/readme/CONTRIBUTORS.rst @@ -1 +1,5 @@ -* Carlos Dauden +* `Tecnativa `_: + + * Carlos Dauden + * Ernesto Tejeda + * Pedro M. Baeza diff --git a/account_banking_mandate_contact/readme/DESCRIPTION.rst b/account_banking_mandate_contact/readme/DESCRIPTION.rst index f53813c8c..24fdda832 100644 --- a/account_banking_mandate_contact/readme/DESCRIPTION.rst +++ b/account_banking_mandate_contact/readme/DESCRIPTION.rst @@ -1 +1,3 @@ -Manage specific banking mandate in contact level +This module allows to select a specific banking mandate +(and thus, a specific bank account) at contact level, so that when doing +a debit order, such mandate is used for the invoices issued to that contact. diff --git a/account_banking_mandate_contact/readme/USAGE.rst b/account_banking_mandate_contact/readme/USAGE.rst index 334d594cb..4a571f4fc 100644 --- a/account_banking_mandate_contact/readme/USAGE.rst +++ b/account_banking_mandate_contact/readme/USAGE.rst @@ -1 +1,14 @@ -To use this module you need to: +For selecting the mandate at contact level: + +#. Go to *Invoicing > Customers > Customers*. +#. Open or create one contact that has a parent. +#. On the "..." page, fill *Contact Mandate*. +#. That mandate will be populated in the debit order. + +Then the normal flow will be: + +#. Go to Invoicing > Customers > Customer invoices. +#. Create a new invoice for that contact. +#. Post the invoice. +#. Add it to a payment order, by any of the options that you can check on the *account_payment_order* module. +#. The populated mandate will be the one on the contact. diff --git a/account_banking_mandate_contact/static/description/index.html b/account_banking_mandate_contact/static/description/index.html new file mode 100644 index 000000000..af46009bb --- /dev/null +++ b/account_banking_mandate_contact/static/description/index.html @@ -0,0 +1,447 @@ + + + + + + +Account Banking Mandate Contact + + + +
+

Account Banking Mandate Contact

+ + +

Production/Stable License: AGPL-3 OCA/bank-payment Translate me on Weblate Try me on Runboat

+

This module allows to select a specific banking mandate +(and thus, a specific bank account) at contact level, so that when doing +a debit order, such mandate is used for the invoices issued to that contact.

+

Table of contents

+ +
+

Usage

+

For selecting the mandate at contact level:

+
    +
  1. Go to Invoicing > Customers > Customers.
  2. +
  3. Open or create one contact that has a parent.
  4. +
  5. On the “…” page, fill Contact Mandate.
  6. +
  7. That mandate will be populated in the debit order.
  8. +
+

Then the normal flow will be:

+
    +
  1. Go to Invoicing > Customers > Customer invoices.
  2. +
  3. Create a new invoice for that contact.
  4. +
  5. Post the invoice.
  6. +
  7. Add it to a payment order, by any of the options that you can check on the account_payment_order module.
  8. +
  9. The populated mandate will be the one on the contact.
  10. +
+
+
+

Bug Tracker

+

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

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+
    +
  • Tecnativa:
      +
    • Carlos Dauden
    • +
    • Ernesto Tejeda
    • +
    • Pedro M. Baeza
    • +
    +
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

This module is part of the OCA/bank-payment project on GitHub.

+

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

+
+
+
+ + diff --git a/account_banking_mandate_contact/tests/test_account_payment_order.py b/account_banking_mandate_contact/tests/test_account_payment_order.py index 79da668f7..30c6428ce 100644 --- a/account_banking_mandate_contact/tests/test_account_payment_order.py +++ b/account_banking_mandate_contact/tests/test_account_payment_order.py @@ -1,26 +1,30 @@ # Copyright 2021 Tecnativa - Víctor Martínez # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl + +from unittest.mock import patch + from odoo import fields from odoo.tests.common import Form, TransactionCase +from odoo.addons.account.models.account_payment_method import AccountPaymentMethod + class TestAccountPaymentOrder(TransactionCase): def setUp(self): - super(TestAccountPaymentOrder, self).setUp() + super().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, - } - ) + payment_method_vals = { + "name": "SEPA", + "code": "sepa_direct_debit", + "payment_type": "inbound", + "bank_account_required": True, + } + self.method_sepa = self._create_multi_bank_payment_method(payment_method_vals) self.journal_bank = self.env["account.journal"].create( {"name": "BANK", "type": "bank", "code": "bank"} ) @@ -45,6 +49,26 @@ class TestAccountPaymentOrder(TransactionCase): payment_order_form.payment_mode_id = self.payment_core self.payment_order = payment_order_form.save() + def _create_multi_bank_payment_method(self, payment_method_vals): + method_get_payment_method_information = ( + AccountPaymentMethod._get_payment_method_information + ) + + def _get_payment_method_information(self): + res = method_get_payment_method_information(self) + res[payment_method_vals["code"]] = { + "mode": "multi", + "domain": [("type", "=", "bank")], + } + return res + + with patch.object( + AccountPaymentMethod, + "_get_payment_method_information", + _get_payment_method_information, + ): + return self.env["account.payment.method"].create(payment_method_vals) + 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 @@ -61,7 +85,7 @@ class TestAccountPaymentOrder(TransactionCase): def _create_invoice(self): invoice_form = Form( - self.env["account.move"].with_context(default_type="out_invoice") + self.env["account.move"].with_context(default_move_type="out_invoice") ) invoice_form.partner_id = self.partner invoice_form.invoice_date = fields.Date.from_string("2021-01-01") From cad5df2386635bc7e338816945e390795adfd353 Mon Sep 17 00:00:00 2001 From: josep-tecnativa Date: Mon, 16 Oct 2023 12:18:30 +0200 Subject: [PATCH 3/8] [IMP] account_banking_mandate_contact: test performance improvement - Switch to setUpClass for avoiding repeat the same setup for each test. - Include context keys for avoiding mail operations overhead. --- account_banking_mandate_contact/README.rst | 2 +- .../__manifest__.py | 2 +- .../static/description/index.html | 2 +- .../tests/test_account_payment_order.py | 83 +++++++++++-------- 4 files changed, 52 insertions(+), 37 deletions(-) diff --git a/account_banking_mandate_contact/README.rst b/account_banking_mandate_contact/README.rst index b5390d6bd..c1f73c485 100644 --- a/account_banking_mandate_contact/README.rst +++ b/account_banking_mandate_contact/README.rst @@ -7,7 +7,7 @@ Account Banking Mandate Contact !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:72ef0855d177fa6dd1f3596940a04f53c849846bbe4590ff8a273197d0eaea1e + !! source digest: sha256:c037b632e64403ec6e4d61e7275eece4b909b3cdfe5199867e18ae8e362381bb !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png diff --git a/account_banking_mandate_contact/__manifest__.py b/account_banking_mandate_contact/__manifest__.py index 026a6a89c..16cca8aea 100644 --- a/account_banking_mandate_contact/__manifest__.py +++ b/account_banking_mandate_contact/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Account Banking Mandate Contact", "summary": "Assign specific banking mandates in contact level", - "version": "15.0.1.0.0", + "version": "15.0.1.0.1", "development_status": "Production/Stable", "category": "Banking addons", "website": "https://github.com/OCA/bank-payment", diff --git a/account_banking_mandate_contact/static/description/index.html b/account_banking_mandate_contact/static/description/index.html index af46009bb..633c4576d 100644 --- a/account_banking_mandate_contact/static/description/index.html +++ b/account_banking_mandate_contact/static/description/index.html @@ -367,7 +367,7 @@ ul.auto-toc { !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:72ef0855d177fa6dd1f3596940a04f53c849846bbe4590ff8a273197d0eaea1e +!! source digest: sha256:c037b632e64403ec6e4d61e7275eece4b909b3cdfe5199867e18ae8e362381bb !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Production/Stable License: AGPL-3 OCA/bank-payment Translate me on Weblate Try me on Runboat

This module allows to select a specific banking mandate diff --git a/account_banking_mandate_contact/tests/test_account_payment_order.py b/account_banking_mandate_contact/tests/test_account_payment_order.py index 30c6428ce..c40dd11d3 100644 --- a/account_banking_mandate_contact/tests/test_account_payment_order.py +++ b/account_banking_mandate_contact/tests/test_account_payment_order.py @@ -10,52 +10,64 @@ from odoo.addons.account.models.account_payment_method import AccountPaymentMeth class TestAccountPaymentOrder(TransactionCase): - def setUp(self): - super().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") + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env( + context=dict( + cls.env.context, + mail_create_nolog=True, + mail_create_nosubscribe=True, + mail_notrack=True, + no_reset_password=True, + tracking_disable=True, + ) + ) + cls.partner = cls.env["res.partner"].create({"name": "Test Partner"}) + cls.product = cls.env["product.product"].create({"name": "Test product"}) + cls.partner_bank_core = cls._create_res_partner_bank("N-CORE") + cls.mandate_core = cls._create_mandate(cls.partner_bank_core, "CORE") + cls.partner_bank_b2b = cls._create_res_partner_bank("N-B2B") + cls.mandate_b2b = cls._create_mandate(cls.partner_bank_b2b, "B2B") payment_method_vals = { "name": "SEPA", "code": "sepa_direct_debit", "payment_type": "inbound", "bank_account_required": True, } - self.method_sepa = self._create_multi_bank_payment_method(payment_method_vals) - self.journal_bank = self.env["account.journal"].create( + cls.method_sepa = cls._create_multi_bank_payment_method(payment_method_vals) + cls.journal_bank = cls.env["account.journal"].create( {"name": "BANK", "type": "bank", "code": "bank"} ) - payment_form = Form(self.env["account.payment.mode"]) + payment_form = Form(cls.env["account.payment.mode"]) payment_form.name = "SEPA (CORE)" - payment_form.payment_method_id = self.method_sepa + payment_form.payment_method_id = cls.method_sepa payment_form.bank_account_link = "fixed" - payment_form.fixed_journal_id = self.journal_bank + payment_form.fixed_journal_id = cls.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( + cls.payment_core = payment_form.save() + cls.payment_b2b = cls.payment_core.copy({"name": "SEPA B2B"}) + cls.partner.customer_payment_mode_id = cls.payment_core.id + cls.env["account.journal"].create( {"name": "SALE", "type": "sale", "code": "sale"} ) - self.invoice = self._create_invoice() + cls.invoice = cls._create_invoice() payment_order_form = Form( - self.env["account.payment.order"].with_context( + cls.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() + payment_order_form.payment_mode_id = cls.payment_core + cls.payment_order = payment_order_form.save() - def _create_multi_bank_payment_method(self, payment_method_vals): + @classmethod + def _create_multi_bank_payment_method(cls, payment_method_vals): method_get_payment_method_information = ( AccountPaymentMethod._get_payment_method_information ) - def _get_payment_method_information(self): - res = method_get_payment_method_information(self) + def _get_payment_method_information(cls): + res = method_get_payment_method_information(cls) res[payment_method_vals["code"]] = { "mode": "multi", "domain": [("type", "=", "bank")], @@ -67,30 +79,33 @@ class TestAccountPaymentOrder(TransactionCase): "_get_payment_method_information", _get_payment_method_information, ): - return self.env["account.payment.method"].create(payment_method_vals) + return cls.env["account.payment.method"].create(payment_method_vals) - 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 + @classmethod + def _create_res_partner_bank(cls, acc_number): + res_partner_bank_form = Form(cls.env["res.partner.bank"]) + res_partner_bank_form.partner_id = cls.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"]) + @classmethod + def _create_mandate(cls, partner_bank, scheme): + mandate_form = Form(cls.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): + @classmethod + def _create_invoice(cls): invoice_form = Form( - self.env["account.move"].with_context(default_move_type="out_invoice") + cls.env["account.move"].with_context(default_move_type="out_invoice") ) - invoice_form.partner_id = self.partner + invoice_form.partner_id = cls.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.product_id = cls.product line_form.quantity = 1 line_form.price_unit = 30 line_form.tax_ids.clear() From bcf3ebaf06d2ba99d4bbf0acd7f5cd566b96ddac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez?= Date: Wed, 6 Mar 2024 13:51:11 +0100 Subject: [PATCH 4/8] [MIG] account_banking_mandate_contact: Migration to 16.0 --- account_banking_mandate_contact/README.rst | 16 ++++++++++------ account_banking_mandate_contact/__manifest__.py | 2 +- .../i18n/account_banking_mandate_contact.pot | 2 +- .../models/res_partner.py | 12 ++++++------ .../readme/CONTRIBUTORS.rst | 4 ++++ .../static/description/index.html | 12 ++++++++---- .../tests/test_account_payment_order.py | 10 +++++----- 7 files changed, 35 insertions(+), 23 deletions(-) diff --git a/account_banking_mandate_contact/README.rst b/account_banking_mandate_contact/README.rst index c1f73c485..cb6e51efd 100644 --- a/account_banking_mandate_contact/README.rst +++ b/account_banking_mandate_contact/README.rst @@ -7,7 +7,7 @@ Account Banking Mandate Contact !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:c037b632e64403ec6e4d61e7275eece4b909b3cdfe5199867e18ae8e362381bb + !! source digest: sha256:e64a6ce44499395afe175300e7c9551d1ea8bdd1263b8fc251600675ee2e07c9 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png @@ -17,13 +17,13 @@ Account Banking Mandate Contact :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/15.0/account_banking_mandate_contact + :target: https://github.com/OCA/bank-payment/tree/16.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-15-0/bank-payment-15-0-account_banking_mandate_contact + :target: https://translation.odoo-community.org/projects/bank-payment-16-0/bank-payment-16-0-account_banking_mandate_contact :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/bank-payment&target_branch=15.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/bank-payment&target_branch=16.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -61,7 +61,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -82,6 +82,10 @@ Contributors * Ernesto Tejeda * Pedro M. Baeza +* `Sygel `__: + + * Alberto Martínez + Maintainers ~~~~~~~~~~~ @@ -95,6 +99,6 @@ 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 `_ project on GitHub. +This module is part of the `OCA/bank-payment `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_banking_mandate_contact/__manifest__.py b/account_banking_mandate_contact/__manifest__.py index 16cca8aea..e32d1020e 100644 --- a/account_banking_mandate_contact/__manifest__.py +++ b/account_banking_mandate_contact/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Account Banking Mandate Contact", "summary": "Assign specific banking mandates in contact level", - "version": "15.0.1.0.1", + "version": "16.0.1.0.1", "development_status": "Production/Stable", "category": "Banking addons", "website": "https://github.com/OCA/bank-payment", diff --git a/account_banking_mandate_contact/i18n/account_banking_mandate_contact.pot b/account_banking_mandate_contact/i18n/account_banking_mandate_contact.pot index f129f31cf..856a796d5 100644 --- a/account_banking_mandate_contact/i18n/account_banking_mandate_contact.pot +++ b/account_banking_mandate_contact/i18n/account_banking_mandate_contact.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/account_banking_mandate_contact/models/res_partner.py b/account_banking_mandate_contact/models/res_partner.py index 4a397d3a3..cc6cfd96c 100644 --- a/account_banking_mandate_contact/models/res_partner.py +++ b/account_banking_mandate_contact/models/res_partner.py @@ -13,9 +13,9 @@ class ResPartner(models.Model): ) 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 - return super(ResPartner, self - procesed_partners)._compute_valid_mandate_id() + partners_to_process = self.filtered( + lambda x: x.contact_mandate_id.state == "valid" + ) + for partner in partners_to_process: + partner.valid_mandate_id = partner.contact_mandate_id + return super(ResPartner, self - partners_to_process)._compute_valid_mandate_id() diff --git a/account_banking_mandate_contact/readme/CONTRIBUTORS.rst b/account_banking_mandate_contact/readme/CONTRIBUTORS.rst index 35b76b8b0..18e8db519 100644 --- a/account_banking_mandate_contact/readme/CONTRIBUTORS.rst +++ b/account_banking_mandate_contact/readme/CONTRIBUTORS.rst @@ -3,3 +3,7 @@ * Carlos Dauden * Ernesto Tejeda * Pedro M. Baeza + +* `Sygel `__: + + * Alberto Martínez \ No newline at end of file diff --git a/account_banking_mandate_contact/static/description/index.html b/account_banking_mandate_contact/static/description/index.html index 633c4576d..aa1224d5e 100644 --- a/account_banking_mandate_contact/static/description/index.html +++ b/account_banking_mandate_contact/static/description/index.html @@ -367,9 +367,9 @@ ul.auto-toc { !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:c037b632e64403ec6e4d61e7275eece4b909b3cdfe5199867e18ae8e362381bb +!! source digest: sha256:e64a6ce44499395afe175300e7c9551d1ea8bdd1263b8fc251600675ee2e07c9 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Production/Stable License: AGPL-3 OCA/bank-payment Translate me on Weblate Try me on Runboat

+

Production/Stable License: AGPL-3 OCA/bank-payment Translate me on Weblate Try me on Runboat

This module allows to select a specific banking mandate (and thus, a specific bank account) at contact level, so that when doing a debit order, such mandate is used for the invoices issued to that contact.

@@ -409,7 +409,7 @@ a debit order, such mandate is used for the invoices issued to that contact.

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

+feedback.

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

@@ -429,6 +429,10 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
  • Pedro M. Baeza
  • +
  • Sygel:
      +
    • Alberto Martínez
    • +
    +
  • @@ -438,7 +442,7 @@ If you spotted it first, help us to smash it by providing a detailed and welcome

    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 project on GitHub.

    +

    This module is part of the OCA/bank-payment project on GitHub.

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

    diff --git a/account_banking_mandate_contact/tests/test_account_payment_order.py b/account_banking_mandate_contact/tests/test_account_payment_order.py index c40dd11d3..34cc4259d 100644 --- a/account_banking_mandate_contact/tests/test_account_payment_order.py +++ b/account_banking_mandate_contact/tests/test_account_payment_order.py @@ -111,14 +111,13 @@ class TestAccountPaymentOrder(TransactionCase): 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") - ) + self.assertEqual(self.invoice.invoice_date_due, fields.Date.today()) def test_account_payment_order_core(self): line_create_form = Form( @@ -127,7 +126,7 @@ class TestAccountPaymentOrder(TransactionCase): ) ) line_create_form.date_type = "due" - line_create_form.due_date = fields.Date.from_string("2021-01-01") + line_create_form.due_date = fields.Date.today() line_create = line_create_form.save() line_create.populate() line_create.create_payment_lines() @@ -145,7 +144,7 @@ class TestAccountPaymentOrder(TransactionCase): ) ) line_create_form.date_type = "due" - line_create_form.due_date = fields.Date.from_string("2021-01-01") + line_create_form.due_date = fields.Date.today() line_create = line_create_form.save() line_create.populate() line_create.create_payment_lines() @@ -153,4 +152,5 @@ class TestAccountPaymentOrder(TransactionCase): payment_line = self.payment_order.payment_line_ids.filtered( lambda x: x.partner_id == self.partner ) + self.assertEqual(payment_line.mandate_id, self.mandate_b2b) self.assertEqual(payment_line.partner_bank_id, self.partner_bank_b2b) From 4be0e96104b97a7c87ce7b7616f73faaea72dae4 Mon Sep 17 00:00:00 2001 From: mymage Date: Thu, 2 May 2024 15:08:19 +0000 Subject: [PATCH 5/8] Added translation using Weblate (Italian) --- account_banking_mandate_contact/i18n/it.po | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 account_banking_mandate_contact/i18n/it.po diff --git a/account_banking_mandate_contact/i18n/it.po b/account_banking_mandate_contact/i18n/it.po new file mode 100644 index 000000000..41464edac --- /dev/null +++ b/account_banking_mandate_contact/i18n/it.po @@ -0,0 +1,33 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_banking_mandate_contact +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-05-03 14:37+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: account_banking_mandate_contact +#: model:ir.model,name:account_banking_mandate_contact.model_res_partner +msgid "Contact" +msgstr "Contatto" + +#. 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 contatto" + +#. module: account_banking_mandate_contact +#: model:ir.model,name:account_banking_mandate_contact.model_account_move_line +msgid "Journal Item" +msgstr "Movimento contabile" From 4f93281bd6ea2d31d273191608221bf48d7ab962 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Wed, 8 May 2024 10:57:17 +0200 Subject: [PATCH 6/8] [IMP] account_banking_mandate_contact: Improve tests (remove mock) Changes done: - Add _get_payment_method_information() compatibility from account_banking_mandate - Remove mock from account_banking_mandate_contact tests --- .../models/account_payment_method.py | 11 ++++++- .../tests/test_account_payment_order.py | 33 ++++--------------- 2 files changed, 16 insertions(+), 28 deletions(-) diff --git a/account_banking_mandate/models/account_payment_method.py b/account_banking_mandate/models/account_payment_method.py index de57f69ae..426195ea5 100644 --- a/account_banking_mandate/models/account_payment_method.py +++ b/account_banking_mandate/models/account_payment_method.py @@ -1,7 +1,7 @@ # Copyright 2016-2020 Akretion (Alexis de Lattre ) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from odoo import fields, models +from odoo import api, fields, models class AccountPaymentMethod(models.Model): @@ -11,3 +11,12 @@ class AccountPaymentMethod(models.Model): help="Activate this option if this payment method requires your " "customer to sign a direct debit mandate with your company.", ) + + @api.model + def _get_payment_method_information(self): + res = super()._get_payment_method_information() + res["sepa_direct_debit"] = { + "mode": "multi", + "domain": [("type", "=", "bank")], + } + return res diff --git a/account_banking_mandate_contact/tests/test_account_payment_order.py b/account_banking_mandate_contact/tests/test_account_payment_order.py index 34cc4259d..22768bc65 100644 --- a/account_banking_mandate_contact/tests/test_account_payment_order.py +++ b/account_banking_mandate_contact/tests/test_account_payment_order.py @@ -1,13 +1,9 @@ # Copyright 2021 Tecnativa - Víctor Martínez # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl -from unittest.mock import patch - from odoo import fields from odoo.tests.common import Form, TransactionCase -from odoo.addons.account.models.account_payment_method import AccountPaymentMethod - class TestAccountPaymentOrder(TransactionCase): @classmethod @@ -35,9 +31,13 @@ class TestAccountPaymentOrder(TransactionCase): "payment_type": "inbound", "bank_account_required": True, } - cls.method_sepa = cls._create_multi_bank_payment_method(payment_method_vals) + cls.method_sepa = cls.env["account.payment.method"].create(payment_method_vals) cls.journal_bank = cls.env["account.journal"].create( - {"name": "BANK", "type": "bank", "code": "bank"} + { + "name": "BANK", + "type": "bank", + "code": "bank", + } ) payment_form = Form(cls.env["account.payment.mode"]) payment_form.name = "SEPA (CORE)" @@ -60,27 +60,6 @@ class TestAccountPaymentOrder(TransactionCase): payment_order_form.payment_mode_id = cls.payment_core cls.payment_order = payment_order_form.save() - @classmethod - def _create_multi_bank_payment_method(cls, payment_method_vals): - method_get_payment_method_information = ( - AccountPaymentMethod._get_payment_method_information - ) - - def _get_payment_method_information(cls): - res = method_get_payment_method_information(cls) - res[payment_method_vals["code"]] = { - "mode": "multi", - "domain": [("type", "=", "bank")], - } - return res - - with patch.object( - AccountPaymentMethod, - "_get_payment_method_information", - _get_payment_method_information, - ): - return cls.env["account.payment.method"].create(payment_method_vals) - @classmethod def _create_res_partner_bank(cls, acc_number): res_partner_bank_form = Form(cls.env["res.partner.bank"]) From ba4c0af0d4947ad5b4521ff314a4f019c47fea55 Mon Sep 17 00:00:00 2001 From: sygel Date: Tue, 21 May 2024 15:35:33 +0200 Subject: [PATCH 7/8] [IMP] account_banking_mandate_contact: pre-commit auto fixes --- account_banking_mandate_contact/README.rst | 55 ++++++++++--------- .../pyproject.toml | 3 + .../readme/CONTRIBUTORS.md | 6 ++ .../readme/CONTRIBUTORS.rst | 9 --- .../readme/DESCRIPTION.md | 3 + .../readme/DESCRIPTION.rst | 3 - .../readme/USAGE.md | 15 +++++ .../readme/USAGE.rst | 14 ----- .../static/description/index.html | 27 +++++---- 9 files changed, 70 insertions(+), 65 deletions(-) create mode 100644 account_banking_mandate_contact/pyproject.toml create mode 100644 account_banking_mandate_contact/readme/CONTRIBUTORS.md delete mode 100644 account_banking_mandate_contact/readme/CONTRIBUTORS.rst create mode 100644 account_banking_mandate_contact/readme/DESCRIPTION.md delete mode 100644 account_banking_mandate_contact/readme/DESCRIPTION.rst create mode 100644 account_banking_mandate_contact/readme/USAGE.md delete mode 100644 account_banking_mandate_contact/readme/USAGE.rst diff --git a/account_banking_mandate_contact/README.rst b/account_banking_mandate_contact/README.rst index cb6e51efd..d48b22a12 100644 --- a/account_banking_mandate_contact/README.rst +++ b/account_banking_mandate_contact/README.rst @@ -17,20 +17,20 @@ Account Banking Mandate Contact :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/16.0/account_banking_mandate_contact + :target: https://github.com/OCA/bank-payment/tree/17.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-16-0/bank-payment-16-0-account_banking_mandate_contact + :target: https://translation.odoo-community.org/projects/bank-payment-17-0/bank-payment-17-0-account_banking_mandate_contact :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/bank-payment&target_branch=16.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/bank-payment&target_branch=17.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| -This module allows to select a specific banking mandate -(and thus, a specific bank account) at contact level, so that when doing -a debit order, such mandate is used for the invoices issued to that contact. +This module allows to select a specific banking mandate (and thus, a +specific bank account) at contact level, so that when doing a debit +order, such mandate is used for the invoices issued to that contact. **Table of contents** @@ -42,18 +42,19 @@ Usage For selecting the mandate at contact level: -#. Go to *Invoicing > Customers > Customers*. -#. Open or create one contact that has a parent. -#. On the "..." page, fill *Contact Mandate*. -#. That mandate will be populated in the debit order. +1. Go to *Invoicing > Customers > Customers*. +2. Open or create one contact that has a parent. +3. On the "..." page, fill *Contact Mandate*. +4. That mandate will be populated in the debit order. Then the normal flow will be: -#. Go to Invoicing > Customers > Customer invoices. -#. Create a new invoice for that contact. -#. Post the invoice. -#. Add it to a payment order, by any of the options that you can check on the *account_payment_order* module. -#. The populated mandate will be the one on the contact. +1. Go to Invoicing > Customers > Customer invoices. +2. Create a new invoice for that contact. +3. Post the invoice. +4. Add it to a payment order, by any of the options that you can check + on the *account_payment_order* module. +5. The populated mandate will be the one on the contact. Bug Tracker =========== @@ -61,7 +62,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -69,25 +70,25 @@ Credits ======= Authors -~~~~~~~ +------- * Tecnativa Contributors -~~~~~~~~~~~~ +------------ -* `Tecnativa `_: +- `Tecnativa `__: - * Carlos Dauden - * Ernesto Tejeda - * Pedro M. Baeza + - Carlos Dauden + - Ernesto Tejeda + - Pedro M. Baeza -* `Sygel `__: - - * Alberto Martínez +- `Sygel `__: + + - Alberto Martínez Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -99,6 +100,6 @@ 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 `_ project on GitHub. +This module is part of the `OCA/bank-payment `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_banking_mandate_contact/pyproject.toml b/account_banking_mandate_contact/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/account_banking_mandate_contact/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/account_banking_mandate_contact/readme/CONTRIBUTORS.md b/account_banking_mandate_contact/readme/CONTRIBUTORS.md new file mode 100644 index 000000000..235aed0af --- /dev/null +++ b/account_banking_mandate_contact/readme/CONTRIBUTORS.md @@ -0,0 +1,6 @@ +- [Tecnativa](https://www.tecnativa.com): + - Carlos Dauden + - Ernesto Tejeda + - Pedro M. Baeza +- [Sygel](https://www.sygel.es): + - Alberto Martínez diff --git a/account_banking_mandate_contact/readme/CONTRIBUTORS.rst b/account_banking_mandate_contact/readme/CONTRIBUTORS.rst deleted file mode 100644 index 18e8db519..000000000 --- a/account_banking_mandate_contact/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,9 +0,0 @@ -* `Tecnativa `_: - - * Carlos Dauden - * Ernesto Tejeda - * Pedro M. Baeza - -* `Sygel `__: - - * Alberto Martínez \ No newline at end of file diff --git a/account_banking_mandate_contact/readme/DESCRIPTION.md b/account_banking_mandate_contact/readme/DESCRIPTION.md new file mode 100644 index 000000000..1d4639015 --- /dev/null +++ b/account_banking_mandate_contact/readme/DESCRIPTION.md @@ -0,0 +1,3 @@ +This module allows to select a specific banking mandate (and thus, a +specific bank account) at contact level, so that when doing a debit +order, such mandate is used for the invoices issued to that contact. diff --git a/account_banking_mandate_contact/readme/DESCRIPTION.rst b/account_banking_mandate_contact/readme/DESCRIPTION.rst deleted file mode 100644 index 24fdda832..000000000 --- a/account_banking_mandate_contact/readme/DESCRIPTION.rst +++ /dev/null @@ -1,3 +0,0 @@ -This module allows to select a specific banking mandate -(and thus, a specific bank account) at contact level, so that when doing -a debit order, such mandate is used for the invoices issued to that contact. diff --git a/account_banking_mandate_contact/readme/USAGE.md b/account_banking_mandate_contact/readme/USAGE.md new file mode 100644 index 000000000..c4dcf26a8 --- /dev/null +++ b/account_banking_mandate_contact/readme/USAGE.md @@ -0,0 +1,15 @@ +For selecting the mandate at contact level: + +1. Go to *Invoicing \> Customers \> Customers*. +2. Open or create one contact that has a parent. +3. On the "..." page, fill *Contact Mandate*. +4. That mandate will be populated in the debit order. + +Then the normal flow will be: + +1. Go to Invoicing \> Customers \> Customer invoices. +2. Create a new invoice for that contact. +3. Post the invoice. +4. Add it to a payment order, by any of the options that you can check + on the *account_payment_order* module. +5. The populated mandate will be the one on the contact. diff --git a/account_banking_mandate_contact/readme/USAGE.rst b/account_banking_mandate_contact/readme/USAGE.rst deleted file mode 100644 index 4a571f4fc..000000000 --- a/account_banking_mandate_contact/readme/USAGE.rst +++ /dev/null @@ -1,14 +0,0 @@ -For selecting the mandate at contact level: - -#. Go to *Invoicing > Customers > Customers*. -#. Open or create one contact that has a parent. -#. On the "..." page, fill *Contact Mandate*. -#. That mandate will be populated in the debit order. - -Then the normal flow will be: - -#. Go to Invoicing > Customers > Customer invoices. -#. Create a new invoice for that contact. -#. Post the invoice. -#. Add it to a payment order, by any of the options that you can check on the *account_payment_order* module. -#. The populated mandate will be the one on the contact. diff --git a/account_banking_mandate_contact/static/description/index.html b/account_banking_mandate_contact/static/description/index.html index aa1224d5e..764e1bf7d 100644 --- a/account_banking_mandate_contact/static/description/index.html +++ b/account_banking_mandate_contact/static/description/index.html @@ -1,4 +1,3 @@ - @@ -9,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -275,7 +275,7 @@ 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 .ln { color: gray; } /* 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 } @@ -301,7 +301,7 @@ span.option { span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -369,10 +369,10 @@ ul.auto-toc { !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:e64a6ce44499395afe175300e7c9551d1ea8bdd1263b8fc251600675ee2e07c9 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

    Production/Stable License: AGPL-3 OCA/bank-payment Translate me on Weblate Try me on Runboat

    -

    This module allows to select a specific banking mandate -(and thus, a specific bank account) at contact level, so that when doing -a debit order, such mandate is used for the invoices issued to that contact.

    +

    Production/Stable License: AGPL-3 OCA/bank-payment Translate me on Weblate Try me on Runboat

    +

    This module allows to select a specific banking mandate (and thus, a +specific bank account) at contact level, so that when doing a debit +order, such mandate is used for the invoices issued to that contact.

    Table of contents

      @@ -400,7 +400,8 @@ a debit order, such mandate is used for the invoices issued to that contact.

    • Go to Invoicing > Customers > Customer invoices.
    • Create a new invoice for that contact.
    • Post the invoice.
    • -
    • Add it to a payment order, by any of the options that you can check on the account_payment_order module.
    • +
    • Add it to a payment order, by any of the options that you can check +on the account_payment_order module.
    • The populated mandate will be the one on the contact.
    @@ -409,7 +410,7 @@ a debit order, such mandate is used for the invoices issued to that contact.

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

    +feedback.

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

    @@ -438,11 +439,13 @@ If you spotted it first, help us to smash it by providing a detailed and welcome

    Maintainers

    This module is maintained by the OCA.

    -Odoo Community Association + +Odoo Community Association +

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

    -

    This module is part of the OCA/bank-payment project on GitHub.

    +

    This module is part of the OCA/bank-payment project on GitHub.

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

    From 0c9ffc32fabc2fbe3970d581fe619ab7abd0282a Mon Sep 17 00:00:00 2001 From: sygel Date: Tue, 21 May 2024 15:35:45 +0200 Subject: [PATCH 8/8] [MIG] account_banking_mandate_contact: Migration to 17.0 --- account_banking_mandate_contact/__manifest__.py | 2 +- account_banking_mandate_contact/models/account_move_line.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/account_banking_mandate_contact/__manifest__.py b/account_banking_mandate_contact/__manifest__.py index e32d1020e..8a57f0785 100644 --- a/account_banking_mandate_contact/__manifest__.py +++ b/account_banking_mandate_contact/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Account Banking Mandate Contact", "summary": "Assign specific banking mandates in contact level", - "version": "16.0.1.0.1", + "version": "17.0.1.0.1", "development_status": "Production/Stable", "category": "Banking addons", "website": "https://github.com/OCA/bank-payment", diff --git a/account_banking_mandate_contact/models/account_move_line.py b/account_banking_mandate_contact/models/account_move_line.py index 3ff0fd57a..d726b7e0a 100644 --- a/account_banking_mandate_contact/models/account_move_line.py +++ b/account_banking_mandate_contact/models/account_move_line.py @@ -10,7 +10,7 @@ class AccountMoveLine(models.Model): # 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) + vals = super()._prepare_payment_line_vals(payment_order) if payment_order.payment_type != "inbound" or self.move_id.mandate_id: return vals mandate = (