|
|
|
@@ -24,6 +24,7 @@ import { InstitucionUsuario } from '../institucion-usuario/entity/institucion-us
|
|
|
|
|
import { Modulo } from '../modulo/entity/modulo.entity';
|
|
|
|
|
import { Operador } from '../operador/entity/operador.entity';
|
|
|
|
|
import { Prestamo } from './entity/prestamo.entity';
|
|
|
|
|
import { Equipo } from '../equipo/entity/equipo.entity';
|
|
|
|
|
import { Usuario } from '../usuario/entity/usuario.entity';
|
|
|
|
|
import { FullInformacionPrestamoView } from './entity/views/full-informacion-prestamo.view';
|
|
|
|
|
import { PrestamoInformacionView } from './entity/views/prestamo-informacion.view';
|
|
|
|
@@ -39,6 +40,7 @@ import { ModuloService } from '../modulo/modulo.service';
|
|
|
|
|
import { MultaService } from '../multa/multa.service';
|
|
|
|
|
import { OperadorService } from '../operador/operador.service';
|
|
|
|
|
import { PasscodeService } from '../passcode/passcode.service';
|
|
|
|
|
import { StatusService } from '../status/status.service';
|
|
|
|
|
import { TipoUsuarioService } from '../tipo-usuario/tipo-usuario.service';
|
|
|
|
|
import { UsuarioService } from '../usuario/usuario.service';
|
|
|
|
|
|
|
|
|
@@ -66,6 +68,7 @@ export class PrestamoService {
|
|
|
|
|
private operadorService: OperadorService,
|
|
|
|
|
@Inject(forwardRef(() => PasscodeService))
|
|
|
|
|
private passcodeService: PasscodeService,
|
|
|
|
|
private statusService: StatusService,
|
|
|
|
|
private tipoUsuarioService: TipoUsuarioService,
|
|
|
|
|
private usuarioService: UsuarioService,
|
|
|
|
|
) {}
|
|
|
|
@@ -74,58 +77,61 @@ export class PrestamoService {
|
|
|
|
|
operadorRegreso: Operador,
|
|
|
|
|
id_prestamo: number,
|
|
|
|
|
motivo: string,
|
|
|
|
|
modulo: Modulo,
|
|
|
|
|
) {
|
|
|
|
|
modulo?: Modulo,
|
|
|
|
|
): Promise<{ message: string }> {
|
|
|
|
|
const ahora = moment();
|
|
|
|
|
const prestamo = await this.findById(id_prestamo);
|
|
|
|
|
|
|
|
|
|
this.validacionBasicaPrestamo(prestamo);
|
|
|
|
|
this.validacionOperadorPrestamo(prestamo, operadorRegreso, modulo);
|
|
|
|
|
// Desactivamos el préstamo
|
|
|
|
|
prestamo.activo = false;
|
|
|
|
|
prestamo.fecha_entrega = ahora.toDate();
|
|
|
|
|
prestamo.cancelado_operador = true;
|
|
|
|
|
prestamo.operadorRegreso = operadorRegreso;
|
|
|
|
|
// Validamos que el equipo si se la haya asignado al usuario del registro
|
|
|
|
|
if (prestamo.equipo.u === prestamo.usuario.id_usuario) {
|
|
|
|
|
// Reseteamos datos de equipo
|
|
|
|
|
prestamo.equipo.u = null;
|
|
|
|
|
prestamo.equipo.status.id_status = 6;
|
|
|
|
|
// Guardamos cambios en el equipo, y envio el motivo de cancelación
|
|
|
|
|
// Guardamos cambios en el equipo
|
|
|
|
|
await this.equipoService.updateStatus(
|
|
|
|
|
prestamo.equipo,
|
|
|
|
|
operadorRegreso,
|
|
|
|
|
motivo,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
// Guardamos cambios del prestamo
|
|
|
|
|
// Guardamos cambios en el préstamo
|
|
|
|
|
return this.repository.save(prestamo).then((_) => {
|
|
|
|
|
// Actualizo interfaz de usaurios
|
|
|
|
|
// Actualizamos la interfaz del usaurio
|
|
|
|
|
this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario);
|
|
|
|
|
this.appGateway.actualizarOperador(
|
|
|
|
|
operadorRegreso.institucion.id_institucion,
|
|
|
|
|
);
|
|
|
|
|
return { message: 'Se canceló correctamente este préstamo.' };
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async cancelarUsuario(usuario: Usuario) {
|
|
|
|
|
async cancelarUsuario(usuario: Usuario): Promise<{ message: string }> {
|
|
|
|
|
const ahora = moment();
|
|
|
|
|
const prestamo = await this.prestamoInfoByUsuario(usuario);
|
|
|
|
|
|
|
|
|
|
this.validacionBasicaPrestamo(prestamo);
|
|
|
|
|
// Sacamos error en status de equipo 3
|
|
|
|
|
// Desactivamos el préstamo
|
|
|
|
|
prestamo.activo = false;
|
|
|
|
|
prestamo.fecha_entrega = ahora.toDate();
|
|
|
|
|
prestamo.cancelado_usuario = true;
|
|
|
|
|
// Validamos que el equipo si se la haya asignado al usuario del registro
|
|
|
|
|
if (prestamo.equipo.u === usuario.id_usuario) {
|
|
|
|
|
// Sacamos error si el equipo ya esta en uso
|
|
|
|
|
if (prestamo.equipo.status.id_status === 3)
|
|
|
|
|
throw new ConflictException(
|
|
|
|
|
'No puedes cancelar este préstamo una vez que se te entregó el equipo.',
|
|
|
|
|
);
|
|
|
|
|
// Reseteamos datos de equipo
|
|
|
|
|
prestamo.equipo.u = null;
|
|
|
|
|
prestamo.equipo.status.id_status = 1;
|
|
|
|
|
// Guardamos cambios en el equipo
|
|
|
|
|
await this.equipoService.updateStatus(prestamo.equipo);
|
|
|
|
|
}
|
|
|
|
|
prestamo.activo = false;
|
|
|
|
|
prestamo.fecha_entrega = ahora.toDate();
|
|
|
|
|
prestamo.cancelado_usuario = true;
|
|
|
|
|
// Guardamos cambios del prestamo
|
|
|
|
|
// Guardamos cambios en el prestamo
|
|
|
|
|
return this.repository.save(prestamo).then((_) => {
|
|
|
|
|
// Actualizo interfaz de operador
|
|
|
|
|
this.appGateway.actualizarOperador(
|
|
|
|
@@ -141,20 +147,17 @@ export class PrestamoService {
|
|
|
|
|
id_tipo_carrito: number,
|
|
|
|
|
id_programa?: number,
|
|
|
|
|
id_tipo_entrada?: number,
|
|
|
|
|
) {
|
|
|
|
|
): Promise<Prestamo> {
|
|
|
|
|
const ahora = moment();
|
|
|
|
|
const ahoraStr = ahora.format('YYYY-MM-DD');
|
|
|
|
|
const sistema = { id_operador: 1 };
|
|
|
|
|
const modulo = await this.moduloService.findFullInfoById(id_modulo);
|
|
|
|
|
const tipoCarrito =
|
|
|
|
|
await this.institucionTipoCarritoService.findTipoCarritoById(
|
|
|
|
|
id_tipo_carrito,
|
|
|
|
|
);
|
|
|
|
|
const institucionDia =
|
|
|
|
|
await this.institucionDiaService.findByInstitucionDia(
|
|
|
|
|
modulo.institucion,
|
|
|
|
|
ahora.weekday(),
|
|
|
|
|
);
|
|
|
|
|
const institucionDia = await this.institucionDiaService.hoy(
|
|
|
|
|
modulo.institucion,
|
|
|
|
|
);
|
|
|
|
|
const horaMin = institucionDia
|
|
|
|
|
? moment(`${ahoraStr} ${institucionDia.hora_inicio}`)
|
|
|
|
|
: null;
|
|
|
|
@@ -170,15 +173,12 @@ export class PrestamoService {
|
|
|
|
|
)
|
|
|
|
|
: null;
|
|
|
|
|
|
|
|
|
|
// Validamos que no sea domingo
|
|
|
|
|
if (ahora.weekday() === 0)
|
|
|
|
|
throw new ConflictException('No hay servicio los días domingo.');
|
|
|
|
|
// Validamos si ese día se encuentra activo
|
|
|
|
|
if (!institucionDia.activo)
|
|
|
|
|
throw new ConflictException(
|
|
|
|
|
'El día de hoy no hay servicio de préstamo de equipos.',
|
|
|
|
|
);
|
|
|
|
|
// Si ahora es menor a horaMin significa que aun no inicio el horario de serivicio
|
|
|
|
|
// Si ahora es menor a horaMin significa que aun no inicia el horario de serivicio
|
|
|
|
|
if (ahora < horaMin)
|
|
|
|
|
throw new ConflictException(
|
|
|
|
|
`El servicio inicia a las ${institucionDia.hora_inicio} el día de hoy.`,
|
|
|
|
@@ -188,7 +188,7 @@ export class PrestamoService {
|
|
|
|
|
throw new ConflictException(
|
|
|
|
|
`El servicio terminó a las ${institucionDia.hora_extra} el día de hoy.`,
|
|
|
|
|
);
|
|
|
|
|
// Recorro el array de horasExcepcion del día en cuestión
|
|
|
|
|
// Recorremos el array de horasExcepcion del día de hoy
|
|
|
|
|
for (let i = 0; i < institucionDia.horasExcepcion.length; i++) {
|
|
|
|
|
const horaFin = moment(
|
|
|
|
|
`${ahoraStr} ${institucionDia.horasExcepcion[i].hora_fin}`,
|
|
|
|
@@ -197,14 +197,13 @@ export class PrestamoService {
|
|
|
|
|
`${ahoraStr} ${institucionDia.horasExcepcion[i].hora_inicio}`,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// Si ahora esta entre horaInicio y horaFin significa que no hay servicio de préstamos
|
|
|
|
|
// temporalmente
|
|
|
|
|
// Si ahora esta entre horaInicio y horaFin significa que no hay servicio de préstamos temporalmente
|
|
|
|
|
if (ahora > horaInicio && ahora < horaFin)
|
|
|
|
|
throw new ConflictException(
|
|
|
|
|
`Se suspendió el servicio de préstamo temporalmente de ${institucionDia.horasExcepcion[i].hora_inicio} a ${institucionDia.horasExcepcion[i].hora_fin}.`,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
// Buscamos instituciones activas y sin multa de este usuario
|
|
|
|
|
// Buscamos las instituciones usuario de este usuario
|
|
|
|
|
return this.institucionUsuarioService
|
|
|
|
|
.findFullInfoAllByIdUsuario(usuario, false)
|
|
|
|
|
.then((instituciones) => {
|
|
|
|
@@ -230,27 +229,27 @@ export class PrestamoService {
|
|
|
|
|
);
|
|
|
|
|
})
|
|
|
|
|
.then((equipo) =>
|
|
|
|
|
// Genero el registro y lo guardo
|
|
|
|
|
// Creamos y guardamos un registro
|
|
|
|
|
this.repository.save(
|
|
|
|
|
this.repository.create({
|
|
|
|
|
equipo,
|
|
|
|
|
fecha_inicio: ahora.toDate(),
|
|
|
|
|
hora_max_recoger: ahora
|
|
|
|
|
.add(modulo.institucion.tiempo_recoger, 'm')
|
|
|
|
|
.toDate(),
|
|
|
|
|
operadorEntrega: sistema,
|
|
|
|
|
operadorRegreso: sistema,
|
|
|
|
|
equipo,
|
|
|
|
|
usuario,
|
|
|
|
|
}),
|
|
|
|
|
),
|
|
|
|
|
)
|
|
|
|
|
.then((prestamo) => {
|
|
|
|
|
// Actualizo la interfaz del operador
|
|
|
|
|
// Actualizamos la interfaz del operador
|
|
|
|
|
this.appGateway.actualizarOperador(modulo.institucion.id_institucion);
|
|
|
|
|
// Si es locker
|
|
|
|
|
if (
|
|
|
|
|
prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito === 4 ||
|
|
|
|
|
prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito === 5
|
|
|
|
|
)
|
|
|
|
|
// Creamos un passcode
|
|
|
|
|
return this.passcodeService
|
|
|
|
|
.create(prestamo)
|
|
|
|
|
.then((passcode) => ({ ...prestamo, passcode: passcode.passcode }));
|
|
|
|
@@ -258,51 +257,17 @@ export class PrestamoService {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async findAllActivosExpirados(): Promise<Prestamo[]> {
|
|
|
|
|
return this.informacionPrestamoView
|
|
|
|
|
.find({
|
|
|
|
|
where: {
|
|
|
|
|
activo: 1,
|
|
|
|
|
hora_max_recoger: LessThanOrEqual(moment().toDate()),
|
|
|
|
|
id_status: 2,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
.then((infoPrestamos) => {
|
|
|
|
|
const prestamos: Prestamo[] = [];
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < infoPrestamos.length; i++)
|
|
|
|
|
prestamos.push(this.viewToPrestamo(infoPrestamos[i]));
|
|
|
|
|
return prestamos;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async findAllEquiposRepetidos(): Promise<Prestamo[]> {
|
|
|
|
|
return this.informacionPrestamoView
|
|
|
|
|
.createQueryBuilder('ipv')
|
|
|
|
|
.where('activo = 1 AND id_usuario != u')
|
|
|
|
|
.getMany()
|
|
|
|
|
.then((infoPrestamos) => {
|
|
|
|
|
const prestamos: Prestamo[] = [];
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < infoPrestamos.length; i++)
|
|
|
|
|
prestamos.push(this.viewToPrestamo(infoPrestamos[i]));
|
|
|
|
|
return prestamos;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async entregar(
|
|
|
|
|
operadorEntrega: Operador,
|
|
|
|
|
modulo: Modulo,
|
|
|
|
|
id_prestamo: number,
|
|
|
|
|
) {
|
|
|
|
|
): Promise<Equipo> {
|
|
|
|
|
const ahora = moment();
|
|
|
|
|
const ahoraStr = ahora.format('YYYY-MM-DD');
|
|
|
|
|
const prestamo = await this.findById(id_prestamo);
|
|
|
|
|
const institucionDia =
|
|
|
|
|
await this.institucionDiaService.findByInstitucionDia(
|
|
|
|
|
operadorEntrega.institucion,
|
|
|
|
|
ahora.weekday(),
|
|
|
|
|
);
|
|
|
|
|
const institucionDia = await this.institucionDiaService.hoy(
|
|
|
|
|
operadorEntrega.institucion,
|
|
|
|
|
);
|
|
|
|
|
const horaTope = institucionDia
|
|
|
|
|
? moment(`${ahoraStr} ${institucionDia.hora_tope}`)
|
|
|
|
|
: null;
|
|
|
|
@@ -344,25 +309,28 @@ export class PrestamoService {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async findAll(filtros: {
|
|
|
|
|
pagina?: string;
|
|
|
|
|
activo?: string | boolean;
|
|
|
|
|
cancelado_operador?: string;
|
|
|
|
|
cancelado_usuario?: string;
|
|
|
|
|
carrito?: string;
|
|
|
|
|
equipo?: string;
|
|
|
|
|
fechaFin?: string;
|
|
|
|
|
fechaInicio?: string;
|
|
|
|
|
id_institucion?: string;
|
|
|
|
|
id_institucion_carrera?: string;
|
|
|
|
|
id_modulo?: string;
|
|
|
|
|
id_operador_entrega?: string;
|
|
|
|
|
id_operador_regreso?: string;
|
|
|
|
|
id_prestamo?: string;
|
|
|
|
|
id_tipo_carrito?: string;
|
|
|
|
|
id_tipo_usuario?: string;
|
|
|
|
|
usuario?: string;
|
|
|
|
|
}) {
|
|
|
|
|
async findAll(
|
|
|
|
|
operador: Operador,
|
|
|
|
|
filtros: {
|
|
|
|
|
activo?: string | boolean;
|
|
|
|
|
cancelado_operador?: string;
|
|
|
|
|
cancelado_usuario?: string;
|
|
|
|
|
carrito?: string;
|
|
|
|
|
equipo?: string;
|
|
|
|
|
fechaFin?: string;
|
|
|
|
|
fechaInicio?: string;
|
|
|
|
|
id_institucion?: string;
|
|
|
|
|
id_institucion_carrera?: string;
|
|
|
|
|
id_modulo?: string;
|
|
|
|
|
id_operador_entrega?: string;
|
|
|
|
|
id_operador_regreso?: string;
|
|
|
|
|
id_prestamo?: string;
|
|
|
|
|
id_tipo_carrito?: string;
|
|
|
|
|
id_tipo_usuario?: string;
|
|
|
|
|
pagina?: string;
|
|
|
|
|
usuario?: string;
|
|
|
|
|
},
|
|
|
|
|
): Promise<FullInformacionPrestamoView[] | [Prestamo[], number]> {
|
|
|
|
|
const institucion = filtros.id_institucion
|
|
|
|
|
? await this.institucionService.findById(parseInt(filtros.id_institucion))
|
|
|
|
|
: null;
|
|
|
|
@@ -425,7 +393,9 @@ export class PrestamoService {
|
|
|
|
|
busqueda.id_institucion_carrera = parseInt(
|
|
|
|
|
filtros.id_institucion_carrera,
|
|
|
|
|
);
|
|
|
|
|
if (institucion) busqueda.id_institucion = institucion.id_institucion;
|
|
|
|
|
if (operador.tipoUsuario.id_tipo_usuario > 2)
|
|
|
|
|
busqueda.id_institucion = operador.institucion.id_institucion;
|
|
|
|
|
else if (institucion) busqueda.id_institucion = institucion.id_institucion;
|
|
|
|
|
if (modulo) busqueda.id_modulo = modulo.id_modulo;
|
|
|
|
|
if (tipoCarrito) busqueda.id_tipo_carrito = tipoCarrito.id_tipo_carrito;
|
|
|
|
|
if (tipoUsuario) busqueda.id_tipo_usuario = tipoUsuario.id_tipo_usuario;
|
|
|
|
@@ -443,114 +413,68 @@ export class PrestamoService {
|
|
|
|
|
const prestamos: Prestamo[] = [];
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < infoPrestamos[0].length; i++)
|
|
|
|
|
prestamos.push(
|
|
|
|
|
this.repository.create({
|
|
|
|
|
id_prestamo: infoPrestamos[0][i].id_prestamo,
|
|
|
|
|
activo: infoPrestamos[0][i].activo === 1,
|
|
|
|
|
cancelado_operador:
|
|
|
|
|
infoPrestamos[0][i].cancelado_operador === 1,
|
|
|
|
|
cancelado_usuario: infoPrestamos[0][i].cancelado_usuario === 1,
|
|
|
|
|
fecha_entrega: infoPrestamos[0][i].fecha_entrega,
|
|
|
|
|
fecha_inicio: infoPrestamos[0][i].fecha_inicio,
|
|
|
|
|
hora_fin: infoPrestamos[0][i].hora_fin,
|
|
|
|
|
hora_inicio: infoPrestamos[0][i].hora_inicio,
|
|
|
|
|
hora_max_recoger: infoPrestamos[0][i].hora_max_recoger,
|
|
|
|
|
equipo: {
|
|
|
|
|
id_equipo: infoPrestamos[0][i].id_equipo,
|
|
|
|
|
equipo: infoPrestamos[0][i].equipo,
|
|
|
|
|
numero_inventario: infoPrestamos[0][i].numero_inventario,
|
|
|
|
|
carrito: {
|
|
|
|
|
id_carrito: infoPrestamos[0][i].id_carrito,
|
|
|
|
|
carrito: infoPrestamos[0][i].carrito,
|
|
|
|
|
modulo: {
|
|
|
|
|
id_modulo: infoPrestamos[0][i].id_modulo,
|
|
|
|
|
modulo: infoPrestamos[0][i].modulo,
|
|
|
|
|
institucion: {
|
|
|
|
|
id_institucion: infoPrestamos[0][i].id_institucion,
|
|
|
|
|
institucion: infoPrestamos[0][i].institucion,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
tipoCarrito: {
|
|
|
|
|
id_tipo_carrito: infoPrestamos[0][i].id_tipo_carrito,
|
|
|
|
|
tipo_carrito: infoPrestamos[0][i].tipo_carrito,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
status: { id_status: infoPrestamos[0][i].id_status },
|
|
|
|
|
},
|
|
|
|
|
usuario: {
|
|
|
|
|
id_usuario: infoPrestamos[0][i].id_usuario,
|
|
|
|
|
nombre: infoPrestamos[0][i].nombre,
|
|
|
|
|
usuario: infoPrestamos[0][i].usuario,
|
|
|
|
|
tipoUsuario: {
|
|
|
|
|
id_tipo_usuario: infoPrestamos[0][i].id_tipo_usuario,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
operadorEntrega: {
|
|
|
|
|
id_operador: infoPrestamos[0][i].id_operador_entrega,
|
|
|
|
|
operador: infoPrestamos[0][i].operador_entrega,
|
|
|
|
|
},
|
|
|
|
|
operadorRegreso: {
|
|
|
|
|
id_operador: infoPrestamos[0][i].id_operador_regreso,
|
|
|
|
|
operador: infoPrestamos[0][i].operador_regreso,
|
|
|
|
|
},
|
|
|
|
|
}),
|
|
|
|
|
);
|
|
|
|
|
prestamos.push(this.fullViewToPrestamo(infoPrestamos[0][i]));
|
|
|
|
|
return [prestamos, infoPrestamos[1]];
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
return this.fullInformacionPrestamoView.find(options);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
findAllByIdEquipo(id_equipo: number, pagina: number) {
|
|
|
|
|
findAllActivosExpirados(): Promise<Prestamo[]> {
|
|
|
|
|
return this.informacionPrestamoView
|
|
|
|
|
.find({
|
|
|
|
|
where: {
|
|
|
|
|
activo: 1,
|
|
|
|
|
hora_max_recoger: LessThanOrEqual(moment().toDate()),
|
|
|
|
|
id_status: 2,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
.then((infoPrestamos) => {
|
|
|
|
|
const prestamos: Prestamo[] = [];
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < infoPrestamos.length; i++)
|
|
|
|
|
prestamos.push(this.viewToPrestamo(infoPrestamos[i]));
|
|
|
|
|
return prestamos;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
findAllByIdEquipo(
|
|
|
|
|
opeardor: Operador,
|
|
|
|
|
id_equipo: number,
|
|
|
|
|
pagina: number,
|
|
|
|
|
): Promise<[Prestamo[], number]> {
|
|
|
|
|
return this.fullInformacionPrestamoView
|
|
|
|
|
.findAndCount({
|
|
|
|
|
where: { id_equipo },
|
|
|
|
|
where: {
|
|
|
|
|
id_equipo,
|
|
|
|
|
id_institucion: opeardor.institucion.id_institucion,
|
|
|
|
|
},
|
|
|
|
|
order: { id_prestamo: 'DESC' },
|
|
|
|
|
skip: (pagina - 1) * 25,
|
|
|
|
|
take: 25,
|
|
|
|
|
})
|
|
|
|
|
.then((infoPrestamos) => {
|
|
|
|
|
const prestamos: Prestamo[] = [];
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < infoPrestamos[0].length; i++)
|
|
|
|
|
prestamos.push(
|
|
|
|
|
this.repository.create({
|
|
|
|
|
id_prestamo: infoPrestamos[0][i].id_prestamo,
|
|
|
|
|
activo: infoPrestamos[0][i].activo === 1,
|
|
|
|
|
cancelado_operador: infoPrestamos[0][i].cancelado_operador === 1,
|
|
|
|
|
cancelado_usuario: infoPrestamos[0][i].cancelado_usuario === 1,
|
|
|
|
|
fecha_entrega: infoPrestamos[0][i].fecha_entrega,
|
|
|
|
|
fecha_inicio: infoPrestamos[0][i].fecha_inicio,
|
|
|
|
|
hora_fin: infoPrestamos[0][i].hora_fin,
|
|
|
|
|
hora_inicio: infoPrestamos[0][i].hora_inicio,
|
|
|
|
|
hora_max_recoger: infoPrestamos[0][i].hora_max_recoger,
|
|
|
|
|
usuario: {
|
|
|
|
|
id_usuario: infoPrestamos[0][i].id_usuario,
|
|
|
|
|
nombre: infoPrestamos[0][i].nombre,
|
|
|
|
|
usuario: infoPrestamos[0][i].usuario,
|
|
|
|
|
tipoUsuario: {
|
|
|
|
|
id_tipo_usuario: infoPrestamos[0][i].id_tipo_usuario,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
operadorEntrega: {
|
|
|
|
|
id_operador: infoPrestamos[0][i].id_operador_entrega,
|
|
|
|
|
operador: infoPrestamos[0][i].operador_entrega,
|
|
|
|
|
},
|
|
|
|
|
operadorRegreso: {
|
|
|
|
|
id_operador: infoPrestamos[0][i].id_operador_regreso,
|
|
|
|
|
operador: infoPrestamos[0][i].operador_regreso,
|
|
|
|
|
},
|
|
|
|
|
}),
|
|
|
|
|
);
|
|
|
|
|
prestamos.push(this.fullViewToPrestamo(infoPrestamos[0][i]));
|
|
|
|
|
return [prestamos, infoPrestamos[1]];
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
findAllByIdUsuario(id_usuario: number, pagina: number) {
|
|
|
|
|
findAllByIdUsuario(
|
|
|
|
|
opeardor: Operador,
|
|
|
|
|
id_usuario: number,
|
|
|
|
|
pagina: number,
|
|
|
|
|
): Promise<[Prestamo[], number]> {
|
|
|
|
|
return this.usuarioService
|
|
|
|
|
.findById(id_usuario)
|
|
|
|
|
.then((usuario) =>
|
|
|
|
|
this.fullInformacionPrestamoView.findAndCount({
|
|
|
|
|
where: { id_usuario: usuario.id_usuario },
|
|
|
|
|
where: {
|
|
|
|
|
id_institucion: opeardor.institucion.id_institucion,
|
|
|
|
|
id_usuario: usuario.id_usuario,
|
|
|
|
|
},
|
|
|
|
|
order: { id_prestamo: 'DESC' },
|
|
|
|
|
skip: (pagina - 1) * 25,
|
|
|
|
|
take: 25,
|
|
|
|
@@ -560,53 +484,26 @@ export class PrestamoService {
|
|
|
|
|
const prestamos: Prestamo[] = [];
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < infoPrestamos[0].length; i++)
|
|
|
|
|
prestamos.push(
|
|
|
|
|
this.repository.create({
|
|
|
|
|
id_prestamo: infoPrestamos[0][i].id_prestamo,
|
|
|
|
|
activo: infoPrestamos[0][i].activo === 1,
|
|
|
|
|
cancelado_operador: infoPrestamos[0][i].cancelado_operador === 1,
|
|
|
|
|
cancelado_usuario: infoPrestamos[0][i].cancelado_usuario === 1,
|
|
|
|
|
fecha_entrega: infoPrestamos[0][i].fecha_entrega,
|
|
|
|
|
fecha_inicio: infoPrestamos[0][i].fecha_inicio,
|
|
|
|
|
hora_fin: infoPrestamos[0][i].hora_fin,
|
|
|
|
|
hora_inicio: infoPrestamos[0][i].hora_inicio,
|
|
|
|
|
hora_max_recoger: infoPrestamos[0][i].hora_max_recoger,
|
|
|
|
|
equipo: {
|
|
|
|
|
id_equipo: infoPrestamos[0][i].id_equipo,
|
|
|
|
|
equipo: infoPrestamos[0][i].equipo,
|
|
|
|
|
numero_inventario: infoPrestamos[0][i].numero_inventario,
|
|
|
|
|
carrito: {
|
|
|
|
|
id_carrito: infoPrestamos[0][i].id_carrito,
|
|
|
|
|
carrito: infoPrestamos[0][i].carrito,
|
|
|
|
|
modulo: {
|
|
|
|
|
id_modulo: infoPrestamos[0][i].id_modulo,
|
|
|
|
|
modulo: infoPrestamos[0][i].modulo,
|
|
|
|
|
institucion: {
|
|
|
|
|
id_institucion: infoPrestamos[0][i].id_institucion,
|
|
|
|
|
institucion: infoPrestamos[0][i].institucion,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
tipoCarrito: {
|
|
|
|
|
id_tipo_carrito: infoPrestamos[0][i].id_tipo_carrito,
|
|
|
|
|
tipo_carrito: infoPrestamos[0][i].tipo_carrito,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
operadorEntrega: {
|
|
|
|
|
id_operador: infoPrestamos[0][i].id_operador_entrega,
|
|
|
|
|
operador: infoPrestamos[0][i].operador_entrega,
|
|
|
|
|
},
|
|
|
|
|
operadorRegreso: {
|
|
|
|
|
id_operador: infoPrestamos[0][i].id_operador_regreso,
|
|
|
|
|
operador: infoPrestamos[0][i].operador_regreso,
|
|
|
|
|
},
|
|
|
|
|
}),
|
|
|
|
|
);
|
|
|
|
|
prestamos.push(this.fullViewToPrestamo(infoPrestamos[0][i]));
|
|
|
|
|
return [prestamos, infoPrestamos[1]];
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
findById(id_prestamo: number) {
|
|
|
|
|
findAllEquiposRepetidos(): Promise<Prestamo[]> {
|
|
|
|
|
return this.informacionPrestamoView
|
|
|
|
|
.createQueryBuilder('ipv')
|
|
|
|
|
.where('activo = 1 AND id_usuario != u')
|
|
|
|
|
.getMany()
|
|
|
|
|
.then((infoPrestamos) => {
|
|
|
|
|
const prestamos: Prestamo[] = [];
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < infoPrestamos.length; i++)
|
|
|
|
|
prestamos.push(this.viewToPrestamo(infoPrestamos[i]));
|
|
|
|
|
return prestamos;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
findById(id_prestamo: number): Promise<Prestamo> {
|
|
|
|
|
return this.informacionPrestamoView
|
|
|
|
|
.findOne({ where: { id_prestamo } })
|
|
|
|
|
.then((infoPrestamo) => {
|
|
|
|
@@ -616,7 +513,10 @@ export class PrestamoService {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
findByNumeroInventario(institucion: Institucion, numero_inventario: string) {
|
|
|
|
|
findByNumeroInventario(
|
|
|
|
|
institucion: Institucion,
|
|
|
|
|
numero_inventario: string,
|
|
|
|
|
): Promise<Prestamo> {
|
|
|
|
|
return this.informacionPrestamoView
|
|
|
|
|
.findOne({
|
|
|
|
|
where: {
|
|
|
|
@@ -633,56 +533,79 @@ export class PrestamoService {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private mensajeNoPoderPedir() {
|
|
|
|
|
fullViewToPrestamo(infoPrestamo: FullInformacionPrestamoView): Prestamo {
|
|
|
|
|
return this.repository.create({
|
|
|
|
|
id_prestamo: infoPrestamo.id_prestamo,
|
|
|
|
|
activo: infoPrestamo.activo === 1,
|
|
|
|
|
cancelado_operador: infoPrestamo.cancelado_operador === 1,
|
|
|
|
|
cancelado_usuario: infoPrestamo.cancelado_usuario === 1,
|
|
|
|
|
fecha_entrega: infoPrestamo.fecha_entrega,
|
|
|
|
|
fecha_inicio: infoPrestamo.fecha_inicio,
|
|
|
|
|
hora_fin: infoPrestamo.hora_fin,
|
|
|
|
|
hora_inicio: infoPrestamo.hora_inicio,
|
|
|
|
|
hora_max_recoger: infoPrestamo.hora_max_recoger,
|
|
|
|
|
equipo: {
|
|
|
|
|
id_equipo: infoPrestamo.id_equipo,
|
|
|
|
|
equipo: infoPrestamo.equipo,
|
|
|
|
|
numero_inventario: infoPrestamo.numero_inventario,
|
|
|
|
|
carrito: {
|
|
|
|
|
id_carrito: infoPrestamo.id_carrito,
|
|
|
|
|
carrito: infoPrestamo.carrito,
|
|
|
|
|
modulo: {
|
|
|
|
|
id_modulo: infoPrestamo.id_modulo,
|
|
|
|
|
modulo: infoPrestamo.modulo,
|
|
|
|
|
institucion: {
|
|
|
|
|
id_institucion: infoPrestamo.id_institucion,
|
|
|
|
|
institucion: infoPrestamo.institucion,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
tipoCarrito: {
|
|
|
|
|
id_tipo_carrito: infoPrestamo.id_tipo_carrito,
|
|
|
|
|
tipo_carrito: infoPrestamo.tipo_carrito,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
status: { id_status: infoPrestamo.id_status },
|
|
|
|
|
},
|
|
|
|
|
operadorEntrega: {
|
|
|
|
|
id_operador: infoPrestamo.id_operador_entrega,
|
|
|
|
|
operador: infoPrestamo.operador_entrega,
|
|
|
|
|
},
|
|
|
|
|
operadorRegreso: {
|
|
|
|
|
id_operador: infoPrestamo.id_operador_regreso,
|
|
|
|
|
operador: infoPrestamo.operador_regreso,
|
|
|
|
|
},
|
|
|
|
|
usuario: {
|
|
|
|
|
id_usuario: infoPrestamo.id_usuario,
|
|
|
|
|
nombre: infoPrestamo.nombre,
|
|
|
|
|
usuario: infoPrestamo.usuario,
|
|
|
|
|
tipoUsuario: {
|
|
|
|
|
id_tipo_usuario: infoPrestamo.id_tipo_usuario,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private mensajeNoPoderPedir(): string {
|
|
|
|
|
return 'No puedes pedir equipos de cómputo porque:';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
prestamoInfoById(id_prestamo: number) {
|
|
|
|
|
prestamoInfoById(id_prestamo: number): Promise<Prestamo> {
|
|
|
|
|
return this.prestamoInformacionView
|
|
|
|
|
.findOne({ where: { id_prestamo } })
|
|
|
|
|
.then((infoPrestamo) => {
|
|
|
|
|
if (!infoPrestamo)
|
|
|
|
|
throw new NotFoundException('No existe este id préstamo.');
|
|
|
|
|
|
|
|
|
|
const prestamo = this.repository.create({
|
|
|
|
|
id_prestamo: infoPrestamo.id_prestamo,
|
|
|
|
|
activo: infoPrestamo.activo === 1,
|
|
|
|
|
cancelado_operador: infoPrestamo.cancelado_operador === 1,
|
|
|
|
|
cancelado_usuario: infoPrestamo.cancelado_usuario === 1,
|
|
|
|
|
fecha_entrega: infoPrestamo.fecha_entrega,
|
|
|
|
|
fecha_inicio: infoPrestamo.fecha_inicio,
|
|
|
|
|
hora_fin: infoPrestamo.hora_fin,
|
|
|
|
|
hora_inicio: infoPrestamo.hora_inicio,
|
|
|
|
|
hora_max_recoger: infoPrestamo.hora_max_recoger,
|
|
|
|
|
equipo: {
|
|
|
|
|
id_equipo: infoPrestamo.id_equipo,
|
|
|
|
|
equipo: infoPrestamo.equipo,
|
|
|
|
|
numero_inventario: infoPrestamo.numero_inventario,
|
|
|
|
|
carrito: {
|
|
|
|
|
id_carrito: infoPrestamo.id_carrito,
|
|
|
|
|
carrito: infoPrestamo.carrito,
|
|
|
|
|
modulo: {
|
|
|
|
|
id_modulo: infoPrestamo.id_modulo,
|
|
|
|
|
modulo: infoPrestamo.modulo,
|
|
|
|
|
institucion: {
|
|
|
|
|
id_institucion: infoPrestamo.id_institucion,
|
|
|
|
|
institucion: infoPrestamo.institucion,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
tipoCarrito: {
|
|
|
|
|
id_tipo_carrito: infoPrestamo.id_tipo_carrito,
|
|
|
|
|
tipo_carrito: infoPrestamo.tipo_carrito,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
status: { id_status: infoPrestamo.id_status },
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
const prestamo = this.prestamoInfoViewToPrestamo(infoPrestamo);
|
|
|
|
|
|
|
|
|
|
return this.prestamoPasscode(prestamo);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
prestamoInfoByUsuario(usuario: Usuario, validarExistencia = true) {
|
|
|
|
|
prestamoInfoByUsuario(
|
|
|
|
|
usuario: Usuario,
|
|
|
|
|
validarExistencia = true,
|
|
|
|
|
): Promise<Prestamo> {
|
|
|
|
|
return this.prestamoInformacionView
|
|
|
|
|
.findOne({ where: { activo: 1, id_usuario: usuario.id_usuario } })
|
|
|
|
|
.then((infoPrestamo) => {
|
|
|
|
@@ -694,37 +617,7 @@ export class PrestamoService {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const prestamo = this.repository.create({
|
|
|
|
|
id_prestamo: infoPrestamo.id_prestamo,
|
|
|
|
|
activo: infoPrestamo.activo === 1,
|
|
|
|
|
fecha_inicio: infoPrestamo.fecha_inicio,
|
|
|
|
|
hora_fin: infoPrestamo.hora_fin,
|
|
|
|
|
hora_inicio: infoPrestamo.hora_inicio,
|
|
|
|
|
hora_max_recoger: infoPrestamo.hora_max_recoger,
|
|
|
|
|
equipo: {
|
|
|
|
|
id_equipo: infoPrestamo.id_equipo,
|
|
|
|
|
equipo: infoPrestamo.equipo,
|
|
|
|
|
numero_inventario: infoPrestamo.numero_inventario,
|
|
|
|
|
u: infoPrestamo.u,
|
|
|
|
|
carrito: {
|
|
|
|
|
id_carrito: infoPrestamo.id_carrito,
|
|
|
|
|
carrito: infoPrestamo.carrito,
|
|
|
|
|
modulo: {
|
|
|
|
|
id_modulo: infoPrestamo.id_modulo,
|
|
|
|
|
modulo: infoPrestamo.modulo,
|
|
|
|
|
institucion: {
|
|
|
|
|
id_institucion: infoPrestamo.id_institucion,
|
|
|
|
|
institucion: infoPrestamo.institucion,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
tipoCarrito: {
|
|
|
|
|
id_tipo_carrito: infoPrestamo.id_tipo_carrito,
|
|
|
|
|
tipo_carrito: infoPrestamo.tipo_carrito,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
status: { id_status: infoPrestamo.id_status },
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
const prestamo = this.prestamoInfoViewToPrestamo(infoPrestamo);
|
|
|
|
|
|
|
|
|
|
return this.prestamoPasscode(prestamo);
|
|
|
|
|
});
|
|
|
|
@@ -733,7 +626,7 @@ export class PrestamoService {
|
|
|
|
|
prestamoInfoByNumeroInventario(
|
|
|
|
|
operador: Operador,
|
|
|
|
|
numero_inventario: string,
|
|
|
|
|
) {
|
|
|
|
|
): Promise<Prestamo> {
|
|
|
|
|
return this.equipoService
|
|
|
|
|
.findByNumeroInventario(operador.institucion, numero_inventario)
|
|
|
|
|
.then((equipo) =>
|
|
|
|
@@ -746,42 +639,60 @@ export class PrestamoService {
|
|
|
|
|
throw new NotFoundException(
|
|
|
|
|
'No existe un préstamo activo con este equipo de cómputo.',
|
|
|
|
|
);
|
|
|
|
|
return this.repository.create({
|
|
|
|
|
id_prestamo: infoPrestamo.id_prestamo,
|
|
|
|
|
activo: infoPrestamo.activo === 1,
|
|
|
|
|
fecha_entrega: infoPrestamo.fecha_entrega,
|
|
|
|
|
fecha_inicio: infoPrestamo.fecha_inicio,
|
|
|
|
|
hora_fin: infoPrestamo.hora_fin,
|
|
|
|
|
hora_inicio: infoPrestamo.hora_inicio,
|
|
|
|
|
hora_max_recoger: infoPrestamo.hora_max_recoger,
|
|
|
|
|
equipo: {
|
|
|
|
|
id_equipo: infoPrestamo.id_equipo,
|
|
|
|
|
equipo: infoPrestamo.equipo,
|
|
|
|
|
carrito: {
|
|
|
|
|
id_carrito: infoPrestamo.id_carrito,
|
|
|
|
|
carrito: infoPrestamo.carrito,
|
|
|
|
|
modulo: {
|
|
|
|
|
id_modulo: infoPrestamo.id_modulo,
|
|
|
|
|
institucion: { id_institucion: infoPrestamo.id_institucion },
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
status: { id_status: infoPrestamo.id_status },
|
|
|
|
|
},
|
|
|
|
|
usuario: {
|
|
|
|
|
id_usuario: infoPrestamo.id_usuario,
|
|
|
|
|
usuario: infoPrestamo.usuario,
|
|
|
|
|
nombre: infoPrestamo.nombre,
|
|
|
|
|
tipoUsuario: { id_tipo_usuario: infoPrestamo.id_tipo_usuario },
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
return this.prestamoInfoViewToPrestamo(infoPrestamo);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
prestamoInfoViewToPrestamo(infoPrestamo: PrestamoInformacionView): Prestamo {
|
|
|
|
|
return this.repository.create({
|
|
|
|
|
id_prestamo: infoPrestamo.id_prestamo,
|
|
|
|
|
activo: infoPrestamo.activo === 1,
|
|
|
|
|
cancelado_operador: infoPrestamo.cancelado_operador === 1,
|
|
|
|
|
cancelado_usuario: infoPrestamo.cancelado_usuario === 1,
|
|
|
|
|
fecha_entrega: infoPrestamo.fecha_entrega,
|
|
|
|
|
fecha_inicio: infoPrestamo.fecha_inicio,
|
|
|
|
|
hora_fin: infoPrestamo.hora_fin,
|
|
|
|
|
hora_inicio: infoPrestamo.hora_inicio,
|
|
|
|
|
hora_max_recoger: infoPrestamo.hora_max_recoger,
|
|
|
|
|
equipo: {
|
|
|
|
|
id_equipo: infoPrestamo.id_equipo,
|
|
|
|
|
equipo: infoPrestamo.equipo,
|
|
|
|
|
numero_inventario: infoPrestamo.numero_inventario,
|
|
|
|
|
u: infoPrestamo.u,
|
|
|
|
|
carrito: {
|
|
|
|
|
id_carrito: infoPrestamo.id_carrito,
|
|
|
|
|
carrito: infoPrestamo.carrito,
|
|
|
|
|
modulo: {
|
|
|
|
|
id_modulo: infoPrestamo.id_modulo,
|
|
|
|
|
modulo: infoPrestamo.modulo,
|
|
|
|
|
institucion: {
|
|
|
|
|
id_institucion: infoPrestamo.id_institucion,
|
|
|
|
|
institucion: infoPrestamo.institucion,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
tipoCarrito: {
|
|
|
|
|
id_tipo_carrito: infoPrestamo.id_tipo_carrito,
|
|
|
|
|
tipo_carrito: infoPrestamo.tipo_carrito,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
status: { id_status: infoPrestamo.id_status },
|
|
|
|
|
},
|
|
|
|
|
usuario: {
|
|
|
|
|
id_usuario: infoPrestamo.id_usuario,
|
|
|
|
|
usuario: infoPrestamo.usuario,
|
|
|
|
|
nombre: infoPrestamo.nombre,
|
|
|
|
|
tipoUsuario: { id_tipo_usuario: infoPrestamo.id_tipo_usuario },
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private prestamoPasscode(prestamo: Prestamo) {
|
|
|
|
|
// Si es locker
|
|
|
|
|
if (
|
|
|
|
|
prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito === 4 ||
|
|
|
|
|
prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito === 5
|
|
|
|
|
)
|
|
|
|
|
// Buscamos el passcode y se lo agregamos al préstamo
|
|
|
|
|
return this.passcodeService
|
|
|
|
|
.findByPrestamo(prestamo)
|
|
|
|
|
.then((passcode) => ({ ...prestamo, passcode: passcode.passcode }));
|
|
|
|
@@ -796,15 +707,13 @@ export class PrestamoService {
|
|
|
|
|
motivo?: string,
|
|
|
|
|
descripcion?: string,
|
|
|
|
|
id_institucion_infraccion?: number,
|
|
|
|
|
) {
|
|
|
|
|
): Promise<{ message: string }> {
|
|
|
|
|
const ahora = moment();
|
|
|
|
|
// La resta ahora - hora_fin nos da la cantidad de tiempo que se paso el usuario
|
|
|
|
|
// en entregar el equipo a tiempo. Si es negativa es que fue antes de la hora_fin
|
|
|
|
|
const tardanza = Math.trunc(ahora.diff(moment(prestamo.hora_fin)) / 60000);
|
|
|
|
|
// Minutos que se tardo entre el tiempo configurable de la institución
|
|
|
|
|
const status = await this.statusService.findById(id_status);
|
|
|
|
|
const tardanza = Math.trunc(ahora.diff(moment(prestamo.hora_fin)) / 60000); // Si la resta ahora - hora_fin es positiva es que ya se tardo en entregar
|
|
|
|
|
const semanasCastigo = Math.trunc(
|
|
|
|
|
tardanza / modulo.institucion.tiempo_entrega,
|
|
|
|
|
);
|
|
|
|
|
); // Semanas de castigo correspondiente al tiempo de tardanza de cada institución
|
|
|
|
|
|
|
|
|
|
this.validacionBasicaPrestamo(prestamo);
|
|
|
|
|
this.validacionOperadorPrestamo(prestamo, operadorRegreso, modulo);
|
|
|
|
@@ -814,19 +723,21 @@ export class PrestamoService {
|
|
|
|
|
'Aún no se ha entregado el equipo de cómputo al usuario.',
|
|
|
|
|
);
|
|
|
|
|
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 para el reporte de incidencia.',
|
|
|
|
|
);
|
|
|
|
|
// Desactivamos préstamo
|
|
|
|
|
prestamo.activo = false;
|
|
|
|
|
prestamo.fecha_entrega = ahora.toDate();
|
|
|
|
|
prestamo.operadorRegreso = operadorRegreso;
|
|
|
|
|
// Reseteamos datos de equipo
|
|
|
|
|
prestamo.equipo.u = null;
|
|
|
|
|
prestamo.equipo.status.id_status = id_status;
|
|
|
|
|
// Si semanasCastigo es mayor a 0 significa que hay multa
|
|
|
|
|
prestamo.equipo.status = status;
|
|
|
|
|
// Si semanasCastigo es mayor a 0 significa que hay multa por atraso
|
|
|
|
|
if (semanasCastigo > 0) {
|
|
|
|
|
const mensajeTardanza = `El usuario se tardó: ${tardanza} minutos en entregar el equipo de cómputo.`;
|
|
|
|
|
|
|
|
|
|
// Si se mando id_institucion_infraccion significa que ademas de entregar tarde,
|
|
|
|
|
// el usuario daño el equipo, por lo tanto tenemos que agregar la descripción del daño
|
|
|
|
|
// a motivo, y mandar la id_institucion_infraccion
|
|
|
|
|
// Si se mando id_institucion_infraccion significa que ademas de entregar tarde cometió una infracción
|
|
|
|
|
if (id_institucion_infraccion)
|
|
|
|
|
await this.multaService.create(
|
|
|
|
|
operadorRegreso,
|
|
|
|
@@ -836,7 +747,7 @@ export class PrestamoService {
|
|
|
|
|
semanasCastigo,
|
|
|
|
|
id_institucion_infraccion,
|
|
|
|
|
);
|
|
|
|
|
// Multa normal
|
|
|
|
|
// De lo contrario solo se multa por tardanza
|
|
|
|
|
else
|
|
|
|
|
await this.multaService.create(
|
|
|
|
|
operadorRegreso,
|
|
|
|
@@ -845,9 +756,9 @@ export class PrestamoService {
|
|
|
|
|
mensajeTardanza,
|
|
|
|
|
semanasCastigo,
|
|
|
|
|
);
|
|
|
|
|
} else if (id_institucion_infraccion)
|
|
|
|
|
// De lo contrario, si se mandó id_institucion_infraccion significa que
|
|
|
|
|
// el usuario solo solo daño el equipo
|
|
|
|
|
}
|
|
|
|
|
// De lo contrario, si se mandó id_institucion_infraccion significa que el usuario solo solo cometió una infracción
|
|
|
|
|
else if (id_institucion_infraccion)
|
|
|
|
|
await this.multaService.create(
|
|
|
|
|
operadorRegreso,
|
|
|
|
|
modulo,
|
|
|
|
@@ -856,17 +767,14 @@ export class PrestamoService {
|
|
|
|
|
null,
|
|
|
|
|
id_institucion_infraccion,
|
|
|
|
|
);
|
|
|
|
|
// Guardo los cambios del equipo
|
|
|
|
|
// Guardamos cambios en el equipo
|
|
|
|
|
return this.equipoService
|
|
|
|
|
.updateStatus(prestamo.equipo, operadorRegreso, motivo)
|
|
|
|
|
.then((_) => this.repository.save(prestamo)) // Guardo los cambios del préstamo
|
|
|
|
|
.then((_) => this.repository.save(prestamo)) // Guardamos cambios en el préstamo
|
|
|
|
|
.then((_) => {
|
|
|
|
|
// Actualizo la interfaz del usuario
|
|
|
|
|
// Actualizamos la interfaz del usuario
|
|
|
|
|
this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario);
|
|
|
|
|
this.appGateway.actualizarOperador(
|
|
|
|
|
operadorRegreso.institucion.id_institucion,
|
|
|
|
|
);
|
|
|
|
|
return { message: 'Se regresó el equipo de cómputo.' };
|
|
|
|
|
return { message: 'Se regresó el equipo de cómputo correctamente.' };
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -878,8 +786,7 @@ export class PrestamoService {
|
|
|
|
|
motivo: string,
|
|
|
|
|
descripcion?: string,
|
|
|
|
|
id_institucion_infraccion?: number,
|
|
|
|
|
) {
|
|
|
|
|
// Buscamos el prestamo por id prestamo y luego regreso el equipo
|
|
|
|
|
): Promise<{ message: string }> {
|
|
|
|
|
return this.findById(id_prestamo).then((prestamo) =>
|
|
|
|
|
this.regresar(
|
|
|
|
|
operador,
|
|
|
|
@@ -901,9 +808,7 @@ export class PrestamoService {
|
|
|
|
|
motivo: string,
|
|
|
|
|
descripcion?: string,
|
|
|
|
|
id_institucion_infraccion?: number,
|
|
|
|
|
) {
|
|
|
|
|
// Buscamos el prestamo por número de inventario y la institución del operador
|
|
|
|
|
// luego regreso el equipo
|
|
|
|
|
): Promise<{ message: string }> {
|
|
|
|
|
return this.findByNumeroInventario(
|
|
|
|
|
operador.institucion,
|
|
|
|
|
numero_inventario,
|
|
|
|
@@ -920,17 +825,46 @@ export class PrestamoService {
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
save(prestamo: Prestamo) {
|
|
|
|
|
save(prestamo: Prestamo): Promise<Prestamo> {
|
|
|
|
|
return this.repository.save(prestamo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
validacionBasicaPrestamo(prestamo: Prestamo) {
|
|
|
|
|
// Validamos si el préstamo fue cancelado por el usuario
|
|
|
|
|
private validarInstitucionUsuario(
|
|
|
|
|
instituciones: InstitucionUsuario[],
|
|
|
|
|
modulo: Modulo,
|
|
|
|
|
): InstitucionUsuario {
|
|
|
|
|
// Recorremos array de instituciones usuario
|
|
|
|
|
for (let i = 0; i < instituciones.length; i++) {
|
|
|
|
|
const institucion = instituciones[i].institucionCarrera.institucion;
|
|
|
|
|
|
|
|
|
|
// Si encontramos una institución usuario cuyo id institución sea igual al del módulo enviado
|
|
|
|
|
if (institucion.id_institucion === modulo.institucion.id_institucion) {
|
|
|
|
|
// Validamos que este activo
|
|
|
|
|
if (!instituciones[i].activo)
|
|
|
|
|
throw new ForbiddenException(
|
|
|
|
|
`${this.mensajeNoPoderPedir()} tu cuenta esta desactivada en esta institución.`,
|
|
|
|
|
);
|
|
|
|
|
// Validamos que no tenga multa
|
|
|
|
|
if (instituciones[i].multa)
|
|
|
|
|
throw new ForbiddenException(
|
|
|
|
|
`${this.mensajeNoPoderPedir()} tienes una multa activa.`,
|
|
|
|
|
);
|
|
|
|
|
return instituciones[i];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// Si no se encuentra una institución usuario que sea igual que la del módulo enviado sacamos error
|
|
|
|
|
throw new BadRequestException(
|
|
|
|
|
`${this.mensajeNoPoderPedir()} no perteneces a la institución del módulo seleccionado.`,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private validacionBasicaPrestamo(prestamo: Prestamo): void {
|
|
|
|
|
// Validamos si el préstamo ya fue cancelado por el usuario
|
|
|
|
|
if (prestamo.cancelado_usuario)
|
|
|
|
|
throw new ConflictException(
|
|
|
|
|
'Este préstamo fue cancelado por el usuario.',
|
|
|
|
|
);
|
|
|
|
|
// Validamos si el préstamo fue cancelado por el operador
|
|
|
|
|
// Validamos si el préstamo ya fue cancelado por el operador
|
|
|
|
|
if (prestamo.cancelado_operador)
|
|
|
|
|
throw new ConflictException(
|
|
|
|
|
'Este préstamo fue cancelado por un operador.',
|
|
|
|
@@ -940,36 +874,12 @@ export class PrestamoService {
|
|
|
|
|
throw new ConflictException('Este préstamo ya no se encuentra activo.');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
validarInstitucionUsuario(
|
|
|
|
|
instituciones: InstitucionUsuario[],
|
|
|
|
|
modulo: Modulo,
|
|
|
|
|
) {
|
|
|
|
|
for (let i = 0; i < instituciones.length; i++) {
|
|
|
|
|
const institucion = instituciones[i].institucionCarrera.institucion;
|
|
|
|
|
|
|
|
|
|
if (institucion.id_institucion === modulo.institucion.id_institucion) {
|
|
|
|
|
if (!instituciones[i].activo)
|
|
|
|
|
throw new ForbiddenException(
|
|
|
|
|
`${this.mensajeNoPoderPedir()} tu cuenta esta desactivada en esta institución.`,
|
|
|
|
|
);
|
|
|
|
|
if (instituciones[i].multa)
|
|
|
|
|
throw new ForbiddenException(
|
|
|
|
|
`${this.mensajeNoPoderPedir()} tienes una multa activa.`,
|
|
|
|
|
);
|
|
|
|
|
return institucion;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
throw new BadRequestException(
|
|
|
|
|
`${this.mensajeNoPoderPedir()} no perteneces a la institución del módulo seleccionado.`,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private validacionOperadorPrestamo(
|
|
|
|
|
prestamo: Prestamo,
|
|
|
|
|
operador: Operador,
|
|
|
|
|
modulo: Modulo,
|
|
|
|
|
) {
|
|
|
|
|
// Validamos que el prestamo pertenezca a la institución
|
|
|
|
|
modulo?: Modulo,
|
|
|
|
|
): void {
|
|
|
|
|
// Validamos que el prestamo pertenezca a la institución del operador
|
|
|
|
|
if (
|
|
|
|
|
operador.institucion.id_institucion !=
|
|
|
|
|
prestamo.equipo.carrito.modulo.institucion.id_institucion
|
|
|
|
@@ -982,7 +892,7 @@ export class PrestamoService {
|
|
|
|
|
throw new ConflictException('Este préstamo no pertenece a tu módulo.');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private viewToPrestamo(infoPrestamo: InformacionPrestamoView) {
|
|
|
|
|
private viewToPrestamo(infoPrestamo: InformacionPrestamoView): Prestamo {
|
|
|
|
|
return this.repository.create({
|
|
|
|
|
id_prestamo: infoPrestamo.id_prestamo,
|
|
|
|
|
activo: infoPrestamo.activo === 1,
|
|
|
|
|