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

View File

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

View File

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

View File

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

View File

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