oca-ocb-hr/odoo-bringout-oca-ocb-hr_attendance/hr_attendance/models/hr_version.py
Ernad Husremovic e1d89e11e3 19.0 vanilla
2026-03-09 09:31:00 +01:00

50 lines
2 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, models, fields
class HrVersion(models.Model):
_name = 'hr.version'
_inherit = 'hr.version'
@api.model
def _domain_current_countries(self):
return ['|',
('country_id', '=', False),
('country_id', 'in', self.env.companies.country_id.ids),
]
ruleset_id = fields.Many2one(
"hr.attendance.overtime.ruleset",
domain=_domain_current_countries,
groups="hr.group_hr_manager",
tracking=True,
default=lambda self: self.env.ref('hr_attendance.hr_attendance_default_ruleset', raise_if_not_found=False),
)
@api.model
def _get_versions_by_employee_and_date(self, employee_dates):
# for `employee_dates` a dict[employee] -> dates
# Generate a 2 level dict[employee][date] -> version
employees = self.env['hr.employee'].union(*employee_dates.keys())
all_dates = [date for dates in employee_dates.values() for date in dates]
if not all_dates:
return {}
date_to = max(all_dates)
all_versions = self.env['hr.version'].search([
('employee_id', 'in', employees.ids),
('date_version', '<=', date_to),
# note: no check on date_from because we don't store the version date end
])
versions_by_employee = all_versions.grouped('employee_id')
version_by_employee_and_date = {employee: {} for employee in employees}
for employee, dates in employee_dates.items():
if not (versions := versions_by_employee.get(employee)):
continue
version_index = 0
for date in sorted(dates):
if version_index + 1 < len(versions) and date >= versions[version_index + 1].date_version:
version_index += 1
version_by_employee_and_date[employee][date] = versions[version_index]
return version_by_employee_and_date