Files
enterprise-addons/l10n_hk_hr_payroll_empf/model/mpf_scheme.py
T

68 lines
2.3 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
from odoo.exceptions import ValidationError
class l10n_hkMpfScheme(models.Model):
_name = 'l10n_hk.mpf.scheme'
_description = "Hong Kong: MPF Scheme"
_order = 'employer_account_number, registration_number'
# ------------------
# Fields declaration
# ------------------
name = fields.Char(
string="MPF Scheme",
required=True,
translate=True,
)
registration_number = fields.Char(
string="Registration Number",
required=True,
)
employer_account_number = fields.Char(
string="Employer Account No.",
company_dependent=True,
help="This value is specific to the currently selected company.",
)
payroll_group_ids = fields.One2many(
comodel_name='l10n_hk.payroll.group',
string="Payroll Groups",
domain=lambda self: [('company_id', '=', self.env.company.id)],
inverse_name='scheme_id',
)
member_class_ids = fields.One2many(
comodel_name='l10n_hk.member.class',
string="Member Classes",
domain=lambda self: [('company_id', '=', self.env.company.id)],
inverse_name='scheme_id',
)
# --------------------------------
# Compute, inverse, search methods
# --------------------------------
@api.depends('name', 'employer_account_number')
@api.depends_context('company')
def _compute_display_name(self):
""" Appends the company-specific employer account number to the name of the scheme. """
for scheme in self:
if scheme.employer_account_number:
scheme.display_name = f'{scheme.name} ({scheme.employer_account_number})'
else:
scheme.display_name = scheme.name
@api.constrains('registration_number', 'employer_account_number')
def _contraints_single_default(self):
result = self._read_group(
domain=[],
groupby=['registration_number', 'employer_account_number'],
aggregates=['id:recordset'],
having=[('__count', '>', 1)],
)
if result:
raise ValidationError(
self.env._("You cannot have multiple MPF Scheme with the same Registration Number and Employer Account Number.")
)