From f4715175acccce55285912306f427248fc5ed8f4 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Mon, 2 Jan 2023 20:06:09 -0600 Subject: [PATCH] prestamo controller final --- src/prestamo/dto/input/historial.dto.ts | 11 +- .../dto/input/regresar-id-prestamo.dto.ts | 8 +- .../input/regresar-numero-inventario.dto.ts | 8 +- src/prestamo/dto/input/reporte.ts | 81 +++++ src/prestamo/dto/output/reporte.ts | 96 ++++++ src/prestamo/prestamo.controller.ts | 299 +++++++++++------- 6 files changed, 375 insertions(+), 128 deletions(-) create mode 100644 src/prestamo/dto/input/reporte.ts create mode 100644 src/prestamo/dto/output/reporte.ts diff --git a/src/prestamo/dto/input/historial.dto.ts b/src/prestamo/dto/input/historial.dto.ts index 19a4fc5..5742f43 100644 --- a/src/prestamo/dto/input/historial.dto.ts +++ b/src/prestamo/dto/input/historial.dto.ts @@ -8,6 +8,9 @@ import { } from 'class-validator'; export class HistorialDto { + @IsNumberString() + pagina: string; + @IsBooleanString() @IsOptional() activo?: string; @@ -40,11 +43,11 @@ export class HistorialDto { @IsNumberString() @IsOptional() - id_institucion_carrera?: string; + id_institucion?: string; @IsNumberString() @IsOptional() - id_institucion?: string; + id_institucion_carrera?: string; @IsNumberString() @IsOptional() @@ -70,10 +73,6 @@ export class HistorialDto { @IsOptional() id_tipo_usuario?: string; - @IsNumberString() - @IsOptional() - pagina?: string; - @IsString() @IsNotEmpty() @IsOptional() diff --git a/src/prestamo/dto/input/regresar-id-prestamo.dto.ts b/src/prestamo/dto/input/regresar-id-prestamo.dto.ts index 584ba9a..a2d34a9 100644 --- a/src/prestamo/dto/input/regresar-id-prestamo.dto.ts +++ b/src/prestamo/dto/input/regresar-id-prestamo.dto.ts @@ -19,13 +19,13 @@ export class RegresarIdPrestamoDto { @IsOptional() descripcion?: string; + @IsInt() + @IsOptional() + id_institucion_infraccion?: number; + @IsString() @IsNotEmpty() @MaxLength(250) @IsOptional() motivo?: string; - - @IsInt() - @IsOptional() - id_institucion_infraccion?: number; } diff --git a/src/prestamo/dto/input/regresar-numero-inventario.dto.ts b/src/prestamo/dto/input/regresar-numero-inventario.dto.ts index 0fc0128..84a3d56 100644 --- a/src/prestamo/dto/input/regresar-numero-inventario.dto.ts +++ b/src/prestamo/dto/input/regresar-numero-inventario.dto.ts @@ -19,13 +19,13 @@ export class RegresarNumeroInventarioDto { @IsOptional() descripcion?: string; + @IsInt() + @IsOptional() + id_institucion_infraccion?: number; + @IsString() @IsNotEmpty() @MaxLength(250) @IsOptional() motivo?: string; - - @IsInt() - @IsOptional() - id_institucion_infraccion?: number; } diff --git a/src/prestamo/dto/input/reporte.ts b/src/prestamo/dto/input/reporte.ts new file mode 100644 index 0000000..f6bcf7a --- /dev/null +++ b/src/prestamo/dto/input/reporte.ts @@ -0,0 +1,81 @@ +import { + IsBooleanString, + IsDateString, + IsNotEmpty, + IsNumberString, + IsOptional, + IsString, +} from 'class-validator'; + +export class ReporteDto { + @IsBooleanString() + @IsOptional() + activo?: string; + + @IsBooleanString() + @IsOptional() + cancelado_operador?: string; + + @IsBooleanString() + @IsOptional() + cancelado_usuario?: string; + + @IsString() + @IsNotEmpty() + @IsOptional() + carrito?: string; + + @IsString() + @IsNotEmpty() + @IsOptional() + equipo?: string; + + @IsDateString() + @IsOptional() + fechaFin?: string; + + @IsDateString() + @IsOptional() + fechaInicio?: string; + + @IsNumberString() + @IsOptional() + id_institucion?: string; + + @IsNumberString() + @IsOptional() + id_institucion_carrera?: string; + + @IsNumberString() + @IsOptional() + id_modulo?: string; + + @IsNumberString() + @IsOptional() + id_operador_entrega?: string; + + @IsNumberString() + @IsOptional() + id_operador_regreso?: string; + + @IsNumberString() + @IsOptional() + id_prestamo?: string; + + @IsNumberString() + @IsOptional() + id_tipo_carrito?: string; + + @IsNumberString() + @IsOptional() + id_tipo_usuario?: string; + + @IsNumberString() + @IsOptional() + pagina?: string; + + @IsString() + @IsNotEmpty() + @IsOptional() + usuario?: string; +} diff --git a/src/prestamo/dto/output/reporte.ts b/src/prestamo/dto/output/reporte.ts new file mode 100644 index 0000000..b239483 --- /dev/null +++ b/src/prestamo/dto/output/reporte.ts @@ -0,0 +1,96 @@ +import { Expose } from 'class-transformer'; + +export class ReporteOutputDto { + @Expose() + id_prestamo: number; + + @Expose() + activo: number; + + @Expose() + carrera: string; + + @Expose() + cancelado_operador: number; + + @Expose() + cancelado_usuario: number; + + @Expose() + carrito: string; + + @Expose() + equipo: string; + + @Expose() + fecha_entrega: Date; + + @Expose() + fecha_inicio: Date; + + @Expose() + hora_fin: Date; + + @Expose() + hora_inicio: Date; + + @Expose() + hora_max_recoger: Date; + + @Expose() + id_carrito: number; + + @Expose() + id_equipo: number; + + @Expose() + id_institucion: number; + + @Expose() + id_institucion_carrera: number; + + @Expose() + id_modulo: number; + + @Expose() + id_operador_entrega: number; + + @Expose() + id_operador_regreso: number; + + @Expose() + id_status: number; + + @Expose() + id_tipo_carrito: number; + + @Expose() + id_tipo_usuario: number; + + @Expose() + id_usuario: number; + + @Expose() + institucion: string; + + @Expose() + modulo: string; + + @Expose() + nombre: string; + + @Expose() + numero_inventario: string; + + @Expose() + operador_entrega: string; + + @Expose() + operador_regreso: string; + + @Expose() + tipo_carrito: string; + + @Expose() + usuario: string; +} diff --git a/src/prestamo/prestamo.controller.ts b/src/prestamo/prestamo.controller.ts index c38d6e5..eea3386 100644 --- a/src/prestamo/prestamo.controller.ts +++ b/src/prestamo/prestamo.controller.ts @@ -19,28 +19,30 @@ import { import { Serealize } from '../interceptors/serialize.interceptor'; import { PrestamoService } from './prestamo.service'; import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service'; +import { Modulo } from '../modulo/entity/modulo.entity'; import { Operador } from '../operador/entity/operador.entity'; import { Usuario } from '../usuario/entity/usuario.entity'; -import { Modulo } from '../modulo/entity/modulo.entity'; import { IdEquipoPaginaDto } from '../dto/input/id-equipo-pagina.dto'; import { IdUsuarioPaginaDto } from '../dto/input/id-usuario-pagina.dto'; import { NumeroInventarioDto } from '../dto/input/numero-inventario.dto'; import { ActivosDto } from './dto/input/activos.dto'; import { CancelarOperadorDto } from './dto/input/cancelar-operador.dto'; +import { EntregarDto } from './dto/input/entregar.dto'; import { HistorialDto } from './dto/input/historial.dto'; import { IdPrestamoDto } from './dto/input/id-prestamo.dto'; import { PedirDto } from './dto/input/pedir.dto'; -import { EntregarDto } from './dto/input/entregar.dto'; import { RegresarIdPrestamoDto } from './dto/input/regresar-id-prestamo.dto'; import { RegresarNumeroInventarioDto } from './dto/input/regresar-numero-inventario.dto'; +import { ReporteDto } from './dto/input/reporte'; import { MessageOutputDto } from '../dto/output/message.dto'; -import { ActivosOutputDto } from './dto/output/activos.dto'; import { EquipoMinOutputDto } from '../equipo/dto/output/equipo-min.dto'; +import { ActivosOutputDto } from './dto/output/activos.dto'; import { PrestamoOutputDto } from './dto/output/prestamo.dto'; import { PrestamoEquipoOutputDto } from './dto/output/prestamo-equipo.dto'; import { PrestamosOutputDto } from './dto/output/prestamos.dto'; import { PrestamosEquipoOutputDto } from './dto/output/prestamos-equipo.dto'; import { PrestamosUsuarioOutputDto } from './dto/output/prestamos-usuario.dto'; +import { ReporteOutputDto } from './dto/output/reporte'; @Controller('prestamo') @ApiTags('prestamo') @@ -55,7 +57,7 @@ export class PrestamoController { @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: - 'Información de 25 prestamos activos dependiendo de la página en la que se encuentra el operador y sus filtros.', + 'Información de 25 préstamos activos dependiendo de los filtros enviados.', }) @ApiBearerAuth('jwt') @ApiQuery({ @@ -121,15 +123,11 @@ export class PrestamoController { @Serealize(MessageOutputDto) @Put('cancelar-operador') @UseGuards(AuthGuard('jwt')) - @ApiOperation({ - description: 'Endpoint que cancela un prestamo por parte del operador.', - }) + @ApiOperation({ description: 'Cancelar un préstamo por parte del operador.' }) @ApiBearerAuth('jwt') @ApiBody({ - description: 'Ambas variables son obligatorias.', - examples: { - ejemplo: { value: { id_prestamo: 1, motivo: '' } }, - }, + description: 'Variables que necesita el endpoint.', + examples: { ejemplo: { value: { id_prestamo: 1, motivo: '' } } }, }) cancelarOperador(@Request() req, @Body() body: CancelarOperadorDto) { const operador: Operador = req.user.operador; @@ -147,14 +145,8 @@ export class PrestamoController { @Serealize(MessageOutputDto) @Put('cancelar-usuario') @UseGuards(AuthGuard('jwt')) - @ApiOperation({ - description: 'Endpoint que cancela el prestamo del usuario.', - }) + @ApiOperation({ description: 'Cancelar un préstamo activo del usuario.' }) @ApiBearerAuth('jwt') - @ApiBody({ - description: 'La variable id_prestamo es obligatoria.', - examples: { ejemplo: { value: { id_prestamo: 1 } } }, - }) cancelarUsuario(@Request() req) { const usuario: Usuario = req.user.usuario; @@ -165,12 +157,10 @@ export class PrestamoController { @Serealize(EquipoMinOutputDto) @Put('entregar') @UseGuards(AuthGuard('jwt')) - @ApiOperation({ - description: 'Actualizar el status del equipo a "En uso".', - }) + @ApiOperation({ description: 'Entregar un equipo de cómputo.' }) @ApiBearerAuth('jwt') @ApiBody({ - description: 'Ambas variables son obligatorias.', + description: 'Variables que necesita el endpoint.', examples: { ejemplo: { value: { id_prestamo: 1 } } }, }) entregar(@Request() req, @Body() body: EntregarDto) { @@ -181,87 +171,12 @@ export class PrestamoController { return this.prestamoService.entregar(operador, modulo, body.id_prestamo); } - // @Serealize(PrestamosOutputDto) - @Get('reporte') - @UseGuards(AuthGuard('jwt')) - @ApiOperation({ - description: - 'Endpoint que retorna todos los prestamos dependiendo de la página en la que se encuentra el operador y sus filtros.', - }) - @ApiBearerAuth('jwt') - @ApiQuery({ - description: 'Carrito que se quiere usar como filtro.', - name: 'carrito', - type: 'string', - required: false, - }) - @ApiQuery({ - description: 'Equipo que se quiere usar como filtro.', - name: 'equipo', - type: 'string', - required: false, - }) - @ApiQuery({ - description: 'Fecha inicio que se quiere usar como filtro.', - name: 'fechaInicio', - type: 'string', - required: false, - }) - @ApiQuery({ - description: 'Fecha fin se quiere usar como filtro.', - name: 'fechaFin', - type: 'string', - required: false, - }) - @ApiQuery({ - description: 'Id de la institución que se quiere usar como filtro.', - name: 'id_institucion', - type: 'string', - required: false, - }) - @ApiQuery({ - description: 'Id del modulo que se quiere usar como filtro.', - name: 'id_modulo', - type: 'string', - required: false, - }) - @ApiQuery({ - description: 'Id del préstamo que se quiere usar como filtro.', - name: 'id_prestamo', - type: 'string', - required: false, - }) - @ApiQuery({ - description: 'Id del tipo de carrito que se quiere usar como filtro.', - name: 'id_tipo_carrito', - type: 'string', - required: false, - }) - @ApiQuery({ - description: 'Id del tipo de usuario que se quiere usar como filtro.', - name: 'id_tipo_usuario', - type: 'string', - required: false, - }) - @ApiQuery({ - description: 'Usuario que se quiere usar como filtro.', - name: 'usuario', - type: 'string', - required: false, - }) - reporte(@Request() req, @Query() query: HistorialDto) { - const operador: Operador = req.user.operador; - - this.validarUsuarioService.validarOperador(operador); - return this.prestamoService.findAll(query); - } - @Serealize(PrestamosOutputDto) @Get('historial') @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: - 'Información de 25 prestamos dependiendo de la página en la que se encuentra el operador y sus filtros.', + 'Información de 25 préstamos dependiendo de los filtros enviados.', }) @ApiBearerAuth('jwt') @ApiQuery({ @@ -269,6 +184,26 @@ export class PrestamoController { name: 'pagina', type: 'string', }) + @ApiQuery({ + description: 'Boleano para obtener préstamos activos como filtro.', + name: 'activo', + type: 'string', + required: false, + }) + @ApiQuery({ + description: + 'Boleano para obtener préstamos cancelados por operadores como filtro.', + name: 'cancelado_operador', + type: 'string', + required: false, + }) + @ApiQuery({ + description: + 'Boleano para obtener préstamos cancelados por usuarios como filtro.', + name: 'cancelado_usuario', + type: 'string', + required: false, + }) @ApiQuery({ description: 'Carrito que se quiere usar como filtro.', name: 'carrito', @@ -282,14 +217,14 @@ export class PrestamoController { required: false, }) @ApiQuery({ - description: 'Fecha inicio que se quiere usar como filtro.', - name: 'fechaInicio', + description: 'Fecha fin se quiere usar como filtro.', + name: 'fechaFin', type: 'string', required: false, }) @ApiQuery({ - description: 'Fecha fin se quiere usar como filtro.', - name: 'fechaFin', + description: 'Fecha inicio que se quiere usar como filtro.', + name: 'fechaInicio', type: 'string', required: false, }) @@ -299,12 +234,30 @@ export class PrestamoController { type: 'string', required: false, }) + @ApiQuery({ + description: 'Id de la institución carrera que se quiere usar como filtro.', + name: 'id_institucion_carrera', + type: 'string', + required: false, + }) @ApiQuery({ description: 'Id del modulo que se quiere usar como filtro.', name: 'id_modulo', type: 'string', required: false, }) + @ApiQuery({ + description: 'Id del operador de entrega que se quiere usar como filtro.', + name: 'id_operador_entrega', + type: 'string', + required: false, + }) + @ApiQuery({ + description: 'Id del operador de regreso que se quiere usar como filtro.', + name: 'id_operador_regreso', + type: 'string', + required: false, + }) @ApiQuery({ description: 'Id del préstamo que se quiere usar como filtro.', name: 'id_prestamo', @@ -341,7 +294,7 @@ export class PrestamoController { @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: - 'Información de 25 prestamos de un usuario dependiendo de la página en la que se encuentra el operador y sus filtros.', + 'Información de 25 préstamos de un equipo dependiendo de los filtros enviados.', }) @ApiBearerAuth('jwt') @ApiQuery({ @@ -369,7 +322,7 @@ export class PrestamoController { @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: - 'Información de 25 prestamos de un equipo dependiendo de la página en la que se encuentra el operador y sus filtros.', + 'Información de 25 préstamos de un usuario dependiendo de los filtros enviados.', }) @ApiBearerAuth('jwt') @ApiQuery({ @@ -395,11 +348,11 @@ export class PrestamoController { @Serealize(PrestamoOutputDto) @Post() @UseGuards(AuthGuard('jwt')) - @ApiOperation({ description: 'Endpoint que crea un prestamo nuevo.' }) + @ApiOperation({ description: 'Pedir un equipo de cómputo.' }) @ApiBearerAuth('jwt') @ApiBody({ description: - 'Todas las variables a excepción de id_programa y id_tipo_entrada son obligatorios.', + 'Variables que necesita el endpoint. Las variables con "_" al inicio son opcionales.', examples: { ejemplo: { value: { @@ -427,7 +380,7 @@ export class PrestamoController { @Serealize(PrestamoOutputDto) @Get('prestamo-id-prestamo') @UseGuards(AuthGuard('jwt')) - @ApiOperation({ description: 'Endpoint que retorna un préstamo por su id.' }) + @ApiOperation({ description: 'Información de un préstamo por su id.' }) @ApiBearerAuth('jwt') @ApiQuery({ description: 'Id del préstamo.', @@ -440,7 +393,7 @@ export class PrestamoController { if (usuarioOperador instanceof Usuario) this.validarUsuarioService.validarUsuario(usuarioOperador); - else this.validarUsuarioService.validarAdminOperador(usuarioOperador); + else this.validarUsuarioService.validarSoloOperador(usuarioOperador); return this.prestamoService.prestamoInfoById(parseInt(query.id_prestamo)); } @@ -448,8 +401,7 @@ export class PrestamoController { @Get('prestamo-id-usuario') @UseGuards(AuthGuard('jwt')) @ApiOperation({ - description: - 'Endpoint que retorna un préstamo activo por el id del usuario.', + description: 'Información de un préstamo activo de un usuario.', }) @ApiBearerAuth('jwt') prestamoIdUsuario(@Request() req) { @@ -464,7 +416,7 @@ export class PrestamoController { @UseGuards(AuthGuard('jwt')) @ApiOperation({ description: - 'Endpoint que retorna un préstamo activo por el número de inventario de un equipo.', + 'Información de un préstamo activo de un equipo por su número de inventario.', }) @ApiQuery({ description: 'El número de inventario del equipo.', @@ -477,7 +429,7 @@ export class PrestamoController { ) { const operador: Operador = req.user.operador; - this.validarUsuarioService.validarAdminOperador(operador); + this.validarUsuarioService.validarSoloOperador(operador); return this.prestamoService.prestamoInfoByNumeroInventario( operador, query.numero_inventario, @@ -490,7 +442,7 @@ export class PrestamoController { @ApiOperation({ description: 'Endpoint que desactiva un préstamo.' }) @ApiBearerAuth('jwt') @ApiBody({ - description: 'Ambas variables son obligatorias.', + description: 'Variables que necesita el endpoint.', examples: { ejemplo: { value: { @@ -525,7 +477,7 @@ export class PrestamoController { @ApiOperation({ description: 'Endpoint que desactiva un préstamo.' }) @ApiBearerAuth('jwt') @ApiBody({ - description: 'Ambas variables son obligatorias.', + description: 'Variables que necesita el endpoint.', examples: { ejemplo: { value: { @@ -556,4 +508,123 @@ export class PrestamoController { body.id_institucion_infraccion, ); } + + @Serealize(ReporteOutputDto) + @Get('reporte') + @UseGuards(AuthGuard('jwt')) + @ApiOperation({ + description: + 'Reporte de todos los préstamos dependiendo de los filtros enviados.', + }) + @ApiBearerAuth('jwt') + @ApiQuery({ + description: 'Boleano para obtener préstamos activos como filtro.', + name: 'activo', + type: 'string', + required: false, + }) + @ApiQuery({ + description: + 'Boleano para obtener préstamos cancelados por operadores como filtro.', + name: 'cancelado_operador', + type: 'string', + required: false, + }) + @ApiQuery({ + description: + 'Boleano para obtener préstamos cancelados por usuarios como filtro.', + name: 'cancelado_usuario', + type: 'string', + required: false, + }) + @ApiQuery({ + description: 'Carrito que se quiere usar como filtro.', + name: 'carrito', + type: 'string', + required: false, + }) + @ApiQuery({ + description: 'Equipo que se quiere usar como filtro.', + name: 'equipo', + type: 'string', + required: false, + }) + @ApiQuery({ + description: 'Fecha fin se quiere usar como filtro.', + name: 'fechaFin', + type: 'string', + required: false, + }) + @ApiQuery({ + description: 'Fecha inicio que se quiere usar como filtro.', + name: 'fechaInicio', + type: 'string', + required: false, + }) + @ApiQuery({ + description: 'Id de la institución que se quiere usar como filtro.', + name: 'id_institucion', + type: 'string', + required: false, + }) + @ApiQuery({ + description: 'Id de la institución carrera que se quiere usar como filtro.', + name: 'id_institucion_carrera', + type: 'string', + required: false, + }) + @ApiQuery({ + description: 'Id del modulo que se quiere usar como filtro.', + name: 'id_modulo', + type: 'string', + required: false, + }) + @ApiQuery({ + description: 'Id del operador de entrega que se quiere usar como filtro.', + name: 'id_operador_entrega', + type: 'string', + required: false, + }) + @ApiQuery({ + description: 'Id del operador de regreso que se quiere usar como filtro.', + name: 'id_operador_regreso', + type: 'string', + required: false, + }) + @ApiQuery({ + description: 'Id del préstamo que se quiere usar como filtro.', + name: 'id_prestamo', + type: 'string', + required: false, + }) + @ApiQuery({ + description: 'Id del tipo de carrito que se quiere usar como filtro.', + name: 'id_tipo_carrito', + type: 'string', + required: false, + }) + @ApiQuery({ + description: 'Id del tipo de usuario que se quiere usar como filtro.', + name: 'id_tipo_usuario', + type: 'string', + required: false, + }) + @ApiQuery({ + description: 'Página en la que se encuentra el usuario.', + name: 'pagina', + type: 'string', + required: false, + }) + @ApiQuery({ + description: 'Usuario que se quiere usar como filtro.', + name: 'usuario', + type: 'string', + required: false, + }) + reporte(@Request() req, @Query() query: ReporteDto) { + const operador: Operador = req.user.operador; + + this.validarUsuarioService.validarOperador(operador); + return this.prestamoService.findAll(query); + } }