estadisticas de osp expandida
This commit is contained in:
@@ -105,13 +105,21 @@ export class TrainingService {
|
||||
// Ejecutamos todas las consultas en paralelo con Promise.all para mayor velocidad
|
||||
const [
|
||||
totalOspsResult,
|
||||
totalProducersResult,
|
||||
totalProductsResult, // Nuevo: Calculado desde el JSON
|
||||
// totalProducersResult,
|
||||
totalProductsResult,
|
||||
statusDistribution,
|
||||
activityDistribution,
|
||||
typeDistribution,
|
||||
stateDistribution,
|
||||
yearDistribution,
|
||||
ecoSectorDistribution,
|
||||
productiveSectorDistribution,
|
||||
centralActivityDistribution,
|
||||
mainActivityDistribution,
|
||||
structureTypeDistribution,
|
||||
isOpenSpaceDistribution,
|
||||
hasTransportDistribution,
|
||||
genderResult,
|
||||
] = await Promise.all([
|
||||
// 1. Total OSPs
|
||||
this.drizzle
|
||||
@@ -120,12 +128,12 @@ export class TrainingService {
|
||||
.where(whereCondition),
|
||||
|
||||
// 2. Total Productores (Columna plana que mantuviste)
|
||||
this.drizzle
|
||||
.select({
|
||||
sum: sql<number>`SUM(${trainingSurveys.womenCount} + ${trainingSurveys.menCount})`,
|
||||
})
|
||||
.from(trainingSurveys)
|
||||
.where(whereCondition),
|
||||
// this.drizzle
|
||||
// .select({
|
||||
// sum: sql<number>`SUM(${trainingSurveys.womenCount} + ${trainingSurveys.menCount})`,
|
||||
// })
|
||||
// .from(trainingSurveys)
|
||||
// .where(whereCondition),
|
||||
|
||||
// 3. NUEVO: Total Productos (Contamos el largo del array JSON productList)
|
||||
this.drizzle
|
||||
@@ -145,7 +153,7 @@ export class TrainingService {
|
||||
.where(whereCondition)
|
||||
.groupBy(trainingSurveys.currentStatus),
|
||||
|
||||
// 5. Distribución por Actividad
|
||||
// 5. Distribución por Actividad (General)
|
||||
this.drizzle
|
||||
.select({
|
||||
name: trainingSurveys.productiveActivity,
|
||||
@@ -188,11 +196,90 @@ export class TrainingService {
|
||||
.where(whereCondition)
|
||||
.groupBy(trainingSurveys.companyConstitutionYear)
|
||||
.orderBy(trainingSurveys.companyConstitutionYear),
|
||||
|
||||
// 9. Distribución por Sector Económico
|
||||
this.drizzle
|
||||
.select({
|
||||
name: trainingSurveys.ecoSector,
|
||||
value: sql<number>`count(*)`,
|
||||
})
|
||||
.from(trainingSurveys)
|
||||
.where(whereCondition)
|
||||
.groupBy(trainingSurveys.ecoSector),
|
||||
|
||||
// 10. Distribución por Sector Productivo
|
||||
this.drizzle
|
||||
.select({
|
||||
name: trainingSurveys.productiveSector,
|
||||
value: sql<number>`count(*)`,
|
||||
})
|
||||
.from(trainingSurveys)
|
||||
.where(whereCondition)
|
||||
.groupBy(trainingSurveys.productiveSector),
|
||||
|
||||
// 11. Distribución por Actividad Central Productiva
|
||||
this.drizzle
|
||||
.select({
|
||||
name: trainingSurveys.centralProductiveActivity,
|
||||
value: sql<number>`count(*)`,
|
||||
})
|
||||
.from(trainingSurveys)
|
||||
.where(whereCondition)
|
||||
.groupBy(trainingSurveys.centralProductiveActivity),
|
||||
|
||||
// 12. Distribución por Actividad Productiva Principal
|
||||
this.drizzle
|
||||
.select({
|
||||
name: trainingSurveys.mainProductiveActivity,
|
||||
value: sql<number>`count(*)`,
|
||||
})
|
||||
.from(trainingSurveys)
|
||||
.where(whereCondition)
|
||||
.groupBy(trainingSurveys.mainProductiveActivity),
|
||||
|
||||
// 13. Distribución por Tipo de Estructura
|
||||
this.drizzle
|
||||
.select({
|
||||
name: trainingSurveys.structureType,
|
||||
value: sql<number>`count(*)`,
|
||||
})
|
||||
.from(trainingSurveys)
|
||||
.where(whereCondition)
|
||||
.groupBy(trainingSurveys.structureType),
|
||||
|
||||
// 14. Distribución por Espacio Abierto
|
||||
this.drizzle
|
||||
.select({
|
||||
name: sql<string>`case when ${trainingSurveys.isOpenSpace} then 'Sí' else 'No' end`,
|
||||
value: sql<number>`count(*)`,
|
||||
})
|
||||
.from(trainingSurveys)
|
||||
.where(whereCondition)
|
||||
.groupBy(trainingSurveys.isOpenSpace),
|
||||
|
||||
// 15. Distribución por Transporte
|
||||
this.drizzle
|
||||
.select({
|
||||
name: sql<string>`case when ${trainingSurveys.hasTransport} then 'Sí' else 'No' end`,
|
||||
value: sql<number>`count(*)`,
|
||||
})
|
||||
.from(trainingSurveys)
|
||||
.where(whereCondition)
|
||||
.groupBy(trainingSurveys.hasTransport),
|
||||
|
||||
// 16. Distribución por Género
|
||||
this.drizzle
|
||||
.select({
|
||||
women: sql<number>`sum(${trainingSurveys.womenCount})`,
|
||||
men: sql<number>`sum(${trainingSurveys.menCount})`,
|
||||
})
|
||||
.from(trainingSurveys)
|
||||
.where(whereCondition),
|
||||
]);
|
||||
|
||||
return {
|
||||
totalOsps: Number(totalOspsResult[0]?.count || 0),
|
||||
totalProducers: Number(totalProducersResult[0]?.sum || 0),
|
||||
// totalProducers: Number(totalProducersResult[0]?.sum || 0),
|
||||
totalProducts: Number(totalProductsResult[0]?.sum || 0), // Dato extraído del JSON
|
||||
|
||||
statusDistribution: statusDistribution.map((item) => ({
|
||||
@@ -215,6 +302,38 @@ export class TrainingService {
|
||||
...item,
|
||||
value: Number(item.value),
|
||||
})),
|
||||
ecoSectorDistribution: ecoSectorDistribution.map((item) => ({
|
||||
...item,
|
||||
value: Number(item.value),
|
||||
})),
|
||||
productiveSectorDistribution: productiveSectorDistribution.map((item) => ({
|
||||
...item,
|
||||
value: Number(item.value),
|
||||
})),
|
||||
centralActivityDistribution: centralActivityDistribution.map((item) => ({
|
||||
...item,
|
||||
value: Number(item.value),
|
||||
})),
|
||||
mainActivityDistribution: mainActivityDistribution.map((item) => ({
|
||||
...item,
|
||||
value: Number(item.value),
|
||||
})),
|
||||
structureTypeDistribution: structureTypeDistribution.map((item) => ({
|
||||
...item,
|
||||
value: Number(item.value),
|
||||
})),
|
||||
isOpenSpaceDistribution: isOpenSpaceDistribution.map((item) => ({
|
||||
...item,
|
||||
value: Number(item.value),
|
||||
})),
|
||||
hasTransportDistribution: hasTransportDistribution.map((item) => ({
|
||||
...item,
|
||||
value: Number(item.value),
|
||||
})),
|
||||
genderDistribution: [
|
||||
{ name: 'Mujeres', value: Number(genderResult[0]?.women || 0) },
|
||||
{ name: 'Hombres', value: Number(genderResult[0]?.men || 0) },
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user