pcpuma_unam_api/src/institucion-usuario/institucion-usuario.service.ts
2022-10-24 09:30:19 -05:00

202 lines
7.6 KiB
TypeScript

import { ConflictException, Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Institucion } from 'src/institucion/entity/institucion.entity';
import { InstitucionCarrera } from '../institucion-carrera/entity/institucion-carrera.entity';
import { InstitucionUsuario } from './entity/institucion-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';
import { Operador } from 'src/operador/entity/operador.entity';
@Injectable()
export class InstitucionUsuarioService {
constructor(
@InjectRepository(InstitucionUsuario)
private repository: Repository<InstitucionUsuario>,
@InjectRepository(FullInformacionInstitucionUsuarioView)
private fullInformacionInstitucionUsuarioView: Repository<FullInformacionInstitucionUsuarioView>,
@InjectRepository(InformacionInstitucionUsuarioView)
private informacionInstitucionUsuarioView: Repository<InformacionInstitucionUsuarioView>,
) {}
create(institucionCarrera: InstitucionCarrera, usuario: Usuario) {
return this.repository
.save(this.repository.create({ institucionCarrera, usuario }))
.then((institucionUsuario) => ({
message: `Se asignó la carrera: ${institucionUsuario.institucionCarrera.carrera.carrera} al usuario: ${institucionUsuario.usuario.usuario}.`,
institucionUsuario,
}));
}
desactivarCuentas(admin: Operador) {
return this.informacionInstitucionUsuarioView
.find({
where: { id_institucion: admin.institucion.id_institucion },
})
.then(async (infoInstitucionesUsuario) => {
for (let i = 0; i < infoInstitucionesUsuario.length; i++)
await this.repository.save(
this.repository.create({
id_institucion_usuario:
infoInstitucionesUsuario[i].id_institucion_usuario,
activo: false,
}),
);
})
.then((_) => ({ message: 'Se desactivaron todas las cuentas.' }));
}
findAllByIdUsuarioIdInstitucion(id_usuario: number, id_institucion: number) {
return this.informacionInstitucionUsuarioView
.find({ where: { id_institucion, id_usuario } })
.then((infoInstitucionesUsuario) => {
const institucionesUsuario: InstitucionUsuario[] = [];
for (let i = 0; i < infoInstitucionesUsuario.length; i++)
institucionesUsuario.push(
this.viewToInstitucionUsuario(infoInstitucionesUsuario[i]),
);
return institucionesUsuario;
});
}
findFullInfoAllByIdUsuarioIdInstitucion(
id_usuario: number,
id_institucion: number,
) {
return this.fullInformacionInstitucionUsuarioView
.find({ where: { id_institucion, id_usuario } })
.then((infoInstitucionesUsuario) => {
const institucionesUsuario: InstitucionUsuario[] = [];
for (let i = 0; i < infoInstitucionesUsuario.length; i++)
institucionesUsuario.push(
this.repository.create({
id_institucion_usuario:
infoInstitucionesUsuario[i].id_institucion_usuario,
activo: infoInstitucionesUsuario[i].activo === 1,
multa: infoInstitucionesUsuario[i].multa === 1,
institucionCarrera: {
id_institucion_carrera:
infoInstitucionesUsuario[i].id_institucion_carrera,
carrera: {
id_carrera: infoInstitucionesUsuario[i].id_carrera,
carrera: infoInstitucionesUsuario[i].carrera,
},
institucion: {
id_institucion: infoInstitucionesUsuario[i].id_institucion,
institucion: infoInstitucionesUsuario[i].institucion,
},
},
}),
);
return institucionesUsuario;
});
}
findFullInfoByIdUsuarioIdInstitucionCarrera(
usuario: Usuario,
id_institucion_carrera: number,
) {
return this.fullInformacionInstitucionUsuarioView
.findOne({
where: { id_institucion_carrera, id_usuario: usuario.id_usuario },
})
.then((infoInstitucionUsuario) => {
if (!infoInstitucionUsuario || infoInstitucionUsuario.activo === 0)
throw new ConflictException(
'Verificar sus datos, cualquier duda asistir al módulo PC PUMA.',
);
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,
});
});
}
findById(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.viewToInstitucionUsuario(infoInstitucionUsuario);
});
}
findByIdUsuarioIdInstitucion(usuario: Usuario, institucion: Institucion) {
return this.informacionInstitucionUsuarioView
.findOne({
where: {
id_institucion: institucion.id_institucion,
id_usuario: usuario.id_usuario,
},
})
.then((infoInstitucionUsuario) =>
this.viewToInstitucionUsuario(infoInstitucionUsuario),
);
}
findByIdUsuarioIdInstitucionCarrera(
id_usuario: number,
id_institucion_carrera: number,
) {
return this.informacionInstitucionUsuarioView
.findOne({ where: { id_institucion_carrera, id_usuario } })
.then((infoInstitucionUsuario) =>
this.viewToInstitucionUsuario(infoInstitucionUsuario),
);
}
save(institucionUsuario: InstitucionUsuario) {
return this.repository.save(institucionUsuario);
}
update(attrs: Partial<InstitucionUsuario>) {
return this.findById(attrs.id_institucion_usuario)
.then((institucionUsuario) => {
Object.assign(institucionUsuario, attrs);
return this.repository.save(institucionUsuario);
})
.then((_) => ({ message: 'Se guardaron los cambios correctamente.' }));
}
updateMulta(id_institucion: number, id_usuario: number, status: boolean) {
return this.findAllByIdUsuarioIdInstitucion(
id_usuario,
id_institucion,
).then(async (institucionesUsuario) => {
for (let i = 0; i < institucionesUsuario.length; i++) {
institucionesUsuario[i].multa = status;
await this.repository.save(institucionesUsuario[i]);
}
});
}
viewToInstitucionUsuario(
infoInstitucionUsuario: InformacionInstitucionUsuarioView,
) {
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 },
},
});
}
}