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

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 

7 

8router = APIRouter() 

9 

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) 

13 

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) 

17 

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) 

21 

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)