estadisticas por estado, municipio y parroquia agregadas
This commit is contained in:
@@ -4,7 +4,7 @@ import { and, eq, gte, ilike, lte, or, SQL, sql } from 'drizzle-orm';
|
||||
import { NodePgDatabase } from 'drizzle-orm/node-postgres';
|
||||
import { DRIZZLE_PROVIDER } from 'src/database/drizzle-provider';
|
||||
import * as schema from 'src/database/index';
|
||||
import { states, trainingSurveys } from 'src/database/index';
|
||||
import { municipalities, parishes, states, trainingSurveys } from 'src/database/index';
|
||||
|
||||
import { PaginationDto } from '../../common/dto/pagination.dto';
|
||||
import { CreateTrainingDto } from './dto/create-training.dto';
|
||||
@@ -120,6 +120,8 @@ export class TrainingService {
|
||||
isOpenSpaceDistribution,
|
||||
hasTransportDistribution,
|
||||
genderResult,
|
||||
municipalityDistribution,
|
||||
parishDistribution,
|
||||
] = await Promise.all([
|
||||
// 1. Total OSPs
|
||||
this.drizzle
|
||||
@@ -275,6 +277,31 @@ export class TrainingService {
|
||||
})
|
||||
.from(trainingSurveys)
|
||||
.where(whereCondition),
|
||||
|
||||
// 17. Distribución por Municipio
|
||||
this.drizzle
|
||||
.select({
|
||||
name: sql<string>`COALESCE(${municipalities.name}, 'Sin Asignar')`,
|
||||
value: sql<number>`count(${trainingSurveys.id})`,
|
||||
})
|
||||
.from(trainingSurveys)
|
||||
.leftJoin(
|
||||
municipalities,
|
||||
eq(trainingSurveys.municipality, municipalities.id),
|
||||
)
|
||||
.where(whereCondition)
|
||||
.groupBy(municipalities.name),
|
||||
|
||||
// 18. Distribución por Parroquia
|
||||
this.drizzle
|
||||
.select({
|
||||
name: sql<string>`COALESCE(${parishes.name}, 'Sin Asignar')`,
|
||||
value: sql<number>`count(${trainingSurveys.id})`,
|
||||
})
|
||||
.from(trainingSurveys)
|
||||
.leftJoin(parishes, eq(trainingSurveys.parish, parishes.id))
|
||||
.where(whereCondition)
|
||||
.groupBy(parishes.name),
|
||||
]);
|
||||
|
||||
return {
|
||||
@@ -334,6 +361,14 @@ export class TrainingService {
|
||||
{ name: 'Mujeres', value: Number(genderResult[0]?.women || 0) },
|
||||
{ name: 'Hombres', value: Number(genderResult[0]?.men || 0) },
|
||||
],
|
||||
municipalityDistribution: municipalityDistribution.map((item) => ({
|
||||
...item,
|
||||
value: Number(item.value),
|
||||
})),
|
||||
parishDistribution: parishDistribution.map((item) => ({
|
||||
...item,
|
||||
value: Number(item.value),
|
||||
})),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user