From 72bc5c416f838d36b281b8471ece2679f30f3e15 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Fri, 24 Jun 2022 00:37:00 -0500 Subject: [PATCH] modulo equipo final --- src/carrito/carrito.service.ts | 26 ++++++++++---- src/equipo/dto/input/equipos.dto.ts | 8 ++--- src/equipo/dto/output/equipo-min.dto.ts | 7 ++-- src/equipo/dto/output/equipo.dto.ts | 4 +-- src/equipo/entity/equipo.entity.ts | 24 ++++++------- src/equipo/equipo.controller.ts | 4 +++ src/equipo/equipo.module.ts | 4 +-- src/equipo/equipo.service.ts | 48 +++++++++++++------------ src/upload-file/upload-file.service.ts | 4 +-- 9 files changed, 76 insertions(+), 53 deletions(-) diff --git a/src/carrito/carrito.service.ts b/src/carrito/carrito.service.ts index 8ef0607..af199de 100644 --- a/src/carrito/carrito.service.ts +++ b/src/carrito/carrito.service.ts @@ -39,7 +39,7 @@ export class CarritoService { .count({ modulo, tipoCarrito }) .then((carritos) => { carrito = `C${carritos >= 9 ? '' : '0'}${carritos + 1}`; - return this.existeCarrito(modulo, carrito); + return this.existeCarrito(modulo, tipoCarrito, carrito); }) .then(() => this.repository.save( @@ -57,14 +57,24 @@ export class CarritoService { })); } - async existeCarrito(id_modulo: number | Modulo, carrito: string) { + async existeCarrito( + id_modulo: number | Modulo, + id_tipo_carrito: number | TipoCarrito, + carrito: string, + ) { const modulo = typeof id_modulo === 'number' ? await this.moduloService.findById(id_modulo) : id_modulo; + const tipoCarrito = + typeof id_tipo_carrito === 'number' + ? await this.institucionTipoCarritoService.findTipoCarritoById( + id_tipo_carrito, + ) + : id_tipo_carrito; return this.repository - .findOne({ modulo, carrito }) + .findOne({ modulo, tipoCarrito, carrito }) .then((existeCarrito) => { if (existeCarrito) throw new ConflictException( @@ -165,10 +175,12 @@ export class CarritoService { ) : null; - if (attrs.carrito) { - if (modulo) await this.existeCarrito(modulo, attrs.carrito); - else await this.existeCarrito(carrito.modulo, attrs.carrito); - } + if (attrs.carrito || modulo || tipoCarrito) + await this.existeCarrito( + modulo ? modulo : carrito.modulo, + tipoCarrito ? tipoCarrito : carrito.tipoCarrito, + attrs.carrito ? attrs.carrito : carrito.carrito, + ); Object.assign(carrito, attrs); if (modulo) carrito.modulo = modulo; if (tipoCarrito) carrito.tipoCarrito = tipoCarrito; diff --git a/src/equipo/dto/input/equipos.dto.ts b/src/equipo/dto/input/equipos.dto.ts index ff5ece3..156f712 100644 --- a/src/equipo/dto/input/equipos.dto.ts +++ b/src/equipo/dto/input/equipos.dto.ts @@ -20,6 +20,10 @@ export class EquiposDto { @IsOptional() id_programa?: string; + @IsNumberString() + @IsOptional() + id_status?: string; + @IsNumberString() @IsOptional() id_tipo_carrito?: string; @@ -27,8 +31,4 @@ export class EquiposDto { @IsNumberString() @IsOptional() id_tipo_entrada?: string; - - @IsNumberString() - @IsOptional() - id_status?: string; } diff --git a/src/equipo/dto/output/equipo-min.dto.ts b/src/equipo/dto/output/equipo-min.dto.ts index fc8a001..e9ed6c0 100644 --- a/src/equipo/dto/output/equipo-min.dto.ts +++ b/src/equipo/dto/output/equipo-min.dto.ts @@ -1,8 +1,8 @@ import { Expose, Type } from 'class-transformer'; import { CarritoMinOutputDto } from '../../../carrito/dto/output/carrito-min.dto'; -import { StatusOutputDto } from '../../../status/dto/output/status.dto'; -import { EquipoTipoEntradaOutputDto } from '../../../equipo-tipo-entrada/dto/output/equipo-tipo-entrada.dto'; import { EquipoProgramaOutputDto } from '../../../equipo-programa/dto/output/equipo-programa.dto'; +import { EquipoTipoEntradaOutputDto } from '../../../equipo-tipo-entrada/dto/output/equipo-tipo-entrada.dto'; +import { StatusOutputDto } from '../../../status/dto/output/status.dto'; export class EquipoMinOutputDto { @Expose() @@ -14,6 +14,9 @@ export class EquipoMinOutputDto { @Expose() numero_inventario; + @Expose() + numero_serie; + @Expose() @Type(() => CarritoMinOutputDto) carrito; diff --git a/src/equipo/dto/output/equipo.dto.ts b/src/equipo/dto/output/equipo.dto.ts index b6645cb..c296bfc 100644 --- a/src/equipo/dto/output/equipo.dto.ts +++ b/src/equipo/dto/output/equipo.dto.ts @@ -1,8 +1,8 @@ import { Expose, Type } from 'class-transformer'; import { CarritoMinOutputDto } from '../../../carrito/dto/output/carrito-min.dto'; -import { StatusOutputDto } from '../../../status/dto/output/status.dto'; -import { EquipoTipoEntradaOutputDto } from '../../../equipo-tipo-entrada/dto/output/equipo-tipo-entrada.dto'; import { EquipoProgramaOutputDto } from '../../../equipo-programa/dto/output/equipo-programa.dto'; +import { EquipoTipoEntradaOutputDto } from '../../../equipo-tipo-entrada/dto/output/equipo-tipo-entrada.dto'; +import { StatusOutputDto } from '../../../status/dto/output/status.dto'; export class EquipoOutputDto { @Expose() diff --git a/src/equipo/entity/equipo.entity.ts b/src/equipo/entity/equipo.entity.ts index e6e2210..7e1c2b0 100644 --- a/src/equipo/entity/equipo.entity.ts +++ b/src/equipo/entity/equipo.entity.ts @@ -7,10 +7,10 @@ import { PrimaryGeneratedColumn, } from 'typeorm'; import { Carrito } from '../../carrito/entity/carrito.entity'; +import { EquipoPrograma } from '../../equipo-programa/entity/equipo-programa.entity'; import { EquipoTipoEntrada } from '../../equipo-tipo-entrada/entity/equipo-tipo-entrada.entity'; import { Motivo } from '../../motivo/entity/motivo.entity'; import { Prestamo } from '../../prestamo/entity/prestamo.entity'; -import { EquipoPrograma } from '../../equipo-programa/entity/equipo-programa.entity'; import { Status } from '../../status/entity/status.entity'; @Entity() @@ -44,21 +44,21 @@ export class Equipo { @JoinColumn({ name: 'id_status' }) status: Status; - @OneToMany( - () => EquipoTipoEntrada, - (equipoTipoEntrada) => equipoTipoEntrada.equipo, - { eager: true }, - ) - tiposEntradas: EquipoTipoEntrada[]; + @OneToMany(() => Motivo, (motivo) => motivo.equipo) + motivos: Motivo[]; + + @OneToMany(() => Prestamo, (prestamo) => prestamo.equipo) + prestamos: Prestamo[]; @OneToMany(() => EquipoPrograma, (equipoPrograma) => equipoPrograma.equipo, { eager: true, }) programas: EquipoPrograma[]; - @OneToMany(() => Motivo, (motivo) => motivo.equipo) - motivos: Motivo[]; - - @OneToMany(() => Prestamo, (prestamo) => prestamo.equipo) - prestamos: Prestamo[]; + @OneToMany( + () => EquipoTipoEntrada, + (equipoTipoEntrada) => equipoTipoEntrada.equipo, + { eager: true }, + ) + tiposEntradas: EquipoTipoEntrada[]; } diff --git a/src/equipo/equipo.controller.ts b/src/equipo/equipo.controller.ts index 41713dd..aa093fa 100644 --- a/src/equipo/equipo.controller.ts +++ b/src/equipo/equipo.controller.ts @@ -1,4 +1,5 @@ import { Body, Controller, Get, Put, Query } from '@nestjs/common'; +import { AuthGuard } from '@nestjs/passport'; import { ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; import { EquipoService } from './equipo.service'; @@ -15,6 +16,7 @@ export class EquipoController { @Serealize(EquipoOutputDto) @Get('equipo') + // @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Endpoint que retorna la información de un equipo por su número de inventario de una institución.', @@ -38,6 +40,7 @@ export class EquipoController { @Serealize(EquiposOutputDto) @Get('equipos') + // @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: 'Endpoint que retorna 15 equipos dependiendo de la página en la que esta el usuario y sus filtros.', @@ -87,6 +90,7 @@ export class EquipoController { } @Put() + // @UseGuards(AuthGuard('jwt')) update(@Body() body: UpdateEquipoDto) { return this.equipoService.update(body); } diff --git a/src/equipo/equipo.module.ts b/src/equipo/equipo.module.ts index 6fbdcac..d398ee5 100644 --- a/src/equipo/equipo.module.ts +++ b/src/equipo/equipo.module.ts @@ -4,8 +4,8 @@ import { EquipoController } from './equipo.controller'; import { EquipoService } from './equipo.service'; import { Equipo } from './entity/equipo.entity'; import { CarritoModule } from '../carrito/carrito.module'; -import { InstitucionModule } from '../institucion/institucion.module'; import { EquipoProgramaModule } from '../equipo-programa/equipo-programa.module'; +import { InstitucionModule } from '../institucion/institucion.module'; import { InstitucionProgramaModule } from '../institucion-programa/institucion-programa.module'; import { InstitucionTipoCarritoModule } from '../institucion-tipo-carrito/institucion-tipo-carrito.module'; import { InstitucionTipoEntradaModule } from '../institucion-tipo-entrada/institucion-tipo-entrada.module'; @@ -21,8 +21,8 @@ import { StatusModule } from '../status/status.module'; InstitucionTipoCarritoModule, InstitucionTipoEntradaModule, ModuloModule, - TypeOrmModule.forFeature([Equipo]), StatusModule, + TypeOrmModule.forFeature([Equipo]), ], controllers: [EquipoController], providers: [EquipoService], diff --git a/src/equipo/equipo.service.ts b/src/equipo/equipo.service.ts index a85326e..3f8ff7b 100644 --- a/src/equipo/equipo.service.ts +++ b/src/equipo/equipo.service.ts @@ -41,11 +41,12 @@ export class EquipoService { async create( carrito: Carrito, equipo: string, - marca: string, - modelo: string, numero_inventario: string, numero_serie: string, + marca: string, + modelo: string, ) { + const activo = await this.statusService.findById(1); const equipoNuevo = await this.repository.save( this.repository.create({ carrito, @@ -54,7 +55,7 @@ export class EquipoService { modelo, numero_inventario, numero_serie, - status: { id_status: 1 }, + status: activo, }), ); @@ -72,7 +73,7 @@ export class EquipoService { return this.repository.findOne({ carrito, equipo }).then((existeEquipo) => { if (existeEquipo) throw new ConflictException( - 'Ya existe un equipo con este nombre, intenta con otro.', + 'Ya existe un equipo en este carrito con este nombre, intenta con otro.', ); }); } @@ -207,18 +208,19 @@ export class EquipoService { id_modulo: modulo.id_modulo, }, ) + .innerJoinAndSelect('m.institucion', 'i', 'i.activo = 1') .innerJoinAndSelect( 'c.tipoCarrito', 'tc', 'tc.id_tipo_carrito = :id_tipo_carrito', { id_tipo_carrito: tipoCarrito.id_tipo_carrito }, ) - .innerJoinAndSelect('e.status', 's', 's.id_status = 1') + .innerJoinAndSelect('e.status', 's') .innerJoinAndSelect('e.tiposEntradas', 'tes') .innerJoinAndSelect('tes.tipoEntrada', 'te') .innerJoinAndSelect('e.programas', 'ps') .innerJoinAndSelect('ps.programa', 'p') - .where('e.prestado = 0'); + .where('prestado = 0 AND id_status = 1'); if (programa) query.andWhere('ps.id_programa = :id_programa', { @@ -241,11 +243,11 @@ export class EquipoService { return this.findEquipo(modulo, tipoCarrito, programa, tipoEntrada) .getCount() .then((n) => { - if (n === 0) { - const query = this.repository + if (n === 0) + return this.repository .createQueryBuilder('e') - .innerJoinAndSelect('e.carrito', 'c', 'c.activo = 1') - .innerJoinAndSelect( + .innerJoin('e.carrito', 'c', 'c.activo = 1') + .innerJoin( 'c.modulo', 'm', 'm.id_modulo = :id_modulo AND m.activo = 1', @@ -253,17 +255,17 @@ export class EquipoService { id_modulo: modulo.id_modulo, }, ) - .innerJoinAndSelect( + .innerJoin('m.institucion', 'i', 'i.activo = 1') + .innerJoin( 'c.tipoCarrito', 'tc', 'tc.id_tipo_carrito = :id_tipo_carrito', { id_tipo_carrito: tipoCarrito.id_tipo_carrito }, ) - .innerJoinAndSelect('e.status', 's', 's.id_status = 1') - .andWhere('prestado = 1'); - - return query.update().set({ prestado: false }).execute(); - } + .andWhere('prestado = 1 AND id_status = 1') + .update() + .set({ prestado: false }) + .execute(); }); } @@ -295,24 +297,26 @@ export class EquipoService { update(attrs: Partial, id_carrito?: number, id_status?: number) { return this.findById(attrs.id_equipo) .then(async (equipo) => { - const status = id_status - ? await this.statusService.findById(id_status) - : null; const carrito = id_carrito ? await this.carritoService.findById(id_carrito) : null; + const status = id_status + ? await this.statusService.findById(id_status) + : null; if (attrs.equipo && attrs.equipo != equipo.equipo) { if (carrito) this.existeEquipo(carrito, attrs.equipo); else this.existeEquipo(equipo.carrito, attrs.equipo); } Object.assign(equipo, attrs); - if (carrito && carrito != equipo.carrito) equipo.carrito = carrito; - if (status && status != equipo.status) equipo.status = status; + if (carrito) { + equipo.carrito = carrito; + } + if (status) equipo.status = status; return this.repository.save(equipo); }) .then((equipo) => ({ - message: 'Se actualizó correctamente la información del equipo.', + message: 'Se guardaron los cambios correctamente.', equipo, })); } diff --git a/src/upload-file/upload-file.service.ts b/src/upload-file/upload-file.service.ts index 73ceb80..80f3f9a 100644 --- a/src/upload-file/upload-file.service.ts +++ b/src/upload-file/upload-file.service.ts @@ -133,10 +133,10 @@ export class UploadFileService { equipo = await this.equipoService.create( carrito, equipos[i].equipo, - equipos[i].marca, - equipos[i].modelo, equipos[i].numero_inventario, equipos[i].numero_serie, + equipos[i].marca, + equipos[i].modelo, ); const entradas = equipos[i].entradas.split(',');