2022-04-16 13:05:27 -05:00
|
|
|
import {
|
|
|
|
|
ConflictException,
|
|
|
|
|
Injectable,
|
|
|
|
|
NotFoundException,
|
|
|
|
|
} from '@nestjs/common';
|
2022-04-04 20:02:54 -05:00
|
|
|
import { InjectRepository } from '@nestjs/typeorm';
|
2022-10-01 15:09:04 -05:00
|
|
|
import { FindOptionsWhere, Repository } from 'typeorm';
|
2022-05-04 11:22:17 -05:00
|
|
|
import { Institucion } from '../institucion/entity/institucion.entity';
|
2022-04-16 14:37:17 -05:00
|
|
|
import { Modulo } from './entity/modulo.entity';
|
2022-09-25 01:03:33 -05:00
|
|
|
import { InformacionModuloView } from './entity/views/informacion-modulo.view';
|
2022-09-25 11:18:06 -05:00
|
|
|
import { MinInformacionModuloView } from './entity/views/min-informacion-modulo.view';
|
2022-08-15 14:29:53 -05:00
|
|
|
import { Operador } from '../operador/entity/operador.entity';
|
2022-04-17 21:55:00 -05:00
|
|
|
import { InstitucionService } from '../institucion/institucion.service';
|
2022-04-04 20:02:54 -05:00
|
|
|
|
|
|
|
|
@Injectable()
|
|
|
|
|
export class ModuloService {
|
|
|
|
|
constructor(
|
2022-04-18 16:55:19 -05:00
|
|
|
@InjectRepository(Modulo) private repository: Repository<Modulo>,
|
2022-09-25 01:03:33 -05:00
|
|
|
@InjectRepository(InformacionModuloView)
|
|
|
|
|
private informacionModuloView: Repository<InformacionModuloView>,
|
2022-09-25 11:18:06 -05:00
|
|
|
@InjectRepository(MinInformacionModuloView)
|
|
|
|
|
private minInformacionModuloView: Repository<MinInformacionModuloView>,
|
2022-04-16 11:21:52 -05:00
|
|
|
private institucionService: InstitucionService,
|
2022-04-04 20:02:54 -05:00
|
|
|
) {}
|
|
|
|
|
|
2022-08-01 01:58:47 -05:00
|
|
|
async create(admin: Operador, modulo: string) {
|
|
|
|
|
return this.existeModulo(admin.institucion, modulo)
|
2022-05-02 15:50:00 -05:00
|
|
|
.then(() =>
|
|
|
|
|
this.repository.save(
|
|
|
|
|
this.repository.create({
|
2022-08-01 01:58:47 -05:00
|
|
|
institucion: admin.institucion,
|
2022-05-02 15:50:00 -05:00
|
|
|
modulo,
|
|
|
|
|
}),
|
|
|
|
|
),
|
|
|
|
|
)
|
2022-06-23 23:04:47 -05:00
|
|
|
.then((_) => ({
|
|
|
|
|
message: 'Se creó correctamente un nuevo módulo.',
|
|
|
|
|
}));
|
2022-05-02 15:50:00 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async existeModulo(id_institucion: number | Institucion, modulo: string) {
|
|
|
|
|
const institucion =
|
|
|
|
|
typeof id_institucion === 'number'
|
2022-09-25 01:03:33 -05:00
|
|
|
? await this.institucionService.findInfoInstitucionById(id_institucion)
|
2022-05-02 15:50:00 -05:00
|
|
|
: id_institucion;
|
|
|
|
|
|
2022-09-25 11:18:06 -05:00
|
|
|
return this.minInformacionModuloView
|
2022-09-25 01:03:33 -05:00
|
|
|
.findOne({
|
|
|
|
|
where: { id_institucion: institucion.id_institucion, modulo },
|
|
|
|
|
})
|
2022-04-16 11:21:52 -05:00
|
|
|
.then((existeModulo) => {
|
|
|
|
|
if (existeModulo)
|
|
|
|
|
throw new ConflictException(
|
2022-06-23 23:04:47 -05:00
|
|
|
'Ya existe un módulo en esta institución con este nombre, intente con otro nombre.',
|
2022-04-16 11:21:52 -05:00
|
|
|
);
|
2022-09-25 01:03:33 -05:00
|
|
|
return;
|
2022-07-19 08:25:58 -05:00
|
|
|
});
|
2022-04-16 14:37:17 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
findById(id_modulo: number) {
|
2022-08-23 17:12:09 -05:00
|
|
|
return this.repository.findOne({ where: { id_modulo } }).then((modulo) => {
|
2022-06-26 12:47:00 -05:00
|
|
|
if (!modulo) throw new NotFoundException('No existe este id módulo.');
|
2022-04-16 14:37:17 -05:00
|
|
|
return modulo;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-06 15:00:36 -05:00
|
|
|
async findModulo(
|
|
|
|
|
id_institucion: number | Institucion,
|
|
|
|
|
modulo: string,
|
|
|
|
|
validarNoExiste = true,
|
|
|
|
|
) {
|
|
|
|
|
const institucion =
|
|
|
|
|
typeof id_institucion === 'number'
|
2022-09-25 01:03:33 -05:00
|
|
|
? await this.institucionService.findInfoInstitucionById(id_institucion)
|
2022-06-06 15:00:36 -05:00
|
|
|
: id_institucion;
|
|
|
|
|
|
2022-08-23 17:12:09 -05:00
|
|
|
return this.repository
|
|
|
|
|
.findOne({ where: { institucion, modulo } })
|
|
|
|
|
.then((modulo) => {
|
|
|
|
|
if (validarNoExiste && !modulo)
|
|
|
|
|
throw new ConflictException('No existe este módulo.');
|
|
|
|
|
return modulo;
|
|
|
|
|
});
|
2022-06-06 15:00:36 -05:00
|
|
|
}
|
|
|
|
|
|
2022-09-25 01:03:33 -05:00
|
|
|
findInfoModuloById(id_modulo: number) {
|
|
|
|
|
return this.informacionModuloView
|
|
|
|
|
.findOne({ where: { id_modulo } })
|
|
|
|
|
.then((infoModulo) => {
|
|
|
|
|
if (!infoModulo)
|
|
|
|
|
throw new NotFoundException('No existe este id módulo.');
|
|
|
|
|
return this.repository.create({
|
|
|
|
|
id_modulo: infoModulo.id_modulo,
|
2022-09-25 11:18:06 -05:00
|
|
|
institucion: {
|
|
|
|
|
id_institucion: infoModulo.id_institucion,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
findMinInfoModuloById(id_modulo: number) {
|
|
|
|
|
return this.minInformacionModuloView
|
|
|
|
|
.findOne({ where: { id_modulo } })
|
|
|
|
|
.then((infoModulo) => {
|
|
|
|
|
if (!infoModulo)
|
|
|
|
|
throw new NotFoundException('No existe este id módulo.');
|
|
|
|
|
return this.repository.create({
|
|
|
|
|
id_modulo: infoModulo.id_modulo,
|
|
|
|
|
activo: infoModulo.activo_modulo === 1,
|
2022-09-25 01:03:33 -05:00
|
|
|
modulo: infoModulo.modulo,
|
|
|
|
|
institucion: {
|
|
|
|
|
id_institucion: infoModulo.id_institucion,
|
|
|
|
|
institucion: infoModulo.institucion,
|
2022-09-25 11:18:06 -05:00
|
|
|
activo: infoModulo.activo_institucion === 1,
|
2022-09-25 01:03:33 -05:00
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2022-09-25 11:18:06 -05:00
|
|
|
async findMinInfoModuloAll(id_institucion: number, activo = 0) {
|
2022-09-25 01:03:33 -05:00
|
|
|
return this.institucionService
|
|
|
|
|
.findInfoInstitucionById(id_institucion)
|
|
|
|
|
.then((institucion) => {
|
2022-10-01 15:09:04 -05:00
|
|
|
const busqueda: FindOptionsWhere<MinInformacionModuloView> = {
|
2022-09-25 01:03:33 -05:00
|
|
|
id_institucion: institucion.id_institucion,
|
|
|
|
|
};
|
|
|
|
|
|
2022-09-25 11:18:06 -05:00
|
|
|
if (activo) busqueda.activo_modulo = activo;
|
2022-09-25 23:27:25 -05:00
|
|
|
return this.minInformacionModuloView.find({ where: busqueda });
|
2022-09-25 01:03:33 -05:00
|
|
|
})
|
|
|
|
|
.then((infoModulos) => {
|
|
|
|
|
const modulos: Modulo[] = [];
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < infoModulos.length; i++)
|
|
|
|
|
modulos.push(
|
|
|
|
|
this.repository.create({
|
|
|
|
|
id_modulo: infoModulos[i].id_modulo,
|
2022-09-25 11:18:06 -05:00
|
|
|
activo: infoModulos[i].activo_modulo === 1,
|
2022-09-25 01:03:33 -05:00
|
|
|
modulo: infoModulos[i].modulo,
|
|
|
|
|
institucion: {
|
|
|
|
|
id_institucion: infoModulos[i].id_institucion,
|
2022-09-25 11:18:06 -05:00
|
|
|
activo: infoModulos[i].activo_institucion === 1,
|
2022-09-25 01:03:33 -05:00
|
|
|
institucion: infoModulos[i].institucion,
|
|
|
|
|
},
|
|
|
|
|
}),
|
|
|
|
|
);
|
|
|
|
|
return modulos;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-01 01:58:47 -05:00
|
|
|
update(admin: Operador, attrs: Partial<Modulo>) {
|
2022-09-25 01:03:33 -05:00
|
|
|
return this.findInfoModuloById(attrs.id_modulo)
|
2022-04-21 22:08:59 -05:00
|
|
|
.then(async (modulo) => {
|
2022-08-01 01:58:47 -05:00
|
|
|
if (
|
|
|
|
|
admin.institucion.id_institucion != modulo.institucion.id_institucion
|
|
|
|
|
)
|
|
|
|
|
throw new ConflictException(
|
2022-08-01 02:59:35 -05:00
|
|
|
'No puedes actualizar la información de este módulo porque no le pertenece a tu institución.',
|
2022-08-01 01:58:47 -05:00
|
|
|
);
|
2022-04-21 22:08:59 -05:00
|
|
|
if (attrs.modulo)
|
2022-05-02 15:50:00 -05:00
|
|
|
await this.existeModulo(modulo.institucion, attrs.modulo);
|
2022-04-16 13:05:27 -05:00
|
|
|
Object.assign(modulo, attrs);
|
2022-04-18 16:55:19 -05:00
|
|
|
return this.repository.save(modulo);
|
2022-04-16 13:07:55 -05:00
|
|
|
})
|
2022-04-18 16:55:19 -05:00
|
|
|
.then((_) => ({
|
2022-06-23 23:04:47 -05:00
|
|
|
message: 'Se guardaron los cambios correctamente.',
|
2022-04-16 13:07:55 -05:00
|
|
|
}));
|
2022-04-16 13:05:27 -05:00
|
|
|
}
|
2022-04-04 20:02:54 -05:00
|
|
|
}
|