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
+92 -29
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,