multa reparado

This commit is contained in:
xXpuma99Xx
2022-10-05 04:58:49 -05:00
parent b34eb420e3
commit 0074bd1ddc
11 changed files with 204 additions and 142 deletions
@@ -23,6 +23,7 @@ import { Usuario } from '../../../usuario/entity/usuario.entity';
.addSelect('ii.id_infraccion', 'id_infraccion')
.addSelect('om.id_institucion', 'id_institucion')
.addSelect('om.operador', 'operador')
.addSelect('p.id_equipo', 'id_equipo')
.addSelect('p.id_usuario', 'id_usuario')
.addSelect('inf.infraccion', 'infraccion')
.addSelect('i.institucion', 'institucion')
@@ -45,7 +46,7 @@ export class FullInformacionMultaView {
id_multa: number;
@ViewColumn()
activo: boolean;
activo: number;
@ViewColumn()
descripcion: string;
@@ -56,6 +57,9 @@ export class FullInformacionMultaView {
@ViewColumn()
fecha_inicio: Date;
@ViewColumn()
id_equipo: number;
@ViewColumn()
id_institucion: number;
@@ -87,7 +91,7 @@ export class FullInformacionMultaView {
operador: string;
@ViewColumn()
retraso: boolean;
retraso: number;
@ViewColumn()
usuario: string;
+1 -1
View File
@@ -98,7 +98,7 @@ export class MultaController {
const operador: Operador = req.user.operador;
this.validarUsuarioService.validarAdminOperador(operador);
return this.multaService.findAll(query);
return this.multaService.findFullInfoMultaAll(query);
}
@Serealize(MultasEquipoOutputDto)
+115 -93
View File
@@ -1,9 +1,10 @@
import * as moment from 'moment';
import { ConflictException, Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { InstitucionInfraccion } from '../institucion-infraccion/entity/institucion-infraccion.entity';
import { DeepPartial, FindOptionsWhere, Like, Repository } from 'typeorm';
import { Multa } from './entity/multa.entity';
import { FullInformacionMultaView } from './entity/views/full-informacion-multa.view';
import { InformacionMultaView } from './entity/views/informacion-multa.view';
import { Operador } from '../operador/entity/operador.entity';
import { Prestamo } from '../prestamo/entity/prestamo.entity';
import { EquipoService } from '../equipo/equipo.service';
@@ -18,6 +19,10 @@ import { UsuarioService } from '../usuario/usuario.service';
export class MultaService {
constructor(
@InjectRepository(Multa) private repository: Repository<Multa>,
@InjectRepository(FullInformacionMultaView)
private fullInformacionMultaView: Repository<FullInformacionMultaView>,
@InjectRepository(InformacionMultaView)
private informacionMultaView: Repository<InformacionMultaView>,
private equipoService: EquipoService,
private institucionService: InstitucionService,
private institucionInfraccionService: InstitucionInfraccionService,
@@ -43,21 +48,13 @@ export class MultaService {
typeof id_operador === 'number'
? await this.operadorService.findById(id_operador)
: id_operador;
const data: {
descripcion: string;
fecha_inicio: Date;
operadorMulta: Operador;
prestamo: Prestamo;
fecha_fin?: Date;
institucionInfraccion?: InstitucionInfraccion;
retraso?: boolean;
} = {
const data: DeepPartial<Multa> = {
descripcion,
fecha_inicio: ahora.toDate(),
operadorMulta: operador,
prestamo,
};
const institucionInfraccion = id_institucion_infraccion
let institucionInfraccion = id_institucion_infraccion
? await this.institucionInfraccionService.findById(
id_institucion_infraccion,
)
@@ -67,10 +64,16 @@ export class MultaService {
throw new ConflictException(
'No se puede multar a un usuario con un préstamo que fue cancelado.',
);
if (!retraso && !institucionInfraccion)
throw new ConflictException(
'No se mandó ningún motivo para multar a este alumno.',
);
if (!institucionInfraccion) {
if (!retraso)
throw new ConflictException(
'No se mandó ningún motivo para multar a este alumno.',
);
institucionInfraccion =
await this.institucionInfraccionService.findSinInfraccion(
operador.institucion,
);
}
return this.repository
.findOne({ where: { prestamo } })
.then((existeMulta) => {
@@ -89,16 +92,19 @@ export class MultaService {
data.fecha_fin = ahora.toDate();
return this.repository.save(this.repository.create(data));
})
.then((_) => {
for (let i = 0; prestamo.usuario.instituciones.length; i++) {
const institucionUsuario = prestamo.usuario.instituciones[i];
.then((_) =>
this.institucionUsuarioService.findAllByIdUsuario(
prestamo.usuario.id_usuario,
),
)
.then(async (instituciones) => {
for (let i = 0; i < instituciones.length; i++) {
if (
institucionUsuario.institucionCarrera.institucion.id_institucion ===
instituciones[i].institucionCarrera.institucion.id_institucion ===
operador.institucion.id_institucion
) {
institucionUsuario.multa = true;
return this.institucionUsuarioService.update(institucionUsuario);
instituciones[i].multa = true;
await this.institucionUsuarioService.update(instituciones[i]);
}
}
});
@@ -132,7 +138,7 @@ export class MultaService {
});
}
async findAll(filtros: {
async findFullInfoMultaAll(filtros: {
pagina: string;
id_institucion?: string;
usuario?: string;
@@ -142,88 +148,70 @@ export class MultaService {
parseInt(filtros.id_institucion),
)
: null;
const query = this.repository
.createQueryBuilder('mu')
.innerJoinAndSelect('mu.institucionInfraccion', 'ii')
.innerJoinAndSelect('mu.operadorMulta', 'om')
.innerJoinAndSelect('mu.prestamo', 'p')
.innerJoinAndSelect('ii.infraccion', 'inf')
.innerJoinAndSelect('om.tipoUsuario', 'tu')
.innerJoinAndSelect('p.equipo', 'e')
.innerJoinAndSelect('p.usuario', 'u')
.innerJoinAndSelect('e.carrito', 'c')
.innerJoinAndSelect('u.instituciones', 'is')
.innerJoinAndSelect('c.modulo', 'm')
.innerJoinAndSelect('c.tipoCarrito', 'tc')
.innerJoinAndSelect('is.institucionCarrera', 'ic')
.innerJoinAndSelect('m.institucion', 'i')
.innerJoinAndSelect('ic.carrera', 'ca')
.innerJoinAndSelect('ic.institucion', 'in')
.orderBy('i.institucion')
.addOrderBy('mu.activo', 'DESC')
.addOrderBy('mu.id_multa', 'DESC')
.addOrderBy('u.usuario')
.skip((parseInt(filtros.pagina) - 1) * 25)
.take(25);
const busqueda: FindOptionsWhere<FullInformacionMultaView> = {};
if (filtros.usuario)
query.andWhere('u.usuario LIKE :usuario', {
usuario: `%${filtros.usuario}%`,
if (filtros.usuario) busqueda.usuario = Like(`%${filtros.usuario}%`);
if (institucion) busqueda.id_institucion = institucion.id_institucion;
return this.fullInformacionMultaView
.findAndCount({
where: busqueda,
order: {
institucion: 'ASC',
activo: 'DESC',
id_multa: 'DESC',
id_usuario: 'ASC',
},
skip: (parseInt(filtros.pagina) - 1) * 25,
take: 25,
})
.then((infoMultas) => {
const multas: Multa[] = [];
for (let i = 0; i < infoMultas[0].length; i++)
multas.push(
this.repository.create(this.fullViewToMulta(infoMultas[0][i])),
);
return [multas, infoMultas[1]];
});
if (institucion)
query.andWhere('i.id_institucion = :id_institucion', {
id_institucion: institucion.id_institucion,
});
return query.getManyAndCount();
}
findAllByIdEquipo(id_equipo: number, pagina: number) {
return this.equipoService.findInfoEquipoById(id_equipo).then((equipo) =>
this.repository
.createQueryBuilder('mu')
.innerJoinAndSelect('mu.institucionInfraccion', 'ii')
.innerJoinAndSelect('mu.operadorMulta', 'om')
.innerJoinAndSelect('mu.prestamo', 'p')
.innerJoinAndSelect('ii.infraccion', 'inf')
.innerJoinAndSelect('ii.institucion', 'i')
.innerJoinAndSelect('om.tipoUsuario', 'tu')
.innerJoinAndSelect('p.equipo', 'e', 'e.id_equipo = :id_equipo', {
id_equipo: equipo.id_equipo,
this.fullInformacionMultaView
.findAndCount({
where: { id_equipo: equipo.id_equipo },
skip: (pagina - 1) * 25,
take: 25,
})
.innerJoinAndSelect('p.usuario', 'u')
.innerJoinAndSelect('u.instituciones', 'is')
.innerJoinAndSelect('is.institucionCarrera', 'ic')
.innerJoinAndSelect('ic.carrera', 'ca')
.innerJoinAndSelect('ic.institucion', 'in')
.orderBy('mu.id_multa', 'DESC')
.skip((pagina - 1) * 25)
.take(25)
.getManyAndCount(),
.then((infoMultas) => {
const multas: Multa[] = [];
for (let i = 0; i < infoMultas[0].length; i++)
multas.push(
this.repository.create(this.fullViewToMulta(infoMultas[0][i])),
);
return [multas, infoMultas[1]];
}),
);
}
findAllByIdUsuario(id_usuario: number, pagina: number) {
return this.usuarioService.findById(id_usuario).then((usuario) =>
this.repository
.createQueryBuilder('mu')
.innerJoinAndSelect('mu.institucionInfraccion', 'ii')
.innerJoinAndSelect('mu.operadorMulta', 'om')
.innerJoinAndSelect('mu.prestamo', 'p')
.innerJoinAndSelect('ii.infraccion', 'inf')
.innerJoinAndSelect('ii.institucion', 'i')
.innerJoinAndSelect('om.tipoUsuario', 'tu')
.innerJoinAndSelect('p.equipo', 'e')
.innerJoinAndSelect('p.usuario', 'u', 'u.id_usuario = :id_usuario', {
id_usuario: usuario.id_usuario,
this.fullInformacionMultaView
.findAndCount({
where: { id_usuario: usuario.id_usuario },
skip: (pagina - 1) * 25,
take: 25,
})
.innerJoinAndSelect('e.carrito', 'c')
.innerJoinAndSelect('c.modulo', 'm')
.innerJoinAndSelect('c.tipoCarrito', 'tc')
.innerJoinAndSelect('m.institucion', 'in')
.orderBy('mu.id_multa', 'DESC')
.skip((pagina - 1) * 25)
.take(25)
.getManyAndCount(),
.then((infoMultas) => {
const multas: Multa[] = [];
for (let i = 0; i < infoMultas[0].length; i++)
multas.push(
this.repository.create(this.fullViewToMulta(infoMultas[0][i])),
);
return [multas, infoMultas[1]];
}),
);
}
@@ -242,6 +230,40 @@ export class MultaService {
);
}
private fullViewToMulta(infoMulta: FullInformacionMultaView) {
return this.repository.create({
id_multa: infoMulta.id_multa,
activo: infoMulta.activo === 1,
descripcion: infoMulta.descripcion,
fecha_fin: infoMulta.fecha_fin,
fecha_inicio: infoMulta.fecha_inicio,
retraso: infoMulta.retraso === 1,
institucionInfraccion: {
id_institucion_infraccion: infoMulta.id_institucion_infraccion,
infraccion: {
id_infraccion: infoMulta.id_infraccion,
infraccion: infoMulta.infraccion,
},
},
operadorMulta: {
id_operador: infoMulta.id_operador,
operador: infoMulta.operador,
institucion: {
id_institucion: infoMulta.id_institucion,
institucion: infoMulta.institucion,
},
},
prestamo: {
id_prestamo: infoMulta.id_prestamo,
usuario: {
id_usuario: infoMulta.id_usuario,
usuario: infoMulta.usuario,
nombre: infoMulta.nombre,
},
},
});
}
async quitarMulta(id_institucion_usuario: number) {
const institucionUsuario = await this.institucionUsuarioService.findById(
id_institucion_usuario,