multa a espera de pruebas

This commit is contained in:
xXpuma99Xx 2022-06-14 16:49:10 -05:00
parent fb5ebec04e
commit af0e81cb62
8 changed files with 128 additions and 51 deletions

View File

@ -11,6 +11,12 @@ export class CronService {
private usuarioService: UsuarioService, private usuarioService: UsuarioService,
) {} ) {}
@Cron('0 6 * * * *', { name: 'multas' }) // @Cron('0 6 * * * *', { name: 'multas' })
revisarMultas() {} // revisarMultas() {}
// @Cron('0 6 * * * *', { name: '' })
// desactivarPrestamos() {}
// @Cron('0 6 * * * *', { name: '' })
// desactivarActualizarEquipos() {}
} }

View File

@ -0,0 +1,10 @@
import { IsNumberString, IsOptional } from 'class-validator';
export class MultasDto {
@IsNumberString()
pagina: string;
@IsNumberString()
@IsOptional()
id_institucion?: string;
}

View File

@ -1,9 +0,0 @@
import { IsNumberString } from 'class-validator';
export class MultaInstitucionDto {
@IsNumberString()
id_institucion: string;
@IsNumberString()
pagina: string;
}

View File

@ -8,6 +8,7 @@ import {
} from 'typeorm'; } from 'typeorm';
import { InstitucionInfraccion } from '../../institucion-infraccion/entity/institucion-infraccion.entity'; import { InstitucionInfraccion } from '../../institucion-infraccion/entity/institucion-infraccion.entity';
import { Prestamo } from '../../prestamo/entity/prestamo.entity'; import { Prestamo } from '../../prestamo/entity/prestamo.entity';
import { Operador } from '../../operador/entity/operador.entity';
@Entity() @Entity()
export class Multa { export class Multa {
@ -29,11 +30,15 @@ export class Multa {
@ManyToOne( @ManyToOne(
() => InstitucionInfraccion, () => InstitucionInfraccion,
(institucionInfraccion) => institucionInfraccion.multas, (institucionInfraccion) => institucionInfraccion.multas,
{ eager: true },
) )
@JoinColumn({ name: 'id_institucion_infraccion' }) @JoinColumn({ name: 'id_institucion_infraccion' })
institucionInfraccion: InstitucionInfraccion; institucionInfraccion: InstitucionInfraccion;
@ManyToOne(() => Operador, (operador) => operador.multas, { eager: true })
@JoinColumn({ name: 'id_operador' })
opeardorMulta: Operador;
@OneToOne(() => Prestamo) @OneToOne(() => Prestamo)
@JoinColumn({ name: 'id_prestamo' })
prestamo: Prestamo; prestamo: Prestamo;
} }

View File

@ -1,9 +1,10 @@
import { Controller, Get, Query } from '@nestjs/common'; import { Controller, Get, Query } from '@nestjs/common';
import { ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger'; import { ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
import { Serealize } from '../interceptors/serialize.interceptor';
import { MultaService } from './multa.service'; import { MultaService } from './multa.service';
import { IdEquipoPaginaDto } from '../dto/id-equipo-pagina.dto'; import { IdEquipoPaginaDto } from '../dto/id-equipo-pagina.dto';
import { MultaInstitucionDto } from './dto/multa-intitucion.dto'; import { MultasDto } from './dto/input/multas.dto';
import { MultaUsuarioDto } from './dto/multa-usuario.dto'; import { MultaUsuarioDto } from './dto/input/usuario.dto';
@Controller('multa') @Controller('multa')
@ApiTags('multa') @ApiTags('multa')
@ -24,11 +25,8 @@ export class MultaController {
name: 'pagina', name: 'pagina',
type: 'string', type: 'string',
}) })
multas(@Query() query: MultaInstitucionDto) { multas(@Query() query: MultasDto) {
return this.multaService.findAllByIdInstitucion( return this.multaService.findAll(query);
parseInt(query.id_institucion),
parseInt(query.pagina),
);
} }
@Get('multas-equipo') @Get('multas-equipo')

View File

@ -1,9 +1,11 @@
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import * as moment from 'moment'; 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 { InstitucionInfraccion } from '../institucion-infraccion/entity/institucion-infraccion.entity';
import { Multa } from './entity/multa.entity'; import { Multa } from './entity/multa.entity';
import { Operador } from '../operador/entity/operador.entity';
import { Prestamo } from '../prestamo/entity/prestamo.entity'; import { Prestamo } from '../prestamo/entity/prestamo.entity';
import { EquipoService } from '../equipo/equipo.service'; import { EquipoService } from '../equipo/equipo.service';
import { InstitucionService } from '../institucion/institucion.service'; import { InstitucionService } from '../institucion/institucion.service';
@ -25,50 +27,101 @@ export class MultaService {
) {} ) {}
async create( async create(
id_institucion_infraccion: number,
id_prestamo: number, id_prestamo: number,
id_operador: number, id_operador: number,
retraso: boolean, retraso?: boolean,
id_institucion_infraccion?: number,
) { ) {
const ahora = moment();
const prestamo = await this.prestamoService.findById(id_prestamo); const prestamo = await this.prestamoService.findById(id_prestamo);
const operador = await this.operadorService.findById(id_operador); 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 const institucionInfraccion = id_institucion_infraccion
? await this.institucionInfraccionService.findById( ? await this.institucionInfraccionService.findById(
id_institucion_infraccion, id_institucion_infraccion,
) )
: null; : null;
const data: {
prestamo: Prestamo;
institucionInfraccion?: InstitucionInfraccion;
retraso?: boolean;
} = { prestamo };
// const nuevo if (!retraso && !institucionInfraccion)
// this.repository.create({ throw new ConflictException(
// institucionInfraccion, 'No se mandó ningún motivo para multar a este alumno.',
// prestamo, );
// fecha_inicio: new Date(), return this.repository.findOne({ prestamo }).then((existeMulta) => {
// }); if (existeMulta)
throw new ConflictException(
if (retraso) data.retraso = retraso; 'Ya existe una multa asignada a este prestamo.',
if (institucionInfraccion) data.institucionInfraccion; );
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) { async findAll(filtros: {
return this.institucionService pagina: string;
.findById(id_institucion) id_institucion?: string;
.then((institucion) => usuario?: string;
this.repository.findAndCount({ }) {
where: {}, const busqueda: {
skip: (pagina - 1) * 25, prestamo: {
equipo: { carrito: { modulo: { institucion?: Institucion } } };
usuario: { usuario?: FindOperator<string> };
};
} = {
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, take: 25,
}), });
);
} }
findAllByIdEquipo(id_equipo: number, pagina: number) { findAllByIdEquipo(id_equipo: number, pagina: number) {
return this.equipoService.findById(id_equipo).then((equipo) => return this.equipoService.findById(id_equipo).then((equipo) =>
this.repository.findAndCount({ 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 } }, where: { prestamo: { equipo } },
skip: (pagina - 1) * 25, skip: (pagina - 1) * 25,
take: 25, take: 25,
@ -79,6 +132,16 @@ export class MultaService {
findAllByIdUsuario(id_usuario: number, pagina: number) { findAllByIdUsuario(id_usuario: number, pagina: number) {
return this.usuarioService.findById(id_usuario).then((usuario) => return this.usuarioService.findById(id_usuario).then((usuario) =>
this.repository.findAndCount({ 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 } }, where: { prestamo: { usuario } },
skip: (pagina - 1) * 25, skip: (pagina - 1) * 25,
take: 25, take: 25,

View File

@ -8,6 +8,7 @@ import {
} from 'typeorm'; } from 'typeorm';
import { Institucion } from '../../institucion/entity/institucion.entity'; import { Institucion } from '../../institucion/entity/institucion.entity';
import { Motivo } from '../../motivo/entity/motivo.entity'; import { Motivo } from '../../motivo/entity/motivo.entity';
import { Multa } from '../../multa/entity/multa.entity';
import { Prestamo } from '../../prestamo/entity/prestamo.entity'; import { Prestamo } from '../../prestamo/entity/prestamo.entity';
import { TipoUsuario } from '../../tipo-usuario/entity/tipo-usuario.entity'; import { TipoUsuario } from '../../tipo-usuario/entity/tipo-usuario.entity';
@ -37,12 +38,15 @@ export class Operador {
@JoinColumn({ name: 'id_tipo_usuario' }) @JoinColumn({ name: 'id_tipo_usuario' })
tipoUsuario: TipoUsuario; tipoUsuario: TipoUsuario;
@OneToMany(() => Motivo, (motivo) => motivo.operador)
motivos: Motivo[];
@OneToMany(() => Multa, (multa) => multa.opeardorMulta)
multas: Multa[];
@OneToMany(() => Prestamo, (prestamo) => prestamo.operadorEntrega) @OneToMany(() => Prestamo, (prestamo) => prestamo.operadorEntrega)
prestamosOperadorEntrega: Prestamo[]; prestamosOperadorEntrega: Prestamo[];
@OneToMany(() => Prestamo, (prestamo) => prestamo.operadorRegreso) @OneToMany(() => Prestamo, (prestamo) => prestamo.operadorRegreso)
prestamosOperadorRegreso: Prestamo[]; prestamosOperadorRegreso: Prestamo[];
@OneToMany(() => Motivo, (motivo) => motivo.operador)
motivos: Motivo[];
} }