Files
enterprise-addons/l10n_ca_payment_cpa005/models/account_journal.py
T

71 lines
3.3 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, fields, api
class AccountJournal(models.Model):
_inherit = "account.journal"
l10n_ca_cpa005_destination_data_center = fields.Char(
"Destination Data Center",
size=5,
copy=False,
help="5-digit ID provided by your bank. It is needed for generating a Canadian EFT file (CPA 005).",
)
l10n_ca_cpa005_originator_id = fields.Char(
"Originator ID",
size=10,
copy=False,
help="10-digit code supplied by your bank. It is needed for generating a Canadian EFT file (CPA 005).",
)
l10n_ca_cpa005_fcn_sequence_id = fields.Many2one(
"ir.sequence",
"File Creation Number Sequence",
copy=False,
help="This is used when generating the File Creation Number for Canadian EFT files. The referenced sequence can "
"be customized to suit the banks requirements.",
)
l10n_ca_cpa005_fcn_number_next = fields.Integer(
"Next File Creation Number (FCN)",
compute="_compute_l10n_ca_cpa005_fcn_number_next",
inverse="_set_l10n_ca_cpa005_fcn_next_number",
help="Next File Creation Number (FCN) that will be used when validating a Canadian EFT batch payment.The FCN is "
"a 4-digit sequence from 0001 to 9999. If you need to adjust any details of the FCN go to Sequences in the Technical "
"menu to adjust them.",
)
@api.depends("l10n_ca_cpa005_fcn_sequence_id.number_next_actual")
def _compute_l10n_ca_cpa005_fcn_number_next(self):
for journal in self:
journal._l10n_ca_cpa005_create_sequence_if_needed()
journal.l10n_ca_cpa005_fcn_number_next = self._l10n_ca_cpa005_modulo_file_creation_number(
journal.l10n_ca_cpa005_fcn_sequence_id.number_next_actual
)
def _set_l10n_ca_cpa005_fcn_next_number(self):
for journal in self:
journal._l10n_ca_cpa005_create_sequence_if_needed()
journal.l10n_ca_cpa005_fcn_sequence_id.sudo().number_next_actual = journal.l10n_ca_cpa005_fcn_number_next
def _l10n_ca_cpa005_modulo_file_creation_number(self, number):
"""Modulo number to be in 1 <= number <= 9999. 0 is skipped because 0000 is not a valid FCN."""
return (number - 1) % 9999 + 1
def _l10n_ca_cpa005_create_sequence_if_needed(self):
if not self.l10n_ca_cpa005_fcn_sequence_id and "cpa005" in self.outbound_payment_method_line_ids.mapped("code"):
vals = {
"name": f"Canadian EFT File Creation Number (FCN) for journal {self.name}",
"company_id": self.company_id.id,
}
self.l10n_ca_cpa005_fcn_sequence_id = self.env["ir.sequence"].sudo().create(vals)
def _default_outbound_payment_methods(self):
res = super()._default_outbound_payment_methods()
if self._is_payment_method_available("cpa005"):
res |= self.env.ref("l10n_ca_payment_cpa005.account_payment_method_cpa005")
return res
def _l10n_ca_cpa005_next_file_creation_nr(self):
self._l10n_ca_cpa005_create_sequence_if_needed()
next_fcn = int(self.l10n_ca_cpa005_fcn_sequence_id.next_by_id())
return f"{self._l10n_ca_cpa005_modulo_file_creation_number(next_fcn):04}"