From 01220db339d609b3ee3742aba03ca6c7bb661c16 Mon Sep 17 00:00:00 2001 From: lemuel Date: Tue, 20 Dec 2022 06:28:45 -0600 Subject: [PATCH] equipo motivo service final --- src/carrito-motivo/carrito-motivo.service.ts | 2 +- src/carrito/carrito.service.ts | 2 +- src/equipo-motivo/dto/input/reporte.dto.ts | 6 +++ src/equipo-motivo/equipo-motivo.controller.ts | 42 ++++++++------- src/equipo-motivo/equipo-motivo.module.ts | 4 -- src/equipo-motivo/equipo-motivo.service.ts | 53 ++++++++++++------- 6 files changed, 63 insertions(+), 46 deletions(-) create mode 100644 src/equipo-motivo/dto/input/reporte.dto.ts diff --git a/src/carrito-motivo/carrito-motivo.service.ts b/src/carrito-motivo/carrito-motivo.service.ts index 39e0bfc..e62fcf2 100644 --- a/src/carrito-motivo/carrito-motivo.service.ts +++ b/src/carrito-motivo/carrito-motivo.service.ts @@ -57,7 +57,7 @@ export class CarritoMotivoService { throw new ForbiddenException( 'No puedes acceder a esta información porque no le pertenece a tu institución.', ); - // Si se mandó página significa que quiere paginación + // Si se mandó página significa que requiere paginación if (pagina) { options.skip = (pagina - 1) * 25; options.take = 25; diff --git a/src/carrito/carrito.service.ts b/src/carrito/carrito.service.ts index a8830a3..9479e96 100644 --- a/src/carrito/carrito.service.ts +++ b/src/carrito/carrito.service.ts @@ -132,7 +132,7 @@ export class CarritoService { if (modulo) busqueda.id_modulo = modulo.id_modulo; if (tipoCarrito) busqueda.id_tipo_carrito = tipoCarrito.id_tipo_carrito; options.where = busqueda; - // Si los filtros tienen el atributo página significa que quiere paginación + // Si los filtros tienen el atributo página significa que requiere paginación if (filtros.pagina) { options.skip = (parseInt(filtros.pagina) - 1) * 25; options.take = 25; diff --git a/src/equipo-motivo/dto/input/reporte.dto.ts b/src/equipo-motivo/dto/input/reporte.dto.ts new file mode 100644 index 0000000..397fb52 --- /dev/null +++ b/src/equipo-motivo/dto/input/reporte.dto.ts @@ -0,0 +1,6 @@ +import { IsNumberString } from 'class-validator'; + +export class ReporteDto { + @IsNumberString() + id_equipo: string; +} diff --git a/src/equipo-motivo/equipo-motivo.controller.ts b/src/equipo-motivo/equipo-motivo.controller.ts index 60b603b..745981a 100644 --- a/src/equipo-motivo/equipo-motivo.controller.ts +++ b/src/equipo-motivo/equipo-motivo.controller.ts @@ -11,6 +11,7 @@ import { EquipoMotivoService } from './equipo-motivo.service'; import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; import { IdEquipoPaginaDto } from '../dto/input/id-equipo-pagina.dto'; +import { ReporteDto } from './dto/input/reporte.dto'; import { EquipoMotivoOutputDto } from './dto/output/equipo-motivo.dto'; @Controller('equipo-motivo') @@ -44,30 +45,31 @@ export class EquipoMotivoController { this.validarUsuarioService.validarAdminOperador(operador); return this.equipoMotivoService.findAllByIdEquipo( + operador, parseInt(query.id_equipo), parseInt(query.pagina), ); } - // @Serealize(EquipoMotivoOutputDto) - // @Get('reporte') - // @UseGuards(AuthGuard('jwt')) - // @ApiOperation({ - // description: 'Reporte de todos los cambios de status de un equipo.', - // }) - // @ApiBearerAuth('jwt') - // @ApiQuery({ - // description: 'Id del equipo.', - // name: 'id_equipo', - // type: 'string', - // }) - // reporte(@Request() req, @Query() query: IdEquipoPaginaDto) { - // const admin: Operador = req.user.operador; + @Serealize(EquipoMotivoOutputDto) + @Get('reporte') + @UseGuards(AuthGuard('jwt')) + @ApiOperation({ + description: 'Reporte de todos los cambios de status de un equipo.', + }) + @ApiBearerAuth('jwt') + @ApiQuery({ + description: 'Id del equipo.', + name: 'id_equipo', + type: 'string', + }) + reporte(@Request() req, @Query() query: ReporteDto) { + const admin: Operador = req.user.operador; - // this.validarUsuarioService.validarAdmin(admin); - // return this.equipoMotivoService.findAllByIdEquipo( - // parseInt(query.id_equipo), - // parseInt(query.pagina), - // ); - // } + this.validarUsuarioService.validarAdmin(admin); + return this.equipoMotivoService.findAllByIdEquipo( + admin, + parseInt(query.id_equipo), + ); + } } diff --git a/src/equipo-motivo/equipo-motivo.module.ts b/src/equipo-motivo/equipo-motivo.module.ts index 99a3b19..cadab2b 100644 --- a/src/equipo-motivo/equipo-motivo.module.ts +++ b/src/equipo-motivo/equipo-motivo.module.ts @@ -5,14 +5,10 @@ import { EquipoMotivoController } from './equipo-motivo.controller'; import { EquipoMotivoService } from './equipo-motivo.service'; import { EquipoMotivo } from './entity/equipo-motivo.entity'; import { EquipoModule } from '../equipo/equipo.module'; -import { OperadorModule } from '../operador/operador.module'; -import { StatusModule } from '../status/status.module'; @Module({ imports: [ forwardRef(() => EquipoModule), - OperadorModule, - StatusModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([EquipoMotivo]), ], diff --git a/src/equipo-motivo/equipo-motivo.service.ts b/src/equipo-motivo/equipo-motivo.service.ts index cf1b744..e22fbd5 100644 --- a/src/equipo-motivo/equipo-motivo.service.ts +++ b/src/equipo-motivo/equipo-motivo.service.ts @@ -1,14 +1,17 @@ import * as moment from 'moment'; -import { forwardRef, Inject, Injectable } from '@nestjs/common'; +import { + ForbiddenException, + forwardRef, + Inject, + Injectable, +} from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; +import { FindManyOptions, Repository } from 'typeorm'; import { Equipo } from '../equipo/entity/equipo.entity'; import { EquipoMotivo } from './entity/equipo-motivo.entity'; import { Operador } from '../operador/entity/operador.entity'; import { Status } from '../status/entity/status.entity'; import { EquipoService } from '../equipo/equipo.service'; -import { OperadorService } from '../operador/operador.service'; -import { StatusService } from '../status/status.service'; @Injectable() export class EquipoMotivoService { @@ -17,8 +20,6 @@ export class EquipoMotivoService { private repository: Repository, @Inject(forwardRef(() => EquipoService)) private equipoService: EquipoService, - private operadorService: OperadorService, - private statusService: StatusService, ) {} async create( @@ -26,28 +27,40 @@ export class EquipoMotivoService { operador: Operador, status: Status, motivo: string, - ) { - const ahora = moment(); - - // Creo registro y lo guardo + ): Promise { + // Cramos y guardamos registro return this.repository.save( this.repository.create({ - equipo, - fecha_creacion: ahora.toDate(), + fecha_creacion: moment().toDate(), motivo, + equipo, operador, status, }), ); } - findAllByIdEquipo(id_equipo: number, pagina: number) { - return this.equipoService.findById(id_equipo).then((equipo) => - this.repository.findAndCount({ - where: { equipo }, - skip: (pagina - 1) * 25, - take: 25, - }), - ); + async findAllByIdEquipo( + operador: Operador, + id_equipo: number, + pagina?: number, + ): Promise { + const equipo = await this.equipoService.findById(id_equipo); + const options: FindManyOptions = { where: { equipo } }; + + // Validamos que el equipo pertenezca a la institución del operador + if ( + equipo.carrito.modulo.institucion.id_institucion != + operador.institucion.id_institucion + ) + throw new ForbiddenException( + 'No puedes acceder a esta información porque no le pertenece a tu institución.', + ); + // Si se mandó página significa que quiere paginación + if (pagina) { + options.skip = (pagina - 1) * 25; + options.take = 25; + return this.repository.findAndCount(options); + } else return this.repository.find(options); } }