diff --git a/src/app.module.ts b/src/app.module.ts index 3e3d448..a3b0551 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -36,6 +36,7 @@ import { StatusModule } from './status/status.module'; import { TipoUsuarioModule } from './tipo-usuario/tipo-usuario.module'; import { UploadFileModule } from './upload-file/upload-file.module'; import { UsuarioModule } from './usuario/usuario.module'; +import { ValidarUsuarioModule } from './validar-usuario/validar-usuario.module'; import { Carrera } from './institucion-carrera/entity/carrera.entity'; import { CarreraPrograma } from './carrera-programa/entity/carrera-programa.entity'; @@ -72,15 +73,15 @@ import { Usuario } from './usuario/entity/usuario.entity'; import { FullInformacionEquipoView } from './equipo/entity/views/full-informacion-equipo.view'; import { InformacionEquipoView } from './equipo/entity/views/informacion-equipo.view'; -import { FullInformacionPrestamoView } from './prestamo/entity/views/full-informacion-prestamo.view'; -import { InformacionPrestamoView } from './prestamo/entity/views/informacion-prestamo.view'; -import { FullInformacionMultaView } from './multa/entity/views/full-informacion-multa.view'; -import { InformacionMultaView } from './multa/entity/views/informacion-multa.view'; import { InformacionEquipoProgramaView } from './equipo-programa/entity/views/informacion-equipo-programa.view'; import { InformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view'; +import { InformacionInstitucionView } from './institucion/entity/views/informacion-institucion.view'; +import { FullInformacionMultaView } from './multa/entity/views/full-informacion-multa.view'; +import { InformacionMultaView } from './multa/entity/views/informacion-multa.view'; import { InformacionOperadorView } from './operador/entity/views/informacion-operador.view'; +import { FullInformacionPrestamoView } from './prestamo/entity/views/full-informacion-prestamo.view'; +import { InformacionPrestamoView } from './prestamo/entity/views/informacion-prestamo.view'; import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuario.view'; -import { ValidarUsuarioModule } from './validar-usuario/validar-usuario.module'; @Module({ imports: [ @@ -142,13 +143,14 @@ import { ValidarUsuarioModule } from './validar-usuario/validar-usuario.module'; Usuario, FullInformacionEquipoView, InformacionEquipoView, - FullInformacionPrestamoView, - InformacionPrestamoView, - FullInformacionMultaView, - InformacionMultaView, InformacionEquipoProgramaView, InformacionEquipoTipoEntradaView, + InformacionInstitucionView, + FullInformacionMultaView, + InformacionMultaView, InformacionOperadorView, + FullInformacionPrestamoView, + InformacionPrestamoView, InformacionUsuarioView, ], }; diff --git a/src/institucion/entity/institucion.entity.ts b/src/institucion/entity/institucion.entity.ts index 18bb861..afa8bff 100644 --- a/src/institucion/entity/institucion.entity.ts +++ b/src/institucion/entity/institucion.entity.ts @@ -28,9 +28,6 @@ export class Institucion { @Column({ type: String, nullable: true, length: 40 }) dominio: string; - @Column({ type: Boolean, nullable: false, default: false }) - email_institucional: boolean; - @Column({ type: String, nullable: false, length: 150 }) institucion: string; diff --git a/src/institucion/entity/views/informacion-institucion.view.ts b/src/institucion/entity/views/informacion-institucion.view.ts new file mode 100644 index 0000000..221cd78 --- /dev/null +++ b/src/institucion/entity/views/informacion-institucion.view.ts @@ -0,0 +1,34 @@ +import { DataSource, ViewEntity, ViewColumn } from 'typeorm'; +import { Institucion } from '../institucion.entity'; + +@ViewEntity({ + expression: (dataSource: DataSource) => + dataSource + .createQueryBuilder() + .select('i.id_institucion', 'id_institucion') + .addSelect('i.activo', 'activo') + .addSelect('i.correo', 'correo') + .addSelect('i.dominio', 'dominio') + .addSelect('i.institucion', 'institucion') + .addSelect('i.responsable', 'responsable') + .from(Institucion, 'i'), +}) +export class InformacionInstitucionView { + @ViewColumn() + id_institucion: number; + + @ViewColumn() + activo: number; + + @ViewColumn() + correo: string; + + @ViewColumn() + dominio: string; + + @ViewColumn() + institucion: string; + + @ViewColumn() + responsable: string; +} diff --git a/src/institucion/institucion.controller.ts b/src/institucion/institucion.controller.ts index 5e49861..2a54311 100644 --- a/src/institucion/institucion.controller.ts +++ b/src/institucion/institucion.controller.ts @@ -41,7 +41,7 @@ export class InstitucionController { description: 'Endpoint que retorna todas las instituciones activas.', }) activas() { - return this.institucionService.findAll(true); + return this.institucionService.findInfoInstitucionAll(1); } @Serealize(InstitucionMinOutputDto) @@ -55,7 +55,7 @@ export class InstitucionController { const superAdmin: Operador = req.user.operador; this.validarUsuarioService.validarSuperAdmin(superAdmin); - return this.institucionService.findAll(); + return this.institucionService.findInfoInstitucionAll(); } @Serealize(InstitucionOutputDto) @@ -99,7 +99,7 @@ export class InstitucionController { const superAdmin: Operador = req.user.operador; this.validarUsuarioService.validarSuperAdmin(superAdmin); - return this.institucionService.findAll(); + return this.institucionService.findInfoInstitucionAll(0, true); } @Put() diff --git a/src/institucion/institucion.module.ts b/src/institucion/institucion.module.ts index b49895d..9cf4498 100644 --- a/src/institucion/institucion.module.ts +++ b/src/institucion/institucion.module.ts @@ -4,12 +4,13 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { InstitucionController } from './institucion.controller'; import { InstitucionService } from './institucion.service'; import { Institucion } from './entity/institucion.entity'; +import { InformacionInstitucionView } from './entity/views/informacion-institucion.view'; import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; @Module({ imports: [ PassportModule.register({ defaultStrategy: 'jwt' }), - TypeOrmModule.forFeature([Institucion]), + TypeOrmModule.forFeature([Institucion, InformacionInstitucionView]), ValidarUsuarioModule, ], controllers: [InstitucionController], diff --git a/src/institucion/institucion.service.ts b/src/institucion/institucion.service.ts index 4ea1ef0..25e5a99 100644 --- a/src/institucion/institucion.service.ts +++ b/src/institucion/institucion.service.ts @@ -4,14 +4,17 @@ import { NotFoundException, } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; +import { FindOperator, IsNull, Not, Repository } from 'typeorm'; import { Institucion } from './entity/institucion.entity'; import { Operador } from '../operador/entity/operador.entity'; +import { InformacionInstitucionView } from './entity/views/informacion-institucion.view'; @Injectable() export class InstitucionService { constructor( @InjectRepository(Institucion) private repository: Repository, + @InjectRepository(InformacionInstitucionView) + private informacionInstitucionView: Repository, ) {} findAll(activo = false) { @@ -34,15 +37,52 @@ export class InstitucionService { }); } + findInfoInstitucionById(id_institucion: number) { + return this.informacionInstitucionView + .findOne({ where: { id_institucion } }) + .then((institucion) => { + if (!institucion) + throw new NotFoundException('No existe este id institución.'); + return this.repository.create({ + id_institucion: institucion.id_institucion, + }); + }); + } + + findInfoInstitucionAll(activo = 0, responsable = false) { + const busqueda: { activo?: number; responsable?: FindOperator } = {}; + + if (activo) busqueda.activo = activo; + if (responsable) busqueda.responsable = Not(IsNull()); + return this.informacionInstitucionView + .find({ where: busqueda, order: { institucion: 'ASC' } }) + .then((instituciones) => { + const data: Institucion[] = []; + + for (let i = 0; i < instituciones.length; i++) + data.push( + this.repository.create({ + id_institucion: instituciones[i].id_institucion, + activo: instituciones[i].activo === 1, + correo: instituciones[i].correo, + dominio: instituciones[i].dominio, + institucion: instituciones[i].institucion, + responsable: instituciones[i].responsable, + }), + ); + return data; + }); + } + update(admin: Operador, attrs: Partial) { - return this.findById(attrs.id_institucion) + return this.findInfoInstitucionById(attrs.id_institucion) .then((institucion) => { if ( admin.tipoUsuario.id_tipo_usuario === 3 && admin.institucion.id_institucion != institucion.id_institucion ) throw new ConflictException( - 'No puedes actualizar la información de esta institución porque no correspondes a ella.', + 'No puedes actualizar la información de esta institución porque no perteneces a ella.', ); Object.assign(institucion, attrs); return this.repository.save(institucion);