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 @@ +