prestamo controller final

This commit is contained in:
xXpuma99Xx 2023-01-02 20:06:09 -06:00
parent b1122d031d
commit f4715175ac
6 changed files with 375 additions and 128 deletions

View File

@ -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()

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}
}