diff --git a/src/equipo-motivo/equipo-motivo.service.ts b/src/equipo-motivo/equipo-motivo.service.ts index 3ef3d5c..4e68fad 100644 --- a/src/equipo-motivo/equipo-motivo.service.ts +++ b/src/equipo-motivo/equipo-motivo.service.ts @@ -49,7 +49,7 @@ export class EquipoMotivoService { } findAllByIdEquipo(id_equipo: number, pagina: number) { - return this.equipoService.findById(id_equipo).then((equipo) => + return this.equipoService.findInfoEquipoById(id_equipo).then((equipo) => this.repository.findAndCount({ where: { equipo }, skip: (pagina - 1) * 25, diff --git a/src/equipo-programa/equipo-programa.service.ts b/src/equipo-programa/equipo-programa.service.ts index cf73a9f..5599005 100644 --- a/src/equipo-programa/equipo-programa.service.ts +++ b/src/equipo-programa/equipo-programa.service.ts @@ -37,7 +37,7 @@ export class EquipoProgramaService { ) { const equipo = typeof id_equipo === 'number' - ? await this.equipoService.findById(id_equipo) + ? await this.equipoService.findInfoEquipoById(id_equipo) : id_equipo; const programa = typeof id_programa === 'number' diff --git a/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts b/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts index a8bb364..64a0618 100644 --- a/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts +++ b/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts @@ -34,7 +34,7 @@ export class EquipoTipoEntradaService { ) { const equipo = typeof id_equipo === 'number' - ? await this.equipoService.findById(id_equipo) + ? await this.equipoService.findInfoEquipoById(id_equipo) : id_equipo; const tipoEntrada = typeof id_tipo_entrada === 'number' diff --git a/src/equipo/dto/input/update.dto.ts b/src/equipo/dto/input/update.dto.ts index c829896..153adff 100644 --- a/src/equipo/dto/input/update.dto.ts +++ b/src/equipo/dto/input/update.dto.ts @@ -19,10 +19,6 @@ export class UpdateEquipoDto { @IsOptional() id_carrito?: number; - @IsInt() - @IsOptional() - id_operador?: number; - @IsInt() @IsOptional() id_status?: number; diff --git a/src/equipo/entity/views/informacion-equipo-prestamo.view.ts b/src/equipo/entity/views/informacion-equipo-prestamo.view.ts index c698915..185dbb7 100644 --- a/src/equipo/entity/views/informacion-equipo-prestamo.view.ts +++ b/src/equipo/entity/views/informacion-equipo-prestamo.view.ts @@ -11,9 +11,12 @@ import { Modulo } from '../../../modulo/entity/modulo.entity'; dataSource .createQueryBuilder() .select('e.id_equipo', 'id_equipo') + .addSelect('e.equipo', 'equipo') .addSelect('e.id_carrito', 'id_carrito') .addSelect('e.id_status', 'id_status') .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') .addSelect('ps.id_equipo_programa', 'id_equipo_programa') @@ -35,6 +38,12 @@ import { Modulo } from '../../../modulo/entity/modulo.entity'; .addOrderBy('e.equipo', 'ASC'), }) export class InformacionEquipoPrestamoView { + @ViewColumn() + carrito: string; + + @ViewColumn() + equipo: string; + @ViewColumn() id_equipo: number; @@ -67,4 +76,7 @@ export class InformacionEquipoPrestamoView { @ViewColumn() prestado: number; + + @ViewColumn() + u: number; } diff --git a/src/equipo/equipo.controller.ts b/src/equipo/equipo.controller.ts index 094412c..a70c428 100644 --- a/src/equipo/equipo.controller.ts +++ b/src/equipo/equipo.controller.ts @@ -189,13 +189,12 @@ export class EquipoController { this.validarUsuarioService.validarAdminOperador(operador); delete data.id_carrito; delete data.id_status; - delete data.id_operador; delete data.motivo; return this.equipoService.update( + operador, data, body.id_carrito, body.id_status, - body.id_operador, body.motivo, ); } diff --git a/src/equipo/equipo.service.ts b/src/equipo/equipo.service.ts index 210eaa9..e3f92aa 100644 --- a/src/equipo/equipo.service.ts +++ b/src/equipo/equipo.service.ts @@ -32,7 +32,6 @@ import { MarcaService } from '../marca/marca.service'; import { ModeloService } from '../modelo/modelo.service'; 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'; @Injectable() @@ -59,7 +58,6 @@ export class EquipoService { private moduloService: ModuloService, @Inject(forwardRef(() => EquipoMotivoService)) private equipoMotivoService: EquipoMotivoService, - private operadorService: OperadorService, private statusService: StatusService, ) {} @@ -88,26 +86,6 @@ export class EquipoService { .then((_) => equipoNuevo); } - private viewToEquipo(infoEquipo: InformacionEquipoView) { - return this.repository.create({ - id_equipo: infoEquipo.id_equipo, - equipo: infoEquipo.equipo, - numero_inventario: infoEquipo.numero_inventario, - prestado: infoEquipo.prestado, - u: infoEquipo.u, - carrito: { - id_carrito: infoEquipo.id_carrito, - carrito: infoEquipo.carrito, - modulo: { - id_modulo: infoEquipo.id_modulo, - institucion: { id_institucion: infoEquipo.id_institucion }, - }, - tipoCarrito: { id_tipo_carrito: infoEquipo.id_tipo_carrito }, - }, - status: { id_status: infoEquipo.id_status }, - }); - } - async findAll( operador: Operador, filtros: { @@ -247,13 +225,6 @@ export class EquipoService { return query.getManyAndCount(); } - findById(id_equipo: number) { - return this.repository.findOne({ where: { id_equipo } }).then((equipo) => { - if (!equipo) throw new NotFoundException('No existe este id equipo.'); - return equipo; - }); - } - async findEquipo( id_usuario: number, modulo: Modulo, @@ -283,7 +254,6 @@ export class EquipoService { busqueda.id_tipo_entrada = tipoEntrada.id_tipo_entrada; busquedaReseteo.id_tipo_entrada = tipoEntrada.id_tipo_entrada; } - return this.informacionEquipoPrestamoView .findOne({ where: busqueda }) .then((infoEquipo) => { @@ -312,6 +282,11 @@ export class EquipoService { return infoEquipo; }) .then((infoEquipo) => { + if (infoEquipo.u) + throw new ConflictException( + 'Ocurrio un error al tratar de asignarte un equipo de cómputo, intenta de nuevo.', + ); + const equipo = this.repository.create({ id_equipo: infoEquipo.id_equipo, u: id_usuario, @@ -340,7 +315,7 @@ export class EquipoService { }); } - async findInfoEquipoByNumeroInventario( + findInfoEquipoByNumeroInventario( institucion: Institucion, numero_inventario: string, ) { @@ -459,44 +434,38 @@ export class EquipoService { } async update( - // operador: Operador, + operador: Operador, attrs: Partial, id_carrito?: number, id_status?: number, - id_operador?: number | Operador, motivo?: string, ) { const carrito = id_carrito ? await this.carritoService.findInfoCarritoById(id_carrito) : null; - const operador = id_operador - ? typeof id_operador === 'number' - ? await this.operadorService.findById(id_operador) - : id_operador - : null; const status = id_status ? await this.statusService.findById(id_status) : null; - return this.findById(attrs.id_equipo) + return this.findInfoEquipoById(attrs.id_equipo) .then(async (equipo) => { - if ((attrs.equipo && attrs.equipo != equipo.equipo) || carrito) - await this.findInfoEquipoByEquipo( - carrito ? carrito : equipo.carrito, - attrs.equipo ? attrs.equipo : equipo.equipo, - ).then((existeEquipo) => { - if (existeEquipo) - throw new ConflictException( - 'Ya existe un equipo en este carrito con este nombre, intenta con otro.', - ); - }); if ( - status && - (status.id_status >= 4 || - (equipo.status.id_status >= 4 && status.id_status === 1)) - ) { - if (!operador) - throw new ConflictException('No se mandó el id operador.'); + operador.tipoUsuario.id_tipo_usuario > 2 && + operador.institucion.id_institucion != + equipo.carrito.modulo.institucion.id_institucion + ) + throw new ForbiddenException( + 'No puedes modificar la información este equipo porque no pertenece a tu institución.', + ); + if (status) { + if (equipo.status.id_status === 2 || equipo.status.id_status === 3) + throw new ConflictException( + 'No se puede cambiar el status de un equipo si esta apartada o en uso.', + ); + if (status.id_status === 2 || status.id_status === 3) + throw new ConflictException( + 'No se puede cambiar manualmente el status de un equipo a este status.', + ); if (!motivo) throw new ConflictException( 'No se mandó el motivo para el cambio de status.', @@ -504,24 +473,56 @@ export class EquipoService { } Object.assign(equipo, attrs); if (status) { - if ( - status.id_status >= 4 || - (equipo.status.id_status >= 4 && status.id_status === 1) - ) - await this.equipoMotivoService.create( - equipo, - operador, - status, - motivo, - ); equipo.status = status; + await this.equipoMotivoService.create( + equipo, + operador, + status, + motivo, + ); } if (carrito) equipo.carrito = carrito; return this.repository.save(equipo); }) - .then((equipo) => ({ + .then((_) => ({ message: 'Se guardaron los cambios correctamente.', - equipo, })); } + + async updateStatus(equipo: Equipo, operador?: Operador, motivo?: string) { + if (equipo.status.id_status >= 4) { + if (!operador) throw new ConflictException('No se mandó el id operador.'); + if (!motivo) + throw new ConflictException( + 'No se mandó el motivo para el cambio de status.', + ); + await this.equipoMotivoService.create( + equipo, + operador, + equipo.status, + motivo, + ); + } + return this.repository.save(equipo); + } + + private viewToEquipo(infoEquipo: InformacionEquipoView) { + return this.repository.create({ + id_equipo: infoEquipo.id_equipo, + equipo: infoEquipo.equipo, + numero_inventario: infoEquipo.numero_inventario, + prestado: infoEquipo.prestado, + u: infoEquipo.u, + carrito: { + id_carrito: infoEquipo.id_carrito, + carrito: infoEquipo.carrito, + modulo: { + id_modulo: infoEquipo.id_modulo, + institucion: { id_institucion: infoEquipo.id_institucion }, + }, + tipoCarrito: { id_tipo_carrito: infoEquipo.id_tipo_carrito }, + }, + status: { id_status: infoEquipo.id_status }, + }); + } } diff --git a/src/multa/multa.service.ts b/src/multa/multa.service.ts index 3d60f30..a1bcb4f 100644 --- a/src/multa/multa.service.ts +++ b/src/multa/multa.service.ts @@ -178,7 +178,7 @@ export class MultaService { } findAllByIdEquipo(id_equipo: number, pagina: number) { - return this.equipoService.findById(id_equipo).then((equipo) => + return this.equipoService.findInfoEquipoById(id_equipo).then((equipo) => this.repository .createQueryBuilder('mu') .innerJoinAndSelect('mu.institucionInfraccion', 'ii') diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index 479585b..9dd6f2f 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -76,8 +76,9 @@ export class PrestamoService { prestamo.cancelado_operador = true; prestamo.operadorRegreso = operadorRegreso; prestamo.equipo.u = null; + prestamo.equipo.status.id_status = 6; return this.equipoService - .update(prestamo.equipo, null, 6, operadorRegreso, motivo) + .updateStatus(prestamo.equipo, operadorRegreso, motivo) .then((_) => this.repository.save(prestamo)) .then((_) => { this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario); @@ -101,8 +102,9 @@ export class PrestamoService { prestamo.fecha_entrega = ahora.toDate(); prestamo.cancelado_usuario = true; prestamo.equipo.u = null; + prestamo.equipo.status.id_status = 1; return this.equipoService - .update(prestamo.equipo, null, 1) + .updateStatus(prestamo.equipo) .then((_) => this.repository.save(prestamo)) .then((_) => { this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario); @@ -254,11 +256,11 @@ export class PrestamoService { if (ahora.diff(moment(prestamos[i].hora_max_recoger)) > 0) { prestamos[i].activo = false; prestamos[i].cancelado_operador = true; + prestamos[i].equipo.u = null; + prestamos[i].equipo.status.id_status = 1; await this.repository .save(prestamos[i]) - .then((_) => - this.equipoService.update(prestamos[i].equipo, null, 1), - ) + .then((_) => this.equipoService.updateStatus(prestamos[i].equipo)) .then((_) => { this.appGateway.actualizarOperador( prestamos[i].equipo.carrito.modulo.institucion.id_institucion, @@ -299,9 +301,10 @@ export class PrestamoService { : ahora.add(operadorEntrega.institucion.tiempo_prestamo, 'm').toDate(); prestamo.operadorEntrega = operadorEntrega; prestamo.equipo.prestado = true; + prestamo.equipo.status.id_status = 3; return this.repository .save(prestamo) - .then((_) => this.equipoService.update(prestamo.equipo, null, 3)) + .then((_) => this.equipoService.updateStatus(prestamo.equipo)) .then((_) => { this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario); this.appGateway.actualizarOperador( @@ -792,6 +795,7 @@ export class PrestamoService { prestamo.fecha_entrega = ahora.toDate(); prestamo.operadorRegreso = operadorRegreso; prestamo.equipo.u = null; + prestamo.equipo.status.id_status = id_status; if (semanasCastigo > 0) { const mensajeTardanza = `El usaurio se tardó: ${tardanza} minutos en entregar el equipo de cómputo.`; @@ -821,10 +825,8 @@ export class PrestamoService { return this.repository .save(prestamo) .then((_) => - this.equipoService.update( + this.equipoService.updateStatus( prestamo.equipo, - null, - id_status, operadorRegreso, motivo, ),