From e287dda9663cb5f38e2dde59199e859015e7cfaf Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Wed, 27 Sep 2023 22:30:31 +0200 Subject: [PATCH] Add warning when payment order is not SEPA The field 'sepa' on account.payment.order is only display for SEPA payment methods. If the option "show warning if not SEPA" is enabled on the payment method, a warning banner is now displayed on payment orders with a SEPA payment method which are not SEPA. --- .../models/account_payment_method.py | 1 + .../models/account_payment_order.py | 67 +++++++++++++------ .../views/account_payment_method.xml | 5 ++ .../views/account_payment_order.xml | 33 +++++---- .../__manifest__.py | 2 +- .../data/account_payment_method.xml | 1 + .../migrations/16.0.1.0.1/post-migration.py | 11 +++ .../tests/test_sct.py | 5 +- .../__manifest__.py | 2 +- .../data/account_payment_method.xml | 1 + .../migrations/16.0.1.0.2/post-migration.py | 11 +++ .../models/account_payment_line.py | 3 + .../views/account_payment_line.xml | 1 + 13 files changed, 104 insertions(+), 39 deletions(-) create mode 100644 account_banking_sepa_credit_transfer/migrations/16.0.1.0.1/post-migration.py create mode 100644 account_banking_sepa_direct_debit/migrations/16.0.1.0.2/post-migration.py diff --git a/account_banking_pain_base/models/account_payment_method.py b/account_banking_pain_base/models/account_payment_method.py index 067468c81..1172dd16c 100644 --- a/account_banking_pain_base/models/account_payment_method.py +++ b/account_banking_pain_base/models/account_payment_method.py @@ -16,6 +16,7 @@ class AccountPaymentMethod(models.Model): "the corresponding unaccented character, so that only ASCII " "characters are used in the generated PAIN file.", ) + warn_not_sepa = fields.Boolean(string="Warn If Not SEPA") def get_xsd_file_path(self): """This method is designed to be inherited in the SEPA modules""" diff --git a/account_banking_pain_base/models/account_payment_order.py b/account_banking_pain_base/models/account_payment_order.py index 3d6dc0331..990507247 100644 --- a/account_banking_pain_base/models/account_payment_order.py +++ b/account_banking_pain_base/models/account_payment_order.py @@ -24,7 +24,12 @@ logger = logging.getLogger(__name__) class AccountPaymentOrder(models.Model): _inherit = "account.payment.order" - sepa = fields.Boolean(compute="_compute_sepa", readonly=True, string="SEPA Payment") + sepa = fields.Boolean(compute="_compute_sepa", string="SEPA Payment") + sepa_payment_method = fields.Boolean( + compute="_compute_sepa", + string="SEPA Payment Method", + ) + show_warning_not_sepa = fields.Boolean(compute="_compute_sepa") charge_bearer = fields.Selection( [ ("SLEV", "Following Service Level"), @@ -103,6 +108,7 @@ class AccountPaymentOrder(models.Model): ] @api.depends( + "payment_mode_id", "company_partner_bank_id.acc_type", "company_partner_bank_id.sanitized_acc_number", "payment_line_ids.currency_id", @@ -113,30 +119,47 @@ class AccountPaymentOrder(models.Model): eur = self.env.ref("base.EUR") sepa_list = self._sepa_iban_prefix_list() for order in self: - sepa = True - if order.company_partner_bank_id.acc_type != "iban": - sepa = False - if ( - order.company_partner_bank_id - and order.company_partner_bank_id.sanitized_acc_number[:2] - not in sepa_list - ): - sepa = False - for pline in order.payment_line_ids: - if pline.currency_id != eur: - sepa = False - break - if pline.partner_bank_id.acc_type != "iban": - sepa = False - break + sepa_payment_method = False + sepa = False + warn_not_sepa = False + payment_method = order.payment_mode_id.payment_method_id + if payment_method.pain_version: + sepa_payment_method = True + sepa = True if ( - pline.partner_bank_id - and pline.partner_bank_id.sanitized_acc_number[:2] not in sepa_list + order.company_partner_bank_id + and order.company_partner_bank_id.acc_type != "iban" ): sepa = False - break - sepa = order.compute_sepa_final_hook(sepa) - self.sepa = sepa + if ( + order.company_partner_bank_id + and order.company_partner_bank_id.sanitized_acc_number[:2] + not in sepa_list + ): + sepa = False + for pline in order.payment_line_ids: + if pline.currency_id != eur: + sepa = False + break + if ( + pline.partner_bank_id + and pline.partner_bank_id.acc_type != "iban" + ): + sepa = False + break + if ( + pline.partner_bank_id + and pline.partner_bank_id.sanitized_acc_number[:2] + not in sepa_list + ): + sepa = False + break + sepa = order.compute_sepa_final_hook(sepa) + if not sepa and payment_method.warn_not_sepa: + warn_not_sepa = True + order.sepa = sepa + order.sepa_payment_method = sepa_payment_method + order.show_warning_not_sepa = warn_not_sepa def compute_sepa_final_hook(self, sepa): self.ensure_one() diff --git a/account_banking_pain_base/views/account_payment_method.xml b/account_banking_pain_base/views/account_payment_method.xml index 266d9ff61..de0fd0127 100644 --- a/account_banking_pain_base/views/account_payment_method.xml +++ b/account_banking_pain_base/views/account_payment_method.xml @@ -10,10 +10,15 @@ + + diff --git a/account_banking_pain_base/views/account_payment_order.xml b/account_banking_pain_base/views/account_payment_order.xml index b06fdcacb..ff88a22b5 100644 --- a/account_banking_pain_base/views/account_payment_order.xml +++ b/account_banking_pain_base/views/account_payment_order.xml @@ -13,26 +13,31 @@ /> - + + + - - - - pain.base.account.payment.order.tree - account.payment.order - - - - - +
+ +
diff --git a/account_banking_sepa_credit_transfer/__manifest__.py b/account_banking_sepa_credit_transfer/__manifest__.py index 9db14fd68..6b173e9da 100644 --- a/account_banking_sepa_credit_transfer/__manifest__.py +++ b/account_banking_sepa_credit_transfer/__manifest__.py @@ -6,7 +6,7 @@ { "name": "Account Banking SEPA Credit Transfer", "summary": "Create SEPA XML files for Credit Transfers", - "version": "16.0.1.0.0", + "version": "16.0.1.0.1", "license": "AGPL-3", "author": "Akretion, Tecnativa, Odoo Community Association (OCA)", "website": "https://github.com/OCA/bank-payment", diff --git a/account_banking_sepa_credit_transfer/data/account_payment_method.xml b/account_banking_sepa_credit_transfer/data/account_payment_method.xml index 01b08910a..2d16c170a 100644 --- a/account_banking_sepa_credit_transfer/data/account_payment_method.xml +++ b/account_banking_sepa_credit_transfer/data/account_payment_method.xml @@ -6,5 +6,6 @@ outbound pain.001.001.03 + diff --git a/account_banking_sepa_credit_transfer/migrations/16.0.1.0.1/post-migration.py b/account_banking_sepa_credit_transfer/migrations/16.0.1.0.1/post-migration.py new file mode 100644 index 000000000..c41e4b774 --- /dev/null +++ b/account_banking_sepa_credit_transfer/migrations/16.0.1.0.1/post-migration.py @@ -0,0 +1,11 @@ +# Copyright 2023 Akretion France (http://www.akretion.com/) +# @author: Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + sct_method = env.ref("account_banking_sepa_credit_transfer.sepa_credit_transfer") + sct_method.write({"warn_not_sepa": True}) diff --git a/account_banking_sepa_credit_transfer/tests/test_sct.py b/account_banking_sepa_credit_transfer/tests/test_sct.py index 7873dcf80..2914e0e19 100644 --- a/account_banking_sepa_credit_transfer/tests/test_sct.py +++ b/account_banking_sepa_credit_transfer/tests/test_sct.py @@ -206,7 +206,10 @@ class TestSCT(TransactionCase): self.assertEqual(agrolait_pay_line1.communication, "F1341") self.payment_order.draft2open() self.assertEqual(self.payment_order.state, "open") - self.assertEqual(self.payment_order.sepa, True) + if self.payment_mode.payment_method_id.pain_version: + self.assertTrue(self.payment_order.sepa) + else: + self.assertFalse(self.payment_order.sepa) self.assertTrue(self.payment_order.payment_ids) agrolait_bank_line = self.payment_order.payment_ids[0] self.assertEqual(agrolait_bank_line.currency_id, self.eur_currency) diff --git a/account_banking_sepa_direct_debit/__manifest__.py b/account_banking_sepa_direct_debit/__manifest__.py index 7fd020d69..64f0a034a 100644 --- a/account_banking_sepa_direct_debit/__manifest__.py +++ b/account_banking_sepa_direct_debit/__manifest__.py @@ -6,7 +6,7 @@ { "name": "Account Banking SEPA Direct Debit", "summary": "Create SEPA files for Direct Debit", - "version": "16.0.1.0.1", + "version": "16.0.1.0.2", "license": "AGPL-3", "author": "Akretion, Tecnativa, Odoo Community Association (OCA)", "website": "https://github.com/OCA/bank-payment", diff --git a/account_banking_sepa_direct_debit/data/account_payment_method.xml b/account_banking_sepa_direct_debit/data/account_payment_method.xml index 16463e917..eb83d1b0b 100644 --- a/account_banking_sepa_direct_debit/data/account_payment_method.xml +++ b/account_banking_sepa_direct_debit/data/account_payment_method.xml @@ -7,5 +7,6 @@ pain.008.001.02 + diff --git a/account_banking_sepa_direct_debit/migrations/16.0.1.0.2/post-migration.py b/account_banking_sepa_direct_debit/migrations/16.0.1.0.2/post-migration.py new file mode 100644 index 000000000..292df1868 --- /dev/null +++ b/account_banking_sepa_direct_debit/migrations/16.0.1.0.2/post-migration.py @@ -0,0 +1,11 @@ +# Copyright 2023 Akretion France (http://www.akretion.com/) +# @author: Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + sct_method = env.ref("account_banking_sepa_direct_debit.sepa_direct_debit") + sct_method.write({"warn_not_sepa": True}) diff --git a/account_payment_order/models/account_payment_line.py b/account_payment_order/models/account_payment_line.py index 02ea3a449..25061e21a 100644 --- a/account_payment_order/models/account_payment_line.py +++ b/account_payment_order/models/account_payment_line.py @@ -66,6 +66,9 @@ class AccountPaymentLine(models.Model): ondelete="restrict", check_company=True, ) + partner_bank_acc_type = fields.Selection( + related="partner_bank_id.acc_type", string="Bank Account Type" + ) date = fields.Date(string="Payment Date") # communication field is required=False because we don't want to block # the creation of lines from move/invoices when communication is empty diff --git a/account_payment_order/views/account_payment_line.xml b/account_payment_order/views/account_payment_line.xml index 1d98f25ac..e1fc70d9c 100644 --- a/account_payment_order/views/account_payment_line.xml +++ b/account_payment_order/views/account_payment_line.xml @@ -62,6 +62,7 @@ +