Co-authored-by: MENDOZA BALLARDO GAEL RICARDO <gael-meb123@users.noreply.github.com>
version final final ya enserio la final del proyecto :)
This commit is contained in:
@@ -34,7 +34,55 @@ def get_eta(
|
||||
if current_user["role"] != "admin" and address["user_id"] != current_user["user_id"]:
|
||||
raise HTTPException(status_code=403, detail="No tienes acceso a este domicilio")
|
||||
|
||||
route_id = address["route_id"]
|
||||
route_id = address.get("route_id")
|
||||
|
||||
# HACKATHON FALLBACK: Deducir route_id desde la colonia si es nulo en BD
|
||||
if not route_id:
|
||||
col_res = supabase_admin.table("addresses").select("colonia").eq("id", address_id).maybe_single().execute()
|
||||
if col_res.data:
|
||||
col = col_res.data.get("colonia", "").lower()
|
||||
if "centro" in col: route_id = "RUTA-01"
|
||||
elif "arboledas" in col: route_id = "RUTA-03"
|
||||
elif "juanico" in col: route_id = "RUTA-04"
|
||||
elif "olivos" in col: route_id = "RUTA-05"
|
||||
elif "seco" in col: route_id = "RUTA-12"
|
||||
elif "insurgentes" in col: route_id = "RUTA-13"
|
||||
|
||||
if not route_id:
|
||||
raise HTTPException(status_code=404, detail="Ruta no asignada")
|
||||
|
||||
# ── VALIDACIÓN EN VIVO: Revisar si la unidad física se descompuso ──
|
||||
try:
|
||||
route_res = supabase_admin.table("routes").select("truck_id, status").eq("id", route_id).maybe_single().execute()
|
||||
if route_res.data:
|
||||
truck_id = route_res.data.get("truck_id")
|
||||
db_status = route_res.data.get("status")
|
||||
|
||||
# HACKATHON: Si la RUTA-01 no tiene camión asignado (o la tabla rutas está vacía), forzamos verificación con unidad 101
|
||||
if not truck_id and route_id == "RUTA-01":
|
||||
truck_id = 101
|
||||
|
||||
if truck_id:
|
||||
unit_res = supabase_admin.table("units").select("status").eq("id", truck_id).maybe_single().execute()
|
||||
if unit_res.data and unit_res.data.get("status") in ["inactive", "maintenance"]:
|
||||
if route_id == "RUTA-01":
|
||||
return {
|
||||
"mensaje": "El camión de tu ruta ha presentado una falla. El servicio matutino se suspende y se retomará en la tarde.",
|
||||
"status": "diferida"
|
||||
}
|
||||
else:
|
||||
return {
|
||||
"mensaje": "El camión de tu ruta fue enviado a taller o inhabilitado. El servicio podría sufrir retrasos.",
|
||||
"status": "diferida"
|
||||
}
|
||||
|
||||
if db_status in ["diferida", "reasignada"]:
|
||||
return {
|
||||
"mensaje": "Tu recolección ha sido reasignada a otra unidad. El servicio se reanudará en breve.",
|
||||
"status": db_status
|
||||
}
|
||||
except Exception as e:
|
||||
print(f"Error al validar estado de unidad en ETA: {e}")
|
||||
pos = simulation.get_route_position(route_id)
|
||||
status = simulation.get_route_status(route_id)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user