From dda3fc5987e05c7e60427cebafe8678d008cf8ba Mon Sep 17 00:00:00 2001 From: lemuel Date: Fri, 10 Feb 2023 12:37:08 -0600 Subject: [PATCH 01/18] sin console logs --- src/passcode/passcode.controller.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/passcode/passcode.controller.ts b/src/passcode/passcode.controller.ts index b90d7c7..120cb4d 100644 --- a/src/passcode/passcode.controller.ts +++ b/src/passcode/passcode.controller.ts @@ -47,9 +47,6 @@ export class PasscodeController { const operador: Operador = req.user.operador; const modulo: Modulo = req.user.modulo; - console.log(operador); - console.log(body); - console.log(); this.validarUsuarioService.validarSoloOperador(operador); return this.passcodeService.devolverEquipo(operador, modulo, body.passcode); } @@ -67,9 +64,6 @@ export class PasscodeController { const operador: Operador = req.user.operador; const modulo: Modulo = req.user.modulo; - console.log(operador); - console.log(body); - console.log(); this.validarUsuarioService.validarSoloOperador(operador); return this.passcodeService.entregarEquipo( operador, @@ -99,9 +93,6 @@ export class PasscodeController { prestamo(@Request() req, @Query() query: PrestamoDto) { const operador: Operador = req.user.operador; - console.log(operador); - console.log(query); - console.log(); this.validarUsuarioService.validarSoloOperador(operador); return this.passcodeService.findPasscode( query.passcode, -- 2.43.0 From 4e61a200c262319924e6fb6cf1c5204e4ec8e3fb Mon Sep 17 00:00:00 2001 From: lemuel Date: Fri, 10 Feb 2023 12:39:23 -0600 Subject: [PATCH 02/18] list para crear cosas --- .../entity/institucion-usuario.entity.ts | 8 ++--- src/prestamo/entity/prestamo.entity.ts | 18 +++++----- .../entity/views/informacion-prestamo.view.ts | 6 +++- src/prestamo/prestamo.controller.ts | 10 ++++++ src/prestamo/prestamo.service.ts | 36 +++++++++++++++++++ 5 files changed, 64 insertions(+), 14 deletions(-) diff --git a/src/institucion-usuario/entity/institucion-usuario.entity.ts b/src/institucion-usuario/entity/institucion-usuario.entity.ts index 64e28ae..9550bc6 100644 --- a/src/institucion-usuario/entity/institucion-usuario.entity.ts +++ b/src/institucion-usuario/entity/institucion-usuario.entity.ts @@ -3,11 +3,11 @@ import { Entity, JoinColumn, ManyToOne, - // OneToMany, + OneToMany, PrimaryGeneratedColumn, } from 'typeorm'; import { InstitucionCarrera } from '../../institucion-carrera/entity/institucion-carrera.entity'; -// import { Prestamo } from '../../prestamo/entity/prestamo.entity'; +import { Prestamo } from '../../prestamo/entity/prestamo.entity'; import { Usuario } from '../../usuario/entity/usuario.entity'; @Entity() @@ -39,6 +39,6 @@ export class InstitucionUsuario { @JoinColumn({ name: 'id_usuario' }) usuario: Usuario; - // @OneToMany(() => Prestamo, (prestamo) => prestamo.institucionUsuario) - // prestamos: Prestamo[]; + @OneToMany(() => Prestamo, (prestamo) => prestamo.institucionUsuario) + prestamos: Prestamo[]; } diff --git a/src/prestamo/entity/prestamo.entity.ts b/src/prestamo/entity/prestamo.entity.ts index 249a7a8..9f26840 100644 --- a/src/prestamo/entity/prestamo.entity.ts +++ b/src/prestamo/entity/prestamo.entity.ts @@ -47,8 +47,8 @@ export class Prestamo { @Column({ type: Number, nullable: true }) id_equipo: number; - // @Column({ type: Number, nullable: true }) - // id_institucion_usuario: number; + @Column({ type: Number, nullable: true }) + id_institucion_usuario: number; @Column({ type: Number, nullable: true, default: 1 }) id_operador_entrega: number; @@ -63,13 +63,13 @@ export class Prestamo { @JoinColumn({ name: 'id_equipo' }) equipo: Equipo; - // @ManyToOne( - // () => InstitucionUsuario, - // (institucionUsuario) => institucionUsuario.prestamos, - // { eager: true }, - // ) - // @JoinColumn({ name: 'id_institucion_usuario' }) - // institucionUsuario: InstitucionUsuario; + @ManyToOne( + () => InstitucionUsuario, + (institucionUsuario) => institucionUsuario.prestamos, + { eager: true }, + ) + @JoinColumn({ name: 'id_institucion_usuario' }) + institucionUsuario: InstitucionUsuario; @ManyToOne( () => Operador, diff --git a/src/prestamo/entity/views/informacion-prestamo.view.ts b/src/prestamo/entity/views/informacion-prestamo.view.ts index af0f4ae..479987c 100644 --- a/src/prestamo/entity/views/informacion-prestamo.view.ts +++ b/src/prestamo/entity/views/informacion-prestamo.view.ts @@ -1,8 +1,8 @@ import { DataSource, ViewEntity, ViewColumn } from 'typeorm'; import { Carrito } from '../../../carrito/entity/carrito.entity'; -import { Prestamo } from '../prestamo.entity'; import { Equipo } from '../../../equipo/entity/equipo.entity'; import { Modulo } from '../../../modulo/entity/modulo.entity'; +import { Prestamo } from '../prestamo.entity'; import { Status } from '../../../status/entity/status.entity'; import { TipoCarrito } from '../../../institucion-tipo-carrito/entity/tipo-carrito.entity'; @@ -20,6 +20,7 @@ import { TipoCarrito } from '../../../institucion-tipo-carrito/entity/tipo-carri .addSelect('p.hora_inicio', 'hora_inicio') .addSelect('p.hora_max_recoger', 'hora_max_recoger') .addSelect('p.id_equipo', 'id_equipo') + .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') @@ -83,6 +84,9 @@ export class InformacionPrestamoView { @ViewColumn() id_institucion: 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..93c44b1 100644 --- a/src/prestamo/prestamo.controller.ts +++ b/src/prestamo/prestamo.controller.ts @@ -629,4 +629,14 @@ export class PrestamoController { this.validarUsuarioService.validarOperador(operador); return this.prestamoService.findAll(operador, query); } + + @Serealize(MessageOutputDto) + @Post('reparar') + @UseGuards(AuthGuard('jwt')) + reparar(@Request() req) { + const superAdmin: Operador = req.user.operador; + + this.validarUsuarioService.validarSuperAdmin(superAdmin); + return this.prestamoService.reparar(); + } } diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index 35eb8c0..976365a 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -13,6 +13,7 @@ import { Between, FindManyOptions, FindOptionsWhere, + IsNull, LessThanOrEqual, Like, MoreThanOrEqual, @@ -952,4 +953,39 @@ export class PrestamoService { usuario: { id_usuario: infoPrestamo.id_usuario }, }); } + + reparar() { + return this.informacionPrestamoView + .find({ where: { id_institucion_usuario: IsNull() } }) + .then(async (infoPrestamos) => { + for (let i = 0; i < infoPrestamos.length; i++) { + const prestamo = this.viewToPrestamo(infoPrestamos[i]); + const institucionesUsuario = + await this.institucionUsuarioService.findAllByIdUsuarioIdInstitucion( + prestamo.usuario, + prestamo.equipo.carrito.modulo.institucion, + ); + + if (institucionesUsuario.length === 1) { + prestamo.institucionUsuario = institucionesUsuario[0]; + await this.repository.save(prestamo); + } else if ( + prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito === 2 + ) { + console.log(prestamo); + console.log(institucionesUsuario); + console.log( + '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++', + ); + } else + for (let j = 0; j < institucionesUsuario.length; j++) + if (institucionesUsuario[j].activo) { + prestamo.institucionUsuario = institucionesUsuario[j]; + await this.repository.save(prestamo); + break; + } + } + return { message: 'Terminó' }; + }); + } } -- 2.43.0 From 4a941e47578a114af7c458745ce9e97cf96f2519 Mon Sep 17 00:00:00 2001 From: lemuel Date: Fri, 10 Feb 2023 12:47:35 -0600 Subject: [PATCH 03/18] sin reparar --- src/prestamo/prestamo.controller.ts | 10 --------- src/prestamo/prestamo.service.ts | 35 ----------------------------- 2 files changed, 45 deletions(-) diff --git a/src/prestamo/prestamo.controller.ts b/src/prestamo/prestamo.controller.ts index 93c44b1..36ce3b2 100644 --- a/src/prestamo/prestamo.controller.ts +++ b/src/prestamo/prestamo.controller.ts @@ -629,14 +629,4 @@ export class PrestamoController { this.validarUsuarioService.validarOperador(operador); return this.prestamoService.findAll(operador, query); } - - @Serealize(MessageOutputDto) - @Post('reparar') - @UseGuards(AuthGuard('jwt')) - reparar(@Request() req) { - const superAdmin: Operador = req.user.operador; - - this.validarUsuarioService.validarSuperAdmin(superAdmin); - return this.prestamoService.reparar(); - } } diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index 976365a..07c5960 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -953,39 +953,4 @@ export class PrestamoService { usuario: { id_usuario: infoPrestamo.id_usuario }, }); } - - reparar() { - return this.informacionPrestamoView - .find({ where: { id_institucion_usuario: IsNull() } }) - .then(async (infoPrestamos) => { - for (let i = 0; i < infoPrestamos.length; i++) { - const prestamo = this.viewToPrestamo(infoPrestamos[i]); - const institucionesUsuario = - await this.institucionUsuarioService.findAllByIdUsuarioIdInstitucion( - prestamo.usuario, - prestamo.equipo.carrito.modulo.institucion, - ); - - if (institucionesUsuario.length === 1) { - prestamo.institucionUsuario = institucionesUsuario[0]; - await this.repository.save(prestamo); - } else if ( - prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito === 2 - ) { - console.log(prestamo); - console.log(institucionesUsuario); - console.log( - '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++', - ); - } else - for (let j = 0; j < institucionesUsuario.length; j++) - if (institucionesUsuario[j].activo) { - prestamo.institucionUsuario = institucionesUsuario[j]; - await this.repository.save(prestamo); - break; - } - } - return { message: 'Terminó' }; - }); - } } -- 2.43.0 From 632c0c44428e230c65ca3e3ee212e1e877739a46 Mon Sep 17 00:00:00 2001 From: lemuel Date: Fri, 17 Feb 2023 10:18:34 -0600 Subject: [PATCH 04/18] paso a institucion usuario --- src/cron/cron.service.ts | 8 +- .../usuario-institucion-carrera-min.dto.ts | 16 ++ .../views/full-informacion-multa.view.ts | 22 ++- .../entity/views/informacion-multa.view.ts | 16 +- src/multa/multa.service.ts | 26 +-- src/prestamo/dto/input/pedir.dto.ts | 3 + src/prestamo/dto/output/activos.dto.ts | 6 +- .../dto/output/prestamo-equipo-min.dto.ts | 6 +- .../dto/output/prestamo-equipo.dto.ts | 6 +- src/prestamo/dto/output/prestamo-min.dto.ts | 6 +- .../dto/output/prestamos-equipo.dto.ts | 6 +- src/prestamo/dto/output/prestamos.dto.ts | 6 +- src/prestamo/dto/output/reporte.ts | 68 ++++---- src/prestamo/entity/prestamo.entity.ts | 8 - .../views/full-informacion-prestamo.view.ts | 37 +++-- .../entity/views/informacion-prestamo.view.ts | 14 +- .../entity/views/prestamo-informacion.view.ts | 24 ++- src/prestamo/prestamo.controller.ts | 2 + src/prestamo/prestamo.service.ts | 148 +++++++++--------- src/usuario/entity/usuario.entity.ts | 4 - 20 files changed, 260 insertions(+), 172 deletions(-) create mode 100644 src/institucion-usuario/dto/output/usuario-institucion-carrera-min.dto.ts 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[]; } -- 2.43.0 From 8a56cf752436386cddc48e0de2e40b3738069b6e Mon Sep 17 00:00:00 2001 From: lemuel Date: Tue, 21 Feb 2023 14:21:45 -0600 Subject: [PATCH 05/18] mini cambios --- src/prestamo/entity/views/full-informacion-prestamo.view.ts | 3 ++- src/prestamo/prestamo.service.ts | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/prestamo/entity/views/full-informacion-prestamo.view.ts b/src/prestamo/entity/views/full-informacion-prestamo.view.ts index ec5b860..a54bf75 100644 --- a/src/prestamo/entity/views/full-informacion-prestamo.view.ts +++ b/src/prestamo/entity/views/full-informacion-prestamo.view.ts @@ -68,7 +68,8 @@ import { Carrera } from '../../../institucion-carrera/entity/carrera.entity'; .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') - .orderBy('i.institucion'), + .orderBy('i.institucion') + .addOrderBy('p.id_prestamo'), }) export class FullInformacionPrestamoView { @ViewColumn() diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index 2007a7a..b284da0 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -385,9 +385,7 @@ export class PrestamoService { parseInt(filtros.id_tipo_usuario), ) : null; - const options: FindManyOptions = { - order: { id_prestamo: 'DESC' }, - }; + const options: FindManyOptions = {}; const busqueda: FindOptionsWhere = {}; if (filtros.activo) { @@ -433,6 +431,7 @@ export class PrestamoService { busqueda.id_operador_regreso = operadorRegreso.id_operador; options.where = busqueda; if (filtros.pagina) { + options.order = { id_prestamo: 'DESC' }; options.take = 25; options.skip = (parseInt(filtros.pagina) - 1) * 25; return this.fullInformacionPrestamoView -- 2.43.0 From 1c83cb9fb874622b1515502377a2db73843b0c14 Mon Sep 17 00:00:00 2001 From: lemuel Date: Wed, 22 Feb 2023 12:04:46 -0600 Subject: [PATCH 06/18] =?UTF-8?q?todas=20las=20gr=C3=A1ficas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/prestamo/dto/output/reporte.ts | 3 +++ src/prestamo/entity/views/full-informacion-prestamo.view.ts | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/src/prestamo/dto/output/reporte.ts b/src/prestamo/dto/output/reporte.ts index 14b512d..9be48bb 100644 --- a/src/prestamo/dto/output/reporte.ts +++ b/src/prestamo/dto/output/reporte.ts @@ -97,6 +97,9 @@ export class ReporteOutputDto { @Expose() tipo_carrito; + @Expose() + tipo_usuario; + @Expose() usuario; } diff --git a/src/prestamo/entity/views/full-informacion-prestamo.view.ts b/src/prestamo/entity/views/full-informacion-prestamo.view.ts index a54bf75..7b5dc46 100644 --- a/src/prestamo/entity/views/full-informacion-prestamo.view.ts +++ b/src/prestamo/entity/views/full-informacion-prestamo.view.ts @@ -8,6 +8,7 @@ import { Modulo } from '../../../modulo/entity/modulo.entity'; import { Operador } from '../../../operador/entity/operador.entity'; import { Prestamo } from '../prestamo.entity'; import { TipoCarrito } from '../../../institucion-tipo-carrito/entity/tipo-carrito.entity'; +import { TipoUsuario } from '../../../tipo-usuario/entity/tipo-usuario.entity'; import { Usuario } from '../../../usuario/entity/usuario.entity'; import { Carrera } from '../../../institucion-carrera/entity/carrera.entity'; @@ -45,6 +46,7 @@ import { Carrera } from '../../../institucion-carrera/entity/carrera.entity'; .addSelect('u.usuario', 'usuario') .addSelect('m.id_institucion', 'id_institucion') .addSelect('m.modulo', 'modulo') + .addSelect('tu.tipo_usuario', 'tipo_usuario') .addSelect('tc.tipo_carrito', 'tipo_carrito') .addSelect('i.institucion', 'institucion') .addSelect('ca.carrera', 'carrera') @@ -65,6 +67,7 @@ import { Carrera } from '../../../institucion-carrera/entity/carrera.entity'; ) .innerJoin(Usuario, 'u', 'u.id_usuario = iu.id_usuario') .innerJoin(Modulo, 'm', 'm.id_modulo = c.id_modulo') + .innerJoin(TipoUsuario, 'tu', 'tu.id_tipo_usuario = u.id_tipo_usuario') .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') @@ -168,6 +171,9 @@ export class FullInformacionPrestamoView { @ViewColumn() tipo_carrito: string; + @ViewColumn() + tipo_usuario: string; + @ViewColumn() usuario: string; } -- 2.43.0 From a4d80e3c3158c0a4bfe2933e1d2958b702f62a04 Mon Sep 17 00:00:00 2001 From: lemuel Date: Mon, 27 Feb 2023 15:02:17 -0600 Subject: [PATCH 07/18] una grafica faltante --- src/dto/input/id-institucion-optional.dto.ts | 10 +++++- src/modulo-motivo/modulo-motivo.controller.ts | 6 ++-- src/modulo-motivo/modulo-motivo.service.ts | 33 ++++++++++++++++--- src/prestamo/prestamo.service.ts | 6 ++-- 4 files changed, 44 insertions(+), 11 deletions(-) diff --git a/src/dto/input/id-institucion-optional.dto.ts b/src/dto/input/id-institucion-optional.dto.ts index 7c50554..e41e613 100644 --- a/src/dto/input/id-institucion-optional.dto.ts +++ b/src/dto/input/id-institucion-optional.dto.ts @@ -1,7 +1,15 @@ -import { IsNumberString, IsOptional } from 'class-validator'; +import { IsDateString, IsNumberString, IsOptional } from 'class-validator'; export class IdInstitucionOptionalDto { @IsNumberString() @IsOptional() id_institucion?: string; + + @IsDateString() + @IsOptional() + fechaFin?: string; + + @IsDateString() + @IsOptional() + fechaInicio?: string; } diff --git a/src/modulo-motivo/modulo-motivo.controller.ts b/src/modulo-motivo/modulo-motivo.controller.ts index 4d9c782..cf6aa93 100644 --- a/src/modulo-motivo/modulo-motivo.controller.ts +++ b/src/modulo-motivo/modulo-motivo.controller.ts @@ -86,6 +86,7 @@ export class ModuloMotivoController { description: 'Id de la institución.', name: 'id_institucion', type: 'string', + required: false, }) reporteActividadEspecial( @Request() req, @@ -94,9 +95,6 @@ export class ModuloMotivoController { const admin: Operador = req.user.operador; this.validarUsuarioService.validarSuperAdminAdmin(admin); - return this.moduloMotivoService.findAllActividadEspecial( - admin, - parseInt(query.id_institucion), - ); + return this.moduloMotivoService.findAllActividadEspecial(admin, query); } } diff --git a/src/modulo-motivo/modulo-motivo.service.ts b/src/modulo-motivo/modulo-motivo.service.ts index f66855d..277106e 100644 --- a/src/modulo-motivo/modulo-motivo.service.ts +++ b/src/modulo-motivo/modulo-motivo.service.ts @@ -6,7 +6,13 @@ import { Injectable, } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; -import { FindManyOptions, FindOptionsWhere, Repository } from 'typeorm'; +import { + Between, + FindManyOptions, + FindOptionsWhere, + MoreThanOrEqual, + Repository, +} from 'typeorm'; import { Modulo } from '../modulo/entity/modulo.entity'; import { ModuloMotivo } from './entity/modulo-motivo.entity'; import { Operador } from '../operador/entity/operador.entity'; @@ -44,20 +50,39 @@ export class ModuloMotivoService { async findAllActividadEspecial( admin: Operador, - id_institucion?: number, + filtros: { + fechaFin?: string; + fechaInicio?: string; + id_institucion?: string; + }, ): Promise { - const institucion = id_institucion - ? await this.institucionService.findById(id_institucion) + const institucion = filtros.id_institucion + ? await this.institucionService.findById(parseInt(filtros.id_institucion)) : null; const busqueda: FindOptionsWhere = {}; if (admin.institucion) busqueda.modulo = { institucion: admin.institucion }; else if (institucion) busqueda.modulo = { institucion: institucion }; + if (filtros.fechaInicio) { + if (filtros.fechaFin) + busqueda.fecha_creacion = Between( + new Date(`${filtros.fechaInicio} 00:00`), + new Date(`${filtros.fechaFin} 23:59`), + ); + else + busqueda.fecha_creacion = MoreThanOrEqual( + new Date(`${filtros.fechaInicio} 00:00`), + ); + } return this.repository.find({ join: { alias: 'mmo', innerJoinAndSelect: { m: 'mmo.modulo', i: 'm.institucion' }, }, + order: { + operador: { institucion: { institucion: 'ASC' } }, + id_motivo: 'ASC', + }, where: busqueda, }); } diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index b284da0..7141368 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -389,10 +389,12 @@ export class PrestamoService { const busqueda: FindOptionsWhere = {}; if (filtros.activo) { - if (typeof filtros.activo === 'boolean') { + if (typeof filtros.activo === 'boolean') busqueda.activo = filtros.activo ? 1 : 0; + else { + busqueda.activo = filtros.activo === 'true' ? 1 : 0; options.order.id_prestamo = 'ASC'; - } else busqueda.activo = filtros.activo === 'true' ? 1 : 0; + } } if (filtros.cancelado_operador) busqueda.cancelado_operador = -- 2.43.0 From 0960a4c37aadb4eedbc02dcdf2772dbdc22aa054 Mon Sep 17 00:00:00 2001 From: lemuel Date: Mon, 27 Feb 2023 15:23:51 -0600 Subject: [PATCH 08/18] listo --- src/carrito-motivo/carrito-motivo.service.ts | 21 ++++++++++++++++++- .../dto/input/laboratorio-movil.dto.ts | 9 ++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/carrito-motivo/carrito-motivo.service.ts b/src/carrito-motivo/carrito-motivo.service.ts index 787a756..75bceed 100644 --- a/src/carrito-motivo/carrito-motivo.service.ts +++ b/src/carrito-motivo/carrito-motivo.service.ts @@ -6,7 +6,13 @@ import { Injectable, } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; -import { FindManyOptions, FindOptionsWhere, Repository } from 'typeorm'; +import { + Between, + FindManyOptions, + FindOptionsWhere, + MoreThanOrEqual, + Repository, +} from 'typeorm'; import { Carrito } from '../carrito/entity/carrito.entity'; import { CarritoMotivo } from './entity/carrito-motivo.entity'; import { Operador } from '../operador/entity/operador.entity'; @@ -79,6 +85,8 @@ export class CarritoMotivoService { admin: Operador, filtros: { carrito?: string; + fechaFin?: string; + fechaInicio?: string; id_institucion?: string; id_marca?: string; id_modelo?: string; @@ -109,6 +117,17 @@ export class CarritoMotivoService { }; if (filtros.carrito) busquedaCarrito.carrito = filtros.carrito; + if (filtros.fechaInicio) { + if (filtros.fechaFin) + busqueda.fecha_creacion = Between( + new Date(`${filtros.fechaInicio} 00:00`), + new Date(`${filtros.fechaFin} 23:59`), + ); + else + busqueda.fecha_creacion = MoreThanOrEqual( + new Date(`${filtros.fechaInicio} 00:00`), + ); + } if (admin.institucion) busquedaCarrito.modulo = { institucion: admin.institucion }; else if (institucion) busquedaCarrito.modulo = { institucion }; diff --git a/src/carrito-motivo/dto/input/laboratorio-movil.dto.ts b/src/carrito-motivo/dto/input/laboratorio-movil.dto.ts index cf7ff75..69ed274 100644 --- a/src/carrito-motivo/dto/input/laboratorio-movil.dto.ts +++ b/src/carrito-motivo/dto/input/laboratorio-movil.dto.ts @@ -1,4 +1,5 @@ import { + IsDateString, IsNotEmpty, IsNumberString, IsOptional, @@ -11,6 +12,14 @@ export class LaboratorioMovilDto { @IsOptional() carrito?: string; + @IsDateString() + @IsOptional() + fechaFin?: string; + + @IsDateString() + @IsOptional() + fechaInicio?: string; + @IsNumberString() @IsOptional() id_institucion?: string; -- 2.43.0 From 43f56a7c4b7631a2bd3b1b8f8a9eda3297044f9c Mon Sep 17 00:00:00 2001 From: lemuel Date: Tue, 14 Mar 2023 10:39:11 -0600 Subject: [PATCH 09/18] correciones --- src/prestamo/prestamo.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index 7141368..b100b5e 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -393,7 +393,7 @@ export class PrestamoService { busqueda.activo = filtros.activo ? 1 : 0; else { busqueda.activo = filtros.activo === 'true' ? 1 : 0; - options.order.id_prestamo = 'ASC'; + options.order = { id_prestamo: 'ASC' }; } } if (filtros.cancelado_operador) -- 2.43.0 From c1b525be802e302c23ae2bb1aede83c92defa949 Mon Sep 17 00:00:00 2001 From: lemuel Date: Tue, 14 Mar 2023 13:08:52 -0600 Subject: [PATCH 10/18] corregido --- src/multa/multa.service.ts | 7 +++---- src/prestamo/prestamo.service.ts | 19 +++++++++---------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/multa/multa.service.ts b/src/multa/multa.service.ts index 84e718b..8d477e8 100644 --- a/src/multa/multa.service.ts +++ b/src/multa/multa.service.ts @@ -352,11 +352,10 @@ export class MultaService { const multa = await this.repository .createQueryBuilder('mu') .innerJoinAndSelect('mu.prestamo', 'p') - .innerJoinAndSelect('p.usuario', 'u') .innerJoin( - 'u.instituciones', - 'is', - 'is.id_institucion_usuario = :id_institucion_usuario', + 'p.institucionUsuario', + 'iu', + 'iu.id_institucion_usuario = :id_institucion_usuario', { id_institucion_usuario: institucionUsuario.id_institucion_usuario }, ) .where('mu.activo = 1') diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index b100b5e..13b4c75 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -385,17 +385,16 @@ export class PrestamoService { parseInt(filtros.id_tipo_usuario), ) : null; - const options: FindManyOptions = {}; + const options: FindManyOptions = { + order: { id_prestamo: 'DESC' }, + }; const busqueda: FindOptionsWhere = {}; - if (filtros.activo) { - if (typeof filtros.activo === 'boolean') - busqueda.activo = filtros.activo ? 1 : 0; - else { - busqueda.activo = filtros.activo === 'true' ? 1 : 0; - options.order = { id_prestamo: 'ASC' }; - } - } + if (typeof filtros.activo === 'boolean') { + busqueda.activo = filtros.activo ? 1 : 0; + options.order = { id_prestamo: 'ASC' }; + } else if (typeof filtros.activo === 'string') + busqueda.activo = filtros.activo === 'true' ? 1 : 0; if (filtros.cancelado_operador) busqueda.cancelado_operador = filtros.cancelado_operador === 'true' ? 1 : 0; @@ -433,7 +432,6 @@ export class PrestamoService { busqueda.id_operador_regreso = operadorRegreso.id_operador; options.where = busqueda; if (filtros.pagina) { - options.order = { id_prestamo: 'DESC' }; options.take = 25; options.skip = (parseInt(filtros.pagina) - 1) * 25; return this.fullInformacionPrestamoView @@ -446,6 +444,7 @@ export class PrestamoService { return [prestamos, infoPrestamos[1]]; }); } + options.order = { id_prestamo: 'ASC' }; return this.fullInformacionPrestamoView.find(options); } -- 2.43.0 From 711e8f891662547c9a53ce7b9ffb5dc74cca8e4f Mon Sep 17 00:00:00 2001 From: lemuel Date: Wed, 15 Mar 2023 20:08:59 -0600 Subject: [PATCH 11/18] correccion tablas --- src/prestamo/prestamo.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index 13b4c75..32a7a45 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -444,7 +444,7 @@ export class PrestamoService { return [prestamos, infoPrestamos[1]]; }); } - options.order = { id_prestamo: 'ASC' }; + options.order = { id_institucion: 'ASC', id_prestamo: 'ASC' }; return this.fullInformacionPrestamoView.find(options); } -- 2.43.0 From 591089b8e1d78098581f56b82e326e39d9bc9862 Mon Sep 17 00:00:00 2001 From: lemuel Date: Thu, 13 Apr 2023 20:58:49 -0600 Subject: [PATCH 12/18] regresar carrera profesor --- src/institucion-carrera/institucion-carrera.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/institucion-carrera/institucion-carrera.service.ts b/src/institucion-carrera/institucion-carrera.service.ts index 0ae9c94..89c29c5 100644 --- a/src/institucion-carrera/institucion-carrera.service.ts +++ b/src/institucion-carrera/institucion-carrera.service.ts @@ -30,7 +30,7 @@ export class InstitucionCarreraService { .findById(id_institucion) .then((institucion) => this.institucionCarreraRepository.find({ - where: { carrera: { id_carrera: Not(1) }, institucion }, + where: { institucion }, order: { carrera: { carrera: 'ASC' } }, }), ); -- 2.43.0 From b520156b1312e198690a7d343b7741f0969be9c2 Mon Sep 17 00:00:00 2001 From: lemuel Date: Mon, 17 Apr 2023 23:12:14 -0600 Subject: [PATCH 13/18] cambio de horario --- src/prestamo/prestamo.service.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index 32a7a45..0a7854a 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -7,6 +7,7 @@ import { Injectable, NotFoundException, } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; import { InjectRepository } from '@nestjs/typeorm'; import { Between, @@ -44,6 +45,8 @@ import { UsuarioService } from '../usuario/usuario.service'; @Injectable() export class PrestamoService { + private add: number; + constructor( @InjectRepository(Prestamo) private repository: Repository, @InjectRepository(InformacionPrestamoView) @@ -53,6 +56,7 @@ export class PrestamoService { @InjectRepository(PrestamoInformacionView) private prestamoInformacionView: Repository, private appGateway: AppGateway, + private configService: ConfigService, private equipoService: EquipoService, private institucionService: InstitucionService, private institucionDiaService: InstitucionDiaService, @@ -69,7 +73,9 @@ export class PrestamoService { private statusService: StatusService, private tipoUsuarioService: TipoUsuarioService, private usuarioService: UsuarioService, - ) {} + ) { + this.add = parseInt(this.configService.get('ADD_HORA')); + } async cancelarOperador( operadorRegreso: Operador, @@ -80,6 +86,7 @@ export class PrestamoService { const ahora = moment(); const prestamo = await this.findById(id_prestamo); + if (this.add) ahora.add(this.add, 'h'); this.validacionBasicaPrestamo(prestamo); this.validacionOperadorPrestamo(prestamo, operadorRegreso, modulo); // Desactivamos el préstamo @@ -113,6 +120,7 @@ export class PrestamoService { const ahora = moment(); const prestamo = await this.prestamoInfoByUsuario(usuario); + if (this.add) ahora.add(this.add, 'h'); this.validacionBasicaPrestamo(prestamo); // Desactivamos el préstamo prestamo.activo = false; @@ -182,6 +190,7 @@ export class PrestamoService { ) : null; + if (this.add) ahora.add(this.add, 'h'); // 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.'); @@ -294,6 +303,7 @@ export class PrestamoService { ? moment(`${ahoraStr} ${institucionDia.hora_fin}`) : null; + if (this.add) ahora.add(this.add, 'h'); if ( prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito != 4 && prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito != 5 @@ -754,6 +764,9 @@ export class PrestamoService { ): Promise<{ message: string }> { const ahora = moment(); const status = await this.statusService.findById(id_status); + + if (this.add) ahora.add(this.add, 'h'); + 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, -- 2.43.0 From ae770a499834d0d68ecacf7f6d2d16ea307db13f Mon Sep 17 00:00:00 2001 From: lemuel Date: Mon, 17 Apr 2023 23:32:31 -0600 Subject: [PATCH 14/18] mejoras --- src/prestamo/prestamo.service.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index 0a7854a..c441966 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -163,6 +163,9 @@ export class PrestamoService { id_tipo_entrada?: number, ): Promise { const ahora = moment(); + + if (this.add) ahora.add(this.add, 'h'); + const ahoraStr = ahora.format('YYYY-MM-DD'); const modulo = await this.moduloService.findFullInfoById(id_modulo); const tipoCarrito = @@ -190,7 +193,6 @@ export class PrestamoService { ) : null; - if (this.add) ahora.add(this.add, 'h'); // 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.'); @@ -288,6 +290,9 @@ export class PrestamoService { id_prestamo: number | Prestamo, ): Promise { const ahora = moment(); + + if (this.add) ahora.add(this.add, 'h'); + const ahoraStr = ahora.format('YYYY-MM-DD'); const prestamo = typeof id_prestamo === 'number' @@ -303,7 +308,6 @@ export class PrestamoService { ? moment(`${ahoraStr} ${institucionDia.hora_fin}`) : null; - if (this.add) ahora.add(this.add, 'h'); if ( prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito != 4 && prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito != 5 -- 2.43.0 From f5e768ca99535452aec7317340109e4f43a85149 Mon Sep 17 00:00:00 2001 From: lemuel Date: Tue, 18 Apr 2023 09:27:06 -0600 Subject: [PATCH 15/18] dejar de cancelar al minuto --- src/prestamo/prestamo.service.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index c441966..f4cda48 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -290,9 +290,9 @@ export class PrestamoService { id_prestamo: number | Prestamo, ): Promise { const ahora = moment(); - + if (this.add) ahora.add(this.add, 'h'); - + const ahoraStr = ahora.format('YYYY-MM-DD'); const prestamo = typeof id_prestamo === 'number' @@ -463,11 +463,14 @@ export class PrestamoService { } findAllActivosExpirados(): Promise { + const ahora = moment(); + + if (this.add) ahora.add(this.add, 'h'); return this.informacionPrestamoView .find({ where: { activo: 1, - hora_max_recoger: LessThanOrEqual(moment().toDate()), + hora_max_recoger: LessThanOrEqual(ahora.toDate()), id_status: 2, }, }) -- 2.43.0 From eefcc1576044ee77da9d405b955b647fab6b8dd4 Mon Sep 17 00:00:00 2001 From: Lemuel Marquez Date: Tue, 30 May 2023 15:15:10 -0600 Subject: [PATCH 16/18] hora del servidor --- src/prestamo/dto/output/prestamo.dto.ts | 3 ++ src/prestamo/prestamo.controller.ts | 68 +++++++++++++++++++++---- 2 files changed, 60 insertions(+), 11 deletions(-) diff --git a/src/prestamo/dto/output/prestamo.dto.ts b/src/prestamo/dto/output/prestamo.dto.ts index 5309df4..dae8472 100644 --- a/src/prestamo/dto/output/prestamo.dto.ts +++ b/src/prestamo/dto/output/prestamo.dto.ts @@ -11,6 +11,9 @@ export class PrestamoOutputDto { @Expose() fecha_inicio; + @Expose() + hora_server; + @Expose() hora_fin; diff --git a/src/prestamo/prestamo.controller.ts b/src/prestamo/prestamo.controller.ts index 649f9d4..02614a4 100644 --- a/src/prestamo/prestamo.controller.ts +++ b/src/prestamo/prestamo.controller.ts @@ -1,3 +1,4 @@ +import * as moment from 'moment'; import { Body, Controller, @@ -8,6 +9,7 @@ import { Request, UseGuards, } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; import { AuthGuard } from '@nestjs/passport'; import { ApiBearerAuth, @@ -47,10 +49,15 @@ import { ReporteOutputDto } from './dto/output/reporte'; @Controller('prestamo') @ApiTags('prestamo') export class PrestamoController { + private add: number; + constructor( + private configService: ConfigService, private prestamoService: PrestamoService, private validarUsuarioService: ValidarUsuarioService, - ) {} + ) { + this.add = parseInt(this.configService.get('ADD_HORA')); + } @Serealize(ActivosOutputDto) @Get('activos') @@ -371,14 +378,27 @@ export class PrestamoController { const usuario: Usuario = req.user.usuario; this.validarUsuarioService.validarUsuario(usuario); - return this.prestamoService.create( - usuario, - body.id_institucion_usuario, - body.id_modulo, - body.id_tipo_carrito, - body.id_programa, - body.id_tipo_entrada, - ); + return this.prestamoService + .create( + usuario, + body.id_institucion_usuario, + body.id_modulo, + body.id_tipo_carrito, + body.id_programa, + body.id_tipo_entrada, + ) + .then((prestamo) => { + if (prestamo) { + const ahora = moment(); + + if (this.add) ahora.add(this.add, 'h'); + + const hora_server = { hora_server: ahora.format() }; + + Object.assign(prestamo, hora_server); + } + return prestamo; + }); } @Serealize(PrestamoOutputDto) @@ -398,7 +418,20 @@ export class PrestamoController { if (usuarioOperador instanceof Usuario) this.validarUsuarioService.validarUsuario(usuarioOperador); else this.validarUsuarioService.validarSoloOperador(usuarioOperador); - return this.prestamoService.prestamoInfoById(parseInt(query.id_prestamo)); + return this.prestamoService + .prestamoInfoById(parseInt(query.id_prestamo)) + .then((prestamo) => { + if (prestamo) { + const ahora = moment(); + + if (this.add) ahora.add(this.add, 'h'); + + const hora_server = { hora_server: ahora.format() }; + + Object.assign(prestamo, hora_server); + } + return prestamo; + }); } @Serealize(PrestamoOutputDto) @@ -412,7 +445,20 @@ export class PrestamoController { const usuario: Usuario = req.user.usuario; this.validarUsuarioService.validarUsuario(usuario); - return this.prestamoService.prestamoInfoByUsuario(usuario, false); + return this.prestamoService + .prestamoInfoByUsuario(usuario, false) + .then((prestamo) => { + if (prestamo) { + const ahora = moment(); + + if (this.add) ahora.add(this.add, 'h'); + + const hora_server = { hora_server: ahora.format() }; + + Object.assign(prestamo, hora_server); + } + return prestamo; + }); } @Serealize(PrestamoEquipoOutputDto) -- 2.43.0 From b485fffb41cbad38415da1bedabae1ca89668da5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lemuel=20M=C3=A1rquez?= Date: Mon, 18 Sep 2023 09:29:47 -0600 Subject: [PATCH 17/18] sql/12-institucion_tipo_carrito.sql --- ...cion_tipo_carrito copy.sql => 12-institucion_tipo_carrito.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/{12-institucion_tipo_carrito copy.sql => 12-institucion_tipo_carrito.sql} (100%) diff --git a/sql/12-institucion_tipo_carrito copy.sql b/sql/12-institucion_tipo_carrito.sql similarity index 100% rename from sql/12-institucion_tipo_carrito copy.sql rename to sql/12-institucion_tipo_carrito.sql -- 2.43.0 From 662f19591880c64c16f4ee3e981e47bc78154b8e Mon Sep 17 00:00:00 2001 From: puma99 Date: Fri, 15 Dec 2023 11:41:09 -0600 Subject: [PATCH 18/18] nuvos tipos de carrito locker --- src/prestamo/prestamo.service.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index f4cda48..f52ec7c 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -273,7 +273,9 @@ export class PrestamoService { // Si es locker if ( prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito === 4 || - prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito === 5 + prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito === 5|| + prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito === 7|| + prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito === 8 ) // Creamos un passcode return this.passcodeService.create(prestamo).then((passcode) => { @@ -750,7 +752,9 @@ export class PrestamoService { // Si es locker if ( prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito === 4 || - prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito === 5 + prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito === 5|| + prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito === 7|| + prestamo.equipo.carrito.tipoCarrito.id_tipo_carrito === 8 ) // Buscamos el passcode y se lo agregamos al préstamo return this.passcodeService.findByPrestamo(prestamo).then((passcode) => { -- 2.43.0