From d27356171c6f1d197a39cef82a313398a1bd45aa Mon Sep 17 00:00:00 2001
From: Vytor Calixto <vytorcalixto@gmail.com>
Date: Fri, 24 Mar 2017 11:11:11 -0300
Subject: [PATCH] Add schools_per_adm_dependency and enrollment_per_location at
 /spatial/educational

---
 src/libs/routes/spatial.js | 47 ++++++++++++++++++++++++++++++--------
 1 file changed, 38 insertions(+), 9 deletions(-)

diff --git a/src/libs/routes/spatial.js b/src/libs/routes/spatial.js
index 2cc6e839..4c6489c1 100644
--- a/src/libs/routes/spatial.js
+++ b/src/libs/routes/spatial.js
@@ -260,8 +260,8 @@ spatialApp.get('/educational', rqf.parse(), rqf.build(), (req, res, next) => {
         .field('\'Total\'', 'location_name')
         .field('COUNT(DISTINCT(escola.id))', 'total')
         .field('escola.ano_censo', 'census_year')
-        .from('escola')
         .from('turma')
+        .from('escola')
         .where('escola.ano_censo=turma.ano_censo AND escola.id=turma.escola_id')
         .where(`escola.ano_censo IN (${censusYearQry})`)
         .where('turma.tipo_turma_id = 0')
@@ -272,10 +272,10 @@ spatialApp.get('/educational', rqf.parse(), rqf.build(), (req, res, next) => {
         .field('COUNT(DISTINCT(escola.id))', 'total')
         .field('escola.ano_censo', 'census_year')
         .field('localizacao.descricao', 'location_name')
-        .from('escola')
         .from('localizacao')
-        .where('escola.cod_localizacao=localizacao.id')
         .from('turma')
+        .from('escola')
+        .where('escola.cod_localizacao=localizacao.id')
         .where('escola.ano_censo=turma.ano_censo AND escola.id=turma.escola_id')
         .where(`escola.ano_censo IN (${censusYearQry})`)
         .where('turma.tipo_turma_id = 0')
@@ -284,9 +284,23 @@ spatialApp.get('/educational', rqf.parse(), rqf.build(), (req, res, next) => {
         .group('localizacao.descricao')
         .order('localizacao.descricao');
 
+    const schoolsPerAdmDependencyQry = req.sql.clone()
+        .field('\'Brasil\'', 'name')
+        .field('COUNT(DISTINCT(escola.id))', 'total')
+        .field('escola.ano_censo', 'census_year')
+        .field('dependencia_adm.nome', 'adm_dependency_name')
+        .from('dependencia_adm')
+        .from('escola')
+        .where('escola.dependencia_adm_id=dependencia_adm.id')
+        .where(`escola.ano_censo IN (${censusYearQry})`)
+        .group('escola.ano_censo')
+        .group('dependencia_adm.nome')
+        .order('escola.ano_censo')
+        .order('dependencia_adm.nome');
+
     const schoolClassYearQry = squel.select()
-        .field('MAX(turma.ano_censo)')
-        .from('turma')
+        .field('MAX(matricula.ano_censo)')
+        .from('matricula')
         .toString();
 
     const enrollmentsQry = req.sql.clone()
@@ -327,10 +341,25 @@ spatialApp.get('/educational', rqf.parse(), rqf.build(), (req, res, next) => {
         .group('etapa_ensino.id')
         .order('etapa_ensino.id');
 
-    const queryLabels = [ "school", "school_per_location", "enrollment", "enrollment_per_adm_dep",
-        "enrollment_per_school_level" ];
-    const querySet = [ totalSchoolsQry, schoolsPerLocationQry, enrollmentsQry,
-        enrollmentsPerAdmDepQry, enrollmentsPerSchoolLevelQry];
+    const enrollmentsPerLocationQry = req.sql.clone()
+        .field('\'Brasil\'', 'name')
+        .field('COALESCE(COUNT(matricula.id), 0)', 'total')
+        .field('matricula.ano_censo', 'census_year')
+        .field('localizacao.descricao', 'location_name')
+        .from('localizacao')
+        .from('matricula')
+        .where('matricula.localizacao_id=localizacao.id')
+        .where('matricula.tipo <= 3')
+        .where(`matricula.ano_censo IN (${schoolClassYearQry})`)
+        .group('matricula.ano_censo')
+        .group('localizacao.descricao')
+        .order('ano_censo')
+        .order('localizacao.descricao');
+
+    const queryLabels = [ "school", "school_per_location", "school_per_adm_dependency", "enrollment", "enrollment_per_adm_dep",
+        "enrollment_per_school_level", "enrollment_per_location" ];
+    const querySet = [ totalSchoolsQry, schoolsPerLocationQry, schoolsPerAdmDependencyQry, enrollmentsQry,
+        enrollmentsPerAdmDepQry, enrollmentsPerSchoolLevelQry, enrollmentsPerLocationQry];
     // wait until all queries finish or one of them fail
     Promise.all(dbExecAll(querySet)).then((queryResults) => {
         req.result = processResultSet(queryResults, queryLabels);
-- 
GitLab