Merge branch 'Axel' of repositorio.acatlan.unam.mx:IO/api-AT
This commit is contained in:
@@ -59,11 +59,26 @@ export class AlumnoInscritoController {
|
|||||||
return this.alumnoInscritoService.findById(id_cuenta);
|
return this.alumnoInscritoService.findById(id_cuenta);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get('inscritos/:inicio/:fin')
|
@Get('inscritos/periodo/:inicio/:fin')
|
||||||
findAllInscritosByRango(
|
findByPeriodo(
|
||||||
@Param('inicio', ParseIntPipe) inicio: number,
|
@Param('inicio', ParseIntPipe) inicio: number,
|
||||||
@Param('fin', ParseIntPipe) fin: number,
|
@Param('fin', ParseIntPipe) fin: number,
|
||||||
) {
|
) {
|
||||||
return this.alumnoInscritoService.findAllInscritosByRango(inicio, fin);
|
return this.alumnoInscritoService.findAllInscritosByRango(inicio, fin, 'periodo');
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('inscritos/anio/:inicio/:fin')
|
||||||
|
findByAnio(
|
||||||
|
@Param('inicio', ParseIntPipe) inicio: number,
|
||||||
|
@Param('fin', ParseIntPipe) fin: number,
|
||||||
|
) {
|
||||||
|
return this.alumnoInscritoService.findAllInscritosByRango(inicio, fin, 'anio');
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('inscritos/mes/:anio')
|
||||||
|
findByMes(
|
||||||
|
@Param('anio', ParseIntPipe) anio: number,
|
||||||
|
) {
|
||||||
|
return this.alumnoInscritoService.findAllInscritosByRango(anio, 0, 'mes');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -231,22 +231,28 @@ async findAllInscritos(idPeriodo: number) {
|
|||||||
const create = repo.create(data);
|
const create = repo.create(data);
|
||||||
return await repo.save(create);
|
return await repo.save(create);
|
||||||
}
|
}
|
||||||
|
async findAllInscritosByRango(
|
||||||
async findAllInscritosByRango(
|
inicio: number,
|
||||||
idPeriodoInicio: number,
|
fin: number,
|
||||||
idPeriodoFin: number,
|
tipo: 'periodo' | 'mes' | 'anio',
|
||||||
) {
|
) {
|
||||||
return this.alumnoInscritoRepo
|
const qb = this.alumnoInscritoRepo
|
||||||
.createQueryBuilder('inscritos')
|
.createQueryBuilder('inscritos')
|
||||||
.innerJoin('inscritos.alumno', 'alumno')
|
.innerJoin('inscritos.alumno', 'alumno')
|
||||||
.innerJoin('alumno.carrera', 'carrera')
|
.innerJoin('alumno.carrera', 'carrera')
|
||||||
.innerJoin('inscritos.plataforma', 'plataforma')
|
.innerJoin('inscritos.plataforma', 'plataforma')
|
||||||
.innerJoin('inscritos.periodo', 'periodo')
|
.innerJoin('inscritos.periodo', 'periodo');
|
||||||
.where('periodo.id_periodo BETWEEN :inicio AND :fin', {
|
|
||||||
inicio: idPeriodoInicio,
|
// ============================
|
||||||
fin: idPeriodoFin,
|
// 🟢 PERIODO
|
||||||
})
|
// ============================
|
||||||
.select([
|
if (tipo === 'periodo') {
|
||||||
|
qb.where('periodo.id_periodo BETWEEN :inicio AND :fin', {
|
||||||
|
inicio,
|
||||||
|
fin,
|
||||||
|
});
|
||||||
|
|
||||||
|
qb.select([
|
||||||
'periodo.id_periodo AS id_periodo',
|
'periodo.id_periodo AS id_periodo',
|
||||||
'periodo.semestre AS semestre',
|
'periodo.semestre AS semestre',
|
||||||
'carrera.carrera AS carrera',
|
'carrera.carrera AS carrera',
|
||||||
@@ -263,11 +269,81 @@ async findAllInscritos(idPeriodo: number) {
|
|||||||
END) AS masculino`,
|
END) AS masculino`,
|
||||||
|
|
||||||
'COUNT(DISTINCT alumno.id_cuenta) AS total',
|
'COUNT(DISTINCT alumno.id_cuenta) AS total',
|
||||||
])
|
]);
|
||||||
.groupBy('periodo.id_periodo')
|
|
||||||
.addGroupBy('carrera.carrera')
|
qb.groupBy('periodo.id_periodo')
|
||||||
.addGroupBy('plataforma.nombre')
|
.addGroupBy('carrera.carrera')
|
||||||
.orderBy('periodo.id_periodo', 'ASC')
|
.addGroupBy('plataforma.nombre')
|
||||||
.getRawMany();
|
.orderBy('periodo.id_periodo', 'ASC');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ============================
|
||||||
|
// 🔵 AÑO
|
||||||
|
// ============================
|
||||||
|
else if (tipo === 'anio') {
|
||||||
|
qb.where(
|
||||||
|
'periodo.fecha_inicio_servicio BETWEEN :inicio AND :fin',
|
||||||
|
{
|
||||||
|
inicio: `${inicio}-01-01`,
|
||||||
|
fin: `${fin}-12-31`,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
qb.select([
|
||||||
|
'YEAR(periodo.fecha_inicio_servicio) AS semestre',
|
||||||
|
'carrera.carrera AS carrera',
|
||||||
|
'plataforma.nombre AS profesor',
|
||||||
|
|
||||||
|
`COUNT(DISTINCT CASE
|
||||||
|
WHEN alumno.genero IN ('F', 'Femenino')
|
||||||
|
THEN alumno.id_cuenta
|
||||||
|
END) AS femenino`,
|
||||||
|
|
||||||
|
`COUNT(DISTINCT CASE
|
||||||
|
WHEN alumno.genero IN ('M', 'Masculino')
|
||||||
|
THEN alumno.id_cuenta
|
||||||
|
END) AS masculino`,
|
||||||
|
|
||||||
|
'COUNT(DISTINCT alumno.id_cuenta) AS total',
|
||||||
|
]);
|
||||||
|
|
||||||
|
qb.groupBy('YEAR(periodo.fecha_inicio_servicio)')
|
||||||
|
.addGroupBy('carrera.carrera')
|
||||||
|
.addGroupBy('plataforma.nombre')
|
||||||
|
.orderBy('YEAR(periodo.fecha_inicio_servicio)', 'ASC')
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================
|
||||||
|
// 🟡 MES (UN SOLO AÑO)
|
||||||
|
// ============================
|
||||||
|
else if (tipo === 'mes') {
|
||||||
|
qb.where('YEAR(periodo.fecha_inicio_servicio) = :anio', {
|
||||||
|
anio: inicio, // aquí "inicio" es el año
|
||||||
|
});
|
||||||
|
|
||||||
|
qb.select([
|
||||||
|
'MONTH(periodo.fecha_inicio_servicio) AS semestre',
|
||||||
|
'carrera.carrera AS carrera',
|
||||||
|
'plataforma.nombre AS profesor',
|
||||||
|
|
||||||
|
`COUNT(DISTINCT CASE
|
||||||
|
WHEN alumno.genero IN ('F', 'Femenino')
|
||||||
|
THEN alumno.id_cuenta
|
||||||
|
END) AS femenino`,
|
||||||
|
|
||||||
|
`COUNT(DISTINCT CASE
|
||||||
|
WHEN alumno.genero IN ('M', 'Masculino')
|
||||||
|
THEN alumno.id_cuenta
|
||||||
|
END) AS masculino`,
|
||||||
|
|
||||||
|
'COUNT(DISTINCT alumno.id_cuenta) AS total',
|
||||||
|
]);
|
||||||
|
qb.groupBy('MONTH(periodo.fecha_inicio_servicio)')
|
||||||
|
.addGroupBy('carrera.carrera')
|
||||||
|
.addGroupBy('plataforma.nombre')
|
||||||
|
.orderBy('YEAR(periodo.fecha_inicio_servicio)', 'ASC')
|
||||||
|
}
|
||||||
|
|
||||||
|
return qb.getRawMany();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user