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,
) {}
@Cron('0 6 * * * *', { name: 'multas' })
revisarMultas() {}
// @Cron('0 6 * * * *', { name: 'multas' })
// 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';
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;
}

View File

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

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 { 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<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,
});
}
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,

View File

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