Files
pcpuma_unam_api/src/modulo/modulo.service.ts
T

181 lines
6.1 KiB
TypeScript
Raw Normal View History

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-12-23 10:45:32 -06:00
import { 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-08-15 14:29:53 -05:00
import { Operador } from '../operador/entity/operador.entity';
2022-12-23 09:11:26 -06:00
import { InformacionModuloView } from './entity/views/informacion-modulo.view';
import { FullInformacionModuloView } from './entity/views/full-informacion-modulo.view';
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-12-23 09:11:26 -06:00
@InjectRepository(FullInformacionModuloView)
private fullInformacionModuloView: Repository<FullInformacionModuloView>,
private institucionService: InstitucionService,
2022-12-05 00:09:59 -06:00
@Inject(forwardRef(() => ModuloMotivoService))
private moduloMotivoService: ModuloMotivoService,
2022-04-04 20:02:54 -05:00
) {}
2022-12-23 09:11:26 -06:00
create(admin: Operador, modulo: string): Promise<{ message: string }> {
// Buscamos un registro con ese nombre en la institución del admin
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-12-23 09:11:26 -06:00
findAllActivo(id_institucion: number): Promise<Modulo[]> {
return this.institucionService
.findById(id_institucion)
.then((institucion) =>
this.fullInformacionModuloView.find({
where: {
activo_modulo: 1,
id_institucion: institucion.id_institucion,
},
}),
)
.then((infoModulos) => {
const modulos: Modulo[] = [];
for (let i = 0; i < infoModulos.length; i++)
modulos.push(this.fullViewToModulo(infoModulos[i]));
return modulos;
});
}
findAllAdmin(operador: Operador): Promise<Modulo[]> {
return this.fullInformacionModuloView
.find({ where: { id_institucion: operador.institucion.id_institucion } })
.then((infoModulos) => {
const modulos: Modulo[] = [];
for (let i = 0; i < infoModulos.length; i++)
modulos.push(this.fullViewToModulo(infoModulos[i]));
return modulos;
});
2022-04-16 14:37:17 -05:00
}
2022-12-23 09:11:26 -06:00
findById(id_modulo: number): Promise<Modulo> {
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-12-23 09:11:26 -06:00
findFullInfoById(id_modulo: number): Promise<Modulo> {
return this.repository.findOne({ where: { id_modulo } }).then((modulo) => {
if (!modulo) throw new NotFoundException('No existe este id módulo.');
return modulo;
});
2022-09-25 01:03:33 -05:00
}
2022-12-23 09:11:26 -06:00
findMinInfoById(id_modulo: number): Promise<Modulo> {
return this.fullInformacionModuloView
2022-10-04 20:46:31 -05:00
.findOne({ where: { id_modulo } })
.then((infoModulo) => {
if (!infoModulo)
throw new NotFoundException('No existe este id módulo.');
2022-12-23 09:11:26 -06:00
return this.fullViewToModulo(infoModulo);
2022-10-04 20:46:31 -05:00
});
}
2022-12-23 09:11:26 -06:00
findModulo(
institucion: Institucion,
modulo: string,
validarExiste = false,
): Promise<Modulo> {
return this.fullInformacionModuloView
2022-10-04 20:46:31 -05:00
.findOne({
where: { id_institucion: institucion.id_institucion, modulo },
})
.then((infoModulo) => {
2022-12-23 09:11:26 -06:00
if (infoModulo && validarExiste)
2022-10-04 20:46:31 -05:00
throw new ConflictException(
'Ya existe un módulo en esta institución con este nombre, intente con otro.',
);
2022-12-23 09:11:26 -06:00
return this.fullViewToModulo(infoModulo);
2022-10-04 20:46:31 -05:00
});
}
2022-12-23 09:11:26 -06:00
private fullViewToModulo(infoModulo: FullInformacionModuloView): Modulo {
if (!infoModulo) return null;
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,
},
});
}
2022-12-05 00:09:59 -06:00
update(
admin: Operador,
attrs: Partial<Modulo>,
motivo?: string,
numero_alumnos?: number,
fecha_creacion?: string,
2022-12-23 09:11:26 -06:00
): Promise<{ message: string }> {
// Validamos que si se manda uno solo de esos campos, se deba mandar todos los demas
2022-12-05 09:26:46 -06:00
if (
2022-12-23 09:11:26 -06:00
(motivo || numero_alumnos || fecha_creacion) &&
(!motivo || !numero_alumnos || !fecha_creacion)
2022-12-05 09:26:46 -06:00
)
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-23 09:11:26 -06:00
// Validamos que el módulo pertenezca a la institución del admin
2022-08-01 01:58:47 -05:00
if (
admin.institucion.id_institucion != modulo.institucion.id_institucion
)
throw new ConflictException(
2022-12-23 09:11:26 -06:00
'No puedes modificar la información este módulo porque no pertenece a tu institución.',
2022-08-01 01:58:47 -05:00
);
2022-12-23 09:11:26 -06:00
// Si se quiere cambiar el nombre del módulo validamos que no exista uno con el mismo 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-12-20 18:14:49 -06:00
// Asignamos valores enviados al objeto
2022-04-16 13:05:27 -05:00
Object.assign(modulo, attrs);
2022-12-23 09:11:26 -06:00
// Se crea un registro del cambio de status de este módulo
2022-12-05 00:09:59 -06:00
if (motivo)
await this.moduloMotivoService.create(
admin,
modulo,
motivo,
numero_alumnos,
fecha_creacion,
);
2022-12-20 18:14:49 -06:00
// Guardamos cambios
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
}