mirror of
https://gitlab.com/flectra-community/bank-payment.git
synced 2024-12-25 13:51:44 +00:00
57 lines
2.3 KiB
Python
57 lines
2.3 KiB
Python
# 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,
|
|
)
|
|
)
|