diff --git a/src/equipo/dto/grafica.dto.ts b/src/equipo/dto/grafica.dto.ts index b2f52a1..df00841 100644 --- a/src/equipo/dto/grafica.dto.ts +++ b/src/equipo/dto/grafica.dto.ts @@ -33,22 +33,22 @@ export class FiltrosTablaDto { @IsArray() @IsString({ each: true }) - adscripciones?: number[] + adscripciones?: string[] @IsOptional() @IsArray() @IsString({ each: true }) - procesadores?: number[] + procesadores?: string[] @IsOptional() @IsArray() @IsString({ each: true }) - sistemas?: number[] + sistemas?: string[] @IsOptional() @IsArray() @IsString({ each: true }) - usos?: number[] + usos?: string[] @IsOptional() @IsArray() diff --git a/src/equipo/equipo.controller.ts b/src/equipo/equipo.controller.ts index 25291d7..d501a1f 100644 --- a/src/equipo/equipo.controller.ts +++ b/src/equipo/equipo.controller.ts @@ -59,7 +59,7 @@ export class EquipoController { @Post('excel/tabla') async exceltabla( @Res() res: Response, - @Body() filtros: FiltrosGraficaDto + @Body() filtros: FiltrosTablaDto ) { const buffer = await this.equipoService.tablaExcel(filtros); @@ -87,7 +87,7 @@ export class EquipoController { res.send(buffer); } - + @UseGuards(AuthGuard('jwt')) @Get('buscar/:inv') async serch(@Param('inv') inv: string) { diff --git a/src/equipo/equipo.service.ts b/src/equipo/equipo.service.ts index 6bd44e1..522cf25 100644 --- a/src/equipo/equipo.service.ts +++ b/src/equipo/equipo.service.ts @@ -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 } from './dto/grafica.dto'; +import { FiltrosGraficaDto, FiltrosTablaDto } from './dto/grafica.dto'; @Injectable() export class EquipoService { @@ -1269,7 +1269,7 @@ export class EquipoService { } - async tabla(filtros?: FiltrosGraficaDto) { + async tabla(filtros?: FiltrosTablaDto) { const qb = this.equipoRepository .createQueryBuilder('equipo') .select([]) @@ -1283,40 +1283,70 @@ export class EquipoService { qb.addSelect('adscripcion.adscripcion', 'adscripcion') qb.addSelect('equipo.lugar', 'ubicacion') + const tieneFiltroReal = (arr?: string[]) => arr?.length && !arr.includes("0") + + console.log(filtros) + + // ADSCRIPCIONES if (filtros?.adscripciones?.length) { - qb.andWhere('adscripcion.id_adscripcion IN (:...adscripciones)', { - adscripciones: filtros.adscripciones - }) + + // siempre selecciona + qb.addSelect('adscripcion.adscripcion', 'adscripcion') + + // solo filtra si no es "Todos" + if (tieneFiltroReal(filtros.adscripciones)) { + qb.andWhere('adscripcion.id_adscripcion IN (:...adscripciones)', { + adscripciones: filtros.adscripciones + }) + } } + // PROCESADOR if (filtros?.procesadores?.length) { - qb.andWhere('procesador.id_procesador IN (:...procesadores)', { - procesadores: filtros.procesadores - }) - .addSelect('procesador.procesador', 'procesador') + qb.addSelect('procesador.procesador', 'procesador') + + if (tieneFiltroReal(filtros.procesadores)) { + qb.andWhere('procesador.id_procesador IN (:...procesadores)', { + procesadores: filtros.procesadores + }) + } } + // SISTEMA OPERATIVO if (filtros?.sistemas?.length) { - qb.andWhere('sistemaOperativo.id_sistema_operativo IN (:...sistemas)', { - sistemas: filtros.sistemas - }) - .addSelect('sistemaOperativo.sistema_operativo', 'so') + qb.addSelect('sistemaOperativo.sistema_operativo', 'so') + + if (tieneFiltroReal(filtros.sistemas)) { + qb.andWhere('sistemaOperativo.id_sistema_operativo IN (:...sistemas)', { + sistemas: filtros.sistemas + }) + } } + // USO if (filtros?.usos?.length) { - qb.andWhere('tipoUso.id_uso IN (:...usos)', { - usos: filtros.usos - }) - .addSelect('tipoUso.tipo_uso', 'uso') + + qb.addSelect('tipoUso.tipo_uso', 'uso') + + if (tieneFiltroReal(filtros.usos)) { + qb.andWhere('tipoUso.id_uso IN (:...usos)', { + usos: filtros.usos + }) + } } + // ANTIGÜEDAD if (filtros?.antiguedad?.length) { - qb.andWhere('equipo.antiguedad IN (:...antiguedad)', { - antiguedad: filtros.antiguedad - }) - .addSelect('equipo.antiguedad', 'antiguedad') + + qb.addSelect('equipo.antiguedad', 'antiguedad') + + if (tieneFiltroReal(filtros.antiguedad)) { + qb.andWhere('equipo.antiguedad IN (:...antiguedad)', { + antiguedad: filtros.antiguedad + }) + } } return qb @@ -1324,7 +1354,7 @@ export class EquipoService { .getRawMany() } - async tablaCount(filtros?: FiltrosGraficaDto) { + async tablaCount(filtros?: FiltrosTablaDto) { const qb = this.equipoRepository .createQueryBuilder('equipo') .select([]) @@ -1334,11 +1364,11 @@ export class EquipoService { qb.leftJoin('equipo.sistemaOperativo', 'sistemaOperativo') qb.leftJoin('equipo.tipoUso', 'tipoUso') + qb.addSelect('adscripcion.adscripcion', 'adscripcion') if (filtros?.adscripciones?.length) { qb.andWhere('adscripcion.id_adscripcion IN (:...adscripciones)', { adscripciones: filtros.adscripciones }) - qb.addSelect('adscripcion.adscripcion', 'adscripcion') } if (filtros?.procesadores?.length) { @@ -1372,7 +1402,7 @@ export class EquipoService { .getRawMany() } - async tablaExcel(filtros?: FiltrosGraficaDto) { + async tablaExcel(filtros?: FiltrosTablaDto) { const qb = this.equipoRepository .createQueryBuilder('equipo') .select([]); @@ -1384,40 +1414,68 @@ export class EquipoService { qb.addSelect('equipo.inventario', 'inventario'); qb.addSelect('adscripcion.adscripcion', 'adscripcion'); - qb.addSelect('equipo.lugar', 'ubicacion') + qb.addSelect('equipo.lugar', 'ubicacion'); + const tieneFiltroReal = (arr?: string[]) => arr?.length && !arr.includes("0"); + + // ADSCRIPCIONES if (filtros?.adscripciones?.length) { - qb.andWhere('adscripcion.id_adscripcion IN (:...adscripciones)', { - adscripciones: filtros.adscripciones - }); + + qb.addSelect('adscripcion.adscripcion', 'adscripcion'); + + if (tieneFiltroReal(filtros.adscripciones)) { + qb.andWhere('adscripcion.id_adscripcion IN (:...adscripciones)', { + adscripciones: filtros.adscripciones + }); + } } + // PROCESADOR if (filtros?.procesadores?.length) { - qb.andWhere('procesador.id_procesador IN (:...procesadores)', { - procesadores: filtros.procesadores - }) - .addSelect('procesador.procesador', 'procesador'); + + qb.addSelect('procesador.procesador', 'procesador'); + + if (tieneFiltroReal(filtros.procesadores)) { + qb.andWhere('procesador.id_procesador IN (:...procesadores)', { + procesadores: filtros.procesadores + }); + } } + // SISTEMA OPERATIVO if (filtros?.sistemas?.length) { - qb.andWhere('sistemaOperativo.id_sistema_operativo IN (:...sistemas)', { - sistemas: filtros.sistemas - }) - .addSelect('sistemaOperativo.sistema_operativo', 'so'); + + qb.addSelect('sistemaOperativo.sistema_operativo', 'so'); + + if (tieneFiltroReal(filtros.sistemas)) { + qb.andWhere('sistemaOperativo.id_sistema_operativo IN (:...sistemas)', { + sistemas: filtros.sistemas + }); + } } + // USO if (filtros?.usos?.length) { - qb.andWhere('tipoUso.id_uso IN (:...usos)', { - usos: filtros.usos - }) - .addSelect('tipoUso.tipo_uso', 'uso'); + + qb.addSelect('tipoUso.tipo_uso', 'uso'); + + if (tieneFiltroReal(filtros.usos)) { + qb.andWhere('tipoUso.id_uso IN (:...usos)', { + usos: filtros.usos + }); + } } + // ANTIGÜEDAD if (filtros?.antiguedad?.length) { - qb.andWhere('equipo.antiguedad IN (:...antiguedad)', { - antiguedad: filtros.antiguedad - }) - .addSelect('equipo.antiguedad', 'antiguedad'); + + qb.addSelect('equipo.antiguedad', 'antiguedad'); + + if (tieneFiltroReal(filtros.antiguedad)) { + qb.andWhere('equipo.antiguedad IN (:...antiguedad)', { + antiguedad: filtros.antiguedad + }); + } } const data = await qb @@ -1429,7 +1487,7 @@ export class EquipoService { const columns = [ { header: 'Inventario', key: 'inventario', width: 20 }, - { header: 'Ubicacion', key: 'ubicacion', width: 40 }, + { header: 'Ubicación', key: 'ubicacion', width: 40 }, { header: 'Adscripción', key: 'adscripcion', width: 40 }, ]; @@ -1469,12 +1527,12 @@ export class EquipoService { qb.leftJoin('equipo.procesador', 'procesador'); qb.leftJoin('equipo.sistemaOperativo', 'sistemaOperativo'); qb.leftJoin('equipo.tipoUso', 'tipoUso'); + qb.addSelect('adscripcion.adscripcion', 'adscripcion'); if (filtros?.adscripciones?.length) { qb.andWhere('adscripcion.id_adscripcion IN (:...adscripciones)', { adscripciones: filtros.adscripciones }); - qb.addSelect('adscripcion.adscripcion', 'adscripcion'); } if (filtros?.procesadores?.length) {