diff --git a/src/app.gateway.ts b/src/app.gateway.ts index 266fd7d..c22d4f7 100644 --- a/src/app.gateway.ts +++ b/src/app.gateway.ts @@ -10,15 +10,15 @@ import { Socket, Server } from 'socket.io'; @WebSocketGateway({ cors: { origin: [ - // 'http://localhost:3176', - // 'http://localhost:3186', + 'http://localhost:3176', + 'http://localhost:3186', // 'http://132.248.80.196:3155', // 'http://132.248.80.196:3185', // 'https://pmodulospcpuma.unam.mx', // 'https://pmodulospcpuma.unam.mx:3015', - 'https://modulospcpuma.unam.mx', - 'https://modulospcpuma.unam.mx:3015', - 'https://betelgeuse.acatlan.unam.mx:3180', + // 'https://modulospcpuma.unam.mx', + // 'https://modulospcpuma.unam.mx:3015', + // 'https://betelgeuse.acatlan.unam.mx:3180', ], }, }) diff --git a/src/prestamo/prestamo.controller.ts b/src/prestamo/prestamo.controller.ts index ef1180a..4adc4e4 100644 --- a/src/prestamo/prestamo.controller.ts +++ b/src/prestamo/prestamo.controller.ts @@ -115,8 +115,7 @@ export class PrestamoController { const operador: Operador = req.user.operador; this.validarUsuarioService.validarAdminOperador(operador); - // return this.prestamoService.findAll(query); - return this.prestamoService.findInfoPrestamoAll(query); + return this.prestamoService.findFullInfoPrestamoAll(query); } @Put('cancelar-operador') @@ -254,8 +253,7 @@ export class PrestamoController { const operador: Operador = req.user.operador; this.validarUsuarioService.validarOperador(operador); - // return this.prestamoService.findAll(query); - return this.prestamoService.findInfoPrestamoAll(query); + return this.prestamoService.findFullInfoPrestamoAll(query); } @Serealize(PrestamosEquipoOutputDto) diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index db99605..25e6dea 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -105,10 +105,10 @@ export class PrestamoService { .update(prestamo.equipo, null, 1) .then((_) => this.repository.save(prestamo)) .then((_) => { + this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario); this.appGateway.actualizarOperador( prestamo.equipo.carrito.modulo.institucion.id_institucion, ); - this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario); return { message: 'Se canceló correctamente este préstamo.' }; }); } @@ -148,36 +148,37 @@ export class PrestamoService { ) : null; - if (ahora.weekday() === 0) - throw new ConflictException('No hay servicio los días domingo.'); - this.validarInstitucionUsuario(usuario.instituciones, modulo); - if (!institucionDia.activo) - throw new ConflictException( - 'El día de hoy no hay servicio de préstamo de equipos.', - ); - if (ahora < horaMin) - throw new ConflictException( - `El servicio inicia a las ${institucionDia.hora_inicio} el día de hoy.`, - ); - if (ahora >= horaExtra) - throw new ConflictException( - `El servicio terminó a las ${institucionDia.hora_extra} el día de hoy.`, - ); - for (let i = 0; i < institucionDia.horasExcepcion.length; i++) { - const horaFin = moment( - `${ahoraStr} ${institucionDia.horasExcepcion[i].hora_fin}`, - ); - const horaInicio = moment( - `${ahoraStr} ${institucionDia.horasExcepcion[i].hora_inicio}`, - ); + // if (ahora.weekday() === 0) + // throw new ConflictException('No hay servicio los días domingo.'); + // this.validarInstitucionUsuario(usuario.instituciones, modulo); + // if (!institucionDia.activo) + // throw new ConflictException( + // 'El día de hoy no hay servicio de préstamo de equipos.', + // ); + // if (ahora < horaMin) + // throw new ConflictException( + // `El servicio inicia a las ${institucionDia.hora_inicio} el día de hoy.`, + // ); + // if (ahora >= horaExtra) + // throw new ConflictException( + // `El servicio terminó a las ${institucionDia.hora_extra} el día de hoy.`, + // ); + // for (let i = 0; i < institucionDia.horasExcepcion.length; i++) { + // const horaFin = moment( + // `${ahoraStr} ${institucionDia.horasExcepcion[i].hora_fin}`, + // ); + // const horaInicio = moment( + // `${ahoraStr} ${institucionDia.horasExcepcion[i].hora_inicio}`, + // ); - if (ahora > horaInicio && ahora < horaFin) - throw new ConflictException( - `Se suspendió temporalmente el servicio de ${institucionDia.horasExcepcion[i].hora_inicio} a ${institucionDia.horasExcepcion[i].hora_fin}.`, - ); - } - return this.repository - .findOne({ where: { activo: true, usuario } }) + // if (ahora > horaInicio && ahora < horaFin) + // throw new ConflictException( + // `Se suspendió temporalmente el servicio de ${institucionDia.horasExcepcion[i].hora_inicio} a ${institucionDia.horasExcepcion[i].hora_fin}.`, + // ); + // } + + return this.informacionPrestamoView + .findOne({ where: { activo: 1, id_usuario: usuario.id_usuario } }) .then((existePrestamo) => { if (existePrestamo) throw new ConflictException( @@ -249,31 +250,26 @@ export class PrestamoService { async desactivarPrestamos() { const ahora = moment(); - return this.repository - .find({ - join: { alias: 'p', innerJoin: { e: 'p.equipo', s: 'e.status' } }, - where: { activo: true, equipo: { status: { id_status: 2 } } }, - }) - .then(async (prestamos) => { - for (let i = 0; i < prestamos.length; i++) - if (ahora.diff(moment(prestamos[i].hora_max_recoger)) > 0) { - prestamos[i].activo = false; - prestamos[i].cancelado_operador = true; - await this.repository - .save(prestamos[i]) - .then((_) => - this.equipoService.update(prestamos[i].equipo, null, 1), - ) - .then((_) => { - this.appGateway.actualizarOperador( - prestamos[i].equipo.carrito.modulo.institucion.id_institucion, - ); - this.appGateway.actualizarUsuario( - prestamos[i].usuario.id_usuario, - ); - }); - } - }); + return this.findInfoPrestamoDesactivables().then(async (prestamos) => { + for (let i = 0; i < prestamos.length; i++) + if (ahora.diff(moment(prestamos[i].hora_max_recoger)) > 0) { + prestamos[i].activo = false; + prestamos[i].cancelado_operador = true; + await this.repository + .save(prestamos[i]) + .then((_) => + this.equipoService.update(prestamos[i].equipo, null, 1), + ) + .then((_) => { + this.appGateway.actualizarOperador( + prestamos[i].equipo.carrito.modulo.institucion.id_institucion, + ); + this.appGateway.actualizarUsuario( + prestamos[i].usuario.id_usuario, + ); + }); + } + }); } async entregar(operadorEntrega: Operador, id_prestamo: number) { @@ -309,207 +305,113 @@ export class PrestamoService { .then((_) => this.equipoService.update(prestamo.equipo, null, 3)) .then((_) => { this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario); - return { - message: 'Se entregó el equipo de cómputo al usuario.', - equipo: prestamo.equipo, - }; + this.appGateway.actualizarOperador( + prestamo.equipo.carrito.modulo.institucion.id_institucion, + ); + return prestamo.equipo; }); } - async findAll(filtros: { - pagina?: string; - activo?: string | boolean; - cancelado_operador?: string; - cancelado_usuario?: string; - carrito?: string; - equipo?: string; - fechaFin?: string; - fechaInicio?: string; - id_institucion?: string; - id_modulo?: string; - id_operador_entrega?: string; - id_operador_regreso?: string; - id_prestamo?: string; - id_tipo_carrito?: string; - id_tipo_usuario?: string; - usuario?: string; - }) { - const institucion = filtros.id_institucion - ? await this.institucionService.findInfoInstitucionById( - parseInt(filtros.id_institucion), - ) - : null; - const modulo = filtros.id_modulo - ? await this.moduloService.findInfoModuloById(parseInt(filtros.id_modulo)) - : null; - const operadorEntrega = filtros.id_operador_entrega - ? await this.operadorService.findById( - parseInt(filtros.id_operador_entrega), - ) - : null; - const operadorRegreso = filtros.id_operador_regreso - ? await this.operadorService.findById( - parseInt(filtros.id_operador_regreso), - ) - : null; - const tipoCarrito = filtros.id_tipo_carrito - ? await this.institucionTipoCarritoService.findTipoCarritoById( - parseInt(filtros.id_tipo_carrito), - ) - : null; - const tipoUsuario = filtros.id_tipo_usuario - ? await this.tipoUsuarioService.findById( - parseInt(filtros.id_tipo_usuario), - ) - : null; - const query = this.repository - .createQueryBuilder('p') - .innerJoinAndSelect('p.equipo', 'e') - .innerJoinAndSelect('p.operadorEntrega', 'oe') - .innerJoinAndSelect('p.operadorRegreso', 'or') - .innerJoinAndSelect('p.usuario', 'u') - .innerJoinAndSelect('e.carrito', 'c') - .innerJoinAndSelect('e.status', 's') - .innerJoinAndSelect('oe.tipoUsuario', 'tuoe') - .innerJoinAndSelect('or.tipoUsuario', 'tuor') - .innerJoinAndSelect('u.tipoUsuario', 'tu') - .innerJoinAndSelect('u.instituciones', 'is') - .innerJoinAndSelect('c.modulo', 'm') - .innerJoinAndSelect('c.tipoCarrito', 'tc') - .innerJoinAndSelect('is.institucionCarrera', 'ic') - .innerJoinAndSelect('m.institucion', 'i') - .innerJoinAndSelect('ic.carrera', 'ca') - .innerJoinAndSelect('ic.institucion', 'in') - .orderBy( - 'p.id_prestamo', - filtros.activo && typeof filtros.activo === 'boolean' ? 'ASC' : 'DESC', - ) - .addOrderBy('i.institucion') - .addOrderBy('m.modulo') - .addOrderBy('tc.tipo_carrito') - .addOrderBy('c.carrito') - .addOrderBy('e.equipo'); - - if (filtros.pagina) - query.skip((parseInt(filtros.pagina) - 1) * 25).take(25); - if (filtros.activo) { - if (typeof filtros.activo === 'boolean') - query.andWhere('p.activo = :activo', { activo: filtros.activo }); - else - query.andWhere('p.activo = :activo', { - activo: filtros.activo === 'true', - }); - } - if (filtros.cancelado_operador) - query.andWhere('p.cancelado_operador = :cancelado_operador', { - cancelado_operador: filtros.cancelado_operador === 'true', - }); - if (filtros.cancelado_usuario) - query.andWhere('p.cancelado_usuario = :cancelado_usuario', { - cancelado_usuario: filtros.cancelado_usuario === 'true', - }); - if (filtros.fechaInicio) - query.andWhere('p.fecha_inicio >= :fechaInicio', { - fechaInicio: filtros.fechaInicio, - }); - if (filtros.fechaFin) - query.andWhere('p.fecha_inicio <= :fechaFin', { - fechaFin: filtros.fechaFin, - }); - if (filtros.id_prestamo) - query.andWhere('p.id_prestamo LIKE :id_prestamo', { - id_prestamo: `%${filtros.id_prestamo}%`, - }); - if (filtros.carrito) - query.andWhere('c.carrito LIKE :carrito', { - carrito: `%${filtros.carrito}%`, - }); - if (filtros.equipo) - query.andWhere('e.equipo LIKE :equipo', { - equipo: `%${filtros.equipo}%`, - }); - if (filtros.usuario) - query.andWhere('u.usuario LIKE :usuario', { - usuario: `%${filtros.usuario}%`, - }); - if (institucion) - query.andWhere('i.id_institucion = :id_institucion', { - id_institucion: institucion.id_institucion, - }); - if (modulo) - query.andWhere('m.id_modulo = :id_modulo', { - id_modulo: modulo.id_modulo, - }); - if (tipoCarrito) - query.andWhere('tc.id_tipo_carrito = :id_tipo_carrito', { - id_tipo_carrito: tipoCarrito.id_tipo_carrito, - }); - if (tipoUsuario) - query.andWhere('tu.id_tipo_usuario = :id_tipo_usuario', { - id_tipo_usuario: tipoUsuario.id_tipo_usuario, - }); - if (operadorEntrega) - query.andWhere('p.id_operador_entrega = :id_operador_entrega', { - id_operador_entrega: operadorEntrega.id_operador, - }); - if (operadorRegreso) - query.andWhere('p.id_operador_regreso = :id_operador_regreso', { - id_operador_regreso: operadorRegreso.id_operador, - }); - return query.getManyAndCount(); - } - findAllByIdUsuario(id_usuario: number, pagina: number) { - return this.usuarioService - .findById(id_usuario, true, true) - .then((usuario) => - this.repository - .createQueryBuilder('p') - .innerJoinAndSelect('p.equipo', 'e') - .innerJoinAndSelect('p.operadorEntrega', 'oe') - .innerJoinAndSelect('p.operadorRegreso', 'or') - .innerJoinAndSelect('p.usuario', 'u', 'u.id_usuario = :id_usuario', { - id_usuario: usuario.id_usuario, - }) - .innerJoinAndSelect('e.carrito', 'c') - .innerJoinAndSelect('e.status', 's') - .innerJoinAndSelect('oe.tipoUsuario', 'tuoe') - .innerJoinAndSelect('or.tipoUsuario', 'tuor') - .innerJoinAndSelect('c.tipoCarrito', 'tc') - .innerJoinAndSelect('c.modulo', 'm') - .innerJoinAndSelect('m.institucion', 'i') - .skip((pagina - 1) * 25) - .take(25) - .getManyAndCount(), - ); + return this.fullInformacionPrestamoView + .findAndCount({ + where: { id_usuario }, + order: { id_prestamo: 'DESC' }, + skip: (pagina - 1) * 25, + take: 25, + }) + .then((infoPrestamos) => { + const prestamos: Prestamo[] = []; + + for (let i = 0; i < infoPrestamos[0].length; i++) + prestamos.push( + this.repository.create({ + id_prestamo: infoPrestamos[0][i].id_prestamo, + activo: infoPrestamos[0][i].activo === 1, + cancelado_operador: infoPrestamos[0][i].cancelado_operador === 1, + cancelado_usuario: infoPrestamos[0][i].cancelado_usuario === 1, + fecha_entrega: infoPrestamos[0][i].fecha_entrega, + fecha_inicio: infoPrestamos[0][i].fecha_inicio, + hora_fin: infoPrestamos[0][i].hora_fin, + hora_inicio: infoPrestamos[0][i].hora_inicio, + hora_max_recoger: infoPrestamos[0][i].hora_max_recoger, + equipo: { + id_equipo: infoPrestamos[0][i].id_equipo, + equipo: infoPrestamos[0][i].equipo, + numero_inventario: infoPrestamos[0][i].numero_inventario, + carrito: { + id_carrito: infoPrestamos[0][i].id_carrito, + carrito: infoPrestamos[0][i].carrito, + modulo: { + id_modulo: infoPrestamos[0][i].id_modulo, + modulo: infoPrestamos[0][i].modulo, + institucion: { + id_institucion: infoPrestamos[0][i].id_institucion, + institucion: infoPrestamos[0][i].institucion, + }, + }, + tipoCarrito: { + id_tipo_carrito: infoPrestamos[0][i].id_tipo_carrito, + tipo_carrito: infoPrestamos[0][i].tipo_carrito, + }, + }, + }, + operadorEntrega: { + id_operador: infoPrestamos[0][i].id_operador_entrega, + operador: infoPrestamos[0][i].operador_entrega, + }, + operadorRegreso: { + id_operador: infoPrestamos[0][i].id_operador_regreso, + operador: infoPrestamos[0][i].operador_regreso, + }, + }), + ); + return [prestamos, infoPrestamos[1]]; + }); } async findAllByIdEquipo(id_equipo: number, pagina: number) { - return this.equipoService.findInfoEquipoById(id_equipo).then((equipo) => - this.repository - .createQueryBuilder('p') - .innerJoinAndSelect('p.equipo', 'e', 'e.id_equipo = :id_equipo', { - id_equipo: equipo.id_equipo, - }) - .innerJoinAndSelect('p.operadorEntrega', 'oe') - .innerJoinAndSelect('p.operadorRegreso', 'or') - .innerJoinAndSelect('p.usuario', 'u') - .innerJoinAndSelect('e.carrito', 'c') - .innerJoinAndSelect('e.status', 's') - .innerJoinAndSelect('oe.tipoUsuario', 'tuoe') - .innerJoinAndSelect('or.tipoUsuario', 'tuor') - .innerJoinAndSelect('u.instituciones', 'is') - .innerJoinAndSelect('c.modulo', 'm') - .innerJoinAndSelect('c.tipoCarrito', 'tc') - .innerJoinAndSelect('is.institucionCarrera', 'ic') - .innerJoinAndSelect('m.institucion', 'i') - .innerJoinAndSelect('ic.carrera', 'ca') - .innerJoinAndSelect('ic.institucion', 'in') - .orderBy('p.id_prestamo', 'DESC') - .skip((pagina - 1) * 25) - .take(25) - .getManyAndCount(), - ); + return this.fullInformacionPrestamoView + .findAndCount({ + where: { id_equipo }, + order: { id_prestamo: 'DESC' }, + skip: (pagina - 1) * 25, + take: 25, + }) + .then((infoPrestamos) => { + const prestamos: Prestamo[] = []; + for (let i = 0; i < infoPrestamos[0].length; i++) + prestamos.push( + this.repository.create({ + id_prestamo: infoPrestamos[0][i].id_prestamo, + activo: infoPrestamos[0][i].activo === 1, + cancelado_operador: infoPrestamos[0][i].cancelado_operador === 1, + cancelado_usuario: infoPrestamos[0][i].cancelado_usuario === 1, + fecha_entrega: infoPrestamos[0][i].fecha_entrega, + fecha_inicio: infoPrestamos[0][i].fecha_inicio, + hora_fin: infoPrestamos[0][i].hora_fin, + hora_inicio: infoPrestamos[0][i].hora_inicio, + hora_max_recoger: infoPrestamos[0][i].hora_max_recoger, + usuario: { + id_usuario: infoPrestamos[0][i].id_usuario, + nombre: infoPrestamos[0][i].nombre, + usuario: infoPrestamos[0][i].usuario, + tipoUsuario: { + id_tipo_usuario: infoPrestamos[0][i].id_tipo_usuario, + }, + }, + operadorEntrega: { + id_operador: infoPrestamos[0][i].id_operador_entrega, + operador: infoPrestamos[0][i].operador_entrega, + }, + operadorRegreso: { + id_operador: infoPrestamos[0][i].id_operador_regreso, + operador: infoPrestamos[0][i].operador_regreso, + }, + }), + ); + return [prestamos, infoPrestamos[1]]; + }); } findById(id_prestamo: number) { @@ -540,7 +442,7 @@ export class PrestamoService { }); } - async findInfoPrestamoAll(filtros: { + async findFullInfoPrestamoAll(filtros: { pagina?: string; activo?: string | boolean; cancelado_operador?: string; @@ -693,6 +595,18 @@ export class PrestamoService { }); } + findInfoPrestamoDesactivables() { + return this.informacionPrestamoView + .find({ where: { activo: 1, id_status: 2 } }) + .then((infoPrestamo) => { + const prstamos: Prestamo[] = []; + + for (let i = 0; i < infoPrestamo.length; i++) + this.viewToPrestamo(infoPrestamo[i]); + return prstamos; + }); + } + async findInfoPrestamoByNumeroInventario( institucion: Institucion, numero_inventario: string,