Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3dc49766cc | |||
| 36cf0d217b | |||
| 970a6acc0b | |||
| cd5f2efc54 | |||
| b76c98b7fc | |||
| a3eea6bf2e | |||
| d2910bbdd7 | |||
| 379f6844fb | |||
| 435c61586d | |||
| 19bde0d891 |
Generated
+361
-478
File diff suppressed because it is too large
Load Diff
+2
-1
@@ -39,7 +39,8 @@
|
||||
"reflect-metadata": "^0.2.2",
|
||||
"rxjs": "^7.8.1",
|
||||
"typeor": "^1.2.0",
|
||||
"typeorm": "^0.3.27"
|
||||
"typeorm": "^0.3.27",
|
||||
"xlsx": "^0.18.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/eslintrc": "^3.2.0",
|
||||
|
||||
+6
-2
@@ -24,7 +24,11 @@ import { AppController } from './app.controller';
|
||||
autoLoadEntities: process.env.AUTOLOAD === 'true',
|
||||
synchronize: process.env.SINCRONIZAR === 'true',
|
||||
logger: 'advanced-console',
|
||||
logging: 'all',
|
||||
logging: ['error', 'warn','log'],
|
||||
|
||||
extra: {
|
||||
connectionLimit: 10,
|
||||
},
|
||||
}),
|
||||
UsuariosModule,
|
||||
MovimientoModule,
|
||||
@@ -34,4 +38,4 @@ import { AppController } from './app.controller';
|
||||
controllers: [AppController],
|
||||
providers: [AppService],
|
||||
})
|
||||
export class AppModule {}
|
||||
export class AppModule { }
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
import { IsArray, IsOptional, IsString } from "class-validator";
|
||||
|
||||
export class FiltrosGraficaDto {
|
||||
|
||||
@IsOptional()
|
||||
@IsArray()
|
||||
@IsString({ each: true })
|
||||
adscripciones?: number[]
|
||||
|
||||
@IsOptional()
|
||||
@IsArray()
|
||||
@IsString({ each: true })
|
||||
procesadores?: number[]
|
||||
|
||||
@IsOptional()
|
||||
@IsArray()
|
||||
@IsString({ each: true })
|
||||
sistemas?: number[]
|
||||
|
||||
@IsOptional()
|
||||
@IsArray()
|
||||
@IsString({ each: true })
|
||||
usos?: number[]
|
||||
|
||||
@IsOptional()
|
||||
@IsArray()
|
||||
@IsString({ each: true })
|
||||
antiguedad?: string[]
|
||||
|
||||
}
|
||||
|
||||
export class FiltrosTablaDto {
|
||||
|
||||
@IsArray()
|
||||
@IsString({ each: true })
|
||||
adscripciones?: string[]
|
||||
|
||||
@IsOptional()
|
||||
@IsArray()
|
||||
@IsString({ each: true })
|
||||
procesadores?: string[]
|
||||
|
||||
@IsOptional()
|
||||
@IsArray()
|
||||
@IsString({ each: true })
|
||||
sistemas?: string[]
|
||||
|
||||
@IsOptional()
|
||||
@IsArray()
|
||||
@IsString({ each: true })
|
||||
usos?: string[]
|
||||
|
||||
@IsOptional()
|
||||
@IsArray()
|
||||
@IsString({ each: true })
|
||||
antiguedad?: string[]
|
||||
|
||||
}
|
||||
@@ -19,10 +19,11 @@ 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';
|
||||
|
||||
@Controller('equipos')
|
||||
export class EquipoController {
|
||||
constructor(private readonly equipoService: EquipoService) {}
|
||||
constructor(private readonly equipoService: EquipoService) { }
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
@Get('buscar')
|
||||
async buscarEquipos(
|
||||
@@ -33,6 +34,68 @@ export class EquipoController {
|
||||
return this.equipoService.buscarEquipos(filtros, +page, +limit);
|
||||
}
|
||||
|
||||
@Post('grafica/:tipo')
|
||||
async grafica(
|
||||
@Param("tipo") tipo: 'antiguedad' | 'uso' | 'so' | 'procesador',
|
||||
@Body() filtros: FiltrosGraficaDto
|
||||
) {
|
||||
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
|
||||
) {
|
||||
return this.equipoService.tabla(filtros);
|
||||
}
|
||||
|
||||
@Post('tabla/count')
|
||||
async tablacount(
|
||||
@Body() filtros: FiltrosTablaDto
|
||||
) {
|
||||
return this.equipoService.tablaCount(filtros);
|
||||
}
|
||||
|
||||
@Post('excel/tabla')
|
||||
async exceltabla(
|
||||
@Res() res: Response,
|
||||
@Body() filtros: FiltrosTablaDto
|
||||
) {
|
||||
const buffer = await this.equipoService.tablaExcel(filtros);
|
||||
|
||||
res.set({
|
||||
'Content-Type':
|
||||
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
'Content-Disposition': 'attachment; filename=tabla.xlsx',
|
||||
});
|
||||
|
||||
res.send(buffer);
|
||||
}
|
||||
|
||||
@Post('excel/tabla/count')
|
||||
async exceltablacount(
|
||||
@Res() res: Response,
|
||||
@Body() filtros: FiltrosGraficaDto
|
||||
) {
|
||||
const buffer = await this.equipoService.tablaCountExcel(filtros);
|
||||
|
||||
res.set({
|
||||
'Content-Type':
|
||||
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
'Content-Disposition': 'attachment; filename=tabla.xlsx',
|
||||
});
|
||||
|
||||
res.send(buffer);
|
||||
}
|
||||
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
@Get('buscar/:inv')
|
||||
async serch(@Param('inv') inv: string) {
|
||||
@@ -92,6 +155,7 @@ export class EquipoController {
|
||||
findTiposEquipo() {
|
||||
return this.equipoService.findAllTiposEquipo();
|
||||
}
|
||||
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
@Get('sistemas-operativos')
|
||||
findSistemasOperativos() {
|
||||
|
||||
@@ -10,6 +10,7 @@ import { UpdateEquipoDto } from './dto/update-equipo.dto';
|
||||
import axios from 'axios';
|
||||
import e, { Response } from 'express';
|
||||
import * as ExcelJS from 'exceljs';
|
||||
|
||||
import {
|
||||
Adscripcion,
|
||||
Estado,
|
||||
@@ -27,6 +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';
|
||||
|
||||
@Injectable()
|
||||
export class EquipoService {
|
||||
@@ -62,7 +64,7 @@ export class EquipoService {
|
||||
private readonly laboratorioRepo: Repository<Laboratorio>,
|
||||
@InjectRepository(Proyecto)
|
||||
private readonly proyectoRepo: Repository<Proyecto>,
|
||||
) {}
|
||||
) { }
|
||||
|
||||
async deleteEquipo(inventario: string): Promise<{ message: string }> {
|
||||
const equipo = await this.equipoRepository.findOne({
|
||||
@@ -293,12 +295,12 @@ export class EquipoService {
|
||||
equipo.isImpresora
|
||||
? { ...datosBase, periferico: { id_periferico: equipo.id_periferico } }
|
||||
: {
|
||||
...datosBase,
|
||||
sistemaOperativo: {
|
||||
id_sistema_operativo: equipo.id_sistema_operativo,
|
||||
},
|
||||
procesador: { id_procesador: equipo.id_procesador },
|
||||
...datosBase,
|
||||
sistemaOperativo: {
|
||||
id_sistema_operativo: equipo.id_sistema_operativo,
|
||||
},
|
||||
procesador: { id_procesador: equipo.id_procesador },
|
||||
},
|
||||
);
|
||||
|
||||
let equip = await this.equipoRepository.save(nuevoEquipo);
|
||||
@@ -1117,6 +1119,631 @@ export class EquipoService {
|
||||
|
||||
return Array.from(conteo.values()).sort((a, b) => b.total - a.total);
|
||||
}
|
||||
|
||||
async grafica(
|
||||
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 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 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')
|
||||
.select([])
|
||||
|
||||
qb.leftJoin('equipo.adscripcion', 'adscripcion')
|
||||
qb.leftJoin('equipo.procesador', 'procesador')
|
||||
qb.leftJoin('equipo.sistemaOperativo', 'sistemaOperativo')
|
||||
qb.leftJoin('equipo.tipoUso', 'tipoUso')
|
||||
|
||||
qb.addSelect('equipo.inventario', 'inventario')
|
||||
qb.addSelect('adscripcion.adscripcion', 'adscripcion')
|
||||
qb.addSelect('equipo.lugar', 'ubicacion')
|
||||
|
||||
const tieneFiltroReal = (arr?: string[]) => arr?.length && !arr.includes("0") && !arr.includes("Todos")
|
||||
qb.andWhere('equipo.id_periferico IS NULL')
|
||||
|
||||
// ADSCRIPCIONES
|
||||
if (filtros?.adscripciones?.length) {
|
||||
|
||||
// siempre selecciona
|
||||
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.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.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.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.addSelect('equipo.antiguedad', 'antiguedad')
|
||||
|
||||
if (tieneFiltroReal(filtros.antiguedad)) {
|
||||
qb.andWhere('equipo.antiguedad IN (:...antiguedad)', {
|
||||
antiguedad: filtros.antiguedad
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return qb
|
||||
.orderBy(`equipo.adscripcion`, "DESC")
|
||||
.getRawMany()
|
||||
}
|
||||
|
||||
async tablaCount(filtros?: FiltrosTablaDto) {
|
||||
const qb = this.equipoRepository
|
||||
.createQueryBuilder('equipo')
|
||||
.select([])
|
||||
|
||||
qb.leftJoin('equipo.adscripcion', 'adscripcion')
|
||||
qb.leftJoin('equipo.procesador', 'procesador')
|
||||
qb.leftJoin('equipo.sistemaOperativo', 'sistemaOperativo')
|
||||
qb.leftJoin('equipo.tipoUso', 'tipoUso')
|
||||
|
||||
qb.addSelect('adscripcion.adscripcion', 'adscripcion')
|
||||
qb.andWhere('equipo.id_periferico IS NULL')
|
||||
if (filtros?.adscripciones?.length) {
|
||||
qb.andWhere('adscripcion.id_adscripcion IN (:...adscripciones)', {
|
||||
adscripciones: filtros.adscripciones
|
||||
})
|
||||
}
|
||||
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
return qb
|
||||
.addSelect('COUNT(*)', 'total')
|
||||
.addGroupBy('adscripcion.adscripcion')
|
||||
.orderBy(`equipo.adscripcion`, "DESC")
|
||||
.getRawMany()
|
||||
}
|
||||
|
||||
async tablaExcel(filtros?: FiltrosTablaDto) {
|
||||
const qb = this.equipoRepository
|
||||
.createQueryBuilder('equipo')
|
||||
.select([]);
|
||||
|
||||
qb.leftJoin('equipo.adscripcion', 'adscripcion');
|
||||
qb.leftJoin('equipo.procesador', 'procesador');
|
||||
qb.leftJoin('equipo.sistemaOperativo', 'sistemaOperativo');
|
||||
qb.leftJoin('equipo.tipoUso', 'tipoUso');
|
||||
|
||||
qb.addSelect('equipo.inventario', 'inventario');
|
||||
qb.addSelect('adscripcion.adscripcion', 'adscripcion');
|
||||
qb.addSelect('equipo.lugar', 'ubicacion');
|
||||
|
||||
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
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// PROCESADOR
|
||||
if (filtros?.procesadores?.length) {
|
||||
|
||||
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.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.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.addSelect('equipo.antiguedad', 'antiguedad');
|
||||
|
||||
if (tieneFiltroReal(filtros.antiguedad)) {
|
||||
qb.andWhere('equipo.antiguedad IN (:...antiguedad)', {
|
||||
antiguedad: filtros.antiguedad
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const data = await qb
|
||||
.orderBy(`equipo.adscripcion`, "DESC")
|
||||
.getRawMany();
|
||||
|
||||
const workbook = new ExcelJS.Workbook();
|
||||
const sheet = workbook.addWorksheet('Equipos');
|
||||
|
||||
const columns = [
|
||||
{ header: 'Inventario', key: 'inventario', width: 20 },
|
||||
{ header: 'Ubicación', key: 'ubicacion', width: 40 },
|
||||
{ header: 'Adscripción', key: 'adscripcion', width: 40 },
|
||||
];
|
||||
|
||||
if (data[0]?.procesador !== undefined) {
|
||||
columns.push({ header: 'Procesador', key: 'procesador', width: 25 });
|
||||
}
|
||||
|
||||
if (data[0]?.so !== undefined) {
|
||||
columns.push({ header: 'Sistema Operativo', key: 'so', width: 25 });
|
||||
}
|
||||
|
||||
if (data[0]?.uso !== undefined) {
|
||||
columns.push({ header: 'Uso', key: 'uso', width: 20 });
|
||||
}
|
||||
|
||||
if (data[0]?.antiguedad !== undefined) {
|
||||
columns.push({ header: 'Antigüedad', key: 'antiguedad', width: 15 });
|
||||
}
|
||||
|
||||
sheet.columns = columns;
|
||||
|
||||
data.forEach(row => {
|
||||
sheet.addRow(row);
|
||||
});
|
||||
|
||||
sheet.getRow(1).font = { bold: true };
|
||||
|
||||
return await workbook.xlsx.writeBuffer();
|
||||
}
|
||||
|
||||
async tablaCountExcel(filtros?: FiltrosGraficaDto) {
|
||||
const qb = this.equipoRepository
|
||||
.createQueryBuilder('equipo')
|
||||
.select([]);
|
||||
|
||||
qb.leftJoin('equipo.adscripcion', 'adscripcion');
|
||||
qb.leftJoin('equipo.procesador', 'procesador');
|
||||
qb.leftJoin('equipo.sistemaOperativo', 'sistemaOperativo');
|
||||
qb.leftJoin('equipo.tipoUso', 'tipoUso');
|
||||
qb.addSelect('adscripcion.adscripcion', 'adscripcion');
|
||||
|
||||
qb.andWhere('equipo.id_periferico IS NULL')
|
||||
if (filtros?.adscripciones?.length) {
|
||||
qb.andWhere('adscripcion.id_adscripcion IN (:...adscripciones)', {
|
||||
adscripciones: filtros.adscripciones
|
||||
});
|
||||
}
|
||||
|
||||
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
|
||||
});
|
||||
}
|
||||
|
||||
const data = await qb
|
||||
.addSelect('COUNT(*)', 'total')
|
||||
.addGroupBy('adscripcion.adscripcion')
|
||||
.orderBy(`equipo.adscripcion`, "DESC")
|
||||
.getRawMany();
|
||||
|
||||
const workbook = new ExcelJS.Workbook();
|
||||
const sheet = workbook.addWorksheet('Resumen');
|
||||
|
||||
sheet.columns = [
|
||||
{ header: 'Adscripción', key: 'adscripcion', width: 30 },
|
||||
{ header: 'Total', key: 'total', width: 15 },
|
||||
];
|
||||
|
||||
data.forEach(row => {
|
||||
sheet.addRow(row);
|
||||
});
|
||||
|
||||
sheet.getRow(1).font = { bold: true };
|
||||
|
||||
return await workbook.xlsx.writeBuffer();
|
||||
}
|
||||
}
|
||||
|
||||
let estado_excluidos = ['DE BAJA'];
|
||||
|
||||
Reference in New Issue
Block a user