mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
from functools import partial
|
|
from datetime import timedelta
|
|
from odoo import api, models
|
|
from odoo.addons.resource.models.resource import make_aware
|
|
|
|
|
|
class ResourceCalendar(models.Model):
|
|
_inherit = 'resource.calendar'
|
|
|
|
def plan_days_end(self, days, day_dt, compute_leaves=False, domain=None):
|
|
"""
|
|
Override to `plan_days` that allows you to get the nearest 'end' including today.
|
|
"""
|
|
day_dt, revert = make_aware(day_dt)
|
|
|
|
# which method to use for retrieving intervals
|
|
if compute_leaves:
|
|
get_intervals = partial(self._work_intervals_batch, domain=domain)
|
|
else:
|
|
get_intervals = self._attendance_intervals_batch
|
|
|
|
if days >= 0:
|
|
found = set()
|
|
delta = timedelta(days=14)
|
|
for n in range(100):
|
|
dt = day_dt + delta * n
|
|
for start, stop, meta in get_intervals(dt, dt + delta)[False]:
|
|
found.add(start.date())
|
|
if len(found) >= days:
|
|
return revert(stop)
|
|
return False
|
|
|
|
elif days < 0:
|
|
days = abs(days)
|
|
found = set()
|
|
delta = timedelta(days=14)
|
|
for n in range(100):
|
|
dt = day_dt - delta * n
|
|
for start, stop, meta in reversed(get_intervals(dt - delta, dt))[False]:
|
|
found.add(start.date())
|
|
if len(found) == days:
|
|
return revert(start)
|
|
return False
|
|
|
|
else:
|
|
return revert(day_dt)
|