From 8e60594c2691496be1557d8a43a4a7b9a469eed0 Mon Sep 17 00:00:00 2001 From: Lewis <lgtg20@inf.ufpr.br> Date: Fri, 11 Oct 2024 12:04:50 -0300 Subject: [PATCH] Fix issues 906, 909, 910 --- src/libs/convert/educationLevelBasic.js | 6 +- src/libs/convert/totalDoc.js | 23 ++++++++ src/libs/middlewares/aggregateData.js | 6 +- src/libs/middlewares/id2str.js | 7 ++- src/libs/routes_v1/employeesAggregate.js | 8 +++ src/libs/routes_v1/enrollmentAggregate.js | 27 ++++++--- src/libs/routes_v1/federativeEntity.js | 70 +++++++++++++++++------ 7 files changed, 114 insertions(+), 33 deletions(-) create mode 100644 src/libs/convert/totalDoc.js diff --git a/src/libs/convert/educationLevelBasic.js b/src/libs/convert/educationLevelBasic.js index 3d166fe5..7c242b07 100644 --- a/src/libs/convert/educationLevelBasic.js +++ b/src/libs/convert/educationLevelBasic.js @@ -24,11 +24,11 @@ module.exports = function educationLevelBasic(id) { return 'Creche'; case 2: return 'Pré-Escola'; - case 4: + case 3: return 'Ensino Fundamental - anos iniciais'; - case 5: + case 4: return 'Ensino Fundamental - anos finais'; - case 6: + case 5: return 'Ensino Médio'; default: return 'Não classificada'; diff --git a/src/libs/convert/totalDoc.js b/src/libs/convert/totalDoc.js new file mode 100644 index 00000000..09f947c8 --- /dev/null +++ b/src/libs/convert/totalDoc.js @@ -0,0 +1,23 @@ +/* +Copyright (C) 2016 Centro de Computacao Cientifica e Software Livre +Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR + +This file is part of simcaq-node. + +simcaq-node is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +simcaq-node is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with simcaq-node. If not, see <https://www.gnu.org/licenses/>. +*/ + +module.exports = function totalDoc(id) { + return ''; +}; diff --git a/src/libs/middlewares/aggregateData.js b/src/libs/middlewares/aggregateData.js index aaa1ede4..b9b14eee 100644 --- a/src/libs/middlewares/aggregateData.js +++ b/src/libs/middlewares/aggregateData.js @@ -32,7 +32,8 @@ const convert = { gender_entity: 'gender', age_range_entity: 'ageRangeEntity', post_graduation_entity: 'postGraduationEntity', - contract_type_entity: 'contractType' + contract_type_entity: 'contractType', + total_doc: "totalDoc" } function aggregateData(req, res, next) { @@ -58,7 +59,8 @@ function aggregateData(req, res, next) { 'gender_entity', 'age_range_entity', 'post_graduation_entity', - 'contract_type_entity' + 'contract_type_entity', + 'total_doc' ] let id; const fields = req.query.dims.split(','); diff --git a/src/libs/middlewares/id2str.js b/src/libs/middlewares/id2str.js index 078df393..a53196e2 100644 --- a/src/libs/middlewares/id2str.js +++ b/src/libs/middlewares/id2str.js @@ -124,6 +124,7 @@ const educationLevelModEntitySeg = require(`${libs}/convert/educationLevelModEnt const educationLevelModEntityAgg = require(`${libs}/convert/educationLevelModEntityAgg`); const ageRangeEntity = require(`${libs}/convert/ageRangeEntity`); const postGraduationEntity = require(`${libs}/convert/postGraduationEntity`); +const totalDoc = require(`${libs}/convert/totalDoc`); const ids = { gender_id: gender, @@ -240,7 +241,8 @@ const ids = { education_level_mod_entity_agg: educationLevelModEntityAgg, age_range_entity: ageRangeEntity, post_graduation_entity: postGraduationEntity, - special_education_entity: specialEducationEntity + special_education_entity: specialEducationEntity, + total_doc: totalDoc }; function transform(removeId=false) { @@ -379,5 +381,6 @@ module.exports = { educationLevelModEntityAgg, ageRangeEntity, postGraduationEntity, - specialEducationEntity + specialEducationEntity, + totalDoc }; diff --git a/src/libs/routes_v1/employeesAggregate.js b/src/libs/routes_v1/employeesAggregate.js index ab5102ce..9fc52918 100644 --- a/src/libs/routes_v1/employeesAggregate.js +++ b/src/libs/routes_v1/employeesAggregate.js @@ -302,6 +302,14 @@ employeesAggregateApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .order('escola.ano_censo') .where('escola.situacao_funcionamento_pareada = 1 and (escola.ensino_regular = 1 or escola.ensino_eja = 1 or escola.educacao_profissional = 1)'); } + else if (req.query.dims && req.query.dims.includes('total_doc')) { + req.sql.from('escola') + .field('SUM(escola.qt_doc_bas)', 'total_doc_bas') + .field('escola.ano_censo', 'year') + .group('escola.ano_censo') + .order('escola.ano_censo') + .where('escola.situacao_funcionamento_pareada = 1 and (escola.ensino_regular = 1 or escola.ensino_eja = 1 or escola.educacao_profissional = 1)'); + } else { req.sql.from('escola') .field('SUM(escola.qt_doc_bas)', 'total') diff --git a/src/libs/routes_v1/enrollmentAggregate.js b/src/libs/routes_v1/enrollmentAggregate.js index 08d55ddb..b44bb70a 100644 --- a/src/libs/routes_v1/enrollmentAggregate.js +++ b/src/libs/routes_v1/enrollmentAggregate.js @@ -70,7 +70,7 @@ enrollmentAggregateApp.get('/adm_dependency', (req, res, next) => { enrollmentAggregateApp.get('/adm_dependency_detailed', (req, res, next) => { req.result = [] - for (let i = 1; i <= 9; i++) { + for (let i = 1; i <= 8; i++) { req.result.push({ id: i, name: id2str.admDependencyPriv(i) }); @@ -481,9 +481,10 @@ rqf.addField({ tableField: 'localizacao_diferenciada_par', resultField: 'diff_location_id', where: { - relation: '=', + relation: 'is not null', type: 'integer', - field: 'localizacao_diferenciada_par' + field: 'localizacao_diferenciada_par', + value: 'null' } }); @@ -499,7 +500,8 @@ enrollmentAggregateApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('SUM(escola.qt_mat_bas_fem)', 'total_fem') .field('escola.ano_censo', 'year') .group('escola.ano_censo') - .order('escola.ano_censo'); + .order('escola.ano_censo') + .where('escola.localizacao_diferenciada_par is not null'); } else if (req.query.dims && req.query.dims.includes('age_range')) { req.sql.from('escola') @@ -511,7 +513,8 @@ enrollmentAggregateApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('SUM(escola.qt_mat_bas_18_mais)', 'total_18_mais') .field('escola.ano_censo', 'year') .group('escola.ano_censo') - .order('escola.ano_censo'); + .order('escola.ano_censo') + .where('escola.localizacao_diferenciada_par is not null') } else if (req.query.dims && req.query.dims.includes('ethnic_group')) { req.sql.from('escola') @@ -523,7 +526,8 @@ enrollmentAggregateApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('SUM(escola.qt_mat_bas_indigena)', 'total_indigena') .field('escola.ano_censo', 'year') .group('escola.ano_censo') - .order('escola.ano_censo'); + .order('escola.ano_censo') + .where('escola.localizacao_diferenciada_par is not null') } else if (req.query.dims && req.query.dims.includes('education_level_mod_agg')) { req.sql.from('escola') @@ -539,7 +543,9 @@ enrollmentAggregateApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('SUM(escola.qt_mat_prof_agg)', 'total_prof') .field('escola.ano_censo', 'year') .group('escola.ano_censo') - .order('escola.ano_censo'); + .order('escola.ano_censo') + .where('escola.localizacao_diferenciada_par is not null'); + } else if (req.query.dims && req.query.dims.includes('integral_time_agg')) { req.sql.from('turma,escola') @@ -549,7 +555,7 @@ enrollmentAggregateApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('escola.ano_censo', 'year') .group('escola.ano_censo') .order('escola.ano_censo') - .where('turma.tipo_atendimento_id <= 2 and turma.escola_id = escola.id and turma.ano_censo = escola.ano_censo'); + .where('turma.tipo_atendimento_id <= 2 and turma.escola_id = escola.id and turma.ano_censo = escola.ano_censo and escola.localizacao_diferenciada_par is not null'); } else if (req.query.dims && req.query.dims.includes('period_agg')) { req.sql.from('turma,escola') @@ -561,7 +567,7 @@ enrollmentAggregateApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('escola.ano_censo', 'year') .group('escola.ano_censo') .order('escola.ano_censo') - .where('turma.tipo_atendimento_id <= 2 and turma.escola_id = escola.id and turma.ano_censo = escola.ano_censo'); + .where('turma.tipo_atendimento_id <= 2 and turma.escola_id = escola.id and turma.ano_censo = escola.ano_censo and escola.localizacao_diferenciada_par is not null'); } else if (req.query.dims && req.query.dims.includes('modality_integral_time')) { req.sql.from('escola') @@ -573,6 +579,7 @@ enrollmentAggregateApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('escola.ano_censo', 'year') .group('escola.ano_censo') .order('escola.ano_censo') + .where('escola.localizacao_diferenciada_par is not null'); } else if (req.query.dims && req.query.dims.includes('special_education')) { req.sql.from('escola') @@ -581,6 +588,7 @@ enrollmentAggregateApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('escola.ano_censo', 'year') .group('escola.ano_censo') .order('escola.ano_censo') + .where('escola.localizacao_diferenciada_par is not null'); } else { req.sql.from('escola') @@ -588,6 +596,7 @@ enrollmentAggregateApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('escola.ano_censo', 'year') .group('escola.ano_censo') .order('escola.ano_censo') + .where('escola.localizacao_diferenciada_par is not null'); } next(); }, query, aggregateData, id2str.transform(false), response('enrollment_aggregate')); diff --git a/src/libs/routes_v1/federativeEntity.js b/src/libs/routes_v1/federativeEntity.js index 0b0c2b5c..40668f76 100644 --- a/src/libs/routes_v1/federativeEntity.js +++ b/src/libs/routes_v1/federativeEntity.js @@ -342,8 +342,8 @@ rqf.addField({ }, join: { primary: 'id', - foreign: 'municipio_id', - foreignTable: 'escola' + foreign: 'cod_mun', + foreignTable: 'docentes_sinopse' } }, 'dims').addValueToField({ name: 'city', @@ -357,8 +357,8 @@ rqf.addField({ }, join: { primary: 'id', - foreign: 'municipio_id', - foreignTable: 'escola' + foreign: 'cod_mun', + foreignTable: 'docentes_sinopse' } }, 'filter').addValueToField({ name: 'school', @@ -428,6 +428,42 @@ rqf.addField({ }); federativeEntityApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { + let whereRule = ''; + const filtersObject = {} + + req.query.filter.split(',').forEach((filter) => { + let [key, value] = filter.split(':'); + filtersObject[key] = Number(JSON.parse(value)); + }) + + if (req.query.filter && req.query.filter.includes('city')) { + whereRule = 'docentes_sinopse.cod_mun = ' + filtersObject.city; + } + else if (req.query.filter && req.query.filter.includes('state')) { + whereRule = 'docentes_sinopse.cod_uf = ' + filtersObject.state + + ((req.query.dims && req.query.dims.includes('city')) ? '' : ' AND docentes_sinopse.cod_mun = 0'); + } + else if (req.query.filter && req.query.filter.includes('region')) { + whereRule = 'docentes_sinopse.cod_reg = ' + filtersObject.region + + ((req.query.dims !== undefined && req.query.dims.includes('state')) + ? ' AND docentes_sinopse.cod_mun = 0' + : (req.query.dims !== undefined && req.query.dims.includes('city')) + ? '' + : ' AND docentes_sinopse.cod_uf = 0'); + + } + else { + whereRule = (req.query.dims && req.query.dims.includes('region')) + ? 'docentes_sinopse.cod_uf = 0' + : (req.query.dims && req.query.dims.includes('state')) + ? 'docentes_sinopse.cod_mun = 0' + : (req.query.dims && req.query.dims.includes('city')) + ? '' + : 'docentes_sinopse.cod_reg = 0' + + } + + console.log(whereRule); if (req.query.dims && req.query.dims.includes('education_level_mod_entity_seg')) { @@ -442,7 +478,7 @@ federativeEntityApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('docentes_sinopse.ano_censo', 'year') .group('docentes_sinopse.ano_censo') .order('docentes_sinopse.ano_censo') - .where('docentes_sinopse.cod_reg = 0'); + .where(whereRule); } else if (req.query.dims && req.query.dims.includes('education_level_mod_entity_agg')) { @@ -465,7 +501,7 @@ federativeEntityApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('docentes_sinopse.ano_censo', 'year') .group('docentes_sinopse.ano_censo') .order('docentes_sinopse.ano_censo') - .where('docentes_sinopse.cod_reg = 0'); + .where(whereRule); } else if (req.query.dims && req.query.dims.includes('special_education_entity')) { @@ -475,7 +511,7 @@ federativeEntityApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('docentes_sinopse.ano_censo', 'year') .group('docentes_sinopse.ano_censo') .order('docentes_sinopse.ano_censo') - .where('docentes_sinopse.cod_reg = 0'); + .where(whereRule); } else if (req.query.dims && req.query.dims.includes('adm_dependency_entity_agg')) { @@ -485,7 +521,7 @@ federativeEntityApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('docentes_sinopse.ano_censo', 'year') .group('docentes_sinopse.ano_censo') .order('docentes_sinopse.ano_censo') - .where('docentes_sinopse.cod_reg = 0'); + .where(whereRule); } else if (req.query.dims && req.query.dims.includes('adm_dependency_entity')) { @@ -497,7 +533,7 @@ federativeEntityApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('docentes_sinopse.ano_censo', 'year') .group('docentes_sinopse.ano_censo') .order('docentes_sinopse.ano_censo') - .where('docentes_sinopse.cod_reg = 0'); + .where(whereRule); } else if (req.query.dims && req.query.dims.includes('location_entity')) { @@ -507,7 +543,7 @@ federativeEntityApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('docentes_sinopse.ano_censo', 'year') .group('docentes_sinopse.ano_censo') .order('docentes_sinopse.ano_censo') - .where('docentes_sinopse.cod_reg = 0'); + .where(whereRule); } else if (req.query.dims && req.query.dims.includes('gender_entity')) { @@ -517,7 +553,7 @@ federativeEntityApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('docentes_sinopse.ano_censo', 'year') .group('docentes_sinopse.ano_censo') .order('docentes_sinopse.ano_censo') - .where('docentes_sinopse.cod_reg = 0'); + .where(whereRule); } else if (req.query.dims && req.query.dims.includes('age_range_entity')) { @@ -532,7 +568,7 @@ federativeEntityApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('docentes_sinopse.ano_censo', 'year') .group('docentes_sinopse.ano_censo') .order('docentes_sinopse.ano_censo') - .where('docentes_sinopse.cod_reg = 0'); + .where(whereRule); } else if (req.query.dims && req.query.dims.includes('post_graduation_entity')) { @@ -543,7 +579,7 @@ federativeEntityApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('docentes_sinopse.ano_censo', 'year') .group('docentes_sinopse.ano_censo') .order('docentes_sinopse.ano_censo') - .where('docentes_sinopse.cod_reg = 0'); + .where(whereRule); } else if (req.query.dims && req.query.dims.includes('contract_type_entity')) { @@ -555,7 +591,7 @@ federativeEntityApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('docentes_sinopse.ano_censo', 'year') .group('docentes_sinopse.ano_censo') .order('docentes_sinopse.ano_censo') - .where('docentes_sinopse.cod_reg = 0'); + .where(whereRule); } else if ((req.query.dims && req.query.dims.includes('state')) || (req.query.filter && req.query.filter.includes('state'))) { req.sql.from('docentes_sinopse') @@ -563,7 +599,7 @@ federativeEntityApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('docentes_sinopse.ano_censo', 'year') .group('docentes_sinopse.ano_censo') .order('docentes_sinopse.ano_censo') - .where('docentes_sinopse.cod_mun = 0'); + .where(whereRule); } else if ((req.query.dims && req.query.dims.includes('region')) || (req.query.filter && req.query.filter.includes('region'))) { req.sql.from('docentes_sinopse') @@ -571,7 +607,7 @@ federativeEntityApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('docentes_sinopse.ano_censo', 'year') .group('docentes_sinopse.ano_censo') .order('docentes_sinopse.ano_censo') - .where('docentes_sinopse.cod_uf = 0'); + .where(whereRule); } else { req.sql.from('docentes_sinopse') @@ -579,7 +615,7 @@ federativeEntityApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('docentes_sinopse.ano_censo', 'year') .group('docentes_sinopse.ano_censo') .order('docentes_sinopse.ano_censo') - .where('docentes_sinopse.cod_reg = 0'); + .where(whereRule); } next(); }, query, aggregateData, id2str.transform(false), response('federative_entity')); -- GitLab