merge into reportes from development
This commit is contained in:
@@ -23,6 +23,8 @@ import { LineasProgramaticasModule } from './lineasProgramaticas/lineasProgramat
|
||||
import { CarreraModule } from './carrera/carreras.module';
|
||||
import { ComentariosModule } from './comentarios/comentarios.module';
|
||||
import { ComentarioLineasProgramaticas } from './entities/comentarioLineasProgramaticas.entity';
|
||||
import { ReportesController } from './reportes/reportes.controller';
|
||||
import { ReportesModule } from './reportes/reportes.module';
|
||||
import { Direccion } from './entities/direccion.entity';
|
||||
import { DireccionModule } from './direccion/direccion.module';
|
||||
config({ path: '.env' });
|
||||
@@ -34,6 +36,7 @@ config({ path: '.env' });
|
||||
ComentariosModule,
|
||||
LineasProgramaticasModule,
|
||||
CarreraModule,
|
||||
ReportesModule,
|
||||
DireccionModule,
|
||||
ConfigModule.forRoot({
|
||||
isGlobal: true,
|
||||
@@ -68,6 +71,7 @@ config({ path: '.env' });
|
||||
UsuarioController,
|
||||
EjesEstrategicosController,
|
||||
LineasProgramaticasController,
|
||||
ReportesController,
|
||||
],
|
||||
providers: [AppService, EjesEstrategicosService, LineasProgramaticasService],
|
||||
})
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
export interface ParticipacionAlumno {
|
||||
carrera: string;
|
||||
participacion: number;
|
||||
porcentajeParticipacion: number;
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { Repository, SelectQueryBuilder } from 'typeorm';
|
||||
import { ParticipacionAlumno } from './ParticipacionAlumno.interface';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { UsuarioEntity } from '../entities/usuario.entity';
|
||||
import { TipoUsuarioEntity } from '../entities/tipoUsuario.entity';
|
||||
import { Carrera } from '../entities/carreras.entity';
|
||||
|
||||
@Injectable()
|
||||
export class ParticipacionService {
|
||||
constructor(
|
||||
@InjectRepository(UsuarioEntity)
|
||||
private readonly reportesRepository: Repository<any>,
|
||||
@InjectRepository(TipoUsuarioEntity)
|
||||
private readonly tUReportesRepository: Repository<any>,
|
||||
@InjectRepository(Carrera)
|
||||
private readonly carrearasReportesRepository: Repository<any>,
|
||||
) {}
|
||||
|
||||
async getParticipacionAlumno(): Promise<ParticipacionAlumno[]> {
|
||||
const queryBuilder = await this.reportesRepository.createQueryBuilder('u'); // Inject 'userRepository' instead
|
||||
|
||||
return (await queryBuilder
|
||||
.select('c.nombre AS carrera')
|
||||
.addSelect('COUNT(DISTINCT u.id) AS participacion')
|
||||
.addSelect(
|
||||
'(COUNT(DISTINCT u.id) / (SELECT COUNT(*) FROM usuarios WHERE carrera_id = u.carrera_id AND tipo_usuario_id = 2)) * 100 AS porcentajeParticipacion',
|
||||
)
|
||||
.innerJoin('u.comentarios', 'clp')
|
||||
.innerJoin('u.carrera', 'c')
|
||||
.where('u.tipo_usuario_id = 2')
|
||||
.groupBy('c.nombre')
|
||||
.getRawMany()) as ParticipacionAlumno[];
|
||||
}
|
||||
|
||||
async getParticipacionTrabajador(): Promise<SelectQueryBuilder<any>> {
|
||||
const result = await this.reportesRepository
|
||||
.createQueryBuilder('usuarios')
|
||||
.select('COUNT(DISTINCT usuarios.id)', 'Participacion Trabajadores')
|
||||
.addSelect(
|
||||
`
|
||||
(COUNT(DISTINCT usuarios.id) * 100.0 / (SELECT COUNT(*) FROM usuarios WHERE usuarios.tipo_usuario_id = 3)) AS PorcentajeParticipacion
|
||||
`,
|
||||
)
|
||||
.innerJoin('usuarios.comentarios', 'clp')
|
||||
.where('usuarios.tipo_usuario_id = 3')
|
||||
.getRawOne();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
async getTotalUsuarios(): Promise<ParticipacionAlumno[]> {
|
||||
const queryBuilder =
|
||||
await this.tUReportesRepository.createQueryBuilder('tu');
|
||||
return (await queryBuilder
|
||||
.select('tu.tipo AS tipo_usuario')
|
||||
.addSelect('COUNT(u.id) AS total_usuarios')
|
||||
.innerJoin('tu.usuarios', 'u')
|
||||
.groupBy('tu.id, tu.tipo')
|
||||
.getRawMany()) as any[];
|
||||
}
|
||||
|
||||
async getTotalAlumnos(): Promise<ParticipacionAlumno[]> {
|
||||
const queryBuilder =
|
||||
await this.carrearasReportesRepository.createQueryBuilder('c');
|
||||
|
||||
return (await queryBuilder
|
||||
.select('c.nombre AS carrera')
|
||||
.addSelect('COUNT(u.id) AS total_alumnos')
|
||||
.innerJoin('c.usuarios', 'u')
|
||||
.where('u.tipo_usuario_id = 2')
|
||||
.groupBy('c.id, c.nombre')
|
||||
.getRawMany()) as any[]; // Cast to
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
import { Controller, Get } from '@nestjs/common';
|
||||
import { ParticipacionAlumno } from './ParticipacionAlumno.interface';
|
||||
import { ParticipacionService } from './participacionAlumno.service';
|
||||
|
||||
@Controller('reportes')
|
||||
export class ReportesController {
|
||||
constructor(private readonly participacionService: ParticipacionService) {}
|
||||
|
||||
@Get('participacionAlumnos')
|
||||
async geParticipacionAlumno(): Promise<ParticipacionAlumno[]> {
|
||||
return this.participacionService.getParticipacionAlumno();
|
||||
}
|
||||
|
||||
@Get('participacionTrabajador')
|
||||
async geParticipacionTrabajador(): Promise<any> {
|
||||
return this.participacionService.getParticipacionTrabajador();
|
||||
}
|
||||
|
||||
@Get('totalParticipantes')
|
||||
async getTotalParticipantes(): Promise<ParticipacionAlumno[]> {
|
||||
return this.participacionService.getTotalUsuarios();
|
||||
}
|
||||
|
||||
@Get('totalAlumnosPorCarrera')
|
||||
async getTotalAlumnosPorCarrera(): Promise<ParticipacionAlumno[]> {
|
||||
return this.participacionService.getTotalAlumnos();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { ParticipacionService } from './participacionAlumno.service';
|
||||
import { ReportesController } from './reportes.controller';
|
||||
import { UsuarioEntity } from '../entities/usuario.entity';
|
||||
import { TipoUsuarioEntity } from '../entities/tipoUsuario.entity';
|
||||
import { Carrera } from '../entities/carreras.entity';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
TypeOrmModule.forFeature([UsuarioEntity, TipoUsuarioEntity, Carrera]),
|
||||
],
|
||||
providers: [ParticipacionService],
|
||||
controllers: [ReportesController],
|
||||
exports: [ParticipacionService],
|
||||
})
|
||||
export class ReportesModule {}
|
||||
Reference in New Issue
Block a user