diff --git a/src/libs/routes/spatial.js b/src/libs/routes/spatial.js index 2cc6e839894bcb4efef753e02e99a29944772c8a..4c6489c10054e0643a3524b946d494acafa2848e 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);