listo multa
This commit is contained in:
parent
9b5665b3e4
commit
18c899267a
@ -1,6 +0,0 @@
|
|||||||
import { IsNumberString } from 'class-validator';
|
|
||||||
|
|
||||||
export class IdUsuarioDto {
|
|
||||||
@IsNumberString()
|
|
||||||
id_usuario: string;
|
|
||||||
}
|
|
@ -194,6 +194,7 @@ export class InstitucionUsuarioService {
|
|||||||
institucionesUsuario[i].multa = status;
|
institucionesUsuario[i].multa = status;
|
||||||
await this.repository.save(institucionesUsuario[i]);
|
await this.repository.save(institucionesUsuario[i]);
|
||||||
}
|
}
|
||||||
|
return { message: 'Se multó correctamente a este usuario' };
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,12 +9,13 @@ export class MultasDto {
|
|||||||
@IsNumberString()
|
@IsNumberString()
|
||||||
pagina: string;
|
pagina: string;
|
||||||
|
|
||||||
@IsNumberString()
|
|
||||||
@IsOptional()
|
|
||||||
id_institucion?: string;
|
|
||||||
|
|
||||||
@IsString()
|
@IsString()
|
||||||
@IsNotEmpty()
|
@IsNotEmpty()
|
||||||
@IsOptional()
|
@IsOptional()
|
||||||
usuario?: string;
|
usuario?: string;
|
||||||
|
|
||||||
|
@IsString()
|
||||||
|
@IsNotEmpty()
|
||||||
|
@IsOptional()
|
||||||
|
nombre?: string;
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,6 @@ import { MultaService } from './multa.service';
|
|||||||
import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service';
|
import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service';
|
||||||
import { Operador } from '../operador/entity/operador.entity';
|
import { Operador } from '../operador/entity/operador.entity';
|
||||||
import { Usuario } from '../usuario/entity/usuario.entity';
|
import { Usuario } from '../usuario/entity/usuario.entity';
|
||||||
import { IdUsuarioDto } from '../dto/input/id-usuario.dto';
|
|
||||||
import { IdEquipoPaginaDto } from '../dto/input/id-equipo-pagina.dto';
|
import { IdEquipoPaginaDto } from '../dto/input/id-equipo-pagina.dto';
|
||||||
import { MultarDto } from './dto/input/multar.dto';
|
import { MultarDto } from './dto/input/multar.dto';
|
||||||
import { MultasDto } from './dto/input/multas.dto';
|
import { MultasDto } from './dto/input/multas.dto';
|
||||||
@ -62,11 +61,10 @@ export class MultaController {
|
|||||||
const operador: Operador = req.user.operador;
|
const operador: Operador = req.user.operador;
|
||||||
|
|
||||||
this.validarUsuarioService.validarAdminOperador(operador);
|
this.validarUsuarioService.validarAdminOperador(operador);
|
||||||
return this.multaService.create(
|
return this.multaService.multaExtemporanea(
|
||||||
body.id_prestamo,
|
|
||||||
operador,
|
operador,
|
||||||
|
body.id_prestamo,
|
||||||
body.descripcion,
|
body.descripcion,
|
||||||
null,
|
|
||||||
body.id_institucion_infraccion,
|
body.id_institucion_infraccion,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -100,7 +98,7 @@ export class MultaController {
|
|||||||
const operador: Operador = req.user.operador;
|
const operador: Operador = req.user.operador;
|
||||||
|
|
||||||
this.validarUsuarioService.validarAdminOperador(operador);
|
this.validarUsuarioService.validarAdminOperador(operador);
|
||||||
return this.multaService.findFullInfoMultaAll(query);
|
return this.multaService.findAll(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Serealize(MultasEquipoOutputDto)
|
@Serealize(MultasEquipoOutputDto)
|
||||||
@ -125,6 +123,7 @@ export class MultaController {
|
|||||||
|
|
||||||
this.validarUsuarioService.validarAdminOperador(operador);
|
this.validarUsuarioService.validarAdminOperador(operador);
|
||||||
return this.multaService.findAllByIdEquipo(
|
return this.multaService.findAllByIdEquipo(
|
||||||
|
operador,
|
||||||
parseInt(query.id_equipo),
|
parseInt(query.id_equipo),
|
||||||
parseInt(query.pagina),
|
parseInt(query.pagina),
|
||||||
);
|
);
|
||||||
@ -152,6 +151,7 @@ export class MultaController {
|
|||||||
|
|
||||||
this.validarUsuarioService.validarAdminOperador(operador);
|
this.validarUsuarioService.validarAdminOperador(operador);
|
||||||
return this.multaService.findAllByIdUsuario(
|
return this.multaService.findAllByIdUsuario(
|
||||||
|
operador,
|
||||||
parseInt(query.id_usuario),
|
parseInt(query.id_usuario),
|
||||||
parseInt(query.pagina),
|
parseInt(query.pagina),
|
||||||
);
|
);
|
||||||
@ -170,11 +170,11 @@ export class MultaController {
|
|||||||
name: 'id_usuario',
|
name: 'id_usuario',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
})
|
})
|
||||||
multasActivas(@Request() req, @Query() query: IdUsuarioDto) {
|
multasActivas(@Request() req) {
|
||||||
const usuario: Usuario = req.user.usuario;
|
const usuario: Usuario = req.user.usuario;
|
||||||
|
|
||||||
this.validarUsuarioService.validarUsuario(usuario);
|
this.validarUsuarioService.validarUsuario(usuario);
|
||||||
return this.multaService.findMultasActivas(parseInt(query.id_usuario));
|
return this.multaService.findMultasActivas(usuario);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Serealize(MessageOutputDto)
|
@Serealize(MessageOutputDto)
|
||||||
@ -193,7 +193,7 @@ export class MultaController {
|
|||||||
const admin: Operador = req.user.operador;
|
const admin: Operador = req.user.operador;
|
||||||
|
|
||||||
this.validarUsuarioService.validarAdmin(admin);
|
this.validarUsuarioService.validarAdmin(admin);
|
||||||
return this.multaService.quitarMulta(body.id_institucion_usuario);
|
return this.multaService.quitarMulta(admin, body.id_institucion_usuario);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Get('reporte')
|
// @Get('reporte')
|
||||||
|
@ -7,10 +7,8 @@ import { Multa } from './entity/multa.entity';
|
|||||||
import { FullInformacionMultaView } from './entity/views/full-informacion-multa.view';
|
import { FullInformacionMultaView } from './entity/views/full-informacion-multa.view';
|
||||||
import { InformacionMultaView } from './entity/views/informacion-multa.view';
|
import { InformacionMultaView } from './entity/views/informacion-multa.view';
|
||||||
import { EquipoModule } from '../equipo/equipo.module';
|
import { EquipoModule } from '../equipo/equipo.module';
|
||||||
import { InstitucionModule } from '../institucion/institucion.module';
|
|
||||||
import { InstitucionInfraccionModule } from '../institucion-infraccion/institucion-infraccion.module';
|
import { InstitucionInfraccionModule } from '../institucion-infraccion/institucion-infraccion.module';
|
||||||
import { InstitucionUsuarioModule } from '../institucion-usuario/institucion-usuario.module';
|
import { InstitucionUsuarioModule } from '../institucion-usuario/institucion-usuario.module';
|
||||||
import { OperadorModule } from '../operador/operador.module';
|
|
||||||
import { PrestamoModule } from '../prestamo/prestamo.module';
|
import { PrestamoModule } from '../prestamo/prestamo.module';
|
||||||
import { UsuarioModule } from '../usuario/usuario.module';
|
import { UsuarioModule } from '../usuario/usuario.module';
|
||||||
import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module';
|
import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module';
|
||||||
@ -18,12 +16,11 @@ import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'
|
|||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
EquipoModule,
|
EquipoModule,
|
||||||
InstitucionModule,
|
|
||||||
InstitucionInfraccionModule,
|
InstitucionInfraccionModule,
|
||||||
InstitucionUsuarioModule,
|
InstitucionUsuarioModule,
|
||||||
PassportModule.register({ defaultStrategy: 'jwt' }),
|
PassportModule.register({ defaultStrategy: 'jwt' }),
|
||||||
forwardRef(() => PrestamoModule),
|
forwardRef(() => PrestamoModule),
|
||||||
OperadorModule,
|
|
||||||
TypeOrmModule.forFeature([
|
TypeOrmModule.forFeature([
|
||||||
Multa,
|
Multa,
|
||||||
FullInformacionMultaView,
|
FullInformacionMultaView,
|
||||||
|
@ -7,11 +7,10 @@ import { FullInformacionMultaView } from './entity/views/full-informacion-multa.
|
|||||||
import { InformacionMultaView } from './entity/views/informacion-multa.view';
|
import { InformacionMultaView } from './entity/views/informacion-multa.view';
|
||||||
import { Operador } from '../operador/entity/operador.entity';
|
import { Operador } from '../operador/entity/operador.entity';
|
||||||
import { Prestamo } from '../prestamo/entity/prestamo.entity';
|
import { Prestamo } from '../prestamo/entity/prestamo.entity';
|
||||||
|
import { Usuario } from '../usuario/entity/usuario.entity';
|
||||||
import { EquipoService } from '../equipo/equipo.service';
|
import { EquipoService } from '../equipo/equipo.service';
|
||||||
import { InstitucionService } from '../institucion/institucion.service';
|
|
||||||
import { InstitucionInfraccionService } from '../institucion-infraccion/institucion-infraccion.service';
|
import { InstitucionInfraccionService } from '../institucion-infraccion/institucion-infraccion.service';
|
||||||
import { InstitucionUsuarioService } from '../institucion-usuario/institucion-usuario.service';
|
import { InstitucionUsuarioService } from '../institucion-usuario/institucion-usuario.service';
|
||||||
import { OperadorService } from '../operador/operador.service';
|
|
||||||
import { PrestamoService } from '../prestamo/prestamo.service';
|
import { PrestamoService } from '../prestamo/prestamo.service';
|
||||||
import { UsuarioService } from '../usuario/usuario.service';
|
import { UsuarioService } from '../usuario/usuario.service';
|
||||||
|
|
||||||
@ -24,82 +23,112 @@ export class MultaService {
|
|||||||
@InjectRepository(InformacionMultaView)
|
@InjectRepository(InformacionMultaView)
|
||||||
private informacionMultaView: Repository<InformacionMultaView>,
|
private informacionMultaView: Repository<InformacionMultaView>,
|
||||||
private equipoService: EquipoService,
|
private equipoService: EquipoService,
|
||||||
private institucionService: InstitucionService,
|
|
||||||
private institucionInfraccionService: InstitucionInfraccionService,
|
private institucionInfraccionService: InstitucionInfraccionService,
|
||||||
private institucionUsuarioService: InstitucionUsuarioService,
|
private institucionUsuarioService: InstitucionUsuarioService,
|
||||||
private operadorService: OperadorService,
|
|
||||||
private prestamoService: PrestamoService,
|
private prestamoService: PrestamoService,
|
||||||
private usuarioService: UsuarioService,
|
private usuarioService: UsuarioService,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
async create(
|
async create(
|
||||||
id_prestamo: number | Prestamo,
|
operadorMulta: Operador,
|
||||||
id_operador: number | Operador,
|
prestamo: Prestamo,
|
||||||
descripcion: string,
|
descripcion: string,
|
||||||
retraso?: number,
|
retraso?: number,
|
||||||
id_institucion_infraccion?: number,
|
id_institucion_infraccion?: number,
|
||||||
) {
|
) {
|
||||||
console.log('hola1');
|
const institucionInfraccion = id_institucion_infraccion
|
||||||
const ahora = moment();
|
? 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 =
|
const prestamo =
|
||||||
typeof id_prestamo === 'number'
|
typeof id_prestamo === 'number'
|
||||||
? await this.prestamoService.findById(id_prestamo)
|
? await this.prestamoService.findById(id_prestamo)
|
||||||
: id_prestamo;
|
: id_prestamo;
|
||||||
const operador =
|
const institucionInfraccion =
|
||||||
typeof id_operador === 'number'
|
await this.institucionInfraccionService.findById(
|
||||||
? await this.operadorService.findById(id_operador)
|
id_institucion_infraccion,
|
||||||
: 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.',
|
|
||||||
);
|
);
|
||||||
// Si no se mando un id_institucion_infraccion
|
const fecha_fin = moment();
|
||||||
if (!institucionInfraccion) {
|
|
||||||
// Si tampoco se mando retraso saco error
|
// Valido que este prestamo le pertenezca al operador
|
||||||
if (!retraso)
|
if (
|
||||||
throw new ConflictException(
|
operador.institucion.id_institucion !=
|
||||||
'No se mandó ningún motivo para multar a este alumno.',
|
prestamo.equipo.carrito.modulo.institucion.id_institucion
|
||||||
);
|
)
|
||||||
// Asigno institucionInfraccion "Sin multa" por default
|
throw new ConflictException(
|
||||||
institucionInfraccion =
|
'Este préstamo no pertenece a esta institución.',
|
||||||
await this.institucionInfraccionService.findSinInfraccion(
|
);
|
||||||
operador.institucion,
|
this.validacionMultaCancelacion(prestamo);
|
||||||
);
|
fecha_fin.add(institucionInfraccion.dias_multa, 'd');
|
||||||
}
|
|
||||||
// Busco una multa con este préstamo
|
// Busco una multa con este préstamo
|
||||||
return this.repository
|
return this.findByPrestamo(prestamo)
|
||||||
.findOne({ where: { prestamo } })
|
.then((_) =>
|
||||||
.then((existeMulta) => {
|
// Creo y guardo registro
|
||||||
// Si existe saco error
|
this.repository.save(
|
||||||
if (existeMulta)
|
this.repository.create({
|
||||||
throw new ConflictException(
|
descripcion,
|
||||||
'Ya existe una multa asignada a este préstamo.',
|
fecha_fin: fecha_fin.toDate(),
|
||||||
);
|
fecha_inicio: moment().toDate(),
|
||||||
// Si hay retraso lo agrego a la multa
|
institucionInfraccion,
|
||||||
if (retraso) {
|
operadorMulta: operador,
|
||||||
nuevaMulta.retraso = true;
|
prestamo,
|
||||||
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);
|
|
||||||
})
|
|
||||||
.then((_) =>
|
.then((_) =>
|
||||||
// Actualizo multas del usuario
|
// Actualizo multas del usuario
|
||||||
this.institucionUsuarioService.updateMulta(
|
this.institucionUsuarioService.updateMulta(
|
||||||
@ -113,43 +142,48 @@ export class MultaService {
|
|||||||
desactivarMultas() {
|
desactivarMultas() {
|
||||||
const ahora = moment();
|
const ahora = moment();
|
||||||
|
|
||||||
|
// Busco todas las multas desactivadas
|
||||||
return this.repository
|
return this.repository
|
||||||
.find({ where: { activo: true } })
|
.find({
|
||||||
|
join: {
|
||||||
|
alias: 'mu',
|
||||||
|
innerJoinAndSelect: { p: 'mu.prestamo', u: 'p.usuario' },
|
||||||
|
},
|
||||||
|
where: { activo: true },
|
||||||
|
})
|
||||||
.then(async (multas) => {
|
.then(async (multas) => {
|
||||||
|
//recorro todo el array
|
||||||
for (let i = 0; i < multas.length; i++)
|
for (let i = 0; i < multas.length; i++)
|
||||||
|
// Si ya caducó
|
||||||
if (ahora.diff(moment(multas[i].fecha_fin)) > 0) {
|
if (ahora.diff(moment(multas[i].fecha_fin)) > 0) {
|
||||||
const instituciones = multas[i].prestamo.usuario.instituciones;
|
// Desactivo multa
|
||||||
|
|
||||||
multas[i].activo = false;
|
multas[i].activo = false;
|
||||||
await this.repository.save(multas[i]);
|
// Guardo cambios
|
||||||
for (let j = 0; j < instituciones.length; j++) {
|
await this.repository.save(multas[i]).then(() =>
|
||||||
const institucionUsuario = instituciones[j];
|
// Quito multas en institución usuario
|
||||||
|
this.institucionUsuarioService.updateMulta(
|
||||||
if (
|
multas[i].operadorMulta.institucion.id_institucion,
|
||||||
institucionUsuario.institucionCarrera.institucion
|
multas[i].prestamo.usuario.id_usuario,
|
||||||
.id_institucion ===
|
false,
|
||||||
multas[i].operadorMulta.institucion.id_institucion
|
),
|
||||||
) {
|
);
|
||||||
institucionUsuario.multa = false;
|
|
||||||
await this.institucionUsuarioService.save(institucionUsuario);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async findFullInfoMultaAll(filtros: {
|
findAll(
|
||||||
pagina: string;
|
filtros: {
|
||||||
id_institucion?: string;
|
pagina: string;
|
||||||
usuario?: string;
|
nombre?: string;
|
||||||
}) {
|
usuario?: string;
|
||||||
const institucion = filtros.id_institucion
|
},
|
||||||
? await this.institucionService.findById(parseInt(filtros.id_institucion))
|
operador?: Operador,
|
||||||
: null;
|
) {
|
||||||
const busqueda: FindOptionsWhere<FullInformacionMultaView> = {};
|
const busqueda: FindOptionsWhere<FullInformacionMultaView> = {};
|
||||||
|
|
||||||
|
if (filtros.nombre) busqueda.nombre = Like(`%${filtros.nombre}%`);
|
||||||
if (filtros.usuario) busqueda.usuario = Like(`%${filtros.usuario}%`);
|
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
|
return this.fullInformacionMultaView
|
||||||
.findAndCount({
|
.findAndCount({
|
||||||
where: busqueda,
|
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) =>
|
return this.equipoService.findById(id_equipo).then((equipo) =>
|
||||||
this.fullInformacionMultaView
|
this.fullInformacionMultaView
|
||||||
.findAndCount({
|
.findAndCount({
|
||||||
where: { id_equipo: equipo.id_equipo },
|
where: {
|
||||||
|
id_equipo: equipo.id_equipo,
|
||||||
|
id_institucion: operador.institucion.id_institucion,
|
||||||
|
},
|
||||||
skip: (pagina - 1) * 25,
|
skip: (pagina - 1) * 25,
|
||||||
take: 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) =>
|
return this.usuarioService.findById(id_usuario).then((usuario) =>
|
||||||
this.fullInformacionMultaView
|
this.fullInformacionMultaView
|
||||||
.findAndCount({
|
.findAndCount({
|
||||||
where: { id_usuario: usuario.id_usuario },
|
where: {
|
||||||
|
id_usuario: usuario.id_usuario,
|
||||||
|
id_institucion: operador.institucion.id_institucion,
|
||||||
|
},
|
||||||
skip: (pagina - 1) * 25,
|
skip: (pagina - 1) * 25,
|
||||||
take: 25,
|
take: 25,
|
||||||
})
|
})
|
||||||
@ -213,19 +253,29 @@ export class MultaService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
findMultasActivas(id_usuario: number) {
|
findByPrestamo(prestamo: Prestamo) {
|
||||||
return this.usuarioService.findById(id_usuario).then((usuario) =>
|
return this.repository
|
||||||
this.repository
|
.findOne({ select: ['id_multa'], where: { prestamo } })
|
||||||
.createQueryBuilder('mu')
|
.then((existeMulta) => {
|
||||||
.innerJoin('mu.prestamo', 'p')
|
if (existeMulta)
|
||||||
.innerJoin('p.usuario', 'u', 'u.id_usuario = :id_usuario', {
|
throw new ConflictException(
|
||||||
id_usuario: usuario.id_usuario,
|
'Ya existe una multa asignada a este préstamo.',
|
||||||
})
|
);
|
||||||
.innerJoinAndSelect('mu.institucionInfraccion', 'ii')
|
return existeMulta;
|
||||||
.innerJoinAndSelect('ii.institucion', 'i')
|
});
|
||||||
.andWhere('mu.activo = 1')
|
}
|
||||||
.getMany(),
|
|
||||||
);
|
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) {
|
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(
|
const institucionUsuario = await this.institucionUsuarioService.findById(
|
||||||
id_institucion_usuario,
|
id_institucion_usuario,
|
||||||
);
|
);
|
||||||
|
const multa = await this.repository
|
||||||
return this.repository
|
|
||||||
.createQueryBuilder('mu')
|
.createQueryBuilder('mu')
|
||||||
.innerJoin('mu.prestamo', 'p')
|
.innerJoinAndSelect('mu.prestamo', 'p')
|
||||||
.innerJoin('p.usuario', 'u')
|
.innerJoinAndSelect('p.usuario', 'u')
|
||||||
.innerJoin(
|
.innerJoin(
|
||||||
'u.instituciones',
|
'u.instituciones',
|
||||||
'is',
|
'is',
|
||||||
@ -278,17 +335,22 @@ export class MultaService {
|
|||||||
{ id_institucion_usuario: institucionUsuario.id_institucion_usuario },
|
{ id_institucion_usuario: institucionUsuario.id_institucion_usuario },
|
||||||
)
|
)
|
||||||
.where('mu.activo = 1')
|
.where('mu.activo = 1')
|
||||||
.getOne()
|
.getOne();
|
||||||
.then((multa) => {
|
|
||||||
if (!multa)
|
if (!multa)
|
||||||
throw new ConflictException(
|
throw new ConflictException(
|
||||||
'Este usuario no tiene una multa activa en esta institución.',
|
'Este usuario no tiene una multa activa en esta institución.',
|
||||||
);
|
);
|
||||||
multa.activo = false;
|
multa.activo = false;
|
||||||
institucionUsuario.multa = false;
|
return this.repository
|
||||||
return this.repository.save(multa);
|
.save(multa)
|
||||||
})
|
.then((_) =>
|
||||||
.then((_) => this.institucionUsuarioService.save(institucionUsuario))
|
this.institucionUsuarioService.updateMulta(
|
||||||
|
admin.institucion.id_institucion,
|
||||||
|
multa.prestamo.usuario.id_usuario,
|
||||||
|
false,
|
||||||
|
),
|
||||||
|
)
|
||||||
.then((_) => ({ message: 'Se guardaron los cambios correctamente.' }));
|
.then((_) => ({ message: 'Se guardaron los cambios correctamente.' }));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -738,8 +738,8 @@ export class PrestamoService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async regresar(
|
async regresar(
|
||||||
prestamo: Prestamo,
|
|
||||||
operadorRegreso: Operador,
|
operadorRegreso: Operador,
|
||||||
|
prestamo: Prestamo,
|
||||||
id_status: number,
|
id_status: number,
|
||||||
motivo?: string,
|
motivo?: string,
|
||||||
descripcion?: string,
|
descripcion?: string,
|
||||||
@ -764,7 +764,6 @@ export class PrestamoService {
|
|||||||
);
|
);
|
||||||
if (id_institucion_infraccion && !descripcion)
|
if (id_institucion_infraccion && !descripcion)
|
||||||
throw new ConflictException('No se mandó la descripción de lo ocurrido.');
|
throw new ConflictException('No se mandó la descripción de lo ocurrido.');
|
||||||
console.log('HOLA');
|
|
||||||
prestamo.activo = false;
|
prestamo.activo = false;
|
||||||
prestamo.fecha_entrega = ahora.toDate();
|
prestamo.fecha_entrega = ahora.toDate();
|
||||||
prestamo.operadorRegreso = operadorRegreso;
|
prestamo.operadorRegreso = operadorRegreso;
|
||||||
@ -779,8 +778,8 @@ export class PrestamoService {
|
|||||||
// a motivo, y mandar la id_institucion_infraccion
|
// a motivo, y mandar la id_institucion_infraccion
|
||||||
if (id_institucion_infraccion)
|
if (id_institucion_infraccion)
|
||||||
await this.multaService.create(
|
await this.multaService.create(
|
||||||
prestamo,
|
|
||||||
operadorRegreso,
|
operadorRegreso,
|
||||||
|
prestamo,
|
||||||
`${mensajeTardanza} ${descripcion}`,
|
`${mensajeTardanza} ${descripcion}`,
|
||||||
semanasCastigo,
|
semanasCastigo,
|
||||||
id_institucion_infraccion,
|
id_institucion_infraccion,
|
||||||
@ -788,8 +787,8 @@ export class PrestamoService {
|
|||||||
// Multa normal
|
// Multa normal
|
||||||
else
|
else
|
||||||
await this.multaService.create(
|
await this.multaService.create(
|
||||||
prestamo,
|
|
||||||
operadorRegreso,
|
operadorRegreso,
|
||||||
|
prestamo,
|
||||||
mensajeTardanza,
|
mensajeTardanza,
|
||||||
semanasCastigo,
|
semanasCastigo,
|
||||||
);
|
);
|
||||||
@ -797,23 +796,16 @@ export class PrestamoService {
|
|||||||
// De lo contrario, si se mandó id_institucion_infraccion significa que
|
// De lo contrario, si se mandó id_institucion_infraccion significa que
|
||||||
// el usuario solo solo daño el equipo
|
// el usuario solo solo daño el equipo
|
||||||
await this.multaService.create(
|
await this.multaService.create(
|
||||||
prestamo,
|
|
||||||
operadorRegreso,
|
operadorRegreso,
|
||||||
|
prestamo,
|
||||||
descripcion,
|
descripcion,
|
||||||
null,
|
null,
|
||||||
id_institucion_infraccion,
|
id_institucion_infraccion,
|
||||||
);
|
);
|
||||||
console.log('hola');
|
// Guardo los cambios del equipo
|
||||||
// Guardo los cambios del préstamo
|
return this.equipoService
|
||||||
return this.repository
|
.updateStatus(prestamo.equipo, operadorRegreso, motivo)
|
||||||
.save(prestamo)
|
.then((_) => this.repository.save(prestamo)) // Guardo los cambios del préstamo
|
||||||
.then((_) =>
|
|
||||||
this.equipoService.updateStatus(
|
|
||||||
prestamo.equipo,
|
|
||||||
operadorRegreso,
|
|
||||||
motivo,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
.then((_) => {
|
.then((_) => {
|
||||||
// Actualizo la interfaz del usuario
|
// Actualizo la interfaz del usuario
|
||||||
this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario);
|
this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario);
|
||||||
@ -836,8 +828,8 @@ export class PrestamoService {
|
|||||||
// Busco el prestamo por id prestamo y luego regreso el equipo
|
// Busco el prestamo por id prestamo y luego regreso el equipo
|
||||||
return this.findById(id_prestamo).then((prestamo) =>
|
return this.findById(id_prestamo).then((prestamo) =>
|
||||||
this.regresar(
|
this.regresar(
|
||||||
prestamo,
|
|
||||||
operador,
|
operador,
|
||||||
|
prestamo,
|
||||||
id_status,
|
id_status,
|
||||||
motivo,
|
motivo,
|
||||||
descripcion,
|
descripcion,
|
||||||
@ -863,8 +855,8 @@ export class PrestamoService {
|
|||||||
numero_inventario,
|
numero_inventario,
|
||||||
).then((prestamo) =>
|
).then((prestamo) =>
|
||||||
this.regresar(
|
this.regresar(
|
||||||
prestamo,
|
|
||||||
operador,
|
operador,
|
||||||
|
prestamo,
|
||||||
id_status,
|
id_status,
|
||||||
motivo,
|
motivo,
|
||||||
descripcion,
|
descripcion,
|
||||||
@ -914,7 +906,7 @@ export class PrestamoService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
validacionOperadorPrestamo(
|
private validacionOperadorPrestamo(
|
||||||
prestamo: Prestamo,
|
prestamo: Prestamo,
|
||||||
operador: Operador,
|
operador: Operador,
|
||||||
modulo?: Modulo,
|
modulo?: Modulo,
|
||||||
|
Loading…
Reference in New Issue
Block a user