mirror of
https://github.com/bringout/oca-ocb-hr.git
synced 2026-04-26 08:32:07 +02:00
19.0 vanilla
This commit is contained in:
parent
a1137a1456
commit
e1d89e11e3
2789 changed files with 1093187 additions and 605897 deletions
|
|
@ -0,0 +1,50 @@
|
|||
# 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue