40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
import odoo_client
|
|
from datetime import datetime
|
|
from leave import Leave
|
|
import re
|
|
|
|
|
|
class LeaveService:
|
|
def __init__(self, client: odoo_client.OdooClient):
|
|
self.client = client
|
|
|
|
def fetch_available_employees(self, team: list[str]) -> list:
|
|
today = datetime.now().strftime("%Y-%m-%d")
|
|
domain = [
|
|
("start_datetime", "<=", today),
|
|
("stop_datetime", ">=", today),
|
|
]
|
|
domain.extend(["|"] * (len(team) - 1))
|
|
domain.extend(
|
|
[("employee_id.name", "=ilike", f"%({employee})") for employee in team]
|
|
)
|
|
leaves = self.client.web_search_read(Leave, domain)
|
|
|
|
team_availability = {employee: (True, True) for employee in team}
|
|
|
|
for leave in leaves:
|
|
employee = re.search(r"\((.*?)\)", leave.employee_id).group(1).lower()
|
|
is_morning = leave.start_datetime.hour < 11
|
|
is_afternoon = leave.stop_datetime.hour >= 14
|
|
if is_morning:
|
|
team_availability[employee] = (False, team_availability[employee][1])
|
|
if is_afternoon:
|
|
team_availability[employee] = (team_availability[employee][0], False)
|
|
|
|
available_employees = [
|
|
employee
|
|
for employee, (morning, afternoon) in team_availability.items()
|
|
if morning or afternoon
|
|
]
|
|
return available_employees
|