from fastapi import APIRouter router = APIRouter(prefix="/api/tasks", tags=["tasks"]) @router.get("/by-project") async def get_tasks_by_project(): from main import odoo_client, app_config settings = app_config.get_settings() exclude_ids = settings.get("odoo", {}).get("exclude_company_ids", []) projects = await odoo_client.get_projects() tasks = await odoo_client.get_tasks() # Filter out excluded companies if exclude_ids: projects = [ p for p in projects if not (isinstance(p.get("company_id"), list) and p["company_id"][0] in exclude_ids) ] project_ids = {p["id"] for p in projects} tasks = [t for t in tasks if t.get("project_id") and t["project_id"][0] in project_ids] result = [] for project in projects: project_tasks = [t for t in tasks if t.get("project_id") and t["project_id"][0] == project["id"]] stages: dict[str, list] = {} for task in project_tasks: stage_name = task["stage_id"][1] if task.get("stage_id") else "Sin etapa" stages.setdefault(stage_name, []).append({ "id": task["id"], "name": task["name"], "assigned": task.get("user_ids", []), "priority": task.get("priority", "0"), "deadline": task.get("date_deadline"), }) result.append({ "id": project["id"], "name": project["name"], "color": project.get("color", 0), "stages": stages, }) return {"projects": result}