From 1b28fac4f7bbd24b636dad8df7552135978da1c5 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Sun, 2 Oct 2022 23:15:11 -0500 Subject: [PATCH] en teoria ya no deben haber duplicados --- src/app.gateway.ts | 8 +-- src/equipo/entity/equipo.entity.ts | 3 + .../views/informacion-equipo-prestamo.view.ts | 4 +- .../entity/views/informacion-equipo.view.ts | 4 ++ src/equipo/equipo.service.ts | 40 ++++++++--- src/prestamo/prestamo.service.ts | 67 ++++++++++--------- 6 files changed, 79 insertions(+), 47 deletions(-) diff --git a/src/app.gateway.ts b/src/app.gateway.ts index 4b7d086..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:3015', + // 'https://betelgeuse.acatlan.unam.mx:3180', ], }, }) diff --git a/src/equipo/entity/equipo.entity.ts b/src/equipo/entity/equipo.entity.ts index ed08742..396be96 100644 --- a/src/equipo/entity/equipo.entity.ts +++ b/src/equipo/entity/equipo.entity.ts @@ -32,6 +32,9 @@ export class Equipo { @Column({ type: Boolean, nullable: false, default: false }) prestado: boolean; + @Column({ type: Number, nullable: true, default: null }) + u: number; + @ManyToOne(() => Carrito, (carrito) => carrito.equipos, { eager: true }) @JoinColumn({ name: 'id_carrito' }) carrito: Carrito; diff --git a/src/equipo/entity/views/informacion-equipo-prestamo.view.ts b/src/equipo/entity/views/informacion-equipo-prestamo.view.ts index 486ed17..c698915 100644 --- a/src/equipo/entity/views/informacion-equipo-prestamo.view.ts +++ b/src/equipo/entity/views/informacion-equipo-prestamo.view.ts @@ -27,9 +27,9 @@ import { Modulo } from '../../../modulo/entity/modulo.entity'; .innerJoin(EquipoTipoEntrada, 'tes', 'tes.id_equipo = e.id_equipo') .innerJoin(Modulo, 'm', 'm.id_modulo = c.id_modulo') .innerJoin(Institucion, 'i', 'i.id_institucion = m.id_institucion') - .where('c.activo = 1') + .where('i.activo = 1') .andWhere('m.activo = 1') - .andWhere('i.activo = 1') + .andWhere('c.activo = 1') .andWhere('e.id_status = 1') .orderBy('c.carrito', 'ASC') .addOrderBy('e.equipo', 'ASC'), diff --git a/src/equipo/entity/views/informacion-equipo.view.ts b/src/equipo/entity/views/informacion-equipo.view.ts index 310fd46..4aad0fe 100644 --- a/src/equipo/entity/views/informacion-equipo.view.ts +++ b/src/equipo/entity/views/informacion-equipo.view.ts @@ -13,6 +13,7 @@ import { Modulo } from '../../../modulo/entity/modulo.entity'; .addSelect('e.id_status', 'id_status') .addSelect('e.numero_inventario', 'numero_inventario') .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') @@ -51,4 +52,7 @@ export class InformacionEquipoView { @ViewColumn() prestado: boolean; + + @ViewColumn() + u: number; } diff --git a/src/equipo/equipo.service.ts b/src/equipo/equipo.service.ts index e135420..4d722c8 100644 --- a/src/equipo/equipo.service.ts +++ b/src/equipo/equipo.service.ts @@ -34,6 +34,8 @@ import { ModuloService } from '../modulo/modulo.service'; import { EquipoMotivoService } from '../equipo-motivo/equipo-motivo.service'; import { OperadorService } from '../operador/operador.service'; import { StatusService } from '../status/status.service'; +import internal from 'stream'; +import { retry } from 'rxjs'; @Injectable() export class EquipoService { @@ -94,6 +96,7 @@ export class EquipoService { equipo: infoEquipo.equipo, numero_inventario: infoEquipo.numero_inventario, prestado: infoEquipo.prestado, + u: infoEquipo.u, carrito: { id_carrito: infoEquipo.id_carrito, carrito: infoEquipo.carrito, @@ -252,6 +255,7 @@ export class EquipoService { } async findEquipo( + id_usuario: number, modulo: Modulo, tipoCarrito: TipoCarrito, programa?: Programa, @@ -281,10 +285,10 @@ export class EquipoService { } return this.informacionEquipoPrestamoView - .count({ where: busqueda }) - .then(async (n) => { - if (n === 0) - await this.informacionEquipoPrestamoView + .findOne({ where: busqueda }) + .then((infoEquipo) => { + if (!infoEquipo) + return this.informacionEquipoPrestamoView .find({ where: busquedaReseteo }) .then(async (infoEquipos) => { for (let i = 0; i < infoEquipos.length; i++) @@ -294,15 +298,35 @@ export class EquipoService { prestado: false, }), ); + return this.informacionEquipoPrestamoView.findOne({ + where: busqueda, + }); + }) + .then((infoEquipo) => { + if (!infoEquipo) + throw new ConflictException( + 'No hay un equipo de cómputo que cumpla con las caracteríasticas solicitadas o ya no hay equipos disponibles en este momento. Intenta más tarde o cambia las características.', + ); + return infoEquipo; }); - return this.informacionEquipoPrestamoView.findOne({ where: busqueda }); + return infoEquipo; }) + .then((infoEquipo) => { + const equipo = this.repository.create({ + id_equipo: infoEquipo.id_equipo, + u: id_usuario, + status: { id_status: 2 }, + }); + + return this.repository.save(equipo); + }) + .then((equipo) => this.findInfoEquipoById(equipo.id_equipo)) .then((equipo) => { - if (!equipo) + if (equipo.u != id_usuario) throw new ConflictException( - 'No hay un equipo de cómputo que cumpla con las caracteríasticas solicitadas o ya no hay equipos disponibles en este momento. Intenta más tarde o cambia las características.', + 'Ocurrio un error al tratar de asignarte un equipo de cómputo, intenta de nuevo.', ); - return this.repository.create({ id_equipo: equipo.id_equipo }); + return equipo; }); } diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index c9b172c..a1c4061 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -77,6 +77,7 @@ export class PrestamoService { prestamo.fecha_entrega = ahora.toDate(); prestamo.cancelado_operador = true; prestamo.operadorRegreso = operadorRegreso; + prestamo.equipo.u = null; return this.equipoService .update(prestamo.equipo, null, 6, operadorRegreso, motivo) .then((_) => this.repository.save(prestamo)) @@ -101,6 +102,7 @@ export class PrestamoService { prestamo.activo = false; prestamo.fecha_entrega = ahora.toDate(); prestamo.cancelado_usuario = true; + prestamo.equipo.u = null; return this.equipoService .update(prestamo.equipo, null, 1) .then((_) => this.repository.save(prestamo)) @@ -120,7 +122,7 @@ export class PrestamoService { id_programa?: number, id_tipo_entrada?: number, ) { - const ahora = moment().add(12, 'hour'); + const ahora = moment(); const ahoraStr = ahora.format('YYYY-MM-DD'); const sistema = { id_operador: 1 }; const modulo = await this.moduloService.findById(id_modulo); @@ -148,35 +150,34 @@ 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 > horaInicio && ahora < horaFin) - throw new ConflictException( - `Se suspendió temporalmente el servicio de ${institucionDia.horasExcepcion[i].hora_inicio} a ${institucionDia.horasExcepcion[i].hora_fin}.`, - ); - } + // 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.informacionPrestamoView .findOne({ where: { activo: 1, id_usuario: usuario.id_usuario } }) .then((existePrestamo) => { @@ -185,14 +186,14 @@ export class PrestamoService { 'Este usuario ya tiene un préstamo activo.', ); return this.equipoService.findEquipo( + usuario.id_usuario, modulo, tipoCarrito, programa, tipoEntrada, ); }) - .then((equipo) => this.equipoService.update(equipo, null, 2)) - .then(({ equipo }) => + .then((equipo) => this.repository.save( this.repository.create({ equipo, @@ -273,7 +274,7 @@ export class PrestamoService { } async entregar(operadorEntrega: Operador, id_prestamo: number) { - const ahora = moment().add(12, 'hour'); + const ahora = moment(); const ahoraStr = ahora.format('YYYY-MM-DD'); const prestamo = await this.findInfoPrestamoById(id_prestamo); const institucionDia = @@ -776,7 +777,7 @@ export class PrestamoService { descripcion?: string, id_institucion_infraccion?: number, ) { - const ahora = moment().add(12, 'hour'); + const ahora = moment(); const tardanza = Math.trunc(ahora.diff(moment(prestamo.hora_fin)) / 60000); const semanasCastigo = Math.trunc( tardanza / operadorRegreso.institucion.tiempo_entrega,