added new ep graficaPolar

This commit is contained in:
2026-03-26 09:52:09 -05:00
parent 3dc49766cc
commit 29ffb0e327
3 changed files with 65 additions and 3 deletions
+8
View File
@@ -55,4 +55,12 @@ export class FiltrosTablaDto {
@IsString({ each: true })
antiguedad?: string[]
}
export class FiltrosPolarDto {
@IsOptional()
@IsArray()
@IsString({ each: true })
adscripciones?: string[]
}
+17 -2
View File
@@ -19,11 +19,12 @@ import { UpdateEquipoDto } from './dto/update-equipo.dto';
import { AuthGuard } from '@nestjs/passport';
import { CreateEquipoDto } from './dto/create-equipo.dto';
import type { Response } from 'express';
import { FiltrosGraficaDto, FiltrosTablaDto } from './dto/grafica.dto';
import { FiltrosGraficaDto, FiltrosPolarDto, FiltrosTablaDto } from './dto/grafica.dto';
@Controller('equipos')
export class EquipoController {
constructor(private readonly equipoService: EquipoService) { }
@UseGuards(AuthGuard('jwt'))
@Get('buscar')
async buscarEquipos(
@@ -34,6 +35,7 @@ export class EquipoController {
return this.equipoService.buscarEquipos(filtros, +page, +limit);
}
@UseGuards(AuthGuard('jwt'))
@Post('grafica/:tipo')
async grafica(
@Param("tipo") tipo: 'antiguedad' | 'uso' | 'so' | 'procesador',
@@ -42,7 +44,16 @@ export class EquipoController {
return this.equipoService.grafica(tipo, filtros);
}
@Post('graficaPerifericos/:tipo')
@Post('graficaPolar/:tipo')
async graficaPolar(
@Param("tipo") tipo: 'ALUMNO' | 'PROFESOR' | 'ADMINISTRATIVO',
@Body() filtros: FiltrosPolarDto
) {
return this.equipoService.graficaPolar(tipo, filtros);
}
@UseGuards(AuthGuard('jwt'))
@Post('graficaPerifericos/:tipo')
async graficaPerifericos(
@Param("tipo") tipo: 'antiguedad' | 'uso' | 'so' | 'procesador',
@Body() filtros: FiltrosGraficaDto
@@ -50,6 +61,7 @@ export class EquipoController {
return this.equipoService.graficaPerifericos(tipo, filtros);
}
@UseGuards(AuthGuard('jwt'))
@Post('tabla')
async tabla(
@Body() filtros: FiltrosTablaDto
@@ -57,6 +69,7 @@ export class EquipoController {
return this.equipoService.tabla(filtros);
}
@UseGuards(AuthGuard('jwt'))
@Post('tabla/count')
async tablacount(
@Body() filtros: FiltrosTablaDto
@@ -64,6 +77,7 @@ export class EquipoController {
return this.equipoService.tablaCount(filtros);
}
@UseGuards(AuthGuard('jwt'))
@Post('excel/tabla')
async exceltabla(
@Res() res: Response,
@@ -80,6 +94,7 @@ export class EquipoController {
res.send(buffer);
}
@UseGuards(AuthGuard('jwt'))
@Post('excel/tabla/count')
async exceltablacount(
@Res() res: Response,
+40 -1
View File
@@ -28,7 +28,7 @@ import { CreateEquipoDto } from './dto/create-equipo.dto';
import { MovimientoService } from 'src/movimiento/movimiento.service';
import { Cron } from '@nestjs/schedule';
import { FiltrosGraficaDto, FiltrosTablaDto } from './dto/grafica.dto';
import { FiltrosGraficaDto, FiltrosPolarDto, FiltrosTablaDto } from './dto/grafica.dto';
@Injectable()
export class EquipoService {
@@ -1744,6 +1744,45 @@ export class EquipoService {
return await workbook.xlsx.writeBuffer();
}
async graficaPolar(tipo: 'ALUMNO' | 'PROFESOR' | 'ADMINISTRATIVO', filtros?: FiltrosPolarDto) {
const qb = this.equipoRepository
.createQueryBuilder('equipo')
.leftJoin('equipo.tipoUso', 'tipoUso')
.leftJoin('equipo.adscripcion', 'adscripcion')
.andWhere('tipoUso.tipo_uso = :uso', {
uso: tipo
});
const tieneFiltroReal = (arr?: string[]) => arr?.length && !arr.includes("0") && !arr.includes("Todos");
qb.andWhere('equipo.id_periferico IS NULL')
// ADSCRIPCIONES
if (filtros?.adscripciones?.length) {
qb.addSelect('adscripcion.adscripcion', 'adscripcion');
if (tieneFiltroReal(filtros.adscripciones)) {
qb.andWhere('adscripcion.id_adscripcion IN (:...adscripciones)', {
adscripciones: filtros.adscripciones
});
}
}
return qb
.select('equipo.antiguedad', 'antiguedad')
.addSelect('COUNT(*)', 'total')
.groupBy('equipo.antiguedad')
.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
`)
.getRawMany();
}
}
let estado_excluidos = ['DE BAJA'];