48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
from fastapi import APIRouter, Depends
|
|
from prisma import Prisma
|
|
from typing import Dict, List
|
|
from app.api.dependencies import get_prisma
|
|
from app.models.pedido_cliente import PedidoClienteResponse
|
|
|
|
router = APIRouter(prefix="/kanban", tags=["kanban"])
|
|
|
|
|
|
@router.get("/")
|
|
async def obtener_kanban(
|
|
db: Prisma = Depends(get_prisma)
|
|
) -> Dict[str, List[Dict]]:
|
|
"""Obtener datos del Kanban agrupados por estado"""
|
|
pedidos = await db.pedidocliente.find_many(
|
|
include={
|
|
"cliente": True,
|
|
"referencias": True
|
|
},
|
|
order_by={"fechaPedido": "desc"}
|
|
)
|
|
|
|
# Agrupar por estado
|
|
kanban_data = {
|
|
"pendiente_revision": [],
|
|
"en_revision": [],
|
|
"pendiente_materiales": [],
|
|
"completado": [],
|
|
}
|
|
|
|
for pedido in pedidos:
|
|
pedido_dict = pedido.dict()
|
|
# Calcular es_urgente
|
|
from datetime import datetime, timedelta
|
|
if pedido.fechaCita:
|
|
ahora = datetime.now(pedido.fechaCita.tzinfo) if pedido.fechaCita.tzinfo else datetime.now()
|
|
tiempo_restante = pedido.fechaCita - ahora
|
|
pedido_dict["es_urgente"] = 0 < tiempo_restante.total_seconds() < 12 * 3600
|
|
else:
|
|
pedido_dict["es_urgente"] = False
|
|
|
|
estado = pedido.estado
|
|
if estado in kanban_data:
|
|
kanban_data[estado].append(pedido_dict)
|
|
|
|
return kanban_data
|
|
|