From f4f642ba13147254a970d120c748e3bce53882f2 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Wed, 18 Jan 2023 15:57:38 -0600 Subject: [PATCH] listo --- .../dto/output/actividad-especial.ts | 25 +++++++++++++++++ src/modulo-motivo/modulo-motivo.controller.ts | 27 +++++++++++++++++++ src/modulo-motivo/modulo-motivo.module.ts | 2 ++ src/modulo-motivo/modulo-motivo.service.ts | 24 ++++++++++++++++- 4 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 src/modulo-motivo/dto/output/actividad-especial.ts diff --git a/src/modulo-motivo/dto/output/actividad-especial.ts b/src/modulo-motivo/dto/output/actividad-especial.ts new file mode 100644 index 0000000..c2379de --- /dev/null +++ b/src/modulo-motivo/dto/output/actividad-especial.ts @@ -0,0 +1,25 @@ +import { Expose, Type } from 'class-transformer'; +import { ModuloMinOutputDto } from '../../../modulo/dto/output/modulo-min.dto'; +import { OperadorMinOutputDto } from '../../../operador/dto/output/operador-min.dto'; + +export class ActividadEspecialOutputDto { + @Expose() + id_motivo; + + @Expose() + fecha_creacion; + + @Expose() + motivo; + + @Expose() + numero_alumnos; + + @Expose() + @Type(() => ModuloMinOutputDto) + modulo; + + @Expose() + @Type(() => OperadorMinOutputDto) + operador; +} diff --git a/src/modulo-motivo/modulo-motivo.controller.ts b/src/modulo-motivo/modulo-motivo.controller.ts index 9b9239d..4d9c782 100644 --- a/src/modulo-motivo/modulo-motivo.controller.ts +++ b/src/modulo-motivo/modulo-motivo.controller.ts @@ -10,8 +10,10 @@ import { Serealize } from '../interceptors/serialize.interceptor'; import { ModuloMotivoService } from './modulo-motivo.service'; import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; import { Operador } from '../operador/entity/operador.entity'; +import { IdInstitucionOptionalDto } from '../dto/input/id-institucion-optional.dto'; import { GetDto } from './dto/input/get.dto'; import { ModuloDto } from '../modulo/dto/input/modulo.dto'; +import { ActividadEspecialOutputDto } from './dto/output/actividad-especial'; import { ModuloMotivoOutputDto } from './dto/output/modulo-motivo.dto'; @Controller('modulo-motivo') @@ -72,4 +74,29 @@ export class ModuloMotivoController { parseInt(query.id_modulo), ); } + + @Serealize(ActividadEspecialOutputDto) + @Get('reporte-actividad-especial') + @UseGuards(AuthGuard('jwt')) + @ApiOperation({ + description: 'Reporte de todos los cambios de status de un módulo.', + }) + @ApiBearerAuth('jwt') + @ApiQuery({ + description: 'Id de la institución.', + name: 'id_institucion', + type: 'string', + }) + reporteActividadEspecial( + @Request() req, + @Query() query: IdInstitucionOptionalDto, + ) { + const admin: Operador = req.user.operador; + + this.validarUsuarioService.validarSuperAdminAdmin(admin); + return this.moduloMotivoService.findAllActividadEspecial( + admin, + parseInt(query.id_institucion), + ); + } } diff --git a/src/modulo-motivo/modulo-motivo.module.ts b/src/modulo-motivo/modulo-motivo.module.ts index 70d6dc0..a59972b 100644 --- a/src/modulo-motivo/modulo-motivo.module.ts +++ b/src/modulo-motivo/modulo-motivo.module.ts @@ -4,10 +4,12 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { ModuloMotivoController } from './modulo-motivo.controller'; import { ModuloMotivoService } from './modulo-motivo.service'; import { ModuloMotivo } from './entity/modulo-motivo.entity'; +import { InstitucionModule } from '../institucion/institucion.module'; import { ModuloModule } from '../modulo/modulo.module'; @Module({ imports: [ + InstitucionModule, forwardRef(() => ModuloModule), PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([ModuloMotivo]), diff --git a/src/modulo-motivo/modulo-motivo.service.ts b/src/modulo-motivo/modulo-motivo.service.ts index b2015b7..f66855d 100644 --- a/src/modulo-motivo/modulo-motivo.service.ts +++ b/src/modulo-motivo/modulo-motivo.service.ts @@ -6,10 +6,11 @@ import { Injectable, } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; -import { FindManyOptions, Repository } from 'typeorm'; +import { FindManyOptions, FindOptionsWhere, Repository } from 'typeorm'; import { Modulo } from '../modulo/entity/modulo.entity'; import { ModuloMotivo } from './entity/modulo-motivo.entity'; import { Operador } from '../operador/entity/operador.entity'; +import { InstitucionService } from '../institucion/institucion.service'; import { ModuloService } from '../modulo/modulo.service'; @Injectable() @@ -17,6 +18,7 @@ export class ModuloMotivoService { constructor( @InjectRepository(ModuloMotivo) private repository: Repository, + private institucionService: InstitucionService, @Inject(forwardRef(() => ModuloService)) private moduloService: ModuloService, ) {} @@ -40,6 +42,26 @@ export class ModuloMotivoService { ); } + async findAllActividadEspecial( + admin: Operador, + id_institucion?: number, + ): Promise { + const institucion = id_institucion + ? await this.institucionService.findById(id_institucion) + : null; + const busqueda: FindOptionsWhere = {}; + + if (admin.institucion) busqueda.modulo = { institucion: admin.institucion }; + else if (institucion) busqueda.modulo = { institucion: institucion }; + return this.repository.find({ + join: { + alias: 'mmo', + innerJoinAndSelect: { m: 'mmo.modulo', i: 'm.institucion' }, + }, + where: busqueda, + }); + } + async findAllByIdModulo( admin: Operador, id_modulo: number,