From ace78c2a625a576214d1df0dc71a2384f684a0a6 Mon Sep 17 00:00:00 2001 From: lemuel Date: Sat, 15 Oct 2022 17:29:24 -0500 Subject: [PATCH] equipo tipo entrada actualizado --- .../equipo-programa.service.ts | 54 ++++---- .../entity/equipo-tipo-entrada.entity.ts | 4 +- .../informacion-equipo-tipo-entrada.view.ts | 24 +++- .../equipo-tipo-entrada.controller.ts | 7 +- .../equipo-tipo-entrada.service.ts | 118 ++++++++++-------- src/upload-file/upload-file.service.ts | 14 +-- 6 files changed, 132 insertions(+), 89 deletions(-) diff --git a/src/equipo-programa/equipo-programa.service.ts b/src/equipo-programa/equipo-programa.service.ts index 3d908df..775b2a9 100644 --- a/src/equipo-programa/equipo-programa.service.ts +++ b/src/equipo-programa/equipo-programa.service.ts @@ -46,24 +46,24 @@ export class EquipoProgramaService { 'No puedes modificar la información este equipo porque no pertenece a tu institución.', ); // Verifica que no eixsta un registro con estos ids - return this.findInfoEquipoProgramaByIdEquipoIdPrograma( - equipo.id_equipo, - programa.id_programa, - ).then((existeEquipoPrograma) => { - // Error si existe - if (existeEquipoPrograma) - throw new ConflictException( - 'Este software ya fue asignado a este equipo.', - ); - - // Creo registro - return this.create(equipo, programa); - }); + return this.findInfoEquipoProgramaByEquipoPrograma(equipo, programa).then( + (existeEquipoPrograma) => { + // Error si existe + if (existeEquipoPrograma) + throw new ConflictException( + 'Este software ya fue asignado a este equipo.', + ); + // Creo registro + return this.create(equipo, programa); + }, + ); } - async create(equipo: Equipo, programa: Programa) { + create(equipo: Equipo, programa: Programa) { // Ver si tiene programa "Sin programa" - return this.findInfoEquipoProgramaByIdEquipoIdPrograma(equipo.id_equipo, 1) + return this.findInfoEquipoProgramaByEquipoPrograma(equipo, { + id_programa: 1, + }) .then(async (existeEquipoSinPrograma) => { // Si tiene lo elimino if (existeEquipoSinPrograma) @@ -79,7 +79,7 @@ export class EquipoProgramaService { })); } - async createSinPrograma(equipo: Equipo) { + createSinPrograma(equipo: Equipo) { return this.repository.save( this.repository.create({ equipo, programa: { id_programa: 1 } }), ); @@ -136,14 +136,17 @@ export class EquipoProgramaService { findInfoEquipoProgramaById(id_equipo_programa: number) { return this.informacionEquipoProgramaView .findOne({ where: { id_equipo_programa } }) - .then((infoEquipoPrograma) => - this.repository.create({ + .then((infoEquipoPrograma) => { + if (!infoEquipoPrograma) + throw new ConflictException('No existe este id equipo programa.'); + return this.repository.create({ id_equipo_programa: infoEquipoPrograma.id_equipo_programa, equipo: { id_equipo: infoEquipoPrograma.id_equipo, carrito: { id_carrito: infoEquipoPrograma.id_carrito, modulo: { + id_modulo: infoEquipoPrograma.id_modulo, institucion: { id_institucion: infoEquipoPrograma.id_institucion, }, @@ -153,16 +156,15 @@ export class EquipoProgramaService { }, }, }, - }), - ); + programa: { id_programa: infoEquipoPrograma.id_programa }, + }); + }); } - findInfoEquipoProgramaByIdEquipoIdPrograma( - id_equipo: number, - id_programa: number, + findInfoEquipoProgramaByEquipoPrograma( + equipo: Equipo, + programa: Programa | Partial, ) { - return this.repository.findOne({ - where: { equipo: { id_equipo }, programa: { id_programa } }, - }); + return this.repository.findOne({ where: { equipo, programa } }); } } diff --git a/src/equipo-tipo-entrada/entity/equipo-tipo-entrada.entity.ts b/src/equipo-tipo-entrada/entity/equipo-tipo-entrada.entity.ts index 3cfa650..b51bc56 100644 --- a/src/equipo-tipo-entrada/entity/equipo-tipo-entrada.entity.ts +++ b/src/equipo-tipo-entrada/entity/equipo-tipo-entrada.entity.ts @@ -11,9 +11,7 @@ export class EquipoTipoEntrada { @JoinColumn({ name: 'id_equipo' }) equipo: Equipo; - @ManyToOne(() => TipoEntrada, (tipoEntrada) => tipoEntrada.equipos, { - eager: true, - }) + @ManyToOne(() => TipoEntrada, (tipoEntrada) => tipoEntrada.equipos) @JoinColumn({ name: 'id_tipo_entrada' }) tipoEntrada: TipoEntrada; } diff --git a/src/equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view.ts b/src/equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view.ts index f15b983..11a38f4 100644 --- a/src/equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view.ts +++ b/src/equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view.ts @@ -1,5 +1,8 @@ import { DataSource, ViewEntity, ViewColumn } from 'typeorm'; import { EquipoTipoEntrada } from '../equipo-tipo-entrada.entity'; +import { Equipo } from '../../../equipo/entity/equipo.entity'; +import { Carrito } from '../../../carrito/entity/carrito.entity'; +import { Modulo } from '../../../modulo/entity/modulo.entity'; @ViewEntity({ expression: (dataSource: DataSource) => @@ -8,15 +11,34 @@ import { EquipoTipoEntrada } from '../equipo-tipo-entrada.entity'; .select('ete.id_equipo_tipo_entrada', 'id_equipo_tipo_entrada') .addSelect('ete.id_equipo', 'id_equipo') .addSelect('ete.id_tipo_entrada', 'id_tipo_entrada') - .from(EquipoTipoEntrada, 'ete'), + .addSelect('e.id_carrito', 'id_carrito') + .addSelect('c.id_modulo', 'id_modulo') + .addSelect('c.id_tipo_carrito', 'id_tipo_carrito') + .addSelect('m.id_institucion', 'id_institucion') + .from(EquipoTipoEntrada, 'ete') + .innerJoin(Equipo, 'e', 'e.id_equipo = ete.id_equipo') + .innerJoin(Carrito, 'c', 'c.id_carrito = e.id_carrito') + .innerJoin(Modulo, 'm', 'm.id_modulo = c.id_modulo'), }) export class InformacionEquipoTipoEntradaView { @ViewColumn() id_equipo_tipo_entrada: number; + @ViewColumn() + id_carrito: number; + @ViewColumn() id_equipo: number; + @ViewColumn() + id_institucion: number; + + @ViewColumn() + id_modulo: number; + @ViewColumn() id_tipo_entrada: number; + + @ViewColumn() + id_tipo_carrito: number; } diff --git a/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts b/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts index 4a5bdcc..f0a9573 100644 --- a/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts +++ b/src/equipo-tipo-entrada/equipo-tipo-entrada.controller.ts @@ -37,7 +37,7 @@ export class EquipoTipoEntradaController { const operador: Operador = req.user.operador; this.validarUsuarioService.validarAdminOperador(operador); - return this.equipoTipoEntradaService.create( + return this.equipoTipoEntradaService.asignar( body.id_equipo, body.id_tipo_entrada, ); @@ -58,6 +58,9 @@ export class EquipoTipoEntradaController { const operador: Operador = req.user.operador; this.validarUsuarioService.validarAdminOperador(operador); - return this.equipoTipoEntradaService.delete(body.id_equipo_tipo_entrada); + return this.equipoTipoEntradaService.delete( + operador, + body.id_equipo_tipo_entrada, + ); } } diff --git a/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts b/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts index 64a0618..791bb19 100644 --- a/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts +++ b/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts @@ -1,5 +1,6 @@ import { ConflictException, + ForbiddenException, forwardRef, Inject, Injectable, @@ -8,6 +9,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Equipo } from '../equipo/entity/equipo.entity'; import { EquipoTipoEntrada } from './entity/equipo-tipo-entrada.entity'; +import { Operador } from 'src/operador/entity/operador.entity'; import { TipoEntrada } from '../institucion-tipo-entrada/entity/tipo-entrada.entity'; import { FullInformacionEquipoTipoEntradaView } from './entity/views/full-informacion-equipo-tipo-entrada.view'; import { InformacionEquipoTipoEntradaView } from './entity/views/informacion-equipo-tipo-entrada.view'; @@ -28,41 +30,26 @@ export class EquipoTipoEntradaService { private institucionTipoEntradaService: InstitucionTipoEntradaService, ) {} - async create( - id_equipo: number | Equipo, - id_tipo_entrada: number | TipoEntrada, - ) { - const equipo = - typeof id_equipo === 'number' - ? await this.equipoService.findInfoEquipoById(id_equipo) - : id_equipo; + async asignar(id_equipo: number, id_tipo_entrada: number) { + const equipo = await this.equipoService.findInfoEquipoById(id_equipo); const tipoEntrada = - typeof id_tipo_entrada === 'number' - ? await this.institucionTipoEntradaService.findTipoEntradaById( - id_tipo_entrada, - ) - : id_tipo_entrada; + await this.institucionTipoEntradaService.findTipoEntradaById( + id_tipo_entrada, + ); - return this.informacionEquipoTipoEntrada( - equipo.id_equipo, - tipoEntrada.id_tipo_entrada, - ) - .then((existeEquipoTipoEntrada) => { - if (existeEquipoTipoEntrada) - throw new ConflictException( - 'Este tipo de entrada ya fue asignado a este equipo.', - ); - return this.repository.save( - this.repository.create({ equipo, tipoEntrada }), + return this.findInfoEquipoTipoEntradaByEquipoTipoEntrada( + equipo, + tipoEntrada, + ).then((existeEquipoTipoEntrada) => { + if (existeEquipoTipoEntrada) + throw new ConflictException( + 'Este tipo de entrada ya fue asignado a este equipo.', ); - }) - .then((equipoTipoEntrada) => ({ - message: `Se asignó el tipo de entrada: ${tipoEntrada.tipo_entrada}, al equipo con número de inventario: ${equipo.numero_inventario}.`, - equipoTipoEntrada, - })); + return this.create(equipo, tipoEntrada); + }); } - async createCargaMasiva(equipo: Equipo, tipoEntrada: TipoEntrada) { + create(equipo: Equipo, tipoEntrada: TipoEntrada) { return this.repository .save(this.repository.create({ equipo, tipoEntrada })) .then((equipoTipoEntrada) => ({ @@ -71,32 +58,32 @@ export class EquipoTipoEntradaService { })); } - delete(id_equipo_tipo_entrada: number) { - return this.findById(id_equipo_tipo_entrada) - .then((equipoTipoEntrada) => this.repository.remove(equipoTipoEntrada)) + delete(operador: Operador, id_equipo_tipo_entrada: number) { + return this.findInfoEquipoTipoEntradaById(id_equipo_tipo_entrada) + .then((equipoTipoEntrada) => { + // Valida que el equipo pertenezca a la institución del operador + if ( + operador.institucion.id_institucion != + equipoTipoEntrada.equipo.carrito.modulo.institucion.id_institucion + ) + throw new ForbiddenException( + 'No puedes modificar la información este equipo porque no pertenece a tu institución.', + ); + return this.repository.remove(equipoTipoEntrada); + }) .then((_) => ({ message: 'Se eliminó correctamente el tipo de entrada de este equipo.', })); } - findById(id_equipo_tipo_entrada: number) { - return this.repository - .findOne({ where: { id_equipo_tipo_entrada } }) - .then((equipoTipoEntrada) => { - if (!equipoTipoEntrada) - throw new ConflictException('No existe este id equipo tipo entrada.'); - return equipoTipoEntrada; - }); - } - findFullInfoEquipoTipoEntradaAllByIdEquipo(id_equipo: number) { return this.fullInformacionEquipoTipoEntradaView .find({ where: { id_equipo } }) .then((infoEquipoTipoEntradas) => { - const equipoProgramas: EquipoTipoEntrada[] = []; + const equipoTipoEntradas: EquipoTipoEntrada[] = []; for (let i = 0; i < infoEquipoTipoEntradas.length; i++) - equipoProgramas.push( + equipoTipoEntradas.push( this.repository.create({ id_equipo_tipo_entrada: infoEquipoTipoEntradas[i].id_equipo_tipo_entrada, @@ -106,13 +93,44 @@ export class EquipoTipoEntradaService { }, }), ); - return equipoProgramas; + return equipoTipoEntradas; }); } - informacionEquipoTipoEntrada(id_equipo: number, id_tipo_entrada: number) { - return this.informacionEquipoTipoEntradaView.findOne({ - where: { id_equipo, id_tipo_entrada }, - }); + findInfoEquipoTipoEntradaById(id_equipo_tipo_entrada: number) { + return this.informacionEquipoTipoEntradaView + .findOne({ where: { id_equipo_tipo_entrada } }) + .then((infoEquipoTipoEntrada) => { + if (!infoEquipoTipoEntrada) + throw new ConflictException('No existe este id equipo tipo entrada.'); + return this.repository.create({ + id_equipo_tipo_entrada: infoEquipoTipoEntrada.id_equipo_tipo_entrada, + equipo: { + id_equipo: infoEquipoTipoEntrada.id_equipo, + carrito: { + id_carrito: infoEquipoTipoEntrada.id_carrito, + modulo: { + id_modulo: infoEquipoTipoEntrada.id_modulo, + institucion: { + id_institucion: infoEquipoTipoEntrada.id_institucion, + }, + }, + tipoCarrito: { + id_tipo_carrito: infoEquipoTipoEntrada.id_tipo_carrito, + }, + }, + }, + tipoEntrada: { + id_tipo_entrada: infoEquipoTipoEntrada.id_tipo_entrada, + }, + }); + }); + } + + findInfoEquipoTipoEntradaByEquipoTipoEntrada( + equipo: Equipo, + tipoEntrada: TipoEntrada, + ) { + return this.repository.findOne({ where: { equipo, tipoEntrada } }); } } diff --git a/src/upload-file/upload-file.service.ts b/src/upload-file/upload-file.service.ts index 6ab44df..c9e1cf9 100644 --- a/src/upload-file/upload-file.service.ts +++ b/src/upload-file/upload-file.service.ts @@ -284,9 +284,9 @@ export class UploadFileService { false, ); const existeEquipoTipoEntrada = tipoEntrada - ? await this.equipoTipoEntradaService.informacionEquipoTipoEntrada( - equipo.id_equipo, - tipoEntrada.id_tipo_entrada, + ? await this.equipoTipoEntradaService.findInfoEquipoTipoEntradaByEquipoTipoEntrada( + equipo, + tipoEntrada, ) : null; @@ -308,7 +308,7 @@ export class UploadFileService { continue; } await this.equipoTipoEntradaService - .createCargaMasiva(equipo, tipoEntrada) + .create(equipo, tipoEntrada) .then((res) => { equipo.tiposEntradas.push(res.equipoTipoEntrada); mensajes.push(res.message); @@ -321,9 +321,9 @@ export class UploadFileService { false, ); const existeEquipoPrograma = programa - ? await this.equipoProgramaService.findInfoEquipoProgramaByIdEquipoIdPrograma( - equipo.id_equipo, - programa.id_programa, + ? await this.equipoProgramaService.findInfoEquipoProgramaByEquipoPrograma( + equipo, + programa, ) : null;