multa reparado
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user