modulo service final

This commit is contained in:
lemuel 2022-12-23 09:11:26 -06:00
parent 57a1c3c0be
commit 9a98ac2851
5 changed files with 83 additions and 80 deletions

View File

@ -86,7 +86,7 @@ import { InformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/v
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 { MinInformacionModuloView } from './modulo/entity/views/min-informacion-modulo.view';
import { FullInformacionModuloView } from './modulo/entity/views/full-informacion-modulo.view';
import { FullInformacionMultaView } from './multa/entity/views/full-informacion-multa.view';
import { InformacionMultaView } from './multa/entity/views/informacion-multa.view';
import { FullInformacionOperadorView } from './operador/entity/views/full-informacion-operador.view';
@ -168,7 +168,7 @@ import { ModuloMotivoModule } from './modulo-motivo/modulo-motivo.module';
FullInformacionInstitucionUsuarioView,
InformacionInstitucionUsuarioView,
InformacionModuloView,
MinInformacionModuloView,
FullInformacionModuloView,
FullInformacionMultaView,
InformacionMultaView,
FullInformacionOperadorView,

View File

@ -16,7 +16,7 @@ import { Institucion } from '../../../institucion/entity/institucion.entity';
.orderBy('institucion', 'ASC')
.addOrderBy('modulo', 'ASC'),
})
export class MinInformacionModuloView {
export class FullInformacionModuloView {
@ViewColumn()
id_modulo: number;

View File

@ -68,7 +68,7 @@ export class ModuloController {
const admin: Operador = req.user.operador;
this.validarUsuarioService.validarAdmin(admin);
return this.moduloService.findMinInfoModuloById(parseInt(query.id_modulo));
return this.moduloService.findMinInfoById(parseInt(query.id_modulo));
}
@Serealize(OnlyModuloOutputDto)
@ -82,9 +82,7 @@ export class ModuloController {
const admin: Operador = req.user.operador;
this.validarUsuarioService.validarAdmin(admin);
return this.moduloService.findMinInfoModuloAll(
admin.institucion.id_institucion,
);
return this.moduloService.findAllAdmin(admin);
}
@Serealize(OnlyModuloOutputDto)
@ -96,10 +94,7 @@ export class ModuloController {
type: 'string',
})
modulosActivos(@Query() query: IdInstitucionDto) {
return this.moduloService.findMinInfoModuloAll(
parseInt(query.id_institucion),
1,
);
return this.moduloService.findAllActivo(parseInt(query.id_institucion));
}
@Serealize(MessageOutputDto)

View File

@ -4,8 +4,8 @@ import { TypeOrmModule } from '@nestjs/typeorm';
import { ModuloController } from './modulo.controller';
import { ModuloService } from './modulo.service';
import { Modulo } from './entity/modulo.entity';
import { FullInformacionModuloView } from './entity/views/full-informacion-modulo.view';
import { InformacionModuloView } from './entity/views/informacion-modulo.view';
import { MinInformacionModuloView } from './entity/views/min-informacion-modulo.view';
import { InstitucionModule } from '../institucion/institucion.module';
import { ModuloMotivoModule } from '../modulo-motivo/modulo-motivo.module';
@ -16,8 +16,8 @@ import { ModuloMotivoModule } from '../modulo-motivo/modulo-motivo.module';
PassportModule.register({ defaultStrategy: 'jwt' }),
TypeOrmModule.forFeature([
Modulo,
FullInformacionModuloView,
InformacionModuloView,
MinInformacionModuloView,
]),
],
controllers: [ModuloController],

View File

@ -9,9 +9,9 @@ import { InjectRepository } from '@nestjs/typeorm';
import { FindOptionsWhere, Repository } from 'typeorm';
import { Institucion } from '../institucion/entity/institucion.entity';
import { Modulo } from './entity/modulo.entity';
import { InformacionModuloView } from './entity/views/informacion-modulo.view';
import { MinInformacionModuloView } from './entity/views/min-informacion-modulo.view';
import { Operador } from '../operador/entity/operador.entity';
import { InformacionModuloView } from './entity/views/informacion-modulo.view';
import { FullInformacionModuloView } from './entity/views/full-informacion-modulo.view';
import { InstitucionService } from '../institucion/institucion.service';
import { ModuloMotivoService } from '../modulo-motivo/modulo-motivo.service';
@ -21,16 +21,15 @@ export class ModuloService {
@InjectRepository(Modulo) private repository: Repository<Modulo>,
@InjectRepository(InformacionModuloView)
private informacionModuloView: Repository<InformacionModuloView>,
@InjectRepository(MinInformacionModuloView)
private minInformacionModuloView: Repository<MinInformacionModuloView>,
@InjectRepository(FullInformacionModuloView)
private fullInformacionModuloView: Repository<FullInformacionModuloView>,
private institucionService: InstitucionService,
@Inject(forwardRef(() => ModuloMotivoService))
private moduloMotivoService: ModuloMotivoService,
private institucionService: InstitucionService,
) {}
create(admin: Operador, modulo: string) {
// Buscamos una modulo con ese nombre en la institución del admin
// que realiza esta acción
create(admin: Operador, modulo: string): Promise<{ message: string }> {
// Buscamos un registro con ese nombre en la institución del admin
return this.findModulo(admin.institucion, modulo, true)
.then((_) =>
// Creamos y guardamos un registro
@ -44,14 +43,39 @@ export class ModuloService {
.then((_) => ({ message: 'Se creó correctamente un nuevo módulo.' }));
}
findFullInfoById(id_modulo: number) {
return this.repository.findOne({ where: { id_modulo } }).then((modulo) => {
if (!modulo) throw new NotFoundException('No existe este id módulo.');
return modulo;
});
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;
});
}
findById(id_modulo: number) {
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;
});
}
findById(id_modulo: number): Promise<Modulo> {
return this.informacionModuloView
.findOne({ where: { id_modulo } })
.then((infoModulo) => {
@ -64,98 +88,82 @@ export class ModuloService {
});
}
findMinInfoModuloAll(id_institucion: number, activo = 0) {
return this.institucionService
.findById(id_institucion)
.then((institucion) => {
const busqueda: FindOptionsWhere<MinInformacionModuloView> = {
id_institucion: institucion.id_institucion,
};
if (activo) busqueda.activo_modulo = activo;
return this.minInformacionModuloView.find({ where: busqueda });
})
.then((infoModulos) => {
const modulos: Modulo[] = [];
for (let i = 0; i < infoModulos.length; i++)
modulos.push(
this.repository.create({
id_modulo: infoModulos[i].id_modulo,
activo: infoModulos[i].activo_modulo === 1,
modulo: infoModulos[i].modulo,
institucion: {
id_institucion: infoModulos[i].id_institucion,
institucion: infoModulos[i].institucion,
},
}),
);
return modulos;
});
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;
});
}
findMinInfoModuloById(id_modulo: number) {
return this.minInformacionModuloView
findMinInfoById(id_modulo: number): Promise<Modulo> {
return this.fullInformacionModuloView
.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,
},
});
return this.fullViewToModulo(infoModulo);
});
}
findModulo(institucion: Institucion, modulo: string, validarExiste = false) {
return this.minInformacionModuloView
findModulo(
institucion: Institucion,
modulo: string,
validarExiste = false,
): Promise<Modulo> {
return this.fullInformacionModuloView
.findOne({
where: { id_institucion: institucion.id_institucion, modulo },
})
.then((infoModulo) => {
if (!infoModulo) return null;
if (validarExiste)
if (infoModulo && 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 },
});
return this.fullViewToModulo(infoModulo);
});
}
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,
},
});
}
update(
admin: Operador,
attrs: Partial<Modulo>,
motivo?: string,
numero_alumnos?: number,
fecha_creacion?: string,
) {
): Promise<{ message: string }> {
// Validamos que si se manda uno solo de esos campos, se deba mandar todos los demas
if (
(!motivo || !numero_alumnos || !fecha_creacion) &&
(motivo || numero_alumnos || fecha_creacion)
(motivo || numero_alumnos || fecha_creacion) &&
(!motivo || !numero_alumnos || !fecha_creacion)
)
throw new ConflictException('No se mandó toda la información necesaria.');
return this.findById(attrs.id_modulo)
.then(async (modulo) => {
// Validamos que el modulo enviado sea del admin que realiza esta acción
// Validamos que el módulo pertenezca a la institución del admin
if (
admin.institucion.id_institucion != modulo.institucion.id_institucion
)
throw new ConflictException(
'No puedes actualizar la información de este módulo porque no le pertenece a tu institución.',
'No puedes modificar la información este módulo porque no pertenece a tu institución.',
);
// Buscamos un modulo en esa institución con ese nombre
// Si se quiere cambiar el nombre del módulo validamos que no exista uno con el mismo nombre
if (attrs.modulo)
await this.findModulo(modulo.institucion, attrs.modulo, true);
// Asignamos valores enviados al objeto
Object.assign(modulo, attrs);
// Se crea un registro del cambio de status de este módulo
if (motivo)
await this.moduloMotivoService.create(
admin,