modulo prestamo final

This commit is contained in:
2022-06-28 19:29:10 -05:00
parent bf33d06f16
commit fa5afd9531
18 changed files with 447 additions and 241 deletions
+34 -38
View File
@@ -215,6 +215,24 @@ export class EquipoService {
programa?: Programa,
tipoEntrada?: TipoEntrada,
) {
const queryReseteo = this.repository
.createQueryBuilder('e')
.innerJoin('e.carrito', 'c', 'c.activo = 1')
.innerJoin('c.modulo', 'm', 'm.id_modulo = :id_modulo AND m.activo = 1', {
id_modulo: modulo.id_modulo,
})
.innerJoin('m.institucion', 'i', 'i.activo = 1')
.innerJoin(
'c.tipoCarrito',
'tc',
'tc.id_tipo_carrito = :id_tipo_carrito',
{ id_tipo_carrito: tipoCarrito.id_tipo_carrito },
)
.innerJoin('e.programas', 'ps')
.innerJoin('e.tiposEntradas', 'tes')
.andWhere('e.prestado = 1 AND e.id_status = 1')
.update()
.set({ prestado: false });
const query = this.repository
.createQueryBuilder('e')
.innerJoinAndSelect('e.carrito', 'c', 'c.activo = 1')
@@ -242,51 +260,29 @@ export class EquipoService {
.orderBy('c.carrito')
.addOrderBy('e.equipo');
if (programa)
if (programa) {
query.andWhere('ps.id_programa = :id_programa', {
id_programa: programa.id_programa,
});
else query.andWhere('ps.id_programa = 1');
if (tipoEntrada)
queryReseteo.andWhere('ps.id_programa = :id_programa', {
id_programa: programa.id_programa,
});
} else {
query.andWhere('ps.id_programa = 1');
queryReseteo.andWhere('ps.id_programa = 1');
}
if (tipoEntrada) {
query.andWhere('tes.id_tipo_entrada = :id_tipo_entrada', {
id_tipo_entrada: tipoEntrada.id_tipo_entrada,
});
return query;
}
reseteo(
modulo: Modulo,
tipoCarrito: TipoCarrito,
programa?: Programa,
tipoEntrada?: TipoEntrada,
) {
return this.findEquipo(modulo, tipoCarrito, programa, tipoEntrada)
.getCount()
.then((n) => {
if (n === 0)
return this.repository
.createQueryBuilder('e')
.innerJoin('e.carrito', 'c', 'c.activo = 1')
.innerJoin(
'c.modulo',
'm',
'm.id_modulo = :id_modulo AND m.activo = 1',
{
id_modulo: modulo.id_modulo,
},
)
.innerJoin('m.institucion', 'i', 'i.activo = 1')
.innerJoin(
'c.tipoCarrito',
'tc',
'tc.id_tipo_carrito = :id_tipo_carrito',
{ id_tipo_carrito: tipoCarrito.id_tipo_carrito },
)
.andWhere('e.prestado = 1 AND e.id_status = 1')
.update()
.set({ prestado: false })
.execute();
queryReseteo.andWhere('tes.id_tipo_entrada = :id_tipo_entrada', {
id_tipo_entrada: tipoEntrada.id_tipo_entrada,
});
}
return query.getCount().then(async (n) => {
if (n === 0) await queryReseteo.execute();
return query.getOne();
});
}
reseteoTotal() {
+2 -2
View File
@@ -1,5 +1,5 @@
import { Expose, Type } from 'class-transformer';
import { OperadorMinsOutputDto } from '../../../operador/dto/output/operador-min.dto';
import { OperadorMinOutputDto } from '../../../operador/dto/output/operador-min.dto';
import { StatusOutputDto } from '../../../status/dto/output/status.dto';
export class MotivoOutputDto {
@@ -13,7 +13,7 @@ export class MotivoOutputDto {
motivo;
@Expose()
@Type(() => OperadorMinsOutputDto)
@Type(() => OperadorMinOutputDto)
operador;
@Expose()
+3 -3
View File
@@ -1,7 +1,7 @@
import { Expose, Type } from 'class-transformer';
import { InstitucionInfraccionOutputDto } from '../../../institucion-infraccion/dto/output/institucion-infraccion.dto';
import { PrestamoMinEquipoOutputDto } from '../../../prestamo/dto/output/prestamo-min-equipo.dto';
import { OperadorMinsOutputDto } from '../../../operador/dto/output/operador-min.dto';
import { PrestamoMinEquipoOutputDto } from '../../../prestamo/dto/output/prestamo-equipo-min.dto';
import { OperadorMinOutputDto } from '../../../operador/dto/output/operador-min.dto';
export class MultasEquipoOutputDto {
@Expose()
@@ -23,7 +23,7 @@ export class MultasEquipoOutputDto {
retraso;
@Expose()
@Type(() => OperadorMinsOutputDto)
@Type(() => OperadorMinOutputDto)
opeardorMulta;
@Expose()
+3 -3
View File
@@ -1,7 +1,7 @@
import { Expose, Type } from 'class-transformer';
import { InstitucionInfraccionOutputDto } from '../../../institucion-infraccion/dto/output/institucion-infraccion.dto';
import { PrestamoMinUsuarioOutputDto } from '../../../prestamo/dto/output/prestamo-min-usuario.dto';
import { OperadorMinsOutputDto } from '../../../operador/dto/output/operador-min.dto';
import { PrestamoMinUsuarioOutputDto } from '../../../prestamo/dto/output/prestamo-usuario-min.dto';
import { OperadorMinOutputDto } from '../../../operador/dto/output/operador-min.dto';
export class MultasUsuarioOutputDto {
@Expose()
@@ -23,7 +23,7 @@ export class MultasUsuarioOutputDto {
retraso;
@Expose()
@Type(() => OperadorMinsOutputDto)
@Type(() => OperadorMinOutputDto)
opeardorMulta;
@Expose()
+2 -2
View File
@@ -1,7 +1,7 @@
import { Expose, Type } from 'class-transformer';
import { InstitucionInfraccionOutputDto } from '../../../institucion-infraccion/dto/output/institucion-infraccion.dto';
import { PrestamoMinOutputDto } from '../../../prestamo/dto/output/prestamo-min.dto';
import { OperadorMinsOutputDto } from '../../../operador/dto/output/operador-min.dto';
import { OperadorMinOutputDto } from '../../../operador/dto/output/operador-min.dto';
export class MultasOutputDto {
@Expose()
@@ -23,7 +23,7 @@ export class MultasOutputDto {
retraso;
@Expose()
@Type(() => OperadorMinsOutputDto)
@Type(() => OperadorMinOutputDto)
opeardorMulta;
@Expose()
+1 -1
View File
@@ -2,7 +2,7 @@ import { Expose, Type } from 'class-transformer';
import { InstitucionMinOutputDto } from '../../../institucion/dto/output/institucion-min.dto';
import { TipoUsuarioOutputDto } from '../../../tipo-usuario/dto/output/tipo-usuario.dto';
export class OperadorMinsOutputDto {
export class OperadorMinOutputDto {
@Expose()
id_operador;
@@ -2,6 +2,9 @@ import { Expose, Type } from 'class-transformer';
import { UsuariosOutputDto } from '../../../usuario/dto/output/usuarios.dto';
export class PrestamoMinEquipoOutputDto {
@Expose()
id_prestamo;
@Expose()
fecha_entrega;
@@ -14,9 +17,6 @@ export class PrestamoMinEquipoOutputDto {
@Expose()
hora_inicio;
@Expose()
id_prestamo;
@Expose()
@Type(() => UsuariosOutputDto)
usuario;
+6 -16
View File
@@ -1,17 +1,14 @@
import { Expose, Type } from 'class-transformer';
import { OperadorMinsOutputDto } from '../../../operador/dto/output/operador-min.dto';
import { EquipoMinOutputDto } from '../../../equipo/dto/output/equipo-min.dto';
import { UsuariosOutputDto } from '../../../usuario/dto/output/usuarios.dto';
export class PrestamoEquipoOutputDto {
@Expose()
id_prestamo;
@Expose()
activo;
@Expose()
cancelado_operador;
@Expose()
cancelado_usuario;
@Expose()
fecha_entrega;
@@ -28,15 +25,8 @@ export class PrestamoEquipoOutputDto {
hora_max_recoger;
@Expose()
id_prestamo;
@Expose()
@Type(() => OperadorMinsOutputDto)
operadorEntrega;
@Expose()
@Type(() => OperadorMinsOutputDto)
operadorRegreso;
@Type(() => EquipoMinOutputDto)
equipo;
@Expose()
@Type(() => UsuariosOutputDto)
+3 -3
View File
@@ -3,6 +3,9 @@ import { EquipoMinOutputDto } from '../../../equipo/dto/output/equipo-min.dto';
import { UsuariosOutputDto } from '../../../usuario/dto/output/usuarios.dto';
export class PrestamoMinOutputDto {
@Expose()
id_prestamo;
@Expose()
fecha_entrega;
@@ -15,9 +18,6 @@ export class PrestamoMinOutputDto {
@Expose()
hora_inicio;
@Expose()
id_prestamo;
@Expose()
@Type(() => EquipoMinOutputDto)
equipo;
@@ -2,6 +2,9 @@ import { Expose, Type } from 'class-transformer';
import { EquipoMinOutputDto } from '../../../equipo/dto/output/equipo-min.dto';
export class PrestamoMinUsuarioOutputDto {
@Expose()
id_prestamo;
@Expose()
fecha_entrega;
@@ -14,9 +17,6 @@ export class PrestamoMinUsuarioOutputDto {
@Expose()
hora_inicio;
@Expose()
id_prestamo;
@Expose()
@Type(() => EquipoMinOutputDto)
equipo;
+3 -23
View File
@@ -1,18 +1,13 @@
import { Expose, Type } from 'class-transformer';
import { EquipoMinOutputDto } from '../../../equipo/dto/output/equipo-min.dto';
import { OperadorMinsOutputDto } from '../../../operador/dto/output/operador-min.dto';
import { UsuariosOutputDto } from '../../../usuario/dto/output/usuarios.dto';
export class PrestamoOutputDto {
@Expose()
id_prestamo;
@Expose()
activo;
@Expose()
cancelado_operador;
@Expose()
cancelado_usuario;
@Expose()
fecha_entrega;
@@ -28,22 +23,7 @@ export class PrestamoOutputDto {
@Expose()
hora_max_recoger;
@Expose()
id_prestamo;
@Expose()
@Type(() => EquipoMinOutputDto)
equipo;
@Expose()
@Type(() => OperadorMinsOutputDto)
operadorEntrega;
@Expose()
@Type(() => OperadorMinsOutputDto)
operadorRegreso;
@Expose()
@Type(() => UsuariosOutputDto)
usuario;
}
@@ -2,18 +2,9 @@ import { Expose, Type } from 'class-transformer';
import { EquiposOutputDto } from '../../../equipo/dto/output/equipos.dto';
import { UsuariosOutputDto } from '../../../usuario/dto/output/usuarios.dto';
export class PrestamoActivoOutputDto {
export class PrestamosActivosOutputDto {
@Expose()
activo;
@Expose()
cancelado_operador;
@Expose()
cancelado_usuario;
@Expose()
fecha_entrega;
id_prestamo;
@Expose()
fecha_inicio;
@@ -27,9 +18,6 @@ export class PrestamoActivoOutputDto {
@Expose()
hora_max_recoger;
@Expose()
id_prestamo;
@Expose()
@Type(() => EquiposOutputDto)
equipo;
@@ -0,0 +1,44 @@
import { Expose, Type } from 'class-transformer';
import { OperadorMinOutputDto } from '../../../operador/dto/output/operador-min.dto';
import { UsuariosOutputDto } from '../../../usuario/dto/output/usuarios.dto';
export class PrestamosEquipoOutputDto {
@Expose()
id_prestamo;
@Expose()
activo;
@Expose()
cancelado_operador;
@Expose()
cancelado_usuario;
@Expose()
fecha_entrega;
@Expose()
fecha_inicio;
@Expose()
hora_fin;
@Expose()
hora_inicio;
@Expose()
hora_max_recoger;
@Expose()
@Type(() => OperadorMinOutputDto)
operadorEntrega;
@Expose()
@Type(() => OperadorMinOutputDto)
operadorRegreso;
@Expose()
@Type(() => UsuariosOutputDto)
usuario;
}
@@ -1,7 +1,11 @@
import { Expose, Type } from 'class-transformer';
import { EquipoMinOutputDto } from '../../../equipo/dto/output/equipo-min.dto';
import { OperadorMinOutputDto } from '../../../operador/dto/output/operador-min.dto';
export class PrestamosUsuarioOutputDto {
@Expose()
id_prestamo;
export class PrestamoUsuarioOutputDto {
@Expose()
activo;
@@ -26,10 +30,15 @@ export class PrestamoUsuarioOutputDto {
@Expose()
hora_max_recoger;
@Expose()
id_prestamo;
@Expose()
@Type(() => EquipoMinOutputDto)
equipo;
@Expose()
@Type(() => OperadorMinOutputDto)
operadorEntrega;
@Expose()
@Type(() => OperadorMinOutputDto)
operadorRegreso;
}
+49
View File
@@ -0,0 +1,49 @@
import { Expose, Type } from 'class-transformer';
import { EquipoMinOutputDto } from '../../../equipo/dto/output/equipo-min.dto';
import { OperadorMinOutputDto } from '../../../operador/dto/output/operador-min.dto';
import { UsuariosOutputDto } from '../../../usuario/dto/output/usuarios.dto';
export class PrestamosOutputDto {
@Expose()
id_prestamo;
@Expose()
activo;
@Expose()
cancelado_operador;
@Expose()
cancelado_usuario;
@Expose()
fecha_entrega;
@Expose()
fecha_inicio;
@Expose()
hora_fin;
@Expose()
hora_inicio;
@Expose()
hora_max_recoger;
@Expose()
@Type(() => EquipoMinOutputDto)
equipo;
@Expose()
@Type(() => OperadorMinOutputDto)
operadorEntrega;
@Expose()
@Type(() => OperadorMinOutputDto)
operadorRegreso;
@Expose()
@Type(() => UsuariosOutputDto)
usuario;
}
+10 -9
View File
@@ -2,7 +2,6 @@ import { Body, Controller, Get, Post, Put, Query } from '@nestjs/common';
import { ApiBody, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
import { Serealize } from '../interceptors/serialize.interceptor';
import { PrestamoService } from './prestamo.service';
import { ActivosDto } from './dto/input/activos.dto';
import { CancelarUsuarioDto } from './dto/input/cancelar-usuario.dto';
import { CancelarOperadorDto } from './dto/input/cancelar-operador.dto';
@@ -18,16 +17,18 @@ import { RegresarIdPrestamoDto } from './dto/input/regresar-id-prestamo.dto';
import { RegresarNumeroInventarioDto } from './dto/input/regresar-numero-inventario.dto';
import { PrestamoOutputDto } from './dto/output/prestamo.dto';
import { PrestamoActivoOutputDto } from './dto/output/prestamo-activo.dto';
import { PrestamoUsuarioOutputDto } from './dto/output/prestamo-usuario.dto';
import { PrestamoEquipoOutputDto } from './dto/output/prestamo-equipo.dto';
import { PrestamosOutputDto } from './dto/output/prestamos.dto';
import { PrestamosActivosOutputDto } from './dto/output/prestamos-activos.dto';
import { PrestamosEquipoOutputDto } from './dto/output/prestamos-equipo.dto';
import { PrestamosUsuarioOutputDto } from './dto/output/prestamos-usuario.dto';
@Controller('prestamo')
@ApiTags('prestamo')
export class PrestamoController {
constructor(private prestamoService: PrestamoService) {}
@Serealize(PrestamoActivoOutputDto)
@Serealize(PrestamosActivosOutputDto)
@Get('activos')
@ApiOperation({
description:
@@ -130,7 +131,7 @@ export class PrestamoController {
return this.prestamoService.entregar(body.id_prestamo, body.id_operador);
}
@Serealize(PrestamoOutputDto)
@Serealize(PrestamosOutputDto)
@Get('historial')
@ApiOperation({
description:
@@ -205,7 +206,7 @@ export class PrestamoController {
return this.prestamoService.findAll(query);
}
@Serealize(PrestamoEquipoOutputDto)
@Serealize(PrestamosEquipoOutputDto)
@Get('historial-equipo')
@ApiOperation({
description:
@@ -228,7 +229,7 @@ export class PrestamoController {
);
}
@Serealize(PrestamoUsuarioOutputDto)
@Serealize(PrestamosUsuarioOutputDto)
@Get('historial-usuario')
@ApiOperation({
description:
@@ -251,7 +252,7 @@ export class PrestamoController {
);
}
@Serealize(PrestamoUsuarioOutputDto)
@Serealize(PrestamosUsuarioOutputDto)
@Post()
@ApiOperation({ description: 'Endpoint que crea un prestamo nuevo.' })
@ApiBody({
@@ -287,7 +288,7 @@ export class PrestamoController {
return this.prestamoService.findById(parseInt(query.id_prestamo));
}
@Serealize(PrestamoUsuarioOutputDto)
@Serealize(PrestamoOutputDto)
@Get('prestamo-id-usuario')
@ApiOperation({
description:
+247 -112
View File
@@ -7,13 +7,11 @@ import {
NotFoundException,
} from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { FindOperator, Like, Repository } from 'typeorm';
import { Repository } from 'typeorm';
import { AppGateway } from '../app.gateway';
import { Institucion } from '../institucion/entity/institucion.entity';
import { Modulo } from '../modulo/entity/modulo.entity';
import { Operador } from '../operador/entity/operador.entity';
import { Prestamo } from './entity/prestamo.entity';
import { TipoCarrito } from '../institucion-tipo-carrito/entity/tipo-carrito.entity';
import { TipoUsuario } from '../tipo-usuario/entity/tipo-usuario.entity';
import { EquipoService } from '../equipo/equipo.service';
import { InstitucionService } from '../institucion/institucion.service';
import { InstitucionDiaService } from '../institucion-dia/institucion-dia.service';
@@ -26,7 +24,6 @@ import { MultaService } from '../multa/multa.service';
import { OperadorService } from '../operador/operador.service';
import { TipoUsuarioService } from '../tipo-usuario/tipo-usuario.service';
import { UsuarioService } from '../usuario/usuario.service';
import { AppGateway } from '../app.gateway';
@Injectable()
export class PrestamoService {
@@ -106,6 +103,8 @@ export class PrestamoService {
id_tipo_entrada?: number,
) {
const ahora = moment();
const mensajeNoPoderPedir = 'No puedes pedir equipos de cómputo porque:';
const sistema = await this.operadorService.findById(1);
const usuario = await this.usuarioService.findById(id_usuario, true, true);
const modulo = await this.moduloService.findById(id_modulo);
const tipoCarrito =
@@ -120,41 +119,68 @@ export class PrestamoService {
id_tipo_entrada,
)
: null;
const institucionDia = await this.institucionDiaService.findInstitucionDia(
modulo.institucion,
ahora.weekday(),
);
const horaMax = moment(
`${ahora.format('YYYY-MM-DD')} ${institucionDia.hora_fin}`,
);
const horaMin = moment(
`${ahora.format('YYYY-MM-DD')} ${institucionDia.hora_inicio}`,
);
if (ahora.weekday() === 0 || ahora.weekday() === 6)
if (!usuario.activo)
throw new ConflictException(
'No se puede pedir equipo de cómputo los sabados y domingos.',
`${mensajeNoPoderPedir} tu cuenta esta desactivada.`,
);
else {
const institucionDia =
await this.institucionDiaService.findInstitucionDia(
modulo.institucion,
ahora.weekday(),
);
const horaMax = moment(
`${ahora.format('YYYY-MM-DD')} ${institucionDia.hora_fin}`,
);
const horaMin = moment(
`${ahora.format('YYYY-MM-DD')} ${institucionDia.hora_inicio}`,
);
if (!institucionDia.activo)
throw new ConflictException(
'El día de hoy no se esta realizando préstamos de equipos.',
);
if (ahora > horaMax)
throw new Error('Ya no se puede realizar un préstamo el día de hoy.');
if (ahora < horaMin)
throw new Error('Aún es muy temprano para realizar un préstamo.');
if (ahora.weekday() === 0 || ahora.weekday() === 6)
throw new ConflictException('No hay servicio los días sábado y domingo.');
for (let i = 0; i < usuario.instituciones.length; i++) {
const institucion =
usuario.instituciones[i].institucionCarrera.institucion;
if (institucion.id_institucion === modulo.institucion.id_institucion) {
if (!usuario.instituciones[i].activo)
throw new ConflictException(
`${mensajeNoPoderPedir} tu cuenta esta desactivada en esta institución.`,
);
if (usuario.instituciones[i].multa)
throw new ConflictException(
`${mensajeNoPoderPedir} tienes una multa activa.`,
);
break;
}
}
for (let i = 0; i < usuario.instituciones.length; i++)
if (
usuario.instituciones[i].institucionCarrera.institucion
.id_institucion === modulo.institucion.id_institucion &&
usuario.instituciones[i].multa
)
if (!institucionDia.activo)
throw new ConflictException(
'El día de hoy no hay servicio de préstamo de equipos.',
);
if (ahora < horaMin)
throw new ConflictException(
`El servicio inicia a las ${institucionDia.hora_inicio} el día de hoy.`,
);
if (ahora > horaMax)
throw new ConflictException(
`El servicio terminó a las ${institucionDia.hora_fin} el día de hoy.`,
);
for (let i = 0; i < institucionDia.horasExcepcion.length; i++) {
const horaFin = moment(
`${ahora.format('YYYY-MM-DD')} ${
institucionDia.horasExcepcion[i].hora_fin
}`,
);
const horaInicio = moment(
`${ahora.format('YYYY-MM-DD')} ${
institucionDia.horasExcepcion[i].hora_inicio
}`,
);
if (ahora > horaInicio && ahora < horaFin)
throw new ConflictException(
'Este usuario tiene una multa activa. No puede pedir equipos de cómputo.',
`Se suspendió temporalmente el servicio de ${institucionDia.horasExcepcion[i].hora_inicio} a ${institucionDia.horasExcepcion[i].hora_fin}.`,
);
}
return this.repository
.findOne({ activo: true, usuario })
.then((existePrestamo) => {
@@ -162,18 +188,13 @@ export class PrestamoService {
throw new ConflictException(
'Este usuario ya tiene un préstamo activo.',
);
return this.equipoService.reseteo(
return this.equipoService.findEquipo(
modulo,
tipoCarrito,
programa,
tipoEntrada,
);
})
.then((_) =>
this.equipoService
.findEquipo(modulo, tipoCarrito, programa, tipoEntrada)
.getOne(),
)
.then(async (equipo) => {
if (!equipo)
throw new ConflictException(
@@ -189,6 +210,8 @@ export class PrestamoService {
hora_max_recoger: ahora
.add(modulo.institucion.tiempo_recoger, 'm')
.toDate(),
operadorEntrega: sistema,
operadorRegreso: sistema,
usuario,
}),
),
@@ -201,11 +224,10 @@ export class PrestamoService {
async desactivarPrestamos() {
const ahora = moment();
const sistema = await this.operadorService.findById(1);
return this.repository
.find({
join: { alias: 'p', innerJoin: { e: 'p.equipo' } },
join: { alias: 'p', innerJoin: { e: 'p.equipo', s: 'e.status' } },
where: { activo: true, equipo: { status: { id_status: 2 } } },
})
.then(async (prestamos) => {
@@ -213,7 +235,6 @@ export class PrestamoService {
if (ahora.diff(moment(prestamos[i].hora_max_recoger)) > 0) {
prestamos[i].activo = false;
prestamos[i].cancelado_operador = true;
prestamos[i].operadorRegreso = sistema;
await this.repository
.save(prestamos[i])
.then((_) =>
@@ -253,7 +274,7 @@ export class PrestamoService {
.then((_) => {
this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario);
return {
message: 'Se entregó el equipo de cómputo correctamente.',
message: 'Se entregó el equipo de cómputo al usuario.',
equipo: prestamo.equipo,
};
});
@@ -275,29 +296,32 @@ export class PrestamoService {
id_tipo_usuario?: string;
usuario?: string;
}) {
const busqueda: {
activo?: boolean;
fechaInicio?: Date;
fechaFin?: Date;
id_prestamo?: FindOperator<string>;
equipo: {
equipo?: FindOperator<string>;
carrito: {
carrito?: FindOperator<string>;
modulo?: Modulo | { institucion: Institucion };
tipoCarrito?: TipoCarrito;
};
};
usuario: {
usuario?: FindOperator<string>;
tipoUsuario?: TipoUsuario;
};
operadorEntrega?: Operador;
operadorRegreso?: Operador;
} = {
equipo: { carrito: {} },
usuario: {},
};
const query = this.repository
.createQueryBuilder('p')
.innerJoinAndSelect('p.usuario', 'u')
.innerJoinAndSelect('u.instituciones', 'is')
.innerJoinAndSelect('is.institucionCarrera', 'ic')
.innerJoinAndSelect('ic.institucion', 'in')
.innerJoinAndSelect('ic.carrera', 'ca')
.innerJoinAndSelect('ca.nivel', 'n')
.innerJoinAndSelect('p.equipo', 'e')
.innerJoinAndSelect('e.status', 's')
.innerJoinAndSelect('e.carrito', 'c')
.innerJoinAndSelect('c.modulo', 'm')
.innerJoinAndSelect('m.institucion', 'i')
.innerJoinAndSelect('c.tipoCarrito', 'tc')
.innerJoinAndSelect('p.operadorEntrega', 'oe')
.innerJoinAndSelect('oe.tipoUsuario', 'tuoe')
.innerJoinAndSelect('p.operadorRegreso', 'or')
.innerJoinAndSelect('or.tipoUsuario', 'tuor')
.orderBy('i.institucion')
.addOrderBy('m.modulo')
.addOrderBy('tc.tipo_carrito')
.addOrderBy('c.carrito')
.addOrderBy('e.equipo')
.addOrderBy('p.id_prestamo', 'DESC')
.skip((parseInt(filtros.pagina) - 1) * 25)
.take(25);
const institucion = filtros.id_institucion
? await this.institucionService.findById(parseInt(filtros.id_institucion))
: null;
@@ -326,71 +350,161 @@ export class PrestamoService {
: null;
if (filtros.activo) {
if (typeof filtros.activo === 'boolean') busqueda.activo = filtros.activo;
else busqueda.activo = filtros.activo === 'true';
if (typeof filtros.activo === 'boolean')
query.andWhere('p.activo = :activo', { activo: filtros.activo });
else
query.andWhere('p.activo = :activo', {
activo: filtros.activo === 'true',
});
}
if (filtros.id_prestamo)
query.andWhere('p.id_prestamo LIKE :id_prestamo', {
id_prestamo: `%${filtros.id_prestamo}%`,
});
if (filtros.carrito)
busqueda.equipo.carrito.carrito = Like(`%${filtros.carrito}%`);
if (filtros.equipo) busqueda.equipo.equipo = Like(`%${filtros.equipo}%`);
if (filtros.id_prestamo) busqueda.id_prestamo = Like(filtros.id_prestamo);
query.andWhere('c.carrito LIKE :carrito', {
carrito: `%${filtros.carrito}%`,
});
if (filtros.equipo)
query.andWhere('e.equipo LIKE :equipo', {
equipo: `%${filtros.equipo}%`,
});
if (filtros.usuario)
busqueda.usuario.usuario = Like(`%${filtros.usuario}%`);
if (institucion) busqueda.equipo.carrito.modulo = { institucion };
if (modulo) busqueda.equipo.carrito.modulo = modulo;
if (operadorEntrega) busqueda.operadorEntrega = operadorEntrega;
if (operadorRegreso) busqueda.operadorRegreso = operadorRegreso;
if (tipoCarrito) busqueda.equipo.carrito.tipoCarrito = tipoCarrito;
if (tipoUsuario) busqueda.usuario.tipoUsuario = tipoUsuario;
return this.repository.findAndCount({
join: {
alias: 'p',
innerJoinAndSelect: {
e: 'p.equipo',
u: 'p.usuario',
c: 'e.carrito',
m: 'c.modulo',
tc: 'c.tipoCarrito',
},
},
where: busqueda,
skip: (parseInt(filtros.pagina) - 1) * 25,
take: 25,
});
query.andWhere('u.usuario LIKE :usuario', {
usuario: `%${filtros.usuario}%`,
});
if (institucion)
query.andWhere('i.id_institucion = :id_institucion', {
id_institucion: institucion.id_institucion,
});
if (modulo)
query.andWhere('m.id_modulo = :id_modulo', {
id_modulo: modulo.id_modulo,
});
if (tipoCarrito)
query.andWhere('tc.id_tipo_carrito = :id_tipo_carrito', {
id_tipo_carrito: tipoCarrito.id_tipo_carrito,
});
if (tipoUsuario)
query.andWhere('tu.id_tipo_usuario = :id_tipo_usuario', {
id_tipo_usuario: tipoUsuario.id_tipo_usuario,
});
if (operadorEntrega)
query.andWhere('p.id_operador_entrega = :id_operador_entrega', {
id_operador_entrega: operadorEntrega.id_operador,
});
if (operadorRegreso)
query.andWhere('p.id_operador_regreso = :id_operador_regreso', {
id_operador_regreso: operadorRegreso.id_operador,
});
return query.getManyAndCount();
}
findAllByIdUsuario(id_usuario: number, pagina: number) {
return this.usuarioService
.findById(id_usuario, true, true)
.then((usuario) =>
this.repository.findAndCount({
where: { usuario },
skip: (pagina - 1) * 25,
take: 25,
}),
this.repository
.createQueryBuilder('p')
.innerJoinAndSelect('p.usuario', 'u', 'u.id_usuario = :id_usuario', {
id_usuario: usuario.id_usuario,
})
.innerJoinAndSelect('p.equipo', 'e')
.innerJoinAndSelect('e.status', 's')
.innerJoinAndSelect('e.carrito', 'c')
.innerJoinAndSelect('c.tipoCarrito', 'tc')
.innerJoinAndSelect('c.modulo', 'm')
.innerJoinAndSelect('m.institucion', 'i')
.innerJoinAndSelect('p.operadorEntrega', 'oe')
.innerJoinAndSelect('oe.tipoUsuario', 'tuoe')
.innerJoinAndSelect('p.operadorRegreso', 'or')
.innerJoinAndSelect('or.tipoUsuario', 'tuor')
.skip((pagina - 1) * 25)
.take(25)
.getManyAndCount(),
);
}
async findAllByIdEquipo(id_equipo: number, pagina: number) {
return this.equipoService.findById(id_equipo).then((equipo) =>
this.repository.findAndCount({
where: { equipo },
skip: (pagina - 1) * 25,
take: 25,
}),
this.repository
.createQueryBuilder('p')
.innerJoinAndSelect('p.usuario', 'u')
.innerJoinAndSelect('u.instituciones', 'is')
.innerJoinAndSelect('is.institucionCarrera', 'ic')
.innerJoinAndSelect('ic.institucion', 'in')
.innerJoinAndSelect('ic.carrera', 'ca')
.innerJoinAndSelect('ca.nivel', 'n')
.innerJoinAndSelect('p.equipo', 'e', 'e.id_equipo = :id_equipo', {
id_equipo: equipo.id_equipo,
})
.innerJoinAndSelect('e.status', 's')
.innerJoinAndSelect('e.carrito', 'c')
.innerJoinAndSelect('c.modulo', 'm')
.innerJoinAndSelect('m.institucion', 'i')
.innerJoinAndSelect('c.tipoCarrito', 'tc')
.innerJoinAndSelect('p.operadorEntrega', 'oe')
.innerJoinAndSelect('oe.tipoUsuario', 'tuoe')
.innerJoinAndSelect('p.operadorRegreso', 'or')
.innerJoinAndSelect('or.tipoUsuario', 'tuor')
.orderBy('p.id_prestamo', 'DESC')
.skip((pagina - 1) * 25)
.take(25)
.getManyAndCount(),
);
}
findById(id_prestamo: number) {
return this.repository.findOne({ id_prestamo }).then((prestamo) => {
if (!prestamo) throw new NotFoundException('No existe este préstamo.');
return prestamo;
});
return this.repository
.createQueryBuilder('p')
.innerJoinAndSelect('p.usuario', 'u')
.innerJoinAndSelect('u.instituciones', 'is')
.innerJoinAndSelect('is.institucionCarrera', 'ic')
.innerJoinAndSelect('ic.institucion', 'in')
.innerJoinAndSelect('ic.carrera', 'ca')
.innerJoinAndSelect('ca.nivel', 'n')
.innerJoinAndSelect('p.equipo', 'e')
.innerJoinAndSelect('e.carrito', 'c')
.innerJoinAndSelect('c.modulo', 'm')
.innerJoinAndSelect('m.institucion', 'i')
.innerJoinAndSelect('e.status', 's')
.innerJoinAndSelect('e.tiposEntradas', 'tes')
.innerJoinAndSelect('tes.tipoEntrada', 'te')
.innerJoinAndSelect('e.programas', 'ps')
.innerJoinAndSelect('ps.programa', 'pr')
.innerJoinAndSelect('c.tipoCarrito', 'tc')
.where('p.id_prestamo = :id_prestamo', {
id_prestamo,
})
.getOne()
.then((prestamo) => {
if (!prestamo) throw new NotFoundException('No existe este préstamo.');
return prestamo;
});
}
findByIdUsuario(id_usuario: number) {
return this.usuarioService
.findById(id_usuario, true, true)
.then((usuario) => this.repository.findOne({ usuario, activo: true }))
.then((usuario) =>
this.repository
.createQueryBuilder('p')
.innerJoinAndSelect('p.usuario', 'u', 'u.id_usuario = :id_usuario', {
id_usuario: usuario.id_usuario,
})
.innerJoinAndSelect('p.equipo', 'e')
.innerJoinAndSelect('e.carrito', 'c')
.innerJoinAndSelect('c.modulo', 'm')
.innerJoinAndSelect('m.institucion', 'i')
.innerJoinAndSelect('e.status', 's')
.innerJoinAndSelect('e.tiposEntradas', 'tes')
.innerJoinAndSelect('tes.tipoEntrada', 'te')
.innerJoinAndSelect('e.programas', 'ps')
.innerJoinAndSelect('ps.programa', 'pr')
.innerJoinAndSelect('c.tipoCarrito', 'tc')
.where('p.activo = 1')
.getOne(),
)
.then((prestamo) => {
if (!prestamo)
throw new NotFoundException(
@@ -411,11 +525,30 @@ export class PrestamoService {
return this.equipoService
.findByNumeroInventario(institucion, numero_inventario)
.then((equipo) => this.repository.findOne({ equipo, activo: true }))
.then((equipo) =>
this.repository
.createQueryBuilder('p')
.innerJoinAndSelect('p.usuario', 'u')
.innerJoinAndSelect('u.instituciones', 'is')
.innerJoinAndSelect('is.institucionCarrera', 'ic')
.innerJoinAndSelect('ic.institucion', 'in')
.innerJoinAndSelect('ic.carrera', 'ca')
.innerJoinAndSelect('ca.nivel', 'n')
.innerJoinAndSelect('p.equipo', 'e', 'e.id_equipo = :id_equipo', {
id_equipo: equipo.id_equipo,
})
.innerJoinAndSelect('e.status', 's')
.innerJoinAndSelect('e.carrito', 'c')
.innerJoinAndSelect('c.modulo', 'm')
.innerJoinAndSelect('m.institucion', 'i')
.innerJoinAndSelect('c.tipoCarrito', 'tc')
.where('p.activo = 1')
.getOne(),
)
.then((prestamo) => {
if (!prestamo)
throw new NotFoundException(
'No existe este un préstamo activo con este equipo de cómputo.',
'No existe un préstamo activo con este equipo de cómputo.',
);
return prestamo;
});
@@ -435,7 +568,9 @@ export class PrestamoService {
this.validacionBasicaPrestamo(prestamo);
if (prestamo.equipo.status.id_status === 2)
throw new ConflictException('Aun no se entrega el equipo al usuario.');
throw new ConflictException(
'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.');
prestamo.activo = false;
+19 -5
View File
@@ -173,11 +173,25 @@ export class UsuarioService {
}
findById(id_usuario: number, validarNoExiste = true, password = false) {
return this.repository.findOne({ id_usuario }).then((usuario) => {
if (validarNoExiste && (!usuario || (password && !usuario.password)))
throw new NotFoundException('No existe este usuario.');
return usuario;
});
return this.repository
.findOne({
join: {
alias: 'u',
innerJoinAndSelect: {
is: 'u.instituciones',
ic: 'is.institucionCarrera',
c: 'ic.carrera',
i: 'ic.institucion',
n: 'c.nivel',
},
},
where: { id_usuario },
})
.then((usuario) => {
if (validarNoExiste && (!usuario || (password && !usuario.password)))
throw new NotFoundException('No existe este usuario.');
return usuario;
});
}
findByUsuario(usuario: string, validarNoExiste = true, password = false) {