Coverage for backend \ app \ Reportes \ controllers \ reporteController.py: 89.47%
19 statements
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-29 16:13 -0500
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-29 16:13 -0500
1from fastapi import APIRouter, Depends
2from app.Reportes.services.reporteService import ReporteService
3from app.Reportes.schemas.reporteSchemas import InventarioFiltro, VentasFiltro, CajaFiltro, ClientesFiltro
4from app.database import obtenerSesion
5from app.configuracionGeneral.seguridadJWT import protegerRuta
6from app.configuracionGeneral.schemasGenerales import respuestaApi
8router = APIRouter()
10@router.post("/inventario", tags=["Reportes"], summary="Informe de inventario", description="Genera un informe del inventario actual. Filtros opcionales (se pueden combinar): idProducto (id exacto del producto), idCategoria (id de la categoría), nombreProducto (búsqueda parcial).", status_code=200, response_model=respuestaApi)
11async def reporte_inventario(filtro: InventarioFiltro, dbSession=Depends(obtenerSesion), usuario=Depends(protegerRuta("Reportes","GET_Stock"))):
12 return ReporteService(dbSession).reporteInventario(filtro, usuario)
14@router.post("/ventas-producto-categoria", tags=["Reportes"], summary="Informe de ventas por producto y categoría", description="Genera reporte de ventas filtrado por producto/categoría y rango de fechas. Filtros: fechaInicio (YYYY-MM-DD) — obligatoria, fechaFin (YYYY-MM-DD) — obligatoria, idProducto (opcional), idCategoria (opcional). Debe proporcionar al menos idProducto o idCategoria.", status_code=200, response_model=respuestaApi)
15async def reporte_ventas(filtro: VentasFiltro, dbSession=Depends(obtenerSesion), usuario=Depends(protegerRuta("Reportes","GET_Ventas"))):
16 return ReporteService(dbSession).reporteVentasProductoCategoria(filtro, usuario)
18@router.post("/resumen-caja", tags=["Reportes"], summary="Resumen de caja diaria", description="Consulta cierres de caja para un cajero en la fecha indicada. Filtros en body: fecha (YYYY-MM-DD) — fecha de referencia, idUsuarioCaja (id del usuario/cajero, obligatorio) — se buscarán todas las cajas abiertas por ese usuario en la fecha; retorna caja(s) y sus ventas con detalle.", status_code=200, response_model=respuestaApi)
19async def resumen_caja(filtro: CajaFiltro, dbSession=Depends(obtenerSesion), usuario=Depends(protegerRuta("Reportes","GET_Caja"))):
20 return ReporteService(dbSession).resumenCajaDiaria(filtro.fecha, filtro.idUsuarioCaja, usuario)
22@router.post("/clientes-frecuentes", tags=["Reportes"], summary="Informe de clientes frecuentes", description="Identifica clientes frecuentes según parámetros en el body: dias (periodo en días, default 30), minVentas (mínimo número de ventas, default 3), minGasto (gasto mínimo en el periodo, default 100.0).", status_code=200, response_model=respuestaApi)
23async def clientes_frecuentes(filtro: ClientesFiltro, dbSession=Depends(obtenerSesion), usuario=Depends(protegerRuta("Reportes","GET_Clientes"))):
24 return ReporteService(dbSession).clientesFrecuentes(filtro, usuario)