2022-04-16 13:05:27 -05:00
|
|
|
import {
|
|
|
|
|
ConflictException,
|
2022-12-05 00:09:59 -06:00
|
|
|
forwardRef,
|
|
|
|
|
Inject,
|
2022-04-16 13:05:27 -05:00
|
|
|
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-12-05 00:09:59 -06:00
|
|
|
import { ModuloMotivoService } from '../modulo-motivo/modulo-motivo.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-12-05 00:09:59 -06:00
|
|
|
@Inject(forwardRef(() => ModuloMotivoService))
|
|
|
|
|
private moduloMotivoService: ModuloMotivoService,
|
2022-04-16 11:21:52 -05:00
|
|
|
private institucionService: InstitucionService,
|
2022-04-04 20:02:54 -05:00
|
|
|
) {}
|
|
|
|
|
|
2022-10-24 15:21:41 -05:00
|
|
|
create(admin: Operador, modulo: string) {
|
2022-12-20 07:18:37 -06:00
|
|
|
// Buscamos una modulo con ese nombre en la institución del admin
|
2022-10-24 15:21:41 -05:00
|
|
|
// que realiza esta acción
|
2022-10-04 20:46:31 -05:00
|
|
|
return this.findModulo(admin.institucion, modulo, true)
|
|
|
|
|
.then((_) =>
|
2022-12-20 17:46:03 -06:00
|
|
|
// Creamos y guardamos un registro
|
2022-05-02 15:50:00 -05:00
|
|
|
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-10-24 15:21:41 -05:00
|
|
|
.then((_) => ({ message: 'Se creó correctamente un nuevo módulo.' }));
|
2022-05-02 15:50:00 -05:00
|
|
|
}
|
|
|
|
|
|
2022-10-24 15:21:41 -05:00
|
|
|
findFullInfoById(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-10-24 15:21:41 -05:00
|
|
|
findById(id_modulo: number) {
|
2022-09-25 01:03:33 -05:00
|
|
|
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-10-04 20:46:31 -05:00
|
|
|
institucion: { id_institucion: infoModulo.id_institucion },
|
2022-09-25 01:03:33 -05:00
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2022-10-24 15:21:41 -05:00
|
|
|
findMinInfoModuloAll(id_institucion: number, activo = 0) {
|
2022-09-25 01:03:33 -05:00
|
|
|
return this.institucionService
|
2022-10-24 09:55:13 -05:00
|
|
|
.findById(id_institucion)
|
2022-09-25 01:03:33 -05:00
|
|
|
.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,
|
|
|
|
|
institucion: infoModulos[i].institucion,
|
|
|
|
|
},
|
|
|
|
|
}),
|
|
|
|
|
);
|
|
|
|
|
return modulos;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2022-10-04 20:46:31 -05:00
|
|
|
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,
|
|
|
|
|
modulo: infoModulo.modulo,
|
|
|
|
|
institucion: {
|
|
|
|
|
id_institucion: infoModulo.id_institucion,
|
|
|
|
|
institucion: infoModulo.institucion,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
findModulo(institucion: Institucion, modulo: string, validarExiste = false) {
|
|
|
|
|
return this.minInformacionModuloView
|
|
|
|
|
.findOne({
|
|
|
|
|
where: { id_institucion: institucion.id_institucion, modulo },
|
|
|
|
|
})
|
|
|
|
|
.then((infoModulo) => {
|
|
|
|
|
if (!infoModulo) return null;
|
|
|
|
|
if (validarExiste)
|
|
|
|
|
throw new ConflictException(
|
|
|
|
|
'Ya existe un módulo en esta institución con este nombre, intente con otro.',
|
|
|
|
|
);
|
|
|
|
|
return this.repository.create({
|
|
|
|
|
id_modulo: infoModulo.id_modulo,
|
|
|
|
|
institucion: { id_institucion: infoModulo.id_institucion },
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2022-12-05 00:09:59 -06:00
|
|
|
update(
|
|
|
|
|
admin: Operador,
|
|
|
|
|
attrs: Partial<Modulo>,
|
|
|
|
|
motivo?: string,
|
|
|
|
|
numero_alumnos?: number,
|
|
|
|
|
fecha_creacion?: string,
|
|
|
|
|
) {
|
2022-12-05 09:26:46 -06:00
|
|
|
if (
|
|
|
|
|
(!motivo || !numero_alumnos || !fecha_creacion) &&
|
|
|
|
|
(motivo || numero_alumnos || fecha_creacion)
|
|
|
|
|
)
|
2022-12-05 00:09:59 -06:00
|
|
|
throw new ConflictException('No se mandó toda la información necesaria.');
|
2022-10-24 15:21:41 -05:00
|
|
|
return this.findById(attrs.id_modulo)
|
2022-04-21 22:08:59 -05:00
|
|
|
.then(async (modulo) => {
|
2022-12-19 11:29:36 -06:00
|
|
|
// Validamos que el modulo enviado sea del admin que realiza esta acción
|
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-12-20 07:18:37 -06:00
|
|
|
// Buscamos un modulo en esa institución con ese nombre
|
2022-04-21 22:08:59 -05:00
|
|
|
if (attrs.modulo)
|
2022-10-04 20:46:31 -05:00
|
|
|
await this.findModulo(modulo.institucion, attrs.modulo, true);
|
2022-10-24 15:21:41 -05:00
|
|
|
// Asigno valores enviados al objeto
|
2022-04-16 13:05:27 -05:00
|
|
|
Object.assign(modulo, attrs);
|
2022-12-05 00:09:59 -06:00
|
|
|
if (motivo)
|
|
|
|
|
await this.moduloMotivoService.create(
|
|
|
|
|
admin,
|
|
|
|
|
modulo,
|
|
|
|
|
motivo,
|
|
|
|
|
numero_alumnos,
|
|
|
|
|
fecha_creacion,
|
|
|
|
|
);
|
2022-10-24 15:21:41 -05:00
|
|
|
// Guardar
|
2022-04-18 16:55:19 -05:00
|
|
|
return this.repository.save(modulo);
|
2022-04-16 13:07:55 -05:00
|
|
|
})
|
2022-10-24 15:21:41 -05:00
|
|
|
.then((_) => ({ message: 'Se guardaron los cambios correctamente.' }));
|
2022-04-16 13:05:27 -05:00
|
|
|
}
|
2022-04-04 20:02:54 -05:00
|
|
|
}
|