This commit is contained in:
xXpuma99Xx 2022-06-14 20:57:28 -05:00
parent 2ddd98be37
commit 426ca54328
8 changed files with 192 additions and 30 deletions

View File

@ -1,4 +1,4 @@
import { Module } from '@nestjs/common';
import { forwardRef, Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { MultaController } from './multa.controller';
import { MultaService } from './multa.service';
@ -16,7 +16,7 @@ import { UsuarioModule } from '../usuario/usuario.module';
InstitucionModule,
InstitucionInfraccionModule,
OperadorModule,
PrestamoModule,
forwardRef(() => PrestamoModule),
TypeOrmModule.forFeature([Multa]),
UsuarioModule,
],

View File

@ -27,22 +27,30 @@ export class MultaService {
) {}
async create(
id_prestamo: number,
id_operador: number,
retraso?: boolean,
id_prestamo: number | Prestamo,
id_operador: number | Operador,
descripcion: string,
retraso?: number,
id_institucion_infraccion?: number,
) {
const ahora = moment();
const prestamo = await this.prestamoService.findById(id_prestamo);
const operador = await this.operadorService.findById(id_operador);
const prestamo =
typeof id_prestamo === 'number'
? await this.prestamoService.findById(id_prestamo)
: id_prestamo;
const operador =
typeof id_operador === 'number'
? await this.operadorService.findById(id_operador)
: id_operador;
const data: {
prestamo: Prestamo;
operador: Operador;
descripcion: string;
fecha_inicio: Date;
operador: Operador;
prestamo: Prestamo;
fecha_fin?: Date;
institucionInfraccion?: InstitucionInfraccion;
retraso?: boolean;
fecha_fin?: Date;
} = { fecha_inicio: ahora.toDate(), prestamo, operador };
} = { descripcion, fecha_inicio: ahora.toDate(), operador, prestamo };
const institucionInfraccion = id_institucion_infraccion
? await this.institucionInfraccionService.findById(
id_institucion_infraccion,
@ -59,8 +67,8 @@ export class MultaService {
'Ya existe una multa asignada a este prestamo.',
);
if (retraso) {
data.retraso = retraso;
ahora.add(operador.institucion.dias_multa_retraso, 'd');
data.retraso = true;
ahora.add(retraso * operador.institucion.dias_multa_retraso, 'd');
}
if (institucionInfraccion) {
data.institucionInfraccion = institucionInfraccion;

View File

@ -1,6 +1,6 @@
import { IsInt } from 'class-validator';
export class UpdateOperadorDto {
export class EntregarDto {
@IsInt()
id_operador: number;

View File

@ -0,0 +1,17 @@
import { IsInt, IsOptional, IsString } from 'class-validator';
export class RegresarIdPrestamoDto {
@IsInt()
id_operador: number;
@IsInt()
id_prestamo: number;
@IsInt()
@IsOptional()
id_institucion_infraccion?: number;
@IsString()
@IsOptional()
descripcion?: string;
}

View File

@ -0,0 +1,17 @@
import { IsInt, IsOptional, IsString } from 'class-validator';
export class RegresarNumeroInventarioDto {
@IsInt()
id_operador: number;
@IsString()
numero_inventairo: string;
@IsInt()
@IsOptional()
id_institucion_infraccion?: number;
@IsString()
@IsOptional()
descripcion?: string;
}

View File

@ -2,17 +2,21 @@ import { Body, Controller, Get, Post, Put, Query } from '@nestjs/common';
import { ApiBody, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
import { Serealize } from '../interceptors/serialize.interceptor';
import { PrestamoService } from './prestamo.service';
import { PedirDto } from './dto/input/pedir.dto';
import { ActivosDto } from './dto/input/activos.dto';
import { IdUsuarioDto } from './dto/input/id-usuario.dto';
import { IdPrestamoDto } from './dto/input/id-prestamo.dto';
import { NumeroInventarioDto } from './dto/input/numero-inventario.dto';
import { CancelarUsuarioDto } from './dto/input/cancelar-usuario.dto';
import { CancelarOperadorDto } from './dto/input/cancelar-operador.dto';
import { HistorialDto } from './dto/input/historial.dto';
import { HistorialEquipoDto } from './dto/input/historial-equipo.dto';
import { HistorialUsuarioDto } from './dto/input/historial-usuario.dto';
import { UpdateOperadorDto } from './dto/input/update-operador.dto';
import { CancelarUsuarioDto } from './dto/input/cancelar-usuario.dto';
import { CancelarOperadorDto } from './dto/input/cancelar-operador.dto';
import { IdPrestamoDto } from './dto/input/id-prestamo.dto';
import { IdUsuarioDto } from './dto/input/id-usuario.dto';
import { NumeroInventarioDto } from './dto/input/numero-inventario.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 { PrestamoOutputDto } from './dto/output/prestamo.dto';
import { PrestamoActivoOutputDto } from './dto/output/prestamo-activo.dto';
import { PrestamoUsuarioOutputDto } from './dto/output/prestamo-usuario.dto';
@ -122,7 +126,7 @@ export class PrestamoController {
description: 'Ambas variables son obligatorias.',
examples: { ejemplo: { value: { id_prestamo: 1, id_operador: 4 } } },
})
entregar(@Body() body: UpdateOperadorDto) {
entregar(@Body() body: EntregarDto) {
return this.prestamoService.entregar(body.id_prestamo, body.id_operador);
}
@ -321,14 +325,52 @@ export class PrestamoController {
);
}
@Put('regresar')
@Put('regresar-id-prestamo')
@ApiOperation({ description: 'Endpoint que desactiva un préstamo.' })
@ApiBody({
description: 'Ambas variables son obligatorias.',
examples: { ejemplo: { value: { id_prestamo: 1, id_operador: 4 } } },
examples: {
ejemplo: {
value: {
id_operador: 4,
id_prestamo: 1,
_descripcion: '',
_id_institucion_infraccion: 603,
},
},
},
})
regresar(@Body() body: UpdateOperadorDto) {
return this.prestamoService.regresar(body.id_prestamo, body.id_operador);
regresarIdPrestamo(@Body() body: RegresarIdPrestamoDto) {
return this.prestamoService.regresarIdPrestamo(
body.id_operador,
body.id_prestamo,
body.descripcion,
body.id_institucion_infraccion,
);
}
@Put('regresar-numero-inventario')
@ApiOperation({ description: 'Endpoint que desactiva un préstamo.' })
@ApiBody({
description: 'Ambas variables son obligatorias.',
examples: {
ejemplo: {
value: {
id_operador: 4,
numero_inventario: '',
_descripcion: '',
_id_institucion_infraccion: 603,
},
},
},
})
regresar(@Body() body: RegresarNumeroInventarioDto) {
return this.prestamoService.regresarNumeroInventario(
body.id_operador,
body.numero_inventairo,
body.descripcion,
body.id_institucion_infraccion,
);
}
// @Get('reporte')

View File

@ -1,4 +1,4 @@
import { Module } from '@nestjs/common';
import { forwardRef, Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { PrestamoController } from './prestamo.controller';
import { PrestamoService } from './prestamo.service';
@ -12,6 +12,7 @@ import { InstitucionTipoEntradaModule } from '../institucion-tipo-entrada/instit
import { OperadorModule } from '../operador/operador.module';
import { ModuloModule } from '../modulo/modulo.module';
import { MotivoModule } from '../motivo/motivo.module';
import { MultaModule } from 'src/multa/multa.module';
import { StatusModule } from '../status/status.module';
import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module';
import { UsuarioModule } from '../usuario/usuario.module';
@ -25,6 +26,7 @@ import { UsuarioModule } from '../usuario/usuario.module';
InstitucionTipoEntradaModule,
ModuloModule,
MotivoModule,
forwardRef(() => MultaModule),
OperadorModule,
StatusModule,
TypeOrmModule.forFeature([Prestamo]),

View File

@ -1,6 +1,8 @@
import * as moment from 'moment';
import {
ConflictException,
forwardRef,
Inject,
Injectable,
NotFoundException,
} from '@nestjs/common';
@ -20,6 +22,7 @@ import { InstitucionTipoCarritoService } from '../institucion-tipo-carrito/insti
import { InstitucionTipoEntradaService } from '../institucion-tipo-entrada/institucion-tipo-entrada.service';
import { ModuloService } from '../modulo/modulo.service';
import { MotivoService } from '../motivo/motivo.service';
import { MultaService } from '../multa/multa.service';
import { OperadorService } from '../operador/operador.service';
import { StatusService } from '../status/status.service';
import { TipoUsuarioService } from '../tipo-usuario/tipo-usuario.service';
@ -37,6 +40,8 @@ export class PrestamoService {
private institucionTipoEntradaService: InstitucionTipoEntradaService,
private moduloService: ModuloService,
private motivoService: MotivoService,
@Inject(forwardRef(() => MultaService))
private multaService: MultaService,
private operadorService: OperadorService,
private statusService: StatusService,
private tipoUsuarioService: TipoUsuarioService,
@ -386,18 +391,52 @@ export class PrestamoService {
});
}
async regresar(id_prestamo: number, id_operador: number) {
async regresar(
prestamo: Prestamo,
operadorRegreso: Operador,
descripcion?: string,
id_institucion_infraccion?: number,
) {
const ahora = moment();
const operadorRegreso = await this.operadorService.findById(id_operador);
const prestamo = await this.findById(id_prestamo);
const tardanza = Math.trunc(ahora.diff(moment(prestamo.hora_fin)) / 60000);
const semanasCastigo = Math.trunc(
tardanza / operadorRegreso.institucion.tiempo_entrega,
);
this.validacionBasicaPrestamo(prestamo);
if (prestamo.equipo.status.id_status === 2)
throw new ConflictException('Aun no se entrega el equipo al usuario.');
if (id_institucion_infraccion && !descripcion)
throw new ConflictException('No se mandó la descripción de lo ocurrido.');
id_institucion_infraccion && !descripcion;
prestamo.activo = false;
prestamo.fecha_entrega = ahora.toDate();
prestamo.operadorRegreso = operadorRegreso;
prestamo.equipo.status = await this.statusService.findById(1);
if (semanasCastigo > 0) {
if (id_institucion_infraccion)
await this.multaService.create(
prestamo,
operadorRegreso,
`El usaurio se tardó: ${tardanza} minutos en entregar el equipo de cómputo. ${descripcion}`,
semanasCastigo,
id_institucion_infraccion,
);
else
await this.multaService.create(
prestamo,
operadorRegreso,
`El usaurio se tardó: ${tardanza} minutos en entregar el equipo de cómputo.`,
semanasCastigo,
);
} else if (id_institucion_infraccion)
await this.multaService.create(
prestamo,
operadorRegreso,
descripcion,
null,
id_institucion_infraccion,
);
return this.equipoService
.update(prestamo.equipo)
.then((_) => this.repository.save(prestamo))
@ -406,6 +445,43 @@ export class PrestamoService {
}));
}
async regresarIdPrestamo(
id_operador: number,
id_prestamo: number,
descripcion?: string,
id_institucion_infraccion?: number,
) {
const operador = await this.operadorService.findById(id_operador);
const prestamo = await this.findById(id_prestamo);
return this.regresar(
prestamo,
operador,
descripcion,
id_institucion_infraccion,
);
}
async regresarNumeroInventario(
id_operador: number,
numero_inventario: string,
descripcion?: string,
id_institucion_infraccion?: number,
) {
const operador = await this.operadorService.findById(id_operador);
const prestamo = await this.findByNumeroInventario(
operador.institucion,
numero_inventario,
);
return this.regresar(
prestamo,
operador,
descripcion,
id_institucion_infraccion,
);
}
validacionBasicaPrestamo(prestamo: Prestamo) {
if (prestamo.cancelado_usuario)
throw new ConflictException(