From af0e81cb6238ae3b572006ec5d3cffb79bbc6952 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Tue, 14 Jun 2022 16:49:10 -0500 Subject: [PATCH] multa a espera de pruebas --- src/cron/cron.service.ts | 10 +- src/multa/dto/input/multas.dto.ts | 10 ++ .../usuario.dto.ts} | 0 src/multa/dto/multa-intitucion.dto.ts | 9 -- src/multa/entity/multa.entity.ts | 7 +- src/multa/multa.controller.ts | 12 +- src/multa/multa.service.ts | 121 +++++++++++++----- src/operador/entity/operador.entity.ts | 10 +- 8 files changed, 128 insertions(+), 51 deletions(-) create mode 100644 src/multa/dto/input/multas.dto.ts rename src/multa/dto/{multa-usuario.dto.ts => input/usuario.dto.ts} (100%) delete mode 100644 src/multa/dto/multa-intitucion.dto.ts diff --git a/src/cron/cron.service.ts b/src/cron/cron.service.ts index a862908..6090b3f 100644 --- a/src/cron/cron.service.ts +++ b/src/cron/cron.service.ts @@ -11,6 +11,12 @@ export class CronService { private usuarioService: UsuarioService, ) {} - @Cron('0 6 * * * *', { name: 'multas' }) - revisarMultas() {} + // @Cron('0 6 * * * *', { name: 'multas' }) + // revisarMultas() {} + + // @Cron('0 6 * * * *', { name: '' }) + // desactivarPrestamos() {} + + // @Cron('0 6 * * * *', { name: '' }) + // desactivarActualizarEquipos() {} } diff --git a/src/multa/dto/input/multas.dto.ts b/src/multa/dto/input/multas.dto.ts new file mode 100644 index 0000000..f18d6ab --- /dev/null +++ b/src/multa/dto/input/multas.dto.ts @@ -0,0 +1,10 @@ +import { IsNumberString, IsOptional } from 'class-validator'; + +export class MultasDto { + @IsNumberString() + pagina: string; + + @IsNumberString() + @IsOptional() + id_institucion?: string; +} diff --git a/src/multa/dto/multa-usuario.dto.ts b/src/multa/dto/input/usuario.dto.ts similarity index 100% rename from src/multa/dto/multa-usuario.dto.ts rename to src/multa/dto/input/usuario.dto.ts diff --git a/src/multa/dto/multa-intitucion.dto.ts b/src/multa/dto/multa-intitucion.dto.ts deleted file mode 100644 index b89ceee..0000000 --- a/src/multa/dto/multa-intitucion.dto.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IsNumberString } from 'class-validator'; - -export class MultaInstitucionDto { - @IsNumberString() - id_institucion: string; - - @IsNumberString() - pagina: string; -} diff --git a/src/multa/entity/multa.entity.ts b/src/multa/entity/multa.entity.ts index 429334e..ecd2ac7 100644 --- a/src/multa/entity/multa.entity.ts +++ b/src/multa/entity/multa.entity.ts @@ -8,6 +8,7 @@ import { } from 'typeorm'; import { InstitucionInfraccion } from '../../institucion-infraccion/entity/institucion-infraccion.entity'; import { Prestamo } from '../../prestamo/entity/prestamo.entity'; +import { Operador } from '../../operador/entity/operador.entity'; @Entity() export class Multa { @@ -29,11 +30,15 @@ export class Multa { @ManyToOne( () => InstitucionInfraccion, (institucionInfraccion) => institucionInfraccion.multas, + { eager: true }, ) @JoinColumn({ name: 'id_institucion_infraccion' }) institucionInfraccion: InstitucionInfraccion; + @ManyToOne(() => Operador, (operador) => operador.multas, { eager: true }) + @JoinColumn({ name: 'id_operador' }) + opeardorMulta: Operador; + @OneToOne(() => Prestamo) - @JoinColumn({ name: 'id_prestamo' }) prestamo: Prestamo; } diff --git a/src/multa/multa.controller.ts b/src/multa/multa.controller.ts index 7539430..9d8144c 100644 --- a/src/multa/multa.controller.ts +++ b/src/multa/multa.controller.ts @@ -1,9 +1,10 @@ import { Controller, Get, Query } from '@nestjs/common'; import { ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger'; +import { Serealize } from '../interceptors/serialize.interceptor'; import { MultaService } from './multa.service'; import { IdEquipoPaginaDto } from '../dto/id-equipo-pagina.dto'; -import { MultaInstitucionDto } from './dto/multa-intitucion.dto'; -import { MultaUsuarioDto } from './dto/multa-usuario.dto'; +import { MultasDto } from './dto/input/multas.dto'; +import { MultaUsuarioDto } from './dto/input/usuario.dto'; @Controller('multa') @ApiTags('multa') @@ -24,11 +25,8 @@ export class MultaController { name: 'pagina', type: 'string', }) - multas(@Query() query: MultaInstitucionDto) { - return this.multaService.findAllByIdInstitucion( - parseInt(query.id_institucion), - parseInt(query.pagina), - ); + multas(@Query() query: MultasDto) { + return this.multaService.findAll(query); } @Get('multas-equipo') diff --git a/src/multa/multa.service.ts b/src/multa/multa.service.ts index 9577f79..f3bbf90 100644 --- a/src/multa/multa.service.ts +++ b/src/multa/multa.service.ts @@ -1,9 +1,11 @@ -import { Injectable } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; import * as moment from 'moment'; +import { ConflictException, Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { FindOperator, Like, Repository } from 'typeorm'; +import { Institucion } from '../institucion/entity/institucion.entity'; import { InstitucionInfraccion } from '../institucion-infraccion/entity/institucion-infraccion.entity'; import { Multa } from './entity/multa.entity'; +import { Operador } from '../operador/entity/operador.entity'; import { Prestamo } from '../prestamo/entity/prestamo.entity'; import { EquipoService } from '../equipo/equipo.service'; import { InstitucionService } from '../institucion/institucion.service'; @@ -25,50 +27,101 @@ export class MultaService { ) {} async create( - id_institucion_infraccion: number, id_prestamo: number, id_operador: number, - retraso: boolean, + retraso?: boolean, + id_institucion_infraccion?: number, ) { + const ahora = moment(); const prestamo = await this.prestamoService.findById(id_prestamo); const operador = await this.operadorService.findById(id_operador); + const data: { + prestamo: Prestamo; + operador: Operador; + fecha_inicio: Date; + institucionInfraccion?: InstitucionInfraccion; + retraso?: boolean; + fecha_fin?: Date; + } = { fecha_inicio: ahora.toDate(), prestamo, operador }; const institucionInfraccion = id_institucion_infraccion ? await this.institucionInfraccionService.findById( id_institucion_infraccion, ) : null; - const data: { - prestamo: Prestamo; - institucionInfraccion?: InstitucionInfraccion; - retraso?: boolean; - } = { prestamo }; - // const nuevo - // this.repository.create({ - // institucionInfraccion, - // prestamo, - // fecha_inicio: new Date(), - // }); - - if (retraso) data.retraso = retraso; - if (institucionInfraccion) data.institucionInfraccion; + if (!retraso && !institucionInfraccion) + throw new ConflictException( + 'No se mandó ningún motivo para multar a este alumno.', + ); + return this.repository.findOne({ prestamo }).then((existeMulta) => { + if (existeMulta) + throw new ConflictException( + 'Ya existe una multa asignada a este prestamo.', + ); + if (retraso) { + data.retraso = retraso; + ahora.add(operador.institucion.dias_multa_retraso, 'd'); + } + if (institucionInfraccion) { + data.institucionInfraccion = institucionInfraccion; + ahora.add(institucionInfraccion.dias_multa, 'd'); + } + data.fecha_fin = ahora.toDate(); + return this.repository.save(this.repository.create(data)); + }); } - findAllByIdInstitucion(id_institucion: number, pagina: number) { - return this.institucionService - .findById(id_institucion) - .then((institucion) => - this.repository.findAndCount({ - where: {}, - skip: (pagina - 1) * 25, - take: 25, - }), - ); + async findAll(filtros: { + pagina: string; + id_institucion?: string; + usuario?: string; + }) { + const busqueda: { + prestamo: { + equipo: { carrito: { modulo: { institucion?: Institucion } } }; + usuario: { usuario?: FindOperator }; + }; + } = { + prestamo: { equipo: { carrito: { modulo: {} } }, usuario: {} }, + }; + const institucion = filtros.id_institucion + ? await this.institucionService.findById(parseInt(filtros.id_institucion)) + : null; + + if (filtros.usuario) + busqueda.prestamo.usuario.usuario = Like(filtros.usuario); + if (institucion) + busqueda.prestamo.equipo.carrito.modulo.institucion = institucion; + return this.repository.findAndCount({ + join: { + alias: 'mu', + innerJoinAndSelect: { + p: 'mu.prestamo', + e: 'p.equipo', + c: 'e.carrito', + m: 'c.modulo', + i: 'm.institucion', + }, + }, + where: busqueda, + skip: (parseInt(filtros.pagina) - 1) * 25, + take: 25, + }); } findAllByIdEquipo(id_equipo: number, pagina: number) { return this.equipoService.findById(id_equipo).then((equipo) => this.repository.findAndCount({ + join: { + alias: 'mu', + innerJoinAndSelect: { + p: 'mu.prestamo', + e: 'p.equipo', + c: 'e.carrito', + m: 'c.modulo', + i: 'm.institucion', + }, + }, where: { prestamo: { equipo } }, skip: (pagina - 1) * 25, take: 25, @@ -79,6 +132,16 @@ export class MultaService { findAllByIdUsuario(id_usuario: number, pagina: number) { return this.usuarioService.findById(id_usuario).then((usuario) => this.repository.findAndCount({ + join: { + alias: 'mu', + innerJoinAndSelect: { + p: 'mu.prestamo', + e: 'p.equipo', + c: 'e.carrito', + m: 'c.modulo', + i: 'm.institucion', + }, + }, where: { prestamo: { usuario } }, skip: (pagina - 1) * 25, take: 25, diff --git a/src/operador/entity/operador.entity.ts b/src/operador/entity/operador.entity.ts index 969f469..f6fe4e4 100644 --- a/src/operador/entity/operador.entity.ts +++ b/src/operador/entity/operador.entity.ts @@ -8,6 +8,7 @@ import { } from 'typeorm'; import { Institucion } from '../../institucion/entity/institucion.entity'; import { Motivo } from '../../motivo/entity/motivo.entity'; +import { Multa } from '../../multa/entity/multa.entity'; import { Prestamo } from '../../prestamo/entity/prestamo.entity'; import { TipoUsuario } from '../../tipo-usuario/entity/tipo-usuario.entity'; @@ -37,12 +38,15 @@ export class Operador { @JoinColumn({ name: 'id_tipo_usuario' }) tipoUsuario: TipoUsuario; + @OneToMany(() => Motivo, (motivo) => motivo.operador) + motivos: Motivo[]; + + @OneToMany(() => Multa, (multa) => multa.opeardorMulta) + multas: Multa[]; + @OneToMany(() => Prestamo, (prestamo) => prestamo.operadorEntrega) prestamosOperadorEntrega: Prestamo[]; @OneToMany(() => Prestamo, (prestamo) => prestamo.operadorRegreso) prestamosOperadorRegreso: Prestamo[]; - - @OneToMany(() => Motivo, (motivo) => motivo.operador) - motivos: Motivo[]; }