falta un update

This commit is contained in:
xXpuma99Xx 2022-10-16 11:53:07 -05:00
parent fccc5f11c5
commit 4c8da74726
9 changed files with 209 additions and 91 deletions

View File

@ -80,6 +80,8 @@ import { FullInformacionEquipoProgramaView } from './equipo-programa/entity/view
import { InformacionEquipoProgramaView } from './equipo-programa/entity/views/informacion-equipo-programa.view'; import { InformacionEquipoProgramaView } from './equipo-programa/entity/views/informacion-equipo-programa.view';
import { FullInformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/views/full-informacion-equipo-tipo-entrada.view'; import { FullInformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/views/full-informacion-equipo-tipo-entrada.view';
import { InformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view'; import { InformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view';
import { FullInformacionInstitucionUsuarioView } from './institucion-usuario/entity/views/full-informacion-institucion-usuario.view';
import { InformacionInstitucionUsuarioView } from './institucion-usuario/entity/views/informacion-institucion-usuario.view';
import { InformacionModuloView } from './modulo/entity/views/informacion-modulo.view'; import { InformacionModuloView } from './modulo/entity/views/informacion-modulo.view';
import { MinInformacionModuloView } from './modulo/entity/views/min-informacion-modulo.view'; import { MinInformacionModuloView } from './modulo/entity/views/min-informacion-modulo.view';
import { FullInformacionMultaView } from './multa/entity/views/full-informacion-multa.view'; import { FullInformacionMultaView } from './multa/entity/views/full-informacion-multa.view';
@ -157,6 +159,8 @@ import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuar
InformacionEquipoProgramaView, InformacionEquipoProgramaView,
FullInformacionEquipoTipoEntradaView, FullInformacionEquipoTipoEntradaView,
InformacionEquipoTipoEntradaView, InformacionEquipoTipoEntradaView,
FullInformacionInstitucionUsuarioView,
InformacionInstitucionUsuarioView,
InformacionModuloView, InformacionModuloView,
MinInformacionModuloView, MinInformacionModuloView,
FullInformacionMultaView, FullInformacionMultaView,

View File

@ -1,28 +0,0 @@
// import { DataSource, ViewEntity, ViewColumn } from 'typeorm';
// import { EquipoPrograma } from '../equipo-programa.entity';
// import { Programa } from '../../../institucion-programa/entity/programa.entity';
// @ViewEntity({
// expression: (dataSource: DataSource) =>
// dataSource
// .createQueryBuilder()
// .select('ep.id_equipo_programa', 'id_equipo_programa')
// .addSelect('ep.id_equipo', 'id_equipo')
// .addSelect('ep.id_programa', 'id_programa')
// .addSelect('p.programa', 'programa')
// .from(EquipoPrograma, 'ep')
// .innerJoin(Programa, 'p', 'p.id_programa = ep.id_programa'),
// })
// export class FullInformacionEquipoProgramaView {
// @ViewColumn()
// id_equipo_programa: number;
// @ViewColumn()
// id_equipo: number;
// @ViewColumn()
// id_programa: number;
// @ViewColumn()
// programa: string;
// }

View File

@ -0,0 +1,62 @@
import { DataSource, ViewEntity, ViewColumn } from 'typeorm';
import { Carrera } from '../../../institucion-carrera/entity/carrera.entity';
import { Institucion } from '../../../institucion/entity/institucion.entity';
import { InstitucionCarrera } from '../../../institucion-carrera/entity/institucion-carrera.entity';
import { InstitucionUsuario } from '../institucion-usuario.entity';
import { Usuario } from '../../../usuario/entity/usuario.entity';
@ViewEntity({
expression: (dataSource: DataSource) =>
dataSource
.createQueryBuilder()
.select('iu.id_institucion_usuario', 'id_institucion_usuario')
.addSelect('iu.activo', 'activo')
.addSelect('iu.multa', 'multa')
.addSelect('iu.id_institucion_carrera', 'id_institucion_carrera')
.addSelect('iu.id_usuario', 'id_usuario')
.addSelect('ic.id_carrera', 'id_carrera')
.addSelect('ic.id_institucion', 'id_institucion')
.addSelect('u.correo', 'correo')
.addSelect('c.carrera', 'carrera')
.addSelect('i.institucion', 'institucion')
.from(InstitucionUsuario, 'iu')
.innerJoin(
InstitucionCarrera,
'ic',
'ic.id_institucion_carrera = iu.id_institucion_carrera',
)
.innerJoin(Usuario, 'u', 'u.id_usuario = iu.id_usuario')
.innerJoin(Carrera, 'c', 'c.id_carrera = ic.id_carrera')
.innerJoin(Institucion, 'i', 'i.id_institucion = ic.id_institucion'),
})
export class FullInformacionInstitucionUsuarioView {
@ViewColumn()
id_carrera: number;
@ViewColumn()
activo: number;
@ViewColumn()
carrera: string;
@ViewColumn()
correo: string;
@ViewColumn()
institucion: string;
@ViewColumn()
id_institucion: number;
@ViewColumn()
id_institucion_carrera: number;
@ViewColumn()
id_institucion_usuario: number;
@ViewColumn()
id_usuario: number;
@ViewColumn()
multa: number;
}

View File

@ -1,22 +0,0 @@
import { DataSource, ViewEntity, ViewColumn } from 'typeorm';
import { InstitucionUsuario } from '../institucion-usuario.entity';
@ViewEntity({
expression: (dataSource: DataSource) =>
dataSource
.createQueryBuilder()
.select('ep.id_equipo_programa', 'id_equipo_programa')
.addSelect('ep.id_equipo', 'id_equipo')
.addSelect('ep.id_programa', 'id_programa')
.from(InstitucionUsuario, 'ep'),
})
export class InformacionEquipoProgramaView {
@ViewColumn()
id_equipo_programa: number;
@ViewColumn()
id_equipo: number;
@ViewColumn()
id_programa: number;
}

View File

@ -0,0 +1,44 @@
import { DataSource, ViewEntity, ViewColumn } from 'typeorm';
import { InstitucionCarrera } from '../../../institucion-carrera/entity/institucion-carrera.entity';
import { InstitucionUsuario } from '../institucion-usuario.entity';
@ViewEntity({
expression: (dataSource: DataSource) =>
dataSource
.createQueryBuilder()
.select('iu.id_institucion_usuario', 'id_institucion_usuario')
.addSelect('iu.activo', 'activo')
.addSelect('iu.multa', 'multa')
.addSelect('iu.id_institucion_carrera', 'id_institucion_carrera')
.addSelect('iu.id_usuario', 'id_usuario')
.addSelect('ic.id_carrera', 'id_carrera')
.addSelect('ic.id_institucion', 'id_institucion')
.from(InstitucionUsuario, 'iu')
.innerJoin(
InstitucionCarrera,
'ic',
'ic.id_institucion_carrera = iu.id_institucion_carrera',
),
})
export class InformacionInstitucionUsuarioView {
@ViewColumn()
id_carrera: number;
@ViewColumn()
activo: number;
@ViewColumn()
id_institucion: number;
@ViewColumn()
id_institucion_carrera: number;
@ViewColumn()
id_institucion_usuario: number;
@ViewColumn()
id_usuario: number;
@ViewColumn()
multa: number;
}

View File

@ -3,13 +3,19 @@ import { PassportModule } from '@nestjs/passport';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { InstitucionUsuarioService } from './institucion-usuario.service'; import { InstitucionUsuarioService } from './institucion-usuario.service';
import { InstitucionUsuario } from './entity/institucion-usuario.entity'; import { InstitucionUsuario } from './entity/institucion-usuario.entity';
import { FullInformacionInstitucionUsuarioView } from './entity/views/full-informacion-institucion-usuario.view';
import { InformacionInstitucionUsuarioView } from './entity/views/informacion-institucion-usuario.view';
import { InstitucionUsuarioController } from './institucion-usuario.controller'; import { InstitucionUsuarioController } from './institucion-usuario.controller';
import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'; import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module';
@Module({ @Module({
imports: [ imports: [
PassportModule.register({ defaultStrategy: 'jwt' }), PassportModule.register({ defaultStrategy: 'jwt' }),
TypeOrmModule.forFeature([InstitucionUsuario]), TypeOrmModule.forFeature([
InstitucionUsuario,
FullInformacionInstitucionUsuarioView,
InformacionInstitucionUsuarioView,
]),
ValidarUsuarioModule, ValidarUsuarioModule,
], ],
providers: [InstitucionUsuarioService], providers: [InstitucionUsuarioService],

View File

@ -4,12 +4,18 @@ import { Repository } from 'typeorm';
import { InstitucionCarrera } from '../institucion-carrera/entity/institucion-carrera.entity'; import { InstitucionCarrera } from '../institucion-carrera/entity/institucion-carrera.entity';
import { InstitucionUsuario } from './entity/institucion-usuario.entity'; import { InstitucionUsuario } from './entity/institucion-usuario.entity';
import { Usuario } from '../usuario/entity/usuario.entity'; import { Usuario } from '../usuario/entity/usuario.entity';
import { FullInformacionInstitucionUsuarioView } from './entity/views/full-informacion-institucion-usuario.view';
import { InformacionInstitucionUsuarioView } from './entity/views/informacion-institucion-usuario.view';
@Injectable() @Injectable()
export class InstitucionUsuarioService { export class InstitucionUsuarioService {
constructor( constructor(
@InjectRepository(InstitucionUsuario) @InjectRepository(InstitucionUsuario)
private repository: Repository<InstitucionUsuario>, private repository: Repository<InstitucionUsuario>,
@InjectRepository(FullInformacionInstitucionUsuarioView)
private fullInformacionInstitucionUsuarioView: Repository<FullInformacionInstitucionUsuarioView>,
@InjectRepository(InformacionInstitucionUsuarioView)
private informacionInstitucionUsuarioView: Repository<InformacionInstitucionUsuarioView>,
) {} ) {}
create(institucionCarrera: InstitucionCarrera, usuario: Usuario) { create(institucionCarrera: InstitucionCarrera, usuario: Usuario) {
@ -21,51 +27,97 @@ export class InstitucionUsuarioService {
})); }));
} }
findAllByIdUsuario(id_usuario: number) { findInfoInstitucionUsuarioAllByIdUsuario(id_usuario: number) {
return this.repository.find({ return this.informacionInstitucionUsuarioView
join: { .find({ where: { id_usuario } })
alias: 'iu', .then((infoInstitucionUsuarios) => {
innerJoinAndSelect: { ic: 'iu.institucionCarrera' }, const institucionUsuarios: InstitucionUsuario[] = [];
},
where: { usuario: { id_usuario } },
});
}
findById(id_institucion_usuario: number) { for (let i = 0; i < infoInstitucionUsuarios.length; i++)
return this.repository institucionUsuarios.push(
.findOne({ where: { id_institucion_usuario } }) this.repository.create({
.then((institucionUsuario) => { id_institucion_usuario:
if (!institucionUsuario) infoInstitucionUsuarios[i].id_institucion_usuario,
throw new ConflictException('No existe este id institución usuario.'); activo: infoInstitucionUsuarios[i].activo === 1,
return institucionUsuario; multa: infoInstitucionUsuarios[i].multa === 1,
institucionCarrera: {
id_institucion_carrera:
infoInstitucionUsuarios[i].id_institucion_carrera,
carrera: { id_carrera: infoInstitucionUsuarios[i].id_carrera },
institucion: {
id_institucion: infoInstitucionUsuarios[i].id_institucion,
},
},
}),
);
return institucionUsuarios;
}); });
} }
findByUsuarioInstitucionCarrera( findInfoInstitucionUsuarioById(id_institucion_usuario: number) {
return this.informacionInstitucionUsuarioView
.findOne({ where: { id_institucion_usuario } })
.then((infoInstitucionUsuario) => {
if (!infoInstitucionUsuario)
throw new ConflictException('No existe este id institución usuario.');
return this.repository.create({
id_institucion_usuario: infoInstitucionUsuario.id_institucion_usuario,
activo: infoInstitucionUsuario.activo === 1,
multa: infoInstitucionUsuario.multa === 1,
institucionCarrera: {
id_institucion_carrera:
infoInstitucionUsuario.id_institucion_carrera,
carrera: { id_carrera: infoInstitucionUsuario.id_carrera },
institucion: {
id_institucion: infoInstitucionUsuario.id_institucion,
},
},
});
});
}
findFullInfoInstitucionUsuarioByUsuarioInstitucionCarrera(
usuario: Usuario, usuario: Usuario,
institucionCarrera: InstitucionCarrera, institucionCarrera: InstitucionCarrera,
) { ) {
return this.repository return this.fullInformacionInstitucionUsuarioView
.findOne({ .findOne({
where: { activo: true, institucionCarrera, usuario }, where: {
id_institucion_carrera: institucionCarrera.id_institucion_carrera,
id_usuario: usuario.id_usuario,
},
}) })
.then((institucionUsuario) => { .then((infoInstitucionUsuario) => {
if (!institucionUsuario) if (!infoInstitucionUsuario || infoInstitucionUsuario.activo === 0)
throw new ConflictException( throw new ConflictException(
'Verificar sus datos, cualquier duda asistir al módulo PC PUMA.', 'Verificar sus datos, cualquier duda asistir al módulo PC PUMA.',
); );
return institucionUsuario; return this.repository.create({
id_institucion_usuario: infoInstitucionUsuario.id_institucion_usuario,
activo: infoInstitucionUsuario.activo === 1,
multa: infoInstitucionUsuario.multa === 1,
institucionCarrera: {
id_institucion_carrera:
infoInstitucionUsuario.id_institucion_carrera,
carrera: { id_carrera: infoInstitucionUsuario.id_carrera },
institucion: {
id_institucion: infoInstitucionUsuario.id_institucion,
},
},
usuario: {
id_usuario: infoInstitucionUsuario.id_usuario,
correo: infoInstitucionUsuario.correo,
},
});
}); });
} }
update(attrs: Partial<InstitucionUsuario>) { update(attrs: Partial<InstitucionUsuario>) {
return this.findById(attrs.id_institucion_usuario) return this.findInfoInstitucionUsuarioById(attrs.id_institucion_usuario)
.then((institucionUsuario) => { .then((institucionUsuario) => {
Object.assign(institucionUsuario, attrs); Object.assign(institucionUsuario, attrs);
return this.repository.save(institucionUsuario); return this.repository.save(institucionUsuario);
}) })
.then((_) => ({ .then((_) => ({ message: 'Se guardaron los cambios correctamente.' }));
message: 'Se guardaron los cambios correctamente.',
}));
} }
} }

View File

@ -93,7 +93,7 @@ export class MultaService {
return this.repository.save(this.repository.create(data)); return this.repository.save(this.repository.create(data));
}) })
.then((_) => .then((_) =>
this.institucionUsuarioService.findAllByIdUsuario( this.institucionUsuarioService.findInfoInstitucionUsuarioAllByIdUsuario(
prestamo.usuario.id_usuario, prestamo.usuario.id_usuario,
), ),
) )
@ -265,9 +265,10 @@ export class MultaService {
} }
async quitarMulta(id_institucion_usuario: number) { async quitarMulta(id_institucion_usuario: number) {
const institucionUsuario = await this.institucionUsuarioService.findById( const institucionUsuario =
id_institucion_usuario, await this.institucionUsuarioService.findInfoInstitucionUsuarioById(
); id_institucion_usuario,
);
return this.repository return this.repository
.createQueryBuilder('mu') .createQueryBuilder('mu')

View File

@ -249,27 +249,26 @@ export class UsuarioService {
throw new ConflictException( throw new ConflictException(
'Verificar sus datos, cualquier duda asistir al módulo PC PUMA.', 'Verificar sus datos, cualquier duda asistir al módulo PC PUMA.',
); );
return this.institucionUsuarioService.findByUsuarioInstitucionCarrera( return this.institucionUsuarioService.findFullInfoInstitucionUsuarioByUsuarioInstitucionCarrera(
existeUsuario, existeUsuario,
institucionCarrera, institucionCarrera,
); );
}) })
.then((institucionUsuario) => { .then((institucionUsuario) => {
const usuario = institucionUsuario.usuario; if (!institucionUsuario.usuario.correo)
if (!usuario.correo)
throw new ConflictException( throw new ConflictException(
'Tu institución no te asignó un correo institucional, dirigete al módulo ', 'Tu institución no te asignó un correo institucional, dirigete al módulo para solucionarlo.',
); );
const arrobaIndex = usuario.correo.indexOf('@'); const arrobaIndex = institucionUsuario.usuario.correo.indexOf('@');
message = `Se creó correctamente tu cuenta, mandamos un correo a ...${usuario.correo.slice( message = `Se creó correctamente tu cuenta, mandamos un correo a ...${institucionUsuario.usuario.correo.slice(
arrobaIndex - 3, arrobaIndex - 3,
)} con tus credenciales para acceder a este servicio.`; )} con tus credenciales para acceder a este servicio.`;
usuario.telefono = telefono; institucionUsuario.usuario.telefono = telefono;
usuario.password = this.bcryptService.encriptar(password); institucionUsuario.usuario.password =
return this.repository.save(usuario); this.bcryptService.encriptar(password);
return this.repository.save(institucionUsuario.usuario);
}) })
.then((usuario) => .then((usuario) =>
this.nodemailerService.sendEmail({ this.nodemailerService.sendEmail({