From 3dc49766ccedd2cebad7de8040dcf960c6c7854d Mon Sep 17 00:00:00 2001 From: Tyrannusss Date: Mon, 23 Mar 2026 18:55:29 -0600 Subject: [PATCH] se agrego un end point para perifericos --- src/equipo/equipo.controller.ts | 8 ++ src/equipo/equipo.service.ts | 156 ++++++++++++++++++++++++++++++++ 2 files changed, 164 insertions(+) diff --git a/src/equipo/equipo.controller.ts b/src/equipo/equipo.controller.ts index d501a1f..9ff20d4 100644 --- a/src/equipo/equipo.controller.ts +++ b/src/equipo/equipo.controller.ts @@ -42,6 +42,14 @@ export class EquipoController { return this.equipoService.grafica(tipo, filtros); } + @Post('graficaPerifericos/:tipo') + async graficaPerifericos( + @Param("tipo") tipo: 'antiguedad' | 'uso' | 'so' | 'procesador', + @Body() filtros: FiltrosGraficaDto + ) { + return this.equipoService.graficaPerifericos(tipo, filtros); + } + @Post('tabla') async tabla( @Body() filtros: FiltrosTablaDto diff --git a/src/equipo/equipo.service.ts b/src/equipo/equipo.service.ts index 20aae95..3143e2a 100644 --- a/src/equipo/equipo.service.ts +++ b/src/equipo/equipo.service.ts @@ -1275,6 +1275,162 @@ export class EquipoService { } + async graficaPerifericos( + tipo: 'antiguedad' | 'uso' | 'so' | 'procesador', + filtros?: FiltrosGraficaDto + ) { + + const qb = this.equipoRepository + .createQueryBuilder('equipo') + .leftJoin('equipo.adscripcion', 'adscripcion') + .leftJoin('equipo.procesador', 'procesador') + .leftJoin('equipo.sistemaOperativo', 'sistemaOperativo') + .leftJoin('equipo.tipoUso', 'tipoUso') + + // filtros + .andWhere('equipo.id_periferico IS NOT NULL') + if (filtros?.adscripciones?.length) { + qb.andWhere('adscripcion.id_adscripcion IN (:...adscripciones)', { + adscripciones: filtros.adscripciones + }) + .addSelect('adscripcion.adscripcion', 'adscripcion') + .groupBy('equipo.adscripcion') + + } + + if (filtros?.procesadores?.length) { + qb.andWhere('procesador.id_procesador IN (:...procesadores)', { + procesadores: filtros.procesadores + }) + } + + if (filtros?.sistemas?.length) { + qb.andWhere('sistemaOperativo.id_sistema_operativo IN (:...sistemas)', { + sistemas: filtros.sistemas + }) + } + + if (filtros?.usos?.length) { + qb.andWhere('tipoUso.id_uso IN (:...usos)', { + usos: filtros.usos + }) + } + + if (filtros?.antiguedad?.length && !filtros.antiguedad.includes("Todos")) { + qb.andWhere('equipo.antiguedad IN (:...antiguedad)', { + antiguedad: filtros.antiguedad + }) + } + + // selector dinámico + + switch (tipo) { + + case 'antiguedad': + + qb.select('equipo.antiguedad', 'antiguedad') + .addSelect('COUNT(*)', 'total') + + if (filtros?.adscripciones?.length) { + + qb.addSelect('adscripcion.adscripcion', 'adscripcion') + + qb.groupBy('equipo.antiguedad') + .addGroupBy('adscripcion.adscripcion') + + } else { + + qb.groupBy('equipo.antiguedad') + + } + + qb.orderBy(` + CASE + WHEN equipo.antiguedad = 'Menor a 2 años' THEN 1 + WHEN equipo.antiguedad = 'Entre 2 y 3 años' THEN 2 + WHEN equipo.antiguedad = 'Entre 4 y 5 años' THEN 3 + WHEN equipo.antiguedad = 'Mayor a 6 años' THEN 4 + END + `) + + break + + case 'uso': + + qb.select('tipoUso.tipo_uso', 'uso') + .addSelect('COUNT(*)', 'total') + + if (filtros?.adscripciones?.length) { + + qb.addSelect('adscripcion.adscripcion', 'adscripcion') + + qb.groupBy('tipoUso.tipo_uso') + .addGroupBy('adscripcion.adscripcion') + + } else { + + qb.groupBy('tipoUso.tipo_uso') + + } + + qb.orderBy(` + CASE + WHEN tipoUso.tipo_uso = 'ALUMNO' THEN 1 + WHEN tipoUso.tipo_uso = 'PROFESOR' THEN 2 + WHEN tipoUso.tipo_uso = 'ADMINISTRATIVO' THEN 3 + WHEN tipoUso.tipo_uso = 'TÉCNICO ACADEMICO' THEN 4 + END`) + + break + + case 'so': + + qb.select('sistemaOperativo.sistema_operativo', 'so') + .addSelect('COUNT(*)', 'total') + + if (filtros?.adscripciones?.length) { + + qb.addSelect('adscripcion.adscripcion', 'adscripcion') + + qb.groupBy('sistemaOperativo.sistema_operativo') + .addGroupBy('adscripcion.adscripcion') + + } else { + + qb.groupBy('sistemaOperativo.sistema_operativo') + + } + qb.orderBy(`equipo.adscripcion`, "ASC") + + break + + case 'procesador': + + qb.select('procesador.procesador', 'procesador') + .addSelect('COUNT(*)', 'total') + + if (filtros?.adscripciones?.length) { + + qb.addSelect('adscripcion.adscripcion', 'adscripcion') + + qb.groupBy('procesador.procesador') + .addGroupBy('adscripcion.adscripcion') + + } else { + + qb.groupBy('procesador.procesador') + + } + qb.orderBy(`equipo.adscripcion`, "ASC") + + break + + } + return qb.getRawMany() + + } + + async tabla(filtros?: FiltrosTablaDto) { const qb = this.equipoRepository .createQueryBuilder('equipo')