bank-payment/account_banking_sepa_direct_debit/models/account_payment_line.py

57 lines
2.3 KiB
Python
Raw Permalink Normal View History

2024-05-03 08:36:50 +00:00
# Copyright 2019 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from flectra import _, models
from flectra.exceptions import UserError
class AccountPaymentLine(models.Model):
_inherit = "account.payment.line"
def draft2open_payment_line_check(self):
res = super().draft2open_payment_line_check()
sepa_dd_lines = self.filtered(
lambda line: line.order_id.payment_method_id.code == "sepa_direct_debit"
)
sepa_dd_lines._check_sepa_direct_debit_ready()
return res
def _check_sepa_direct_debit_ready(self):
"""
This method checks whether the payment line(s) are ready to be used
in the SEPA Direct Debit file generation.
:raise: UserError if a line does not fulfils all requirements
"""
for rec in self:
if not rec.mandate_id:
raise UserError(
_(
"Missing SEPA Direct Debit mandate on the line with "
"partner {partner_name} (reference {reference})."
).format(partner_name=rec.partner_id.name, reference=rec.name)
)
if rec.mandate_id.state != "valid":
raise UserError(
_(
"The SEPA Direct Debit mandate with reference "
"{mandate_ref} for partner {partner_name} has "
"expired."
).format(
mandate_ref=rec.mandate_id.unique_mandate_reference,
partner_name=rec.partner_id.name,
)
)
if rec.mandate_id.type == "oneoff" and rec.mandate_id.last_debit_date:
raise UserError(
_(
"The SEPA Direct Debit mandate with reference "
"{mandate_ref} for partner {partner_name} has type set "
"to 'One-Off' but has a last debit date set to "
"{last_debit_date}. Therefore, it cannot be used."
).format(
mandate_ref=rec.mandate_id.unique_mandate_reference,
partner_name=rec.partner_id.name,
last_debit_date=rec.mandate_id.last_debit_date,
)
)