diff --git a/src/cron/cron.service.ts b/src/cron/cron.service.ts index 813598e..01d2e96 100644 --- a/src/cron/cron.service.ts +++ b/src/cron/cron.service.ts @@ -32,7 +32,9 @@ export class CronService { this.appGateway.actualizarOperador( prestamos[i].equipo.carrito.modulo.institucion.id_institucion, ); - this.appGateway.actualizarUsuario(prestamos[i].usuario.id_usuario); + this.appGateway.actualizarUsuario( + prestamos[i].institucionUsuario.usuario.id_usuario, + ); }); } }); @@ -56,7 +58,7 @@ export class CronService { prestamos[i].equipo.carrito.modulo.institucion.id_institucion, ); this.appGateway.actualizarUsuario( - prestamos[i].usuario.id_usuario, + prestamos[i].institucionUsuario.usuario.id_usuario, ); }); } @@ -88,7 +90,7 @@ export class CronService { // Quitamos multas en institución usuario this.institucionUsuarioService.updateMulta( multas[i].institucionInfraccion.institucion, - multas[i].prestamo.usuario, + multas[i].prestamo.institucionUsuario.usuario, false, ), ); diff --git a/src/institucion-usuario/dto/output/usuario-institucion-carrera-min.dto.ts b/src/institucion-usuario/dto/output/usuario-institucion-carrera-min.dto.ts new file mode 100644 index 0000000..c64dee9 --- /dev/null +++ b/src/institucion-usuario/dto/output/usuario-institucion-carrera-min.dto.ts @@ -0,0 +1,16 @@ +import { Expose, Type } from 'class-transformer'; +import { InstitucionCarreaOutputDto } from '../../../institucion-carrera/dto/output/institucion-carrera.dto'; +import { UsuariosOutputDto } from '../../../usuario/dto/output/usuarios.dto'; + +export class UsuarioInstitucionCarreraMinOutputDto { + @Expose() + id_institucion_usuario; + + @Expose() + @Type(() => InstitucionCarreaOutputDto) + institucionCarrera; + + @Expose() + @Type(() => UsuariosOutputDto) + usuario; +} diff --git a/src/multa/entity/views/full-informacion-multa.view.ts b/src/multa/entity/views/full-informacion-multa.view.ts index 78fbfdc..5282e25 100644 --- a/src/multa/entity/views/full-informacion-multa.view.ts +++ b/src/multa/entity/views/full-informacion-multa.view.ts @@ -2,6 +2,7 @@ import { DataSource, ViewEntity, ViewColumn } from 'typeorm'; import { Infraccion } from '../../../institucion-infraccion/entity/infraccion.entity'; import { Institucion } from '../../../institucion/entity/institucion.entity'; import { InstitucionInfraccion } from '../../../institucion-infraccion/entity/institucion-infraccion.entity'; +import { InstitucionUsuario } from '../../../institucion-usuario/entity/institucion-usuario.entity'; import { Multa } from '../multa.entity'; import { Operador } from '../../../operador/entity/operador.entity'; import { Prestamo } from '../../../prestamo/entity/prestamo.entity'; @@ -24,7 +25,8 @@ import { Usuario } from '../../../usuario/entity/usuario.entity'; .addSelect('ii.id_institucion', 'id_institucion') .addSelect('om.operador', 'operador') .addSelect('p.id_equipo', 'id_equipo') - .addSelect('p.id_usuario', 'id_usuario') + .addSelect('p.id_institucion_usuario', 'id_institucion_usuario') + .addSelect('iu.id_usuario', 'id_usuario') .addSelect('inf.infraccion', 'infraccion') .addSelect('i.institucion', 'institucion') .addSelect('u.usuario', 'usuario') @@ -38,8 +40,13 @@ import { Usuario } from '../../../usuario/entity/usuario.entity'; .innerJoin(Operador, 'om', 'om.id_operador = mu.id_operador') .innerJoin(Prestamo, 'p', 'p.id_prestamo = mu.id_prestamo') .innerJoin(Infraccion, 'inf', 'inf.id_infraccion = ii.id_infraccion') - .innerJoin(Usuario, 'u', 'u.id_usuario = p.id_usuario') - .innerJoin(Institucion, 'i', 'i.id_institucion = ii.id_institucion'), + .innerJoin( + InstitucionUsuario, + 'iu', + 'iu.id_institucion_usuario = p.id_institucion_usuario', + ) + .innerJoin(Institucion, 'i', 'i.id_institucion = ii.id_institucion') + .innerJoin(Usuario, 'u', 'u.id_usuario = iu.id_usuario'), }) export class FullInformacionMultaView { @ViewColumn() @@ -60,15 +67,18 @@ export class FullInformacionMultaView { @ViewColumn() id_equipo: number; - @ViewColumn() - id_institucion: number; - @ViewColumn() id_infraccion: number; + @ViewColumn() + id_institucion: number; + @ViewColumn() id_institucion_infraccion: number; + @ViewColumn() + id_institucion_usuario: number; + @ViewColumn() id_operador: number; diff --git a/src/multa/entity/views/informacion-multa.view.ts b/src/multa/entity/views/informacion-multa.view.ts index f0ad78cb..b7e34c0 100644 --- a/src/multa/entity/views/informacion-multa.view.ts +++ b/src/multa/entity/views/informacion-multa.view.ts @@ -1,8 +1,9 @@ import { DataSource, ViewEntity, ViewColumn } from 'typeorm'; import { InstitucionInfraccion } from '../../../institucion-infraccion/entity/institucion-infraccion.entity'; +import { InstitucionUsuario } from '../../../institucion-usuario/entity/institucion-usuario.entity'; import { Multa } from '../multa.entity'; -import { Prestamo } from '../../../prestamo/entity/prestamo.entity'; import { Operador } from '../../../operador/entity/operador.entity'; +import { Prestamo } from '../../../prestamo/entity/prestamo.entity'; @ViewEntity({ expression: (dataSource: DataSource) => @@ -17,7 +18,8 @@ import { Operador } from '../../../operador/entity/operador.entity'; .addSelect('mu.retraso', 'retraso') .addSelect('ii.id_infraccion', 'id_infraccion') .addSelect('ii.id_institucion', 'id_institucion') - .addSelect('p.id_usuario', 'id_usuario') + .addSelect('p.id_institucion_usuario', 'id_institucion_usuario') + .addSelect('iu.id_usuario', 'id_usuario') .from(Multa, 'mu') .innerJoin( InstitucionInfraccion, @@ -25,7 +27,12 @@ import { Operador } from '../../../operador/entity/operador.entity'; 'ii.id_institucion_infraccion = mu.id_institucion_infraccion', ) .innerJoin(Prestamo, 'p', 'p.id_prestamo = mu.id_prestamo') - .innerJoin(Operador, 'om', 'om.id_operador = mu.id_operador'), + .innerJoin(Operador, 'om', 'om.id_operador = mu.id_operador') + .innerJoin( + InstitucionUsuario, + 'iu', + 'iu.id_institucion_usuario = p.id_institucion_usuario', + ), }) export class InformacionMultaView { @ViewColumn() @@ -46,6 +53,9 @@ export class InformacionMultaView { @ViewColumn() id_institucion_infraccion: number; + @ViewColumn() + id_institucion_usuario: number; + @ViewColumn() id_operador: number; diff --git a/src/multa/multa.service.ts b/src/multa/multa.service.ts index 53790b8..84e718b 100644 --- a/src/multa/multa.service.ts +++ b/src/multa/multa.service.ts @@ -89,7 +89,7 @@ export class MultaService { // Multamos al usuario en todas las carreras a las que pertenece en esa institución this.institucionUsuarioService.updateMulta( operadorMulta.institucion, - prestamo.usuario, + prestamo.institucionUsuario.usuario, true, ), ); @@ -159,7 +159,9 @@ export class MultaService { operadorMulta: { id_operador: infoMultas[i].id_operador }, prestamo: { id_prestamo: infoMultas[i].id_prestamo, - usuario: { id_usuario: infoMultas[i].id_usuario }, + institucionUsuario: { + usuario: { id_usuario: infoMultas[i].id_usuario }, + }, }, }), ); @@ -232,13 +234,17 @@ export class MultaService { return this.repository.find({ join: { alias: 'mu', - innerJoin: { p: 'mu.prestamo', u: 'p.usuario' }, + innerJoin: { + p: 'mu.prestamo', + iu: 'p.institucionUsuario', + u: 'iu.usuario', + }, innerJoinAndSelect: { ii: 'mu.institucionInfraccion', i: 'ii.institucion', }, }, - where: { activo: true, prestamo: { usuario } }, + where: { activo: true, prestamo: { institucionUsuario: { usuario } } }, }); } @@ -267,10 +273,12 @@ export class MultaService { }, prestamo: { id_prestamo: infoMulta.id_prestamo, - usuario: { - id_usuario: infoMulta.id_usuario, - usuario: infoMulta.usuario, - nombre: infoMulta.nombre, + institucionUsuario: { + usuario: { + id_usuario: infoMulta.id_usuario, + usuario: infoMulta.usuario, + nombre: infoMulta.nombre, + }, }, }, }); @@ -328,7 +336,7 @@ export class MultaService { // Multamos al usuario en todas las carreras a las que pertenece en esa institución this.institucionUsuarioService.updateMulta( operador.institucion, - prestamo.usuario, + prestamo.institucionUsuario.usuario, true, ), ); diff --git a/src/prestamo/dto/input/pedir.dto.ts b/src/prestamo/dto/input/pedir.dto.ts index 7a33b3a..db68584 100644 --- a/src/prestamo/dto/input/pedir.dto.ts +++ b/src/prestamo/dto/input/pedir.dto.ts @@ -4,6 +4,9 @@ export class PedirDto { @IsInt() id_modulo: number; + @IsInt() + id_institucion_usuario: number; + @IsInt() id_tipo_carrito: number; diff --git a/src/prestamo/dto/output/activos.dto.ts b/src/prestamo/dto/output/activos.dto.ts index f26d017..1c54698 100644 --- a/src/prestamo/dto/output/activos.dto.ts +++ b/src/prestamo/dto/output/activos.dto.ts @@ -1,6 +1,6 @@ import { Expose, Type } from 'class-transformer'; import { EquiposOutputDto } from '../../../equipo/dto/output/equipos.dto'; -import { UsuariosOutputDto } from '../../../usuario/dto/output/usuarios.dto'; +import { UsuarioInstitucionCarreraMinOutputDto } from '../../../institucion-usuario/dto/output/usuario-institucion-carrera-min.dto'; export class ActivosOutputDto { @Expose() @@ -23,6 +23,6 @@ export class ActivosOutputDto { equipo; @Expose() - @Type(() => UsuariosOutputDto) - usuario; + @Type(() => UsuarioInstitucionCarreraMinOutputDto) + institucionUsuario; } diff --git a/src/prestamo/dto/output/prestamo-equipo-min.dto.ts b/src/prestamo/dto/output/prestamo-equipo-min.dto.ts index 9be6d08..70ff8ef 100644 --- a/src/prestamo/dto/output/prestamo-equipo-min.dto.ts +++ b/src/prestamo/dto/output/prestamo-equipo-min.dto.ts @@ -1,5 +1,5 @@ import { Expose, Type } from 'class-transformer'; -import { UsuariosOutputDto } from '../../../usuario/dto/output/usuarios.dto'; +import { UsuarioInstitucionCarreraMinOutputDto } from '../../../institucion-usuario/dto/output/usuario-institucion-carrera-min.dto'; export class PrestamoEquipoMinOutputDto { @Expose() @@ -18,6 +18,6 @@ export class PrestamoEquipoMinOutputDto { hora_inicio; @Expose() - @Type(() => UsuariosOutputDto) - usuario; + @Type(() => UsuarioInstitucionCarreraMinOutputDto) + institucionUsuario; } diff --git a/src/prestamo/dto/output/prestamo-equipo.dto.ts b/src/prestamo/dto/output/prestamo-equipo.dto.ts index 4765eb6..11ae849 100644 --- a/src/prestamo/dto/output/prestamo-equipo.dto.ts +++ b/src/prestamo/dto/output/prestamo-equipo.dto.ts @@ -1,6 +1,6 @@ import { Expose, Type } from 'class-transformer'; import { EquipoMinOutputDto } from '../../../equipo/dto/output/equipo-min.dto'; -import { UsuariosOutputDto } from '../../../usuario/dto/output/usuarios.dto'; +import { UsuarioInstitucionCarreraMinOutputDto } from '../../../institucion-usuario/dto/output/usuario-institucion-carrera-min.dto'; export class PrestamoEquipoOutputDto { @Expose() @@ -29,6 +29,6 @@ export class PrestamoEquipoOutputDto { equipo; @Expose() - @Type(() => UsuariosOutputDto) - usuario; + @Type(() => UsuarioInstitucionCarreraMinOutputDto) + institucionUsuario; } diff --git a/src/prestamo/dto/output/prestamo-min.dto.ts b/src/prestamo/dto/output/prestamo-min.dto.ts index 67a9710..3da0c46 100644 --- a/src/prestamo/dto/output/prestamo-min.dto.ts +++ b/src/prestamo/dto/output/prestamo-min.dto.ts @@ -1,6 +1,6 @@ import { Expose, Type } from 'class-transformer'; import { EquipoMinOutputDto } from '../../../equipo/dto/output/equipo-min.dto'; -import { UsuariosOutputDto } from '../../../usuario/dto/output/usuarios.dto'; +import { UsuarioInstitucionCarreraMinOutputDto } from '../../../institucion-usuario/dto/output/usuario-institucion-carrera-min.dto'; export class PrestamoMinOutputDto { @Expose() @@ -20,6 +20,6 @@ export class PrestamoMinOutputDto { equipo; @Expose() - @Type(() => UsuariosOutputDto) - usuario; + @Type(() => UsuarioInstitucionCarreraMinOutputDto) + institucionUsuario; } diff --git a/src/prestamo/dto/output/prestamos-equipo.dto.ts b/src/prestamo/dto/output/prestamos-equipo.dto.ts index 5db113b..3b7194f 100644 --- a/src/prestamo/dto/output/prestamos-equipo.dto.ts +++ b/src/prestamo/dto/output/prestamos-equipo.dto.ts @@ -1,6 +1,6 @@ import { Expose, Type } from 'class-transformer'; import { OperadorMinOutputDto } from '../../../operador/dto/output/operador-min.dto'; -import { UsuariosOutputDto } from '../../../usuario/dto/output/usuarios.dto'; +import { UsuarioInstitucionCarreraMinOutputDto } from '../../../institucion-usuario/dto/output/usuario-institucion-carrera-min.dto'; export class PrestamosEquipoOutputDto { @Expose() @@ -39,6 +39,6 @@ export class PrestamosEquipoOutputDto { operadorRegreso; @Expose() - @Type(() => UsuariosOutputDto) - usuario; + @Type(() => UsuarioInstitucionCarreraMinOutputDto) + institucionUsuario; } diff --git a/src/prestamo/dto/output/prestamos.dto.ts b/src/prestamo/dto/output/prestamos.dto.ts index 577663e..0d9da7d 100644 --- a/src/prestamo/dto/output/prestamos.dto.ts +++ b/src/prestamo/dto/output/prestamos.dto.ts @@ -1,7 +1,7 @@ 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'; +import { UsuarioInstitucionCarreraMinOutputDto } from '../../../institucion-usuario/dto/output/usuario-institucion-carrera-min.dto'; export class PrestamosOutputDto { @Expose() @@ -44,6 +44,6 @@ export class PrestamosOutputDto { operadorRegreso; @Expose() - @Type(() => UsuariosOutputDto) - usuario; + @Type(() => UsuarioInstitucionCarreraMinOutputDto) + institucionUsuario; } diff --git a/src/prestamo/dto/output/reporte.ts b/src/prestamo/dto/output/reporte.ts index b239483..14b512d 100644 --- a/src/prestamo/dto/output/reporte.ts +++ b/src/prestamo/dto/output/reporte.ts @@ -2,95 +2,101 @@ import { Expose } from 'class-transformer'; export class ReporteOutputDto { @Expose() - id_prestamo: number; + id_prestamo; @Expose() - activo: number; + activo; @Expose() - carrera: string; + cancelado_operador; @Expose() - cancelado_operador: number; + cancelado_usuario; @Expose() - cancelado_usuario: number; + carrera; @Expose() - carrito: string; + carrito; @Expose() - equipo: string; + equipo; @Expose() - fecha_entrega: Date; + fecha_entrega; @Expose() - fecha_inicio: Date; + fecha_inicio; @Expose() - hora_fin: Date; + hora_fin; @Expose() - hora_inicio: Date; + hora_inicio; @Expose() - hora_max_recoger: Date; + hora_max_recoger; @Expose() - id_carrito: number; + id_carrera; @Expose() - id_equipo: number; + id_carrito; @Expose() - id_institucion: number; + id_equipo; @Expose() - id_institucion_carrera: number; + id_institucion; @Expose() - id_modulo: number; + id_institucion_carrera; @Expose() - id_operador_entrega: number; + id_institucion_usuario; @Expose() - id_operador_regreso: number; + id_modulo; @Expose() - id_status: number; + id_operador_entrega; @Expose() - id_tipo_carrito: number; + id_operador_regreso; @Expose() - id_tipo_usuario: number; + id_status; @Expose() - id_usuario: number; + id_tipo_carrito; @Expose() - institucion: string; + id_tipo_usuario; @Expose() - modulo: string; + id_usuario; @Expose() - nombre: string; + institucion; @Expose() - numero_inventario: string; + modulo; @Expose() - operador_entrega: string; + nombre; @Expose() - operador_regreso: string; + numero_inventario; @Expose() - tipo_carrito: string; + operador_entrega; @Expose() - usuario: string; + operador_regreso; + + @Expose() + tipo_carrito; + + @Expose() + usuario; } diff --git a/src/prestamo/entity/prestamo.entity.ts b/src/prestamo/entity/prestamo.entity.ts index 9f26840..1e7d21f 100644 --- a/src/prestamo/entity/prestamo.entity.ts +++ b/src/prestamo/entity/prestamo.entity.ts @@ -10,7 +10,6 @@ import { Equipo } from '../../equipo/entity/equipo.entity'; import { InstitucionUsuario } from '../../institucion-usuario/entity/institucion-usuario.entity'; import { Multa } from '../../multa/entity/multa.entity'; import { Operador } from '../../operador/entity/operador.entity'; -import { Usuario } from '../../usuario/entity/usuario.entity'; @Entity() export class Prestamo { @@ -56,9 +55,6 @@ export class Prestamo { @Column({ type: Number, nullable: true, default: 1 }) id_operador_regreso: number; - @Column({ type: Number, nullable: true }) - id_usuario: number; - @ManyToOne(() => Equipo, (equipo) => equipo.prestamos, { eager: true }) @JoinColumn({ name: 'id_equipo' }) equipo: Equipo; @@ -87,10 +83,6 @@ export class Prestamo { @JoinColumn({ name: 'id_operador_regreso' }) operadorRegreso: Operador; - @ManyToOne(() => Usuario, (usuario) => usuario.prestamos, { eager: true }) - @JoinColumn({ name: 'id_usuario' }) - usuario: Usuario; - @OneToMany(() => Multa, (multa) => multa.prestamo) multa: Multa; } diff --git a/src/prestamo/entity/views/full-informacion-prestamo.view.ts b/src/prestamo/entity/views/full-informacion-prestamo.view.ts index 10008cc..ec5b860 100644 --- a/src/prestamo/entity/views/full-informacion-prestamo.view.ts +++ b/src/prestamo/entity/views/full-informacion-prestamo.view.ts @@ -25,44 +25,49 @@ import { Carrera } from '../../../institucion-carrera/entity/carrera.entity'; .addSelect('p.hora_inicio', 'hora_inicio') .addSelect('p.hora_max_recoger', 'hora_max_recoger') .addSelect('p.id_equipo', 'id_equipo') - .addSelect('p.id_usuario', 'id_usuario') + .addSelect('p.id_institucion_usuario', 'id_institucion_usuario') .addSelect('p.id_operador_entrega', 'id_operador_entrega') .addSelect('p.id_operador_regreso', 'id_operador_regreso') .addSelect('e.equipo', 'equipo') .addSelect('e.id_carrito', 'id_carrito') .addSelect('e.id_status', 'id_status') .addSelect('e.numero_inventario', 'numero_inventario') + .addSelect('iu.id_institucion_carrera', 'id_institucion_carrera') + .addSelect('iu.id_usuario', 'id_usuario') .addSelect('oe.operador', 'operador_entrega') .addSelect('or.operador', 'operador_regreso') - .addSelect('u.id_tipo_usuario', 'id_tipo_usuario') - .addSelect('u.nombre', 'nombre') - .addSelect('u.usuario', 'usuario') .addSelect('c.carrito', 'carrito') .addSelect('c.id_modulo', 'id_modulo') .addSelect('c.id_tipo_carrito', 'id_tipo_carrito') + .addSelect('ic.id_carrera', 'id_carrera') + .addSelect('u.id_tipo_usuario', 'id_tipo_usuario') + .addSelect('u.nombre', 'nombre') + .addSelect('u.usuario', 'usuario') .addSelect('m.id_institucion', 'id_institucion') .addSelect('m.modulo', 'modulo') .addSelect('tc.tipo_carrito', 'tipo_carrito') .addSelect('i.institucion', 'institucion') .addSelect('ca.carrera', 'carrera') - .addSelect('ic.id_institucion_carrera', 'id_institucion_carrera') .from(Prestamo, 'p') .innerJoin(Equipo, 'e', 'e.id_equipo = p.id_equipo') - .innerJoin(Operador, 'oe', 'oe.id_operador = p.id_operador_regreso') - .innerJoin(Operador, 'or', 'or.id_operador = p.id_operador_entrega') - .innerJoin(Usuario, 'u', 'u.id_usuario = p.id_usuario') + .innerJoin( + InstitucionUsuario, + 'iu', + 'iu.id_institucion_usuario = p.id_institucion_usuario', + ) + .innerJoin(Operador, 'oe', 'oe.id_operador = p.id_operador_entrega') + .innerJoin(Operador, 'or', 'or.id_operador = p.id_operador_regreso') .innerJoin(Carrito, 'c', 'c.id_carrito = e.id_carrito') - .innerJoin(InstitucionUsuario, 'iu', 'iu.id_usuario = u.id_usuario') .innerJoin( InstitucionCarrera, 'ic', 'ic.id_institucion_carrera = iu.id_institucion_carrera', ) + .innerJoin(Usuario, 'u', 'u.id_usuario = iu.id_usuario') .innerJoin(Modulo, 'm', 'm.id_modulo = c.id_modulo') .innerJoin(TipoCarrito, 'tc', 'tc.id_tipo_carrito = c.id_tipo_carrito') .innerJoin(Institucion, 'i', 'i.id_institucion = m.id_institucion') .innerJoin(Carrera, 'ca', 'ca.id_carrera = ic.id_carrera') - .where('i.id_institucion = ic.id_institucion') .orderBy('i.institucion'), }) export class FullInformacionPrestamoView { @@ -72,15 +77,15 @@ export class FullInformacionPrestamoView { @ViewColumn() activo: number; - @ViewColumn() - carrera: string; - @ViewColumn() cancelado_operador: number; @ViewColumn() cancelado_usuario: number; + @ViewColumn() + carrera: string; + @ViewColumn() carrito: string; @@ -102,6 +107,9 @@ export class FullInformacionPrestamoView { @ViewColumn() hora_max_recoger: Date; + @ViewColumn() + id_carrera: number; + @ViewColumn() id_carrito: number; @@ -114,6 +122,9 @@ export class FullInformacionPrestamoView { @ViewColumn() id_institucion_carrera: number; + @ViewColumn() + id_institucion_usuario: number; + @ViewColumn() id_modulo: number; diff --git a/src/prestamo/entity/views/informacion-prestamo.view.ts b/src/prestamo/entity/views/informacion-prestamo.view.ts index 479987c..8b87697 100644 --- a/src/prestamo/entity/views/informacion-prestamo.view.ts +++ b/src/prestamo/entity/views/informacion-prestamo.view.ts @@ -1,6 +1,7 @@ import { DataSource, ViewEntity, ViewColumn } from 'typeorm'; import { Carrito } from '../../../carrito/entity/carrito.entity'; import { Equipo } from '../../../equipo/entity/equipo.entity'; +import { InstitucionUsuario } from '../../../institucion-usuario/entity/institucion-usuario.entity'; import { Modulo } from '../../../modulo/entity/modulo.entity'; import { Prestamo } from '../prestamo.entity'; import { Status } from '../../../status/entity/status.entity'; @@ -23,12 +24,13 @@ import { TipoCarrito } from '../../../institucion-tipo-carrito/entity/tipo-carri .addSelect('p.id_institucion_usuario', 'id_institucion_usuario') .addSelect('p.id_operador_entrega', 'id_operador_entrega') .addSelect('p.id_operador_regreso', 'id_operador_regreso') - .addSelect('p.id_usuario', 'id_usuario') .addSelect('e.equipo', 'equipo') - .addSelect('e.u', 'u') .addSelect('e.id_carrito', 'id_carrito') .addSelect('e.id_status', 'id_status') .addSelect('e.numero_inventario', 'numero_inventario') + .addSelect('e.u', 'u') + .addSelect('iu.id_institucion_carrera', 'id_institucion_carrera') + .addSelect('iu.id_usuario', 'id_usuario') .addSelect('c.carrito', 'carrito') .addSelect('c.id_modulo', 'id_modulo') .addSelect('c.id_tipo_carrito', 'id_tipo_carrito') @@ -36,6 +38,11 @@ import { TipoCarrito } from '../../../institucion-tipo-carrito/entity/tipo-carri .addSelect('tc.tipo_carrito', 'tipo_carrito') .from(Prestamo, 'p') .innerJoin(Equipo, 'e', 'e.id_equipo = p.id_equipo') + .innerJoin( + InstitucionUsuario, + 'iu', + 'iu.id_institucion_usuario = p.id_institucion_usuario', + ) .innerJoin(Carrito, 'c', 'c.id_carrito = e.id_carrito') .innerJoin(Status, 's', 's.id_status = e.id_status') .innerJoin(Modulo, 'm', 'm.id_modulo = c.id_modulo') @@ -84,6 +91,9 @@ export class InformacionPrestamoView { @ViewColumn() id_institucion: number; + @ViewColumn() + id_institucion_carrera: number; + @ViewColumn() id_institucion_usuario: number; diff --git a/src/prestamo/entity/views/prestamo-informacion.view.ts b/src/prestamo/entity/views/prestamo-informacion.view.ts index d0c8e17..be48cb5 100644 --- a/src/prestamo/entity/views/prestamo-informacion.view.ts +++ b/src/prestamo/entity/views/prestamo-informacion.view.ts @@ -2,6 +2,7 @@ import { DataSource, ViewEntity, ViewColumn } from 'typeorm'; import { Carrito } from '../../../carrito/entity/carrito.entity'; import { Equipo } from '../../../equipo/entity/equipo.entity'; import { Institucion } from '../../../institucion/entity/institucion.entity'; +import { InstitucionUsuario } from '../../../institucion-usuario/entity/institucion-usuario.entity'; import { Modulo } from '../../../modulo/entity/modulo.entity'; import { Prestamo } from '../prestamo.entity'; import { TipoCarrito } from '../../../institucion-tipo-carrito/entity/tipo-carrito.entity'; @@ -21,26 +22,33 @@ import { Usuario } from '../../../usuario/entity/usuario.entity'; .addSelect('p.hora_inicio', 'hora_inicio') .addSelect('p.hora_max_recoger', 'hora_max_recoger') .addSelect('p.id_equipo', 'id_equipo') - .addSelect('p.id_usuario', 'id_usuario') + .addSelect('p.id_institucion_usuario', 'id_institucion_usuario') .addSelect('e.equipo', 'equipo') .addSelect('e.u', 'u') .addSelect('e.id_carrito', 'id_carrito') .addSelect('e.id_status', 'id_status') .addSelect('e.numero_inventario', 'numero_inventario') - .addSelect('u.id_tipo_usuario', 'id_tipo_usuario') - .addSelect('u.nombre', 'nombre') - .addSelect('u.usuario', 'usuario') + .addSelect('iu.id_institucion_carrera', 'id_institucion_carrera') + .addSelect('iu.id_usuario', 'id_usuario') .addSelect('c.carrito', 'carrito') .addSelect('c.id_modulo', 'id_modulo') .addSelect('c.id_tipo_carrito', 'id_tipo_carrito') + .addSelect('u.id_tipo_usuario', 'id_tipo_usuario') + .addSelect('u.nombre', 'nombre') + .addSelect('u.usuario', 'usuario') .addSelect('m.id_institucion', 'id_institucion') .addSelect('m.modulo', 'modulo') .addSelect('tc.tipo_carrito', 'tipo_carrito') .addSelect('i.institucion', 'institucion') .from(Prestamo, 'p') .innerJoin(Equipo, 'e', 'e.id_equipo = p.id_equipo') - .innerJoin(Usuario, 'u', 'u.id_usuario = p.id_usuario') + .innerJoin( + InstitucionUsuario, + 'iu', + 'iu.id_institucion_usuario = p.id_institucion_usuario', + ) .innerJoin(Carrito, 'c', 'c.id_carrito = e.id_carrito') + .innerJoin(Usuario, 'u', 'u.id_usuario = iu.id_usuario') .innerJoin(Modulo, 'm', 'm.id_modulo = c.id_modulo') .innerJoin(TipoCarrito, 'tc', 'tc.id_tipo_carrito = c.id_tipo_carrito') .innerJoin(Institucion, 'i', 'i.id_institucion = m.id_institucion'), @@ -88,6 +96,12 @@ export class PrestamoInformacionView { @ViewColumn() id_institucion: number; + @ViewColumn() + id_institucion_carrera: number; + + @ViewColumn() + id_institucion_usuario: number; + @ViewColumn() id_modulo: number; diff --git a/src/prestamo/prestamo.controller.ts b/src/prestamo/prestamo.controller.ts index 36ce3b2..649f9d4 100644 --- a/src/prestamo/prestamo.controller.ts +++ b/src/prestamo/prestamo.controller.ts @@ -359,6 +359,7 @@ export class PrestamoController { ejemplo: { value: { id_modulo: 1, + id_institucion_usuario: 1, id_tipo_carrito: 1, _id_programa: 1, _id_tipo_entrada: 1, @@ -372,6 +373,7 @@ export class PrestamoController { this.validarUsuarioService.validarUsuario(usuario); return this.prestamoService.create( usuario, + body.id_institucion_usuario, body.id_modulo, body.id_tipo_carrito, body.id_programa, diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index 07c5960..2007a7a 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -1,6 +1,5 @@ import * as moment from 'moment'; import { - BadRequestException, ConflictException, ForbiddenException, forwardRef, @@ -13,7 +12,6 @@ import { Between, FindManyOptions, FindOptionsWhere, - IsNull, LessThanOrEqual, Like, MoreThanOrEqual, @@ -21,7 +19,6 @@ import { } from 'typeorm'; import { AppGateway } from '../app.gateway'; import { Institucion } from '../institucion/entity/institucion.entity'; -import { InstitucionUsuario } from '../institucion-usuario/entity/institucion-usuario.entity'; import { Modulo } from '../modulo/entity/modulo.entity'; import { Operador } from '../operador/entity/operador.entity'; import { Prestamo } from './entity/prestamo.entity'; @@ -91,7 +88,7 @@ export class PrestamoService { 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) { + if (prestamo.equipo.u === prestamo.institucionUsuario.usuario.id_usuario) { // Reseteamos datos del equipo prestamo.equipo.u = null; prestamo.equipo.status.id_status = 6; @@ -105,7 +102,9 @@ export class PrestamoService { // Guardamos cambios en el préstamo return this.repository.save(prestamo).then((_) => { // Actualizamos la interfaz del usaurio - this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario); + this.appGateway.actualizarUsuario( + prestamo.institucionUsuario.usuario.id_usuario, + ); return { message: 'Se canceló correctamente este préstamo.' }; }); } @@ -149,6 +148,7 @@ export class PrestamoService { async create( usuario: Usuario, + id_institucion_usuario: number, id_modulo: number, id_tipo_carrito: number, id_programa?: number, @@ -161,6 +161,9 @@ export class PrestamoService { await this.institucionTipoCarritoService.findTipoCarritoById( id_tipo_carrito, ); + const institucionUsuario = await this.institucionUsuarioService.findById( + id_institucion_usuario, + ); const institucionDia = await this.institucionDiaService.hoy( modulo.institucion, ); @@ -179,6 +182,19 @@ export class PrestamoService { ) : null; + // Validamos que el id_institucion_usuario le pertenezca al usuario + if (institucionUsuario.usuario.id_usuario != usuario.id_usuario) + throw new ConflictException('No te pertenece esta información.'); + // Validamos que este activo + if (!institucionUsuario.activo) + throw new ForbiddenException( + `${this.mensajeNoPoderPedir()} tu cuenta esta desactivada en esta institución.`, + ); + // Validamos que no tenga multa + if (institucionUsuario.multa) + throw new ForbiddenException( + `${this.mensajeNoPoderPedir()} tienes una multa activa.`, + ); // Validamos si ese día se encuentra activo if (!institucionDia.activo) throw new ConflictException( @@ -209,21 +225,14 @@ export class PrestamoService { `Se suspendió el servicio de préstamo temporalmente de ${institucionDia.horasExcepcion[i].hora_inicio} a ${institucionDia.horasExcepcion[i].hora_fin}.`, ); } - // Buscamos las instituciones usuario de este usuario - return this.institucionUsuarioService - .findFullInfoAllByIdUsuario(usuario, false) - .then((instituciones) => { - this.validarInstitucionUsuario(instituciones, modulo); - // Buscamos un prestamo activo con el id del usuario que realiza la acción - return this.informacionPrestamoView.findOne({ - where: { activo: 1, id_usuario: usuario.id_usuario }, - }); - }) + // Buscamos un prestamo activo con el id del usuario que realiza la acción + return this.informacionPrestamoView + .findOne({ where: { activo: 1, id_usuario: usuario.id_usuario } }) .then((existePrestamo) => { // Sacamos error si lo encuentra if (existePrestamo) throw new ConflictException( - 'Este usuario ya tiene un préstamo activo.', + `${this.mensajeNoPoderPedir()} ya cuentas con un préstamo activo.`, ); // Buscamos un equipo con las caracteríasticas solicitadas return this.equipoService.findEquipo( @@ -243,7 +252,7 @@ export class PrestamoService { .add(modulo.institucion.tiempo_recoger, 'm') .toDate(), equipo, - usuario, + institucionUsuario, }), ), ) @@ -256,9 +265,10 @@ export class PrestamoService { prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito === 5 ) // Creamos un passcode - return this.passcodeService - .create(prestamo) - .then((passcode) => ({ ...prestamo, passcode: passcode.passcode })); + return this.passcodeService.create(prestamo).then((passcode) => { + Object.assign(prestamo, passcode); + return prestamo; + }); return prestamo; }); } @@ -302,7 +312,7 @@ export class PrestamoService { throw new ConflictException( 'Hubo un error, comunicate con los desarrolladores.', ); - if (prestamo.usuario.id_usuario != prestamo.equipo.u) + if (prestamo.institucionUsuario.usuario.id_usuario != prestamo.equipo.u) throw new ConflictException( 'Este equipo fue asignado más de una vez y este es el préstamo incorrecto, espere unos segundos y se desactivará este préstamo o tanto el usario como el opeardor pueden cancelarlo manualmente.', ); @@ -320,7 +330,9 @@ export class PrestamoService { .then((_) => this.repository.save(prestamo)) // Guardo los cambios del préstamo .then((_) => { // Actualizamos la interfaz del usuario - this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario); + this.appGateway.actualizarUsuario( + prestamo.institucionUsuario.usuario.id_usuario, + ); return prestamo.equipo; }); } @@ -582,6 +594,24 @@ export class PrestamoService { }, status: { id_status: infoPrestamo.id_status }, }, + institucionUsuario: { + id_institucion_usuario: infoPrestamo.id_institucion_usuario, + institucionCarrera: { + id_institucion_carrera: infoPrestamo.id_institucion_carrera, + carrera: { + id_carrera: infoPrestamo.id_carrera, + carrera: infoPrestamo.carrera, + }, + }, + usuario: { + id_usuario: infoPrestamo.id_usuario, + nombre: infoPrestamo.nombre, + usuario: infoPrestamo.usuario, + tipoUsuario: { + id_tipo_usuario: infoPrestamo.id_tipo_usuario, + }, + }, + }, operadorEntrega: { id_operador: infoPrestamo.id_operador_entrega, operador: infoPrestamo.operador_entrega, @@ -590,14 +620,6 @@ export class PrestamoService { 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, - }, - }, }); } @@ -692,25 +714,32 @@ export class PrestamoService { }, 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 }, + institucionUsuario: { + id_institucion_usuario: infoPrestamo.id_institucion_usuario, + institucionCarrera: { + id_institucion_carrera: infoPrestamo.id_institucion_carrera, + }, + usuario: { + id_usuario: infoPrestamo.id_usuario, + usuario: infoPrestamo.usuario, + nombre: infoPrestamo.nombre, + tipoUsuario: { id_tipo_usuario: infoPrestamo.id_tipo_usuario }, + }, }, }); } - private prestamoPasscode(prestamo: Prestamo) { + private prestamoPasscode(prestamo: Prestamo): Promise | 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 })); + return this.passcodeService.findByPrestamo(prestamo).then((passcode) => { + Object.assign(prestamo, passcode); + return prestamo; + }); return prestamo; } @@ -799,7 +828,9 @@ export class PrestamoService { .then((_) => this.repository.save(prestamo)) // Guardamos cambios en el préstamo .then((_) => { // Actualizamos la interfaz del usuario - this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario); + this.appGateway.actualizarUsuario( + prestamo.institucionUsuario.usuario.id_usuario, + ); return { message: 'Se regresó el equipo de cómputo correctamente.' }; }); } @@ -855,35 +886,6 @@ export class PrestamoService { return this.repository.save(prestamo); } - 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) @@ -950,7 +952,13 @@ export class PrestamoService { }, operadorEntrega: { id_operador: infoPrestamo.id_operador_entrega }, operadorRegreso: { id_operador: infoPrestamo.id_operador_regreso }, - usuario: { id_usuario: infoPrestamo.id_usuario }, + institucionUsuario: { + id_institucion_usuario: infoPrestamo.id_institucion_usuario, + institucionCarrera: { + id_institucion_carrera: infoPrestamo.id_institucion_carrera, + }, + usuario: { id_usuario: infoPrestamo.id_usuario }, + }, }); } } diff --git a/src/usuario/entity/usuario.entity.ts b/src/usuario/entity/usuario.entity.ts index fbccb8f..fdfc48e 100644 --- a/src/usuario/entity/usuario.entity.ts +++ b/src/usuario/entity/usuario.entity.ts @@ -7,7 +7,6 @@ import { PrimaryGeneratedColumn, } from 'typeorm'; import { InstitucionUsuario } from '../../institucion-usuario/entity/institucion-usuario.entity'; -import { Prestamo } from '../../prestamo/entity/prestamo.entity'; import { TipoUsuario } from '../../tipo-usuario/entity/tipo-usuario.entity'; @Entity() @@ -47,7 +46,4 @@ export class Usuario { (institucionUsuario) => institucionUsuario.usuario, ) instituciones: InstitucionUsuario[]; - - @OneToMany(() => Prestamo, (prestamo) => prestamo.usuario) - prestamos: Prestamo[]; }