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