vista institucion

This commit is contained in:
xXpuma99Xx
2022-09-24 22:05:38 -05:00
parent 12c17bc51c
commit b25742ae95
6 changed files with 93 additions and 19 deletions
+11 -9
View File
@@ -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,
],
};
@@ -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;
@@ -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;
}
+3 -3
View File
@@ -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()
+2 -1
View File
@@ -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],
+43 -3
View File
@@ -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<Institucion>,
@InjectRepository(InformacionInstitucionView)
private informacionInstitucionView: Repository<InformacionInstitucionView>,
) {}
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<any> } = {};
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<Institucion>) {
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);