listo multa
This commit is contained in:
+181
-119
@@ -7,11 +7,10 @@ import { FullInformacionMultaView } from './entity/views/full-informacion-multa.
|
||||
import { InformacionMultaView } from './entity/views/informacion-multa.view';
|
||||
import { Operador } from '../operador/entity/operador.entity';
|
||||
import { Prestamo } from '../prestamo/entity/prestamo.entity';
|
||||
import { Usuario } from '../usuario/entity/usuario.entity';
|
||||
import { EquipoService } from '../equipo/equipo.service';
|
||||
import { InstitucionService } from '../institucion/institucion.service';
|
||||
import { InstitucionInfraccionService } from '../institucion-infraccion/institucion-infraccion.service';
|
||||
import { InstitucionUsuarioService } from '../institucion-usuario/institucion-usuario.service';
|
||||
import { OperadorService } from '../operador/operador.service';
|
||||
import { PrestamoService } from '../prestamo/prestamo.service';
|
||||
import { UsuarioService } from '../usuario/usuario.service';
|
||||
|
||||
@@ -24,82 +23,112 @@ export class MultaService {
|
||||
@InjectRepository(InformacionMultaView)
|
||||
private informacionMultaView: Repository<InformacionMultaView>,
|
||||
private equipoService: EquipoService,
|
||||
private institucionService: InstitucionService,
|
||||
private institucionInfraccionService: InstitucionInfraccionService,
|
||||
private institucionUsuarioService: InstitucionUsuarioService,
|
||||
private operadorService: OperadorService,
|
||||
private prestamoService: PrestamoService,
|
||||
private usuarioService: UsuarioService,
|
||||
) {}
|
||||
|
||||
async create(
|
||||
id_prestamo: number | Prestamo,
|
||||
id_operador: number | Operador,
|
||||
operadorMulta: Operador,
|
||||
prestamo: Prestamo,
|
||||
descripcion: string,
|
||||
retraso?: number,
|
||||
id_institucion_infraccion?: number,
|
||||
) {
|
||||
console.log('hola1');
|
||||
const ahora = moment();
|
||||
const institucionInfraccion = id_institucion_infraccion
|
||||
? await this.institucionInfraccionService.findById(
|
||||
id_institucion_infraccion,
|
||||
)
|
||||
: // Asigno institucionInfraccion "Sin multa" por default
|
||||
await this.institucionInfraccionService.findSinInfraccion(
|
||||
operadorMulta.institucion,
|
||||
);
|
||||
// Creo registro de multa
|
||||
const nuevaMulta = this.repository.create({
|
||||
descripcion,
|
||||
fecha_inicio: moment().toDate(),
|
||||
operadorMulta,
|
||||
prestamo,
|
||||
institucionInfraccion,
|
||||
});
|
||||
const existeMulta = await this.findByPrestamo(prestamo).catch((err) => {
|
||||
if (err) true;
|
||||
return false;
|
||||
});
|
||||
const fecha_fin = moment();
|
||||
|
||||
// Si ya tiene multa es que hubo un error en otra ocasión pero se creo la multa
|
||||
// correctamente esa vez
|
||||
if (existeMulta) return;
|
||||
this.validacionMultaCancelacion(prestamo);
|
||||
// Si no se mando un id_institucion_infraccion ni retraso saco error
|
||||
if (!institucionInfraccion && !retraso)
|
||||
throw new ConflictException(
|
||||
'No se mandó ningún motivo para multar a este alumno.',
|
||||
);
|
||||
// Si hay retraso lo agrego a la multa
|
||||
if (retraso) {
|
||||
nuevaMulta.retraso = true;
|
||||
fecha_fin.add(
|
||||
retraso * operadorMulta.institucion.dias_multa_retraso,
|
||||
'd',
|
||||
);
|
||||
}
|
||||
fecha_fin.add(institucionInfraccion.dias_multa, 'd');
|
||||
nuevaMulta.fecha_fin = fecha_fin.toDate();
|
||||
// Guardo la información
|
||||
return this.repository.save(nuevaMulta).then((_) =>
|
||||
// Actualizo multas del usuario
|
||||
this.institucionUsuarioService.updateMulta(
|
||||
operadorMulta.institucion.id_institucion,
|
||||
prestamo.usuario.id_usuario,
|
||||
true,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
async multaExtemporanea(
|
||||
operador: Operador,
|
||||
id_prestamo: number,
|
||||
descripcion: string,
|
||||
id_institucion_infraccion: number,
|
||||
) {
|
||||
const prestamo =
|
||||
typeof id_prestamo === 'number'
|
||||
? await this.prestamoService.findById(id_prestamo)
|
||||
: id_prestamo;
|
||||
const operador =
|
||||
typeof id_operador === 'number'
|
||||
? await this.operadorService.findById(id_operador)
|
||||
: id_operador;
|
||||
// Creo registro de multa
|
||||
const nuevaMulta = this.repository.create({
|
||||
descripcion,
|
||||
fecha_inicio: ahora.toDate(),
|
||||
operadorMulta: operador,
|
||||
prestamo,
|
||||
});
|
||||
let institucionInfraccion = id_institucion_infraccion
|
||||
? await this.institucionInfraccionService.findById(
|
||||
id_institucion_infraccion,
|
||||
)
|
||||
: null;
|
||||
|
||||
// Valido que este prestamo no haya sido cancelado poer el usuario u operador
|
||||
if (prestamo.cancelado_operador || prestamo.cancelado_usuario)
|
||||
throw new ConflictException(
|
||||
'No se puede multar a un usuario con un préstamo que fue cancelado.',
|
||||
const institucionInfraccion =
|
||||
await this.institucionInfraccionService.findById(
|
||||
id_institucion_infraccion,
|
||||
);
|
||||
// Si no se mando un id_institucion_infraccion
|
||||
if (!institucionInfraccion) {
|
||||
// Si tampoco se mando retraso saco error
|
||||
if (!retraso)
|
||||
throw new ConflictException(
|
||||
'No se mandó ningún motivo para multar a este alumno.',
|
||||
);
|
||||
// Asigno institucionInfraccion "Sin multa" por default
|
||||
institucionInfraccion =
|
||||
await this.institucionInfraccionService.findSinInfraccion(
|
||||
operador.institucion,
|
||||
);
|
||||
}
|
||||
const fecha_fin = moment();
|
||||
|
||||
// Valido que este prestamo le pertenezca al operador
|
||||
if (
|
||||
operador.institucion.id_institucion !=
|
||||
prestamo.equipo.carrito.modulo.institucion.id_institucion
|
||||
)
|
||||
throw new ConflictException(
|
||||
'Este préstamo no pertenece a esta institución.',
|
||||
);
|
||||
this.validacionMultaCancelacion(prestamo);
|
||||
fecha_fin.add(institucionInfraccion.dias_multa, 'd');
|
||||
// Busco una multa con este préstamo
|
||||
return this.repository
|
||||
.findOne({ where: { prestamo } })
|
||||
.then((existeMulta) => {
|
||||
// Si existe saco error
|
||||
if (existeMulta)
|
||||
throw new ConflictException(
|
||||
'Ya existe una multa asignada a este préstamo.',
|
||||
);
|
||||
// Si hay retraso lo agrego a la multa
|
||||
if (retraso) {
|
||||
nuevaMulta.retraso = true;
|
||||
ahora.add(retraso * operador.institucion.dias_multa_retraso, 'd');
|
||||
}
|
||||
nuevaMulta.institucionInfraccion = institucionInfraccion;
|
||||
ahora.add(institucionInfraccion.dias_multa, 'd');
|
||||
nuevaMulta.fecha_fin = ahora.toDate();
|
||||
// Guardo la información
|
||||
return this.repository.save(nuevaMulta);
|
||||
})
|
||||
return this.findByPrestamo(prestamo)
|
||||
.then((_) =>
|
||||
// Creo y guardo registro
|
||||
this.repository.save(
|
||||
this.repository.create({
|
||||
descripcion,
|
||||
fecha_fin: fecha_fin.toDate(),
|
||||
fecha_inicio: moment().toDate(),
|
||||
institucionInfraccion,
|
||||
operadorMulta: operador,
|
||||
prestamo,
|
||||
}),
|
||||
),
|
||||
)
|
||||
.then((_) =>
|
||||
// Actualizo multas del usuario
|
||||
this.institucionUsuarioService.updateMulta(
|
||||
@@ -113,43 +142,48 @@ export class MultaService {
|
||||
desactivarMultas() {
|
||||
const ahora = moment();
|
||||
|
||||
// Busco todas las multas desactivadas
|
||||
return this.repository
|
||||
.find({ where: { activo: true } })
|
||||
.find({
|
||||
join: {
|
||||
alias: 'mu',
|
||||
innerJoinAndSelect: { p: 'mu.prestamo', u: 'p.usuario' },
|
||||
},
|
||||
where: { activo: true },
|
||||
})
|
||||
.then(async (multas) => {
|
||||
//recorro todo el array
|
||||
for (let i = 0; i < multas.length; i++)
|
||||
// Si ya caducó
|
||||
if (ahora.diff(moment(multas[i].fecha_fin)) > 0) {
|
||||
const instituciones = multas[i].prestamo.usuario.instituciones;
|
||||
|
||||
// Desactivo multa
|
||||
multas[i].activo = false;
|
||||
await this.repository.save(multas[i]);
|
||||
for (let j = 0; j < instituciones.length; j++) {
|
||||
const institucionUsuario = instituciones[j];
|
||||
|
||||
if (
|
||||
institucionUsuario.institucionCarrera.institucion
|
||||
.id_institucion ===
|
||||
multas[i].operadorMulta.institucion.id_institucion
|
||||
) {
|
||||
institucionUsuario.multa = false;
|
||||
await this.institucionUsuarioService.save(institucionUsuario);
|
||||
}
|
||||
}
|
||||
// Guardo cambios
|
||||
await this.repository.save(multas[i]).then(() =>
|
||||
// Quito multas en institución usuario
|
||||
this.institucionUsuarioService.updateMulta(
|
||||
multas[i].operadorMulta.institucion.id_institucion,
|
||||
multas[i].prestamo.usuario.id_usuario,
|
||||
false,
|
||||
),
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async findFullInfoMultaAll(filtros: {
|
||||
pagina: string;
|
||||
id_institucion?: string;
|
||||
usuario?: string;
|
||||
}) {
|
||||
const institucion = filtros.id_institucion
|
||||
? await this.institucionService.findById(parseInt(filtros.id_institucion))
|
||||
: null;
|
||||
findAll(
|
||||
filtros: {
|
||||
pagina: string;
|
||||
nombre?: string;
|
||||
usuario?: string;
|
||||
},
|
||||
operador?: Operador,
|
||||
) {
|
||||
const busqueda: FindOptionsWhere<FullInformacionMultaView> = {};
|
||||
|
||||
if (filtros.nombre) busqueda.nombre = Like(`%${filtros.nombre}%`);
|
||||
if (filtros.usuario) busqueda.usuario = Like(`%${filtros.usuario}%`);
|
||||
if (institucion) busqueda.id_institucion = institucion.id_institucion;
|
||||
if (operador) busqueda.id_institucion = operador.institucion.id_institucion;
|
||||
return this.fullInformacionMultaView
|
||||
.findAndCount({
|
||||
where: busqueda,
|
||||
@@ -173,11 +207,14 @@ export class MultaService {
|
||||
});
|
||||
}
|
||||
|
||||
findAllByIdEquipo(id_equipo: number, pagina: number) {
|
||||
findAllByIdEquipo(operador: Operador, id_equipo: number, pagina: number) {
|
||||
return this.equipoService.findById(id_equipo).then((equipo) =>
|
||||
this.fullInformacionMultaView
|
||||
.findAndCount({
|
||||
where: { id_equipo: equipo.id_equipo },
|
||||
where: {
|
||||
id_equipo: equipo.id_equipo,
|
||||
id_institucion: operador.institucion.id_institucion,
|
||||
},
|
||||
skip: (pagina - 1) * 25,
|
||||
take: 25,
|
||||
})
|
||||
@@ -193,11 +230,14 @@ export class MultaService {
|
||||
);
|
||||
}
|
||||
|
||||
findAllByIdUsuario(id_usuario: number, pagina: number) {
|
||||
findAllByIdUsuario(operador: Operador, id_usuario: number, pagina: number) {
|
||||
return this.usuarioService.findById(id_usuario).then((usuario) =>
|
||||
this.fullInformacionMultaView
|
||||
.findAndCount({
|
||||
where: { id_usuario: usuario.id_usuario },
|
||||
where: {
|
||||
id_usuario: usuario.id_usuario,
|
||||
id_institucion: operador.institucion.id_institucion,
|
||||
},
|
||||
skip: (pagina - 1) * 25,
|
||||
take: 25,
|
||||
})
|
||||
@@ -213,19 +253,29 @@ export class MultaService {
|
||||
);
|
||||
}
|
||||
|
||||
findMultasActivas(id_usuario: number) {
|
||||
return this.usuarioService.findById(id_usuario).then((usuario) =>
|
||||
this.repository
|
||||
.createQueryBuilder('mu')
|
||||
.innerJoin('mu.prestamo', 'p')
|
||||
.innerJoin('p.usuario', 'u', 'u.id_usuario = :id_usuario', {
|
||||
id_usuario: usuario.id_usuario,
|
||||
})
|
||||
.innerJoinAndSelect('mu.institucionInfraccion', 'ii')
|
||||
.innerJoinAndSelect('ii.institucion', 'i')
|
||||
.andWhere('mu.activo = 1')
|
||||
.getMany(),
|
||||
);
|
||||
findByPrestamo(prestamo: Prestamo) {
|
||||
return this.repository
|
||||
.findOne({ select: ['id_multa'], where: { prestamo } })
|
||||
.then((existeMulta) => {
|
||||
if (existeMulta)
|
||||
throw new ConflictException(
|
||||
'Ya existe una multa asignada a este préstamo.',
|
||||
);
|
||||
return existeMulta;
|
||||
});
|
||||
}
|
||||
|
||||
findMultasActivas(usuario: Usuario) {
|
||||
return this.repository
|
||||
.createQueryBuilder('mu')
|
||||
.innerJoin('mu.prestamo', 'p')
|
||||
.innerJoin('p.usuario', 'u', 'u.id_usuario = :id_usuario', {
|
||||
id_usuario: usuario.id_usuario,
|
||||
})
|
||||
.innerJoinAndSelect('mu.institucionInfraccion', 'ii')
|
||||
.innerJoinAndSelect('ii.institucion', 'i')
|
||||
.andWhere('mu.activo = 1')
|
||||
.getMany();
|
||||
}
|
||||
|
||||
private fullViewToMulta(infoMulta: FullInformacionMultaView) {
|
||||
@@ -262,15 +312,22 @@ export class MultaService {
|
||||
});
|
||||
}
|
||||
|
||||
async quitarMulta(id_institucion_usuario: number) {
|
||||
private validacionMultaCancelacion(prestamo: Prestamo) {
|
||||
// Valido que este prestamo no haya sido cancelado poer el usuario u operador
|
||||
if (prestamo.cancelado_operador || prestamo.cancelado_usuario)
|
||||
throw new ConflictException(
|
||||
'No se puede multar a un usuario con un préstamo que fue cancelado.',
|
||||
);
|
||||
}
|
||||
|
||||
async quitarMulta(admin: Operador, id_institucion_usuario: number) {
|
||||
const institucionUsuario = await this.institucionUsuarioService.findById(
|
||||
id_institucion_usuario,
|
||||
);
|
||||
|
||||
return this.repository
|
||||
const multa = await this.repository
|
||||
.createQueryBuilder('mu')
|
||||
.innerJoin('mu.prestamo', 'p')
|
||||
.innerJoin('p.usuario', 'u')
|
||||
.innerJoinAndSelect('mu.prestamo', 'p')
|
||||
.innerJoinAndSelect('p.usuario', 'u')
|
||||
.innerJoin(
|
||||
'u.instituciones',
|
||||
'is',
|
||||
@@ -278,17 +335,22 @@ export class MultaService {
|
||||
{ id_institucion_usuario: institucionUsuario.id_institucion_usuario },
|
||||
)
|
||||
.where('mu.activo = 1')
|
||||
.getOne()
|
||||
.then((multa) => {
|
||||
if (!multa)
|
||||
throw new ConflictException(
|
||||
'Este usuario no tiene una multa activa en esta institución.',
|
||||
);
|
||||
multa.activo = false;
|
||||
institucionUsuario.multa = false;
|
||||
return this.repository.save(multa);
|
||||
})
|
||||
.then((_) => this.institucionUsuarioService.save(institucionUsuario))
|
||||
.getOne();
|
||||
|
||||
if (!multa)
|
||||
throw new ConflictException(
|
||||
'Este usuario no tiene una multa activa en esta institución.',
|
||||
);
|
||||
multa.activo = false;
|
||||
return this.repository
|
||||
.save(multa)
|
||||
.then((_) =>
|
||||
this.institucionUsuarioService.updateMulta(
|
||||
admin.institucion.id_institucion,
|
||||
multa.prestamo.usuario.id_usuario,
|
||||
false,
|
||||
),
|
||||
)
|
||||
.then((_) => ({ message: 'Se guardaron los cambios correctamente.' }));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user