diff --git a/src/auth/strategy/jwt-strategy.service.ts b/src/auth/strategy/jwt-strategy.service.ts index 67a0009..2bb9235 100644 --- a/src/auth/strategy/jwt-strategy.service.ts +++ b/src/auth/strategy/jwt-strategy.service.ts @@ -55,7 +55,7 @@ export class JwtStrategyService extends PassportStrategy(Strategy) { if (operador.tipoUsuario.id_tipo_usuario === 4) { if ('Modulo' in payload) await this.moduloService - .findById(payload.Modulo.id_modulo) + .findFullInfoById(payload.Modulo.id_modulo) .then((modulo) => (user.modulo = modulo)); else throw new ForbiddenException( diff --git a/src/equipo/entity/views/full-informacion-equipo.view.ts b/src/equipo/entity/views/full-informacion-equipo.view.ts index 07d443c..434a0ad 100644 --- a/src/equipo/entity/views/full-informacion-equipo.view.ts +++ b/src/equipo/entity/views/full-informacion-equipo.view.ts @@ -21,6 +21,7 @@ import { TipoCarrito } from '../../../institucion-tipo-carrito/entity/tipo-carri .addSelect('e.numero_inventario', 'numero_inventario') .addSelect('e.numero_serie', 'numero_serie') .addSelect('e.prestado', 'prestado') + .addSelect('e.u', 'u') .addSelect('c.carrito', 'carrito') .addSelect('c.id_modulo', 'id_modulo') .addSelect('c.id_tipo_carrito', 'id_tipo_carrito') @@ -102,4 +103,7 @@ export class FullInformacionEquipoView { @ViewColumn() tipo_carrito: string; + + @ViewColumn() + u: number; } diff --git a/src/equipo/equipo.service.ts b/src/equipo/equipo.service.ts index f885cb5..765e4f1 100644 --- a/src/equipo/equipo.service.ts +++ b/src/equipo/equipo.service.ts @@ -361,7 +361,7 @@ export class EquipoService { }), ); }) - .then((equipo) => this.findById(equipo.id_equipo)) // Una vez actualizado lo busco de nuevo + .then((equipo) => this.findFullInfoById(equipo.id_equipo)) // Una vez actualizado lo busco de nuevo .then((equipo) => { // Si el campo u no coincide con el id_usaurio saca error if (equipo.u != id_usuario) @@ -389,53 +389,33 @@ export class EquipoService { 'No existe un equipo de cómputo con este número de inventario en esta institución.', ); + const equipo = this.fullViewToEquipo(infoEquipo); // Busco todos los programas de este equipo const programas = await this.equipoProgramaService.findFullInfoAllByIdEquipo( - infoEquipo.id_equipo, + equipo.id_equipo, ); // Busco todos los tipos de entrada de este equipo const tiposEntradas = await this.equipoTipoEntradaService.findFullInfoAllByIdEquipo( - infoEquipo.id_equipo, + equipo.id_equipo, ); - return this.repository.create({ - id_equipo: infoEquipo.id_equipo, - equipo: infoEquipo.equipo, - numero_inventario: infoEquipo.numero_inventario, - prestado: infoEquipo.prestado, - carrito: { - id_carrito: infoEquipo.id_carrito, - carrito: infoEquipo.carrito, - modulo: { - id_modulo: infoEquipo.id_modulo, - modulo: infoEquipo.modulo, - institucion: { - id_institucion: infoEquipo.id_institucion, - institucion: infoEquipo.institucion, - }, - }, - tipoCarrito: { - id_tipo_carrito: infoEquipo.id_tipo_carrito, - tipo_carrito: infoEquipo.tipo_carrito, - }, - }, - marca: { - id_marca: infoEquipo.id_marca, - marca: infoEquipo.marca, - }, - modelo: { - id_modelo: infoEquipo.id_modelo, - modelo: infoEquipo.modelo, - }, - status: { - id_status: infoEquipo.id_status, - status: infoEquipo.status, - }, - programas, - tiposEntradas, - }); + equipo.programas = programas; + equipo.tiposEntradas = tiposEntradas; + return equipo; + }); + } + + findFullInfoById(id_equipo: number) { + return this.fullInformacionEquipoView + .findOne({ where: { id_equipo } }) + .then((infoEquipo) => { + if (!infoEquipo) + throw new NotFoundException( + 'No existe un equipo de cómputo con este número de inventario en esta institución.', + ); + return this.fullViewToEquipo(infoEquipo); }); } @@ -530,6 +510,45 @@ export class EquipoService { return this.repository.save(equipo); } + private fullViewToEquipo(infoEquipo: FullInformacionEquipoView) { + return this.repository.create({ + id_equipo: infoEquipo.id_equipo, + equipo: infoEquipo.equipo, + numero_inventario: infoEquipo.numero_inventario, + numero_serie: infoEquipo.numero_serie, + prestado: infoEquipo.prestado, + u: infoEquipo.u, + carrito: { + id_carrito: infoEquipo.id_carrito, + carrito: infoEquipo.carrito, + modulo: { + id_modulo: infoEquipo.id_modulo, + modulo: infoEquipo.modulo, + institucion: { + id_institucion: infoEquipo.id_institucion, + institucion: infoEquipo.institucion, + }, + }, + tipoCarrito: { + id_tipo_carrito: infoEquipo.id_tipo_carrito, + tipo_carrito: infoEquipo.tipo_carrito, + }, + }, + marca: { + id_marca: infoEquipo.id_marca, + marca: infoEquipo.marca, + }, + modelo: { + id_modelo: infoEquipo.id_modelo, + modelo: infoEquipo.modelo, + }, + status: { + id_status: infoEquipo.id_status, + status: infoEquipo.status, + }, + }); + } + private viewToEquipo(infoEquipo: InformacionEquipoView) { return this.repository.create({ id_equipo: infoEquipo.id_equipo, diff --git a/src/prestamo/prestamo.controller.ts b/src/prestamo/prestamo.controller.ts index 71854d2..c625869 100644 --- a/src/prestamo/prestamo.controller.ts +++ b/src/prestamo/prestamo.controller.ts @@ -133,12 +133,14 @@ export class PrestamoController { }) cancelarOperador(@Request() req, @Body() body: CancelarOperadorDto) { const operador: Operador = req.user.operador; + const modulo: Modulo = req.user.modulo; this.validarUsuarioService.validarAdminOperador(operador); return this.prestamoService.cancelarOperador( operador, body.id_prestamo, body.motivo, + modulo, ); } @@ -173,9 +175,10 @@ export class PrestamoController { }) entregar(@Request() req, @Body() body: EntregarDto) { const operador: Operador = req.user.operador; + const modulo: Modulo = req.user.modulo; this.validarUsuarioService.validarAdminOperador(operador); - return this.prestamoService.entregar(operador, body.id_prestamo); + return this.prestamoService.entregar(operador, body.id_prestamo, modulo); } @Serealize(PrestamosOutputDto) diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index 1abd4d0..df62d31 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -70,12 +70,13 @@ export class PrestamoService { operadorRegreso: Operador, id_prestamo: number, motivo: string, + modulo: Modulo, ) { const ahora = moment(); const prestamo = await this.findById(id_prestamo); this.validacionBasicaPrestamo(prestamo); - this.validacionOperadorPrestamo(prestamo, operadorRegreso); + this.validacionOperadorPrestamo(prestamo, operadorRegreso, modulo); prestamo.activo = false; prestamo.fecha_entrega = ahora.toDate(); prestamo.cancelado_operador = true; @@ -281,7 +282,7 @@ export class PrestamoService { async entregar( operadorEntrega: Operador, id_prestamo: number, - modulo?: Modulo, + modulo: Modulo, ) { const ahora = moment(); const ahoraStr = ahora.format('YYYY-MM-DD'); @@ -310,7 +311,7 @@ export class PrestamoService { prestamo.hora_fin = ahora > horaMax ? horaTope.toDate() - : ahora.add(operadorEntrega.institucion.tiempo_prestamo, 'm').toDate(); + : ahora.add(modulo.institucion.tiempo_prestamo, 'm').toDate(); prestamo.operadorEntrega = operadorEntrega; prestamo.equipo.prestado = true; prestamo.equipo.status.id_status = 3; @@ -909,7 +910,7 @@ export class PrestamoService { private validacionOperadorPrestamo( prestamo: Prestamo, operador: Operador, - modulo?: Modulo, + modulo: Modulo, ) { // Valido que el prestamo pertenezca a la institución if (