diff --git a/src/prestamo/entity/views/prestamo-informacion.view.ts b/src/prestamo/entity/views/prestamo-informacion.view.ts index a9661b0..d0c8e17 100644 --- a/src/prestamo/entity/views/prestamo-informacion.view.ts +++ b/src/prestamo/entity/views/prestamo-informacion.view.ts @@ -23,6 +23,7 @@ import { Usuario } from '../../../usuario/entity/usuario.entity'; .addSelect('p.id_equipo', 'id_equipo') .addSelect('p.id_usuario', 'id_usuario') .addSelect('e.equipo', 'equipo') + .addSelect('e.u', 'u') .addSelect('e.id_carrito', 'id_carrito') .addSelect('e.id_status', 'id_status') .addSelect('e.numero_inventario', 'numero_inventario') @@ -119,4 +120,7 @@ export class PrestamoInformacionView { @ViewColumn() usuario: string; + + @ViewColumn() + u: number; } diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index 09f961e..10b10b4 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -84,23 +84,25 @@ export class PrestamoService { prestamo.fecha_entrega = ahora.toDate(); prestamo.cancelado_operador = true; prestamo.operadorRegreso = operadorRegreso; - prestamo.equipo.u = null; - prestamo.equipo.status.id_status = 6; - // Guardo cambios en el equipo, y envio el motivo de cancelación - return ( - this.equipoService - .updateStatus(prestamo.equipo, operadorRegreso, motivo) - // Guardo cambios del prestamo - .then((_) => this.repository.save(prestamo)) - .then((_) => { - // Actualizo interfaz de usaurios - this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario); - this.appGateway.actualizarOperador( - operadorRegreso.institucion.id_institucion, - ); - return { message: 'Se canceló correctamente este préstamo.' }; - }) - ); + if (prestamo.equipo.u === prestamo.usuario.id_usuario) { + prestamo.equipo.u = null; + prestamo.equipo.status.id_status = 6; + // Guardo cambios en el equipo, y envio el motivo de cancelación + await this.equipoService.updateStatus( + prestamo.equipo, + operadorRegreso, + motivo, + ); + } + // Guardo cambios del prestamo + return this.repository.save(prestamo).then((_) => { + // Actualizo interfaz de usaurios + this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario); + this.appGateway.actualizarOperador( + operadorRegreso.institucion.id_institucion, + ); + return { message: 'Se canceló correctamente este préstamo.' }; + }); } async cancelarUsuario(usuario: Usuario) { @@ -109,27 +111,27 @@ export class PrestamoService { this.validacionBasicaPrestamo(prestamo); // Saco error en status de equipo 3 - if (prestamo.equipo.status.id_status === 3) - throw new ConflictException( - 'No puedes cancelar este préstamo una vez que se te entregó el equipo.', - ); + if (prestamo.equipo.u === usuario.id_usuario) { + if (prestamo.equipo.status.id_status === 3) + throw new ConflictException( + 'No puedes cancelar este préstamo una vez que se te entregó el equipo.', + ); + prestamo.equipo.u = null; + prestamo.equipo.status.id_status = 1; + // Guardo cambios en el equipo + await this.equipoService.updateStatus(prestamo.equipo); + } prestamo.activo = false; prestamo.fecha_entrega = ahora.toDate(); prestamo.cancelado_usuario = true; - prestamo.equipo.u = null; - prestamo.equipo.status.id_status = 1; - // Guardo cambios en el equipo - return this.equipoService - .updateStatus(prestamo.equipo) - .then((_) => this.repository.save(prestamo)) // Guardo cambios del prestamo - .then((_) => { - // Actualizo interfaz de usaurios - this.appGateway.actualizarUsuario(usuario.id_usuario); - this.appGateway.actualizarOperador( - prestamo.equipo.carrito.modulo.institucion.id_institucion, - ); - return { message: 'Se canceló correctamente este préstamo.' }; - }); + // Guardo cambios del prestamo + return this.repository.save(prestamo).then((_) => { + // Actualizo interfaz de operador + this.appGateway.actualizarOperador( + prestamo.equipo.carrito.modulo.institucion.id_institucion, + ); + return { message: 'Se canceló correctamente este préstamo.' }; + }); } async create( @@ -341,6 +343,10 @@ export class PrestamoService { throw new ConflictException( 'Ya se entregó el equipo de cómputo al usuario.', ); + if (prestamo.usuario.id_usuario != prestamo.equipo.u) + throw new ConflictException( + 'Este equipo fue asignado más de una vez y este es el préstamo incorrecto, espere unos segundos y se desactivará este préstamo o tanto el usario como el opeardor pueden cancelarlo manualmente.', + ); prestamo.hora_inicio = ahora.toDate(); prestamo.hora_fin = ahora > horaMax @@ -724,6 +730,7 @@ export class PrestamoService { id_equipo: infoPrestamo.id_equipo, equipo: infoPrestamo.equipo, numero_inventario: infoPrestamo.numero_inventario, + u: infoPrestamo.u, carrito: { id_carrito: infoPrestamo.id_carrito, carrito: infoPrestamo.carrito, @@ -833,10 +840,6 @@ export class PrestamoService { ); if (id_institucion_infraccion && !descripcion) throw new ConflictException('No se mandó la descripción de lo ocurrido.'); - if (prestamo.usuario.id_usuario !== prestamo.equipo.u) - throw new ConflictException( - 'Este equipo fue asignado 2 veces y este es el préstamo incorrecto, espere unos segundos y se desactivará este préstamo.', - ); prestamo.activo = false; prestamo.fecha_entrega = ahora.toDate(); prestamo.operadorRegreso = operadorRegreso;