From 9e8d34fe002443b457b0879987540575e5f542cc Mon Sep 17 00:00:00 2001 From: Victor Picussa <vp16@inf.ufpr.br> Date: Fri, 24 Apr 2020 14:16:41 -0300 Subject: [PATCH 01/53] [homologa]Added course modifications --- src/libs/routes/courseCount.js | 112 +++++++++++++++++++++------------ 1 file changed, 71 insertions(+), 41 deletions(-) diff --git a/src/libs/routes/courseCount.js b/src/libs/routes/courseCount.js index 9a7f9d4e..65c17462 100644 --- a/src/libs/routes/courseCount.js +++ b/src/libs/routes/courseCount.js @@ -40,12 +40,8 @@ const config = require(`${libs}/config`); const addMissing = require(`${libs}/middlewares/addMissing`); -const cache = require('apicache').options({ debug: config.debug, statusCodes: {include: [200]} }).middleware; - let rqf = new ReqQueryFields(); -courseCountApp.use(cache('15 day')); - courseCountApp.get('/upper_adm_dependency', (req, res, next) => { req.result = []; for(let i = 1; i <= 7; ++i) { @@ -59,7 +55,8 @@ courseCountApp.get('/upper_adm_dependency', (req, res, next) => { courseCountApp.get('/years', (req, res, next) => { req.sql.from('curso_ens_superior') - .field('DISTINCT curso_ens_superior.ano_censo', 'year'); + .field('DISTINCT curso_ens_superior.ano_censo', 'year') + .where('curso_ens_superior.ano_censo > 2010'); next(); }, query, response('years')); @@ -81,15 +78,6 @@ courseCountApp.get('/academic_organization', (req, res, next) => { next(); }, response('academic_organization')); -courseCountApp.get('/capital', (req, res, next) => { - req.result = [ - {id: null, name: 'Não Classificado'}, - {id: 0, name: 'Não'}, - {id: 1, name: 'Sim'} - ]; - next(); -}, response('capital')); - courseCountApp.get('/ocde_geral', (req, res, next) => { req.result = []; for(let i = 1; i <= 8; ++i) { @@ -186,6 +174,13 @@ courseCountApp.get('/university', (req, res, next) => { next(); }, query, response('university')); +courseCountApp.get('/localoffer', (req, res, next) => { + req.sql.from('localoferta_ens_superior', 'l') + .field('DISTINCT l.nome', 'localoffer_name') + .field('l.cod_local_oferta', 'localoffer_id'); + next(); +}, query, response('localoffer')); + rqf.addField({ name: 'filter', field: false, @@ -200,8 +195,8 @@ rqf.addField({ tableField: ['nome', 'id'], resultField: ['region_name', 'region_id'], where: { - relation: '=', - type: 'integer', + relation: 'LIKE', + type: 'string', field: 'id' }, join: { @@ -211,34 +206,51 @@ rqf.addField({ } }).addValue({ name: 'state', - table: 'estado', - tableField: ['nome', 'id'], + table: 'localoferta_ens_superior', + tableField: ['sigla_uf', 'cod_uf'], resultField: ['state_name', 'state_id'], where: { relation: '=', type: 'integer', - field: 'id' + field: 'cod_uf_curso', + table: 'curso_ens_superior' }, join: { - primary: 'id', - foreign: 'cod_uf_curso', + primary: ['ano_censo', 'cod_curso'], + foreign: ['ano_censo', 'cod_curso'], foreignTable: 'curso_ens_superior' } }).addValue({ name: 'city', - table: 'municipio', - tableField: ['nome', 'id'], + table: 'localoferta_ens_superior', + tableField: ['nome_municipio', 'cod_municipio'], resultField: ['city_name', 'city_id'], where: { relation: '=', type: 'integer', - field: 'cod_municipio_curso', - table: '@' + field: 'cod_curso', + table: 'curso_ens_superior' }, join: { - primary: 'id', - foreign: 'cod_municipio_curso', - foreignTable: '@' + primary: ['ano_censo', 'cod_curso'], + foreign: ['ano_censo', 'cod_curso'], + foreignTable: 'curso_ens_superior' + } +}).addValue({ + name: 'localoffer', + table: 'localoferta_ens_superior', + tableField: ['cod_ies', 'cod_local_oferta', 'nome'], + resultField: ['university_id', 'localoffer_id', 'localoffer_name'], + where: { + relation: '=', + type: 'integer', + field: 'cod_curso', + table: 'curso_ens_superior' + }, + join: { + primary: ['ano_censo', 'cod_curso'], + foreign: ['ano_censo', 'cod_curso'], + foreignTable: 'curso_ens_superior' } }).addValue({ name: 'university', @@ -270,16 +282,6 @@ rqf.addField({ type: 'integer', field: 'cod_organizacao_academica' } -}).addValue({ - name:'capital', - table: 'curso_ens_superior', - tableField: 'tfd_capital_curso', - resultField: 'capital_id', - where: { - relation: '=', - type: 'integer', - field: 'tfd_capital_curso' - } }).addValue({ name:'course', table: 'curso_ens_superior', @@ -416,8 +418,16 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { .order('curso_ens_superior.ano_censo') .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') .where('curso_ens_superior.cod_nivel_academico = 1'); - } - else { + } else if ("localoffer" in req.dims) { + req.sql.from('curso_ens_superior') + .field('curso_ens_superior.ano_censo') + .field('COUNT(localoferta_ens_superior.cod_local_oferta)', 'total') + .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') + .where('curso_ens_superior.cod_nivel_academico = 1') + .group('curso_ens_superior.ano_censo') + .order('curso_ens_superior.ano_censo') + .order('localoferta_ens_superior.cod_local_oferta'); + } else { req.sql.from('curso_ens_superior') .field('COUNT(curso_ens_superior.cod_curso)', 'total') .field("'Brasil'", 'name') @@ -428,6 +438,26 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { .where('curso_ens_superior.cod_nivel_academico = 1'); } next(); -}, rqf.build(), query, id2str.transform(), addMissing(rqf), response('course_count')); +}, rqf.build(), query, id2str.transform(), (req, res, next) => { + if ("localoffer" in req.dims) { + let baseq = req.sql.clone() + let iesq = squel.select() + + iesq.from('ies_ens_superior') + .field('ies_ens_superior.cod_ies') + .field('ies_ens_superior.nome_ies'); + + req.sql = squel.select().from(baseq, 'bq') + .field("'Brasil'", 'name') + .field('ano_censo', 'year') + .field('total') + .field('university_id') + .field('nome_ies', 'university_name') + .field('localoffer_id') + .field('localoffer_name') + .join(iesq, 'iq', 'iq.cod_ies=bq.university_id'); + } + next(); +}, query, id2str.transform(), addMissing(rqf), response('course_count')); module.exports = courseCountApp; -- GitLab From 31becfc7fcfa42a9a6965ec2bad145788dbd8f60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Tue, 28 Apr 2020 11:12:12 -0300 Subject: [PATCH 02/53] Add school location --- src/libs/routes/api.js | 23 +++----- src/libs/routes/schoolLocation.js | 88 +++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 16 deletions(-) create mode 100644 src/libs/routes/schoolLocation.js diff --git a/src/libs/routes/api.js b/src/libs/routes/api.js index 7d312660..3a09aea2 100644 --- a/src/libs/routes/api.js +++ b/src/libs/routes/api.js @@ -40,8 +40,6 @@ const school = require('./school'); const simulation = require('./simulation'); -const user = require('./user'); - const classroom = require('./classroom'); const teacher = require('./teacher'); @@ -64,16 +62,8 @@ const idhmr = require('./idhmr'); const idhml = require('./idhml'); -const oauth2 = require(`${libs}/middlewares/oauth2`); - -const verifyToken = require(`${libs}/routes/verifyToken`); - -const resetToken = require(`${libs}/routes/resetToken`); - const educationYears = require(`${libs}/routes/educationYears`); -const downloads = require(`${libs}/routes/downloads`); - const infrastructure = require(`${libs}/routes/infrastructure`); const schoolInfrastructure = require(`${libs}/routes/schoolInfrastructure`); @@ -114,12 +104,16 @@ const university = require(`${libs}/routes/university`); const universityTeacher = require(`${libs}/routes/universityTeacher`); +const educationalBudget = require(`${libs}/routes/educationalBudget`); + +const schoolLocation = require(`${libs}/routes/schoolLocation`); + + api.get('/', (req, res) => { res.json({ msg: 'SimCAQ API is running' }); }); // mount API routes -api.use('/user', user); api.use('/simulation', simulation); api.use('/class', classes); api.use('/enrollment', enrollment); @@ -138,11 +132,7 @@ api.use('/rate_school', rateSchool); api.use('/gloss_enrollment_ratio', glossEnrollmentRatio); api.use('/liquid_enrollment_ratio', liquidEnrollmentRatio); api.use('/idhml', idhml); -api.use('/auth/token', oauth2.token); -api.use('/verify', verifyToken); -api.use('/reset', resetToken); api.use('/education_years', educationYears); -api.use('/downloads', downloads); api.use('/infrastructure', infrastructure); api.use('/school_infrastructure', schoolInfrastructure); api.use('/distribution_factor', distributionFactor); @@ -163,5 +153,6 @@ api.use('/university_enrollment', universityEnrollment); api.use('/university', university); api.use('/university_teacher', universityTeacher); api.use('/course_count', courseCount); - +api.use('/educational_budget', educationalBudget); +api.use('/school_location', schoolLocation) module.exports = api; diff --git a/src/libs/routes/schoolLocation.js b/src/libs/routes/schoolLocation.js new file mode 100644 index 00000000..b18464bf --- /dev/null +++ b/src/libs/routes/schoolLocation.js @@ -0,0 +1,88 @@ +const express = require('express'); + +const schoolLocationApp = express.Router(); + +const libs = `${process.cwd()}/libs`; + +const log = require(`${libs}/log`)(module); + +const squel = require('squel'); + +const query = require(`${libs}/middlewares/query`).query; + +const response = require(`${libs}/middlewares/response`); + +const id2str = require(`${libs}/middlewares/id2str`); + +const ReqQueryFields = require(`${libs}/middlewares/reqQueryFields`); + +const request = require(`request`); + +const config = require(`${libs}/config`); + +const passport = require('passport'); + +const addMissing = require(`${libs}/middlewares/addMissing`); + +const cache = require('apicache').options({ debug: config.debug, statusCodes: {include: [200]} }).middleware; + +let rqf = new ReqQueryFields(); + +rqf.addField({ + name: 'filter', + field: false, + where: true +}).addField({ + name: 'dims', + field: true, + where: false +}).addValue({ + name: 'id', + table: 'localizacao_escolas', + tableField: 'id', + where: { + relation: '=', + type: 'integer', + field: 'id' + } +}).addValueToField({ + name: 'city', + table: 'municipio', + tableField: ['nome', 'id'], + resultField: ['city_name', 'city_id'], + where: { + relation: '=', + type: 'integer', + field: 'municipio_id', + }, + join: { + primary: 'id', + foreign: 'municipio_id', + foreignTable: '@' + } +}, 'dims').addValueToField({ + name: 'school', + table: 'localizacao_escolas', + tableField: ['nome', 'id'], + resultField: ['school_name', 'school_id'], + where: { + relation: '=', + type: 'integer', + field: 'id' + }, +}, 'dims'); + +schoolLocationApp.get('/', rqf.parse(), (req, res, next) => { + req.dims.city=true; + req.dims.school=true; + + req.sql.from('localizacao_escolas') + .field("'Brasil'", 'name') + .field('localizacao_escolas.latitude', 'latitude') + .field('localizacao_escolas.longitude', 'longitude') + .group('localizacao_escolas.latitude') + .group('localizacao_escolas.longitude'); + next(); +}, rqf.build(), query, id2str.transform(), response('school_location')); + +module.exports = schoolLocationApp; -- GitLab From cf8ea1f8731cb828f54e79a99aabbc4286574893 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Tue, 28 Apr 2020 11:18:58 -0300 Subject: [PATCH 03/53] Revert user api changes --- src/libs/routes/api.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/libs/routes/api.js b/src/libs/routes/api.js index 3a09aea2..bc8da67c 100644 --- a/src/libs/routes/api.js +++ b/src/libs/routes/api.js @@ -40,6 +40,8 @@ const school = require('./school'); const simulation = require('./simulation'); +const user = require('./user'); + const classroom = require('./classroom'); const teacher = require('./teacher'); @@ -62,8 +64,16 @@ const idhmr = require('./idhmr'); const idhml = require('./idhml'); +const oauth2 = require(`${libs}/middlewares/oauth2`); + +const verifyToken = require(`${libs}/routes/verifyToken`); + +const resetToken = require(`${libs}/routes/resetToken`); + const educationYears = require(`${libs}/routes/educationYears`); +const downloads = require(`${libs}/routes/downloads`); + const infrastructure = require(`${libs}/routes/infrastructure`); const schoolInfrastructure = require(`${libs}/routes/schoolInfrastructure`); @@ -114,6 +124,7 @@ api.get('/', (req, res) => { }); // mount API routes +api.use('/user', user); api.use('/simulation', simulation); api.use('/class', classes); api.use('/enrollment', enrollment); @@ -132,7 +143,11 @@ api.use('/rate_school', rateSchool); api.use('/gloss_enrollment_ratio', glossEnrollmentRatio); api.use('/liquid_enrollment_ratio', liquidEnrollmentRatio); api.use('/idhml', idhml); +api.use('/auth/token', oauth2.token); +api.use('/verify', verifyToken); +api.use('/reset', resetToken); api.use('/education_years', educationYears); +api.use('/downloads', downloads); api.use('/infrastructure', infrastructure); api.use('/school_infrastructure', schoolInfrastructure); api.use('/distribution_factor', distributionFactor); @@ -153,6 +168,5 @@ api.use('/university_enrollment', universityEnrollment); api.use('/university', university); api.use('/university_teacher', universityTeacher); api.use('/course_count', courseCount); -api.use('/educational_budget', educationalBudget); api.use('/school_location', schoolLocation) module.exports = api; -- GitLab From 9a4431c7006c027c2b5138d42fea7f2423831172 Mon Sep 17 00:00:00 2001 From: Victor Picussa <vp16@inf.ufpr.br> Date: Wed, 6 May 2020 10:38:31 -0300 Subject: [PATCH 04/53] [homologa]Added fixed results --- src/libs/convert/nightTime.js | 32 ++++++++++++++++++ src/libs/routes/courseCount.js | 62 ++++++++++++++++++++++++++++------ 2 files changed, 83 insertions(+), 11 deletions(-) create mode 100644 src/libs/convert/nightTime.js diff --git a/src/libs/convert/nightTime.js b/src/libs/convert/nightTime.js new file mode 100644 index 00000000..1e840071 --- /dev/null +++ b/src/libs/convert/nightTime.js @@ -0,0 +1,32 @@ +'use strict'; + +/* +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 nightTime(id) { + switch (id) { + case 0: + return 'Não'; + case 1: + return 'Sim'; + default: + return 'Curso a distância'; + } +}; \ No newline at end of file diff --git a/src/libs/routes/courseCount.js b/src/libs/routes/courseCount.js index 65c17462..15cb9a16 100644 --- a/src/libs/routes/courseCount.js +++ b/src/libs/routes/courseCount.js @@ -191,17 +191,18 @@ rqf.addField({ where: false }).addValue({ name: 'region', - table: 'regiao', - tableField: ['nome', 'id'], + table: 'localoferta_ens_superior', + tableField: ['nome_regiao_curso', 'cod_regiao_curso'], resultField: ['region_name', 'region_id'], where: { - relation: 'LIKE', - type: 'string', - field: 'id' + relation: '=', + type: 'integer', + field: 'cod_regiao_curso', + table: 'localoferta_ens_superior' }, join: { - primary: 'nome', - foreign: 'nome_regiao_curso', + primary: ['ano_censo', 'cod_curso'], + foreign: ['ano_censo', 'cod_curso'], foreignTable: 'curso_ens_superior' } }).addValue({ @@ -212,8 +213,8 @@ rqf.addField({ where: { relation: '=', type: 'integer', - field: 'cod_uf_curso', - table: 'curso_ens_superior' + field: 'cod_uf', + table: 'localoferta_ens_superior' }, join: { primary: ['ano_censo', 'cod_curso'], @@ -228,8 +229,8 @@ rqf.addField({ where: { relation: '=', type: 'integer', - field: 'cod_curso', - table: 'curso_ens_superior' + field: 'cod_municipio', + table: 'localoferta_ens_superior' }, join: { primary: ['ano_censo', 'cod_curso'], @@ -322,6 +323,36 @@ rqf.addField({ type: 'integer', field: 'cod_ocde_area_detalhada' } +}).addValue({ + name:'cine_specific', + table: 'curso_ens_superior', + tableField: ['cod_cine_area_especifica', 'nome_cine_area_especifica'], + resultField: ['cine_specific_id', 'cine_specific_name'], + where: { + relation: '=', + type: 'integer', + field: 'cod_cine_area_especifica' + } +}).addValue({ + name:'cine_geral', + table: 'curso_ens_superior', + tableField: ['cod_cine_area_geral', 'nome_cine_area_geral'], + resultField: ['cine_geral_id', 'cine_geral_name'], + where: { + relation: '=', + type: 'integer', + field: 'cod_cine_area_geral' + } +}).addValue({ + name:'cine_detailed', + table: 'curso_ens_superior', + tableField: ['cod_cine_area_detalhada', 'nome_cine_area_detalhada'], + resultField: ['cine_detailed_id', 'cine_datailed_name'], + where: { + relation: '=', + type: 'integer', + field: 'cod_cine_area_detalhada' + } }).addValue({ name:'academic_level', table: 'curso_ens_superior', @@ -427,6 +458,15 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { .group('curso_ens_superior.ano_censo') .order('curso_ens_superior.ano_censo') .order('localoferta_ens_superior.cod_local_oferta'); + } else if (("state" in req.dims) || ("city" in req.dims) || ("region" in req.dims)) { + req.sql.from('curso_ens_superior') + .field('COUNT(DISTINCT curso_ens_superior.cod_curso)', 'total') + .field("'Brasil'", 'name') + .field('curso_ens_superior.ano_censo', 'year') + .group('curso_ens_superior.ano_censo') + .order('curso_ens_superior.ano_censo') + .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') + .where('curso_ens_superior.cod_nivel_academico = 1'); } else { req.sql.from('curso_ens_superior') .field('COUNT(curso_ens_superior.cod_curso)', 'total') -- GitLab From ea189e009160ca4be13bf95f89b7a4eb62249663 Mon Sep 17 00:00:00 2001 From: Victor Picussa <vp16@inf.ufpr.br> Date: Wed, 6 May 2020 18:56:51 -0300 Subject: [PATCH 05/53] Added night time fix --- src/libs/middlewares/id2str.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libs/middlewares/id2str.js b/src/libs/middlewares/id2str.js index 327ce2a4..fadf365b 100644 --- a/src/libs/middlewares/id2str.js +++ b/src/libs/middlewares/id2str.js @@ -80,6 +80,7 @@ const genderIES = require(`${libs}/convert/genderIES`); const deficiency = require(`${libs}/convert/studentDeficiency`); const govermentAgreement = require(`${libs}/convert/govermentAgreement`); const arrangement = require(`${libs}/convert/arrangement`); +const nightTime = require(`${libs}/convert/nightTime`); const ids = { gender_id: gender, @@ -135,7 +136,7 @@ const ids = { school_type_id: schoolType, upper_turn_id: upperTurn, is_free_id: booleanVariable, - night_time_id: booleanVariable, + night_time_id: nightTime, capital_id: booleanVariable, ethnic_group_ies_id: ethnicGroupIES, teacher_situation_id: teacherSituation, @@ -251,5 +252,6 @@ module.exports = { deficiency, transport, govermentAgreement, - arrangement + arrangement, + nightTime }; -- GitLab From 8d8d390e2d2a5277ea6efcbe4cc5a56c8c3923b8 Mon Sep 17 00:00:00 2001 From: Victor Picussa <vic_picussa2@hotmail.com> Date: Thu, 7 May 2020 17:45:04 -0300 Subject: [PATCH 06/53] Added CINE dimension --- src/libs/convert/cineDetailed.js | 199 +++++++++++++++++++++++++++++++ src/libs/convert/cineGeral.js | 48 ++++++++ src/libs/convert/cineSpecific.js | 99 +++++++++++++++ src/libs/middlewares/id2str.js | 15 ++- src/libs/routes/courseCount.js | 49 ++++++++ 5 files changed, 408 insertions(+), 2 deletions(-) create mode 100644 src/libs/convert/cineDetailed.js create mode 100644 src/libs/convert/cineGeral.js create mode 100644 src/libs/convert/cineSpecific.js diff --git a/src/libs/convert/cineDetailed.js b/src/libs/convert/cineDetailed.js new file mode 100644 index 00000000..e1211704 --- /dev/null +++ b/src/libs/convert/cineDetailed.js @@ -0,0 +1,199 @@ +/* +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 cineDetailed(id) { + switch (id) { + case 11: + return 'Programas básicos'; + case 111: + return 'Ciência da educação'; + case 112: + return 'Formação de professores de educação infantil'; + case 113: + return 'Formação de professores sem áreas específicas'; + case 114: + return 'Formação de professores em áreas específicas (exceto Letras)'; + case 115: + return 'Formação de professores de letras'; + case 188: + return 'Programas interdisciplinares abrangendo educação'; + case 211: + return 'Produção audiovisual, de mídia e cultural'; + case 212: + return 'Moda, design de interiores e desenho industrial'; + case 213: + return 'Belas artes'; + case 214: + return 'Artesanato'; + case 215: + return 'Música e artes cênicas'; + case 221: + return 'Religião e teologia'; + case 222: + return 'História e arqueologia'; + case 223: + return 'Filosofia e ética'; + case 231: + return 'Letras'; + case 288: + return 'Programas interdisciplinares abrangendo artes e humanidades'; + case 311: + return 'Economia'; + case 312: + return 'Ciências sociais e políticas'; + case 313: + return 'Psicologia'; + case 321: + return 'Jornalismo e reportagem'; + case 322: + return 'Biblioteconomia, informação e estudos arquivísticos'; + case 388: + return 'Programas interdisciplinares abrangendo ciências sociais, jornalismo e informação'; + case 411: + return 'Contabilidade e tributação'; + case 412: + return 'Finanças, bancos e seguros'; + case 413: + return 'Gestão e administração'; + case 414: + return 'Marketing e propaganda'; + case 415: + return 'Secretariado e trabalhos de escritório'; + case 416: + return 'Gestão comercial'; + case 421: + return 'Direito'; + case 488: + return 'Programas interdisciplinares abrangendo negócios, administração e direito'; + case 511: + return 'Biologia'; + case 512: + return 'Bioquímica e biotecnologia'; + case 521: + return 'Ciências ambientais'; + case 531: + return 'Química'; + case 532: + return 'Ciências da terra'; + case 533: + return 'Física'; + case 541: + return 'Matemática'; + case 542: + return 'Estatística'; + case 588: + return 'Programas interdisciplinares abrangendo ciências naturais, matemática e estatística'; + case 612: + return 'Infraestrutura e gestão de TIC'; + case 613: + return 'Produção de software'; + case 614: + return 'Ciência da computação'; + case 615: + return 'Gestão e desenvolvimento de sistemas de informação'; + case 616: + return 'Desenvolvimento de sistemas que integram software e hardware'; + case 688: + return 'Programas interdisciplinares abrangendo computação e Tecnologias da Informação e Comunicação (TIC)'; + case 710: + return 'Engenharia e profissões correlatas sem definição precisa'; + case 711: + return 'Engenharia química e de processos'; + case 712: + return 'Tecnologia de proteção ambiental'; + case 713: + return 'Eletricidade e energia'; + case 714: + return 'Eletrônica e automação'; + case 715: + return 'Engenharia mecânica e metalurgia'; + case 716: + return 'Veículos a motor, construção naval, aeronáutica, ferroviária e metroviária'; + case 721: + return 'Processamento de alimentos'; + case 722: + return 'Materiais'; + case 723: + return 'Têxteis (vestuário, calçados e couro)'; + case 724: + return 'Mineração e extração'; + case 725: + return 'Produção e processos de fabricação'; + case 731: + return 'Arquitetura e planejamento urbano'; + case 732: + return 'Engenharia civil e construção'; + case 788: + return 'Programas interdisciplinares abrangendo engenharia, produção e construção'; + case 811: + return 'Produção agrícola, agropecuária e zootecnia'; + case 812: + return 'Horticultura'; + case 821: + return 'Silvicultura'; + case 831: + return 'Pesca'; + case 841: + return 'Veterinária'; + case 888: + return 'Programas interdisciplinares abrangendo agricultura, silvicultura, pesca e veterinária'; + case 911: + return 'Odontologia'; + case 912: + return 'Medicina'; + case 913: + return 'Enfermagem'; + case 914: + return 'Tecnologia de diagnóstico e tratamento médico'; + case 915: + return 'Promoção, prevenção, terapia e reabilitação'; + case 916: + return 'Farmácia'; + case 917: + return 'Medicina e terapia tradicional e complementar'; + case 918: + return 'Saúde pública e saúde coletiva'; + case 921: + return 'Assistência a idosos e a deficientes'; + case 923: + return 'Serviço social'; + case 988: + return 'Programas interdisciplinares abrangendo saúde e bem-estar'; + case 1011: + return 'Serviços domésticos'; + case 1012: + return 'Serviços de beleza'; + case 1013: + return 'Serviços de alimentação'; + case 1014: + return 'Esportes e lazer'; + case 1015: + return 'Turismo e hotelaria'; + case 1022: + return 'Saúde e segurança no trabalho'; + case 1031: + return 'Setor militar e de defesa'; + case 1032: + return 'Proteção de pessoas e de propriedades'; + case 1041: + return 'Serviços de transporte'; + default: + return 'Não classificada'; + } +}; \ No newline at end of file diff --git a/src/libs/convert/cineGeral.js b/src/libs/convert/cineGeral.js new file mode 100644 index 00000000..4f38e88a --- /dev/null +++ b/src/libs/convert/cineGeral.js @@ -0,0 +1,48 @@ +/* +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 cineGeral(id) { + switch (id) { + case 0: + return 'Programas básicos'; + case 1: + return 'Educação'; + case 2: + return 'Artes e humanidades'; + case 3: + return 'Ciências sociais, jornalismo e informação'; + case 4: + return 'Negócios, administração e direito'; + case 5: + return 'Ciências naturais, matemática e estatística'; + case 6: + return 'Computação e Tecnologias da Informação e Comunicação (TIC)'; + case 7: + return 'Engenharia, produção e construção'; + case 8: + return 'Agricultura, silvicultura, pesca e veterinária'; + case 9: + return 'Saúde e bem-estar'; + case 10: + return 'Serviços'; + default: + return 'Não classificada'; + } +}; diff --git a/src/libs/convert/cineSpecific.js b/src/libs/convert/cineSpecific.js new file mode 100644 index 00000000..8c900c35 --- /dev/null +++ b/src/libs/convert/cineSpecific.js @@ -0,0 +1,99 @@ +/* +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: +return '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 cineSpecific(id) { + switch (id) { + case 1: + return 'Programas básicos'; + case 11: + return 'Educação'; + case 18: + return 'Programas interdisciplinares abrangendo educação'; + case 21: + return 'Artes'; + case 22: + return 'Humanidades (exceto línguas)'; + case 23: + return 'Línguas'; + case 28: + return 'Programas interdisciplinares abrangendo artes e humanidades'; + case 31: + return 'Ciências sociais e comportamentais'; + case 32: + return 'Jornalismo e informação'; + case 38: + return 'Programas interdisciplinares abrangendo ciências sociais, jornalismo e informação'; + case 41: + return 'Negócios e administração'; + case 42: + return 'Direito'; + case 48: + return 'Programas interdisciplinares abrangendo negócios, administração e direito'; + case 51: + return 'Ciências biológicas e correlatas'; + case 52: + return 'Meio ambiente'; + case 53: + return 'Ciências físicas'; + case 54: + return 'Matemática e estatística'; + case 58: + return 'Programas interdisciplinares abrangendo ciências naturais, matemática e estatística'; + case 61: + return 'Computação e Tecnologias da Informação e Comunicação (TIC)'; + case 68: + return 'Programas interdisciplinares abrangendo computação e Tecnologias da Informação e Comunicação (TIC)'; + case 71: + return 'Engenharia e profissões correlatas'; + case 72: + return 'Produção e processamento'; + case 73: + return 'Arquitetura e construção'; + case 78: + return 'Programas interdisciplinares abrangendo engenharia, produção e construção'; + case 81: + return 'Agricultura'; + case 82: + return 'Silvicultura'; + case 83: + return 'Pesca'; + case 84: + return 'Veterinária'; + case 88: + return 'Programas interdisciplinares abrangendo agricultura, silvicultura, pesca e veterinária'; + case 91: + return 'Saúde'; + case 92: + return 'Bem-estar'; + case 98: + return 'Programas interdisciplinares abrangendo saúde e bem-estar'; + case 101: + return 'Serviços pessoais'; + case 102: + return 'Higiene e serviços de saúde ocupacional'; + case 103: + return 'Serviços de segurança'; + case 104: + return 'Serviços de transporte'; + default: + return 'Não classificada'; + } +}; diff --git a/src/libs/middlewares/id2str.js b/src/libs/middlewares/id2str.js index 327ce2a4..78fd170d 100644 --- a/src/libs/middlewares/id2str.js +++ b/src/libs/middlewares/id2str.js @@ -61,6 +61,9 @@ const academicOrganization = require(`${libs}/convert/academicOrganization`); const ocdeSpecific = require(`${libs}/convert/ocdeSpecific`); const ocdeGeral = require(`${libs}/convert/ocdeGeral`); const ocdeDetailed = require(`${libs}/convert/ocdeDetailed`); +const cineSpecific = require(`${libs}/convert/cineSpecific`); +const cineGeral = require(`${libs}/convert/cineGeral`); +const cineDetailed = require(`${libs}/convert/cineDetailed`); const academicLevel = require(`${libs}/convert/academicLevel`); const upperEducationMod = require(`${libs}/convert/upperEducationMod`); const studentDeficiency = require(`${libs}/convert/studentDeficiency`); @@ -80,6 +83,7 @@ const genderIES = require(`${libs}/convert/genderIES`); const deficiency = require(`${libs}/convert/studentDeficiency`); const govermentAgreement = require(`${libs}/convert/govermentAgreement`); const arrangement = require(`${libs}/convert/arrangement`); +const nightTime = require(`${libs}/convert/nightTime`); const ids = { gender_id: gender, @@ -129,13 +133,16 @@ const ids = { ocde_specific_id: ocdeSpecific, ocde_geral_id: ocdeGeral, ocde_detailed_id: ocdeDetailed, + cine_specific_id: cineSpecific, + cine_geral_id: cineGeral, + cine_detailed_id: cineDetailed, academic_level_id: academicLevel, upper_education_mod_id: upperEducationMod, student_deficiency_id: studentDeficiency, school_type_id: schoolType, upper_turn_id: upperTurn, is_free_id: booleanVariable, - night_time_id: booleanVariable, + night_time_id: nightTime, capital_id: booleanVariable, ethnic_group_ies_id: ethnicGroupIES, teacher_situation_id: teacherSituation, @@ -231,6 +238,9 @@ module.exports = { ocdeSpecific, ocdeGeral, ocdeDetailed, + cineSpecific, + cineGeral, + cineDetailed, academicLevel, upperEducationMod, studentDeficiency, @@ -251,5 +261,6 @@ module.exports = { deficiency, transport, govermentAgreement, - arrangement + arrangement, + nightTime }; diff --git a/src/libs/routes/courseCount.js b/src/libs/routes/courseCount.js index 15cb9a16..53b33ede 100644 --- a/src/libs/routes/courseCount.js +++ b/src/libs/routes/courseCount.js @@ -127,6 +127,55 @@ courseCountApp.get('/ocde_detailed', (req, res, next) => { next(); }, response('ocde_detailed')); +courseCountApp.get('/cine_geral', (req, res, next) => { + req.result = []; + for(let i = 0; i <= 10; ++i) { + req.result.push({ + id: i, + name: id2str.cineGeral(i) + }); + }; + next(); +}, response('cine_geral')); + +courseCountApp.get('/cine_specific', (req, res, next) => { + req.result = []; + const defaultCase = null; + for(let i = 1; i <= 104; ++i) { + let obj = { + id: i, + name: id2str.cineSpecific(i) + }; + if (obj.name !== id2str.cineSpecific(defaultCase)){ + req.result.push(obj); + } + }; + req.result.push({ + id: defaultCase, + name: id2str.cineSpecific(defaultCase) + }); + next(); +}, response('cine_specific')); + +courseCountApp.get('/cine_detailed', (req, res, next) => { + req.result = []; + const defaultCase = null; + for(let i = 11; i <= 1041; ++i) { + let obj = { + id: i, + name: id2str.cineDetailed(i) + }; + if (obj.name !== id2str.cineDetailed(defaultCase)){ + req.result.push(obj); + } + }; + req.result.push({ + id: defaultCase, + name: id2str.cineDetailed(defaultCase) + }); + next(); +}, response('cine_detailed')); + courseCountApp.get('/academic_level', (req, res, next) => { req.result = []; for(let i = 1; i <= 4; ++i) { -- GitLab From 30d4eb90b70aaea570a9e8d1663e283cd26108b1 Mon Sep 17 00:00:00 2001 From: Fernando Erd <fcerd15@inf.ufpr.br> Date: Tue, 12 May 2020 10:05:23 -0300 Subject: [PATCH 07/53] Fix dot error --- src/libs/convert/educationLevelMod.js | 2 +- src/libs/convert/ruralLocation.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/convert/educationLevelMod.js b/src/libs/convert/educationLevelMod.js index 0cdfbeee..5add8f1e 100644 --- a/src/libs/convert/educationLevelMod.js +++ b/src/libs/convert/educationLevelMod.js @@ -43,7 +43,7 @@ module.exports = function educationLevelMod(id) { case 11: return 'EJA - EF e EM Integrado - tecnico'; case 12: - return 'Educacao Profissional - concomitante e subsequente.' + return 'Educacao Profissional - concomitante e subsequente' default: return 'Não classificada'; } diff --git a/src/libs/convert/ruralLocation.js b/src/libs/convert/ruralLocation.js index ab60f412..7ff47d96 100644 --- a/src/libs/convert/ruralLocation.js +++ b/src/libs/convert/ruralLocation.js @@ -35,6 +35,6 @@ module.exports = function ruralLocation(id) { case 7: return 'Rural - Unidade de uso sustentavel em terra indígena'; case 8: - return 'Rural - Unidade de uso sustentável em área remanescente de quilombos.'; + return 'Rural - Unidade de uso sustentável em área remanescente de quilombos'; } }; -- GitLab From 14d0bbad58047bcf9967678d2548801e1d648c4c Mon Sep 17 00:00:00 2001 From: Victor Picussa <vp16@inf.ufpr.br> Date: Wed, 13 May 2020 13:52:03 -0300 Subject: [PATCH 08/53] New location --- src/libs/convert/stateName.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libs/convert/stateName.js b/src/libs/convert/stateName.js index 4760d242..fe268ebc 100644 --- a/src/libs/convert/stateName.js +++ b/src/libs/convert/stateName.js @@ -74,5 +74,7 @@ module.exports = function stateName(id) { return 'Goiás'; case 53: return 'Distrito Federal'; + case 99: + return 'Exterior'; } }; -- GitLab From 83f935b8c743522888eb53c3bf61a806709258d1 Mon Sep 17 00:00:00 2001 From: Victor Picussa <vp16@inf.ufpr.br> Date: Thu, 14 May 2020 11:22:16 -0300 Subject: [PATCH 09/53] Fix filter --- src/libs/routes/courseCount.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libs/routes/courseCount.js b/src/libs/routes/courseCount.js index 53b33ede..4a03f3d6 100644 --- a/src/libs/routes/courseCount.js +++ b/src/libs/routes/courseCount.js @@ -487,6 +487,7 @@ rqf.addField({ }); courseCountApp.get('/', rqf.parse(), (req, res, next) => { + console.log(req) if ("university" in req.dims) { req.sql.from('curso_ens_superior') .field('COUNT(curso_ens_superior.cod_curso)', 'total') @@ -507,7 +508,8 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { .group('curso_ens_superior.ano_censo') .order('curso_ens_superior.ano_censo') .order('localoferta_ens_superior.cod_local_oferta'); - } else if (("state" in req.dims) || ("city" in req.dims) || ("region" in req.dims)) { + } else if (("state" in req.dims) || ("city" in req.dims) || ("region" in req.dims) || + ("state" in req.filter) || ("city" in req.filter) || ("region" in req.filter)) { req.sql.from('curso_ens_superior') .field('COUNT(DISTINCT curso_ens_superior.cod_curso)', 'total') .field("'Brasil'", 'name') -- GitLab From cccc18b43a2e3983fc6a1a6b1e22cf3ee249cf4f Mon Sep 17 00:00:00 2001 From: Victor Picussa <vp16@inf.ufpr.br> Date: Thu, 14 May 2020 16:24:53 -0300 Subject: [PATCH 10/53] Fixed citys --- src/libs/routes/courseCount.js | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/libs/routes/courseCount.js b/src/libs/routes/courseCount.js index 4a03f3d6..567f05cf 100644 --- a/src/libs/routes/courseCount.js +++ b/src/libs/routes/courseCount.js @@ -273,8 +273,8 @@ rqf.addField({ }).addValue({ name: 'city', table: 'localoferta_ens_superior', - tableField: ['nome_municipio', 'cod_municipio'], - resultField: ['city_name', 'city_id'], + tableField: 'cod_municipio', + resultField: 'city_id', where: { relation: '=', type: 'integer', @@ -513,7 +513,8 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { req.sql.from('curso_ens_superior') .field('COUNT(DISTINCT curso_ens_superior.cod_curso)', 'total') .field("'Brasil'", 'name') - .field('curso_ens_superior.ano_censo', 'year') + .field('curso_ens_superior.ano_censo') + .field('curso_ens_superior.ano_censo', 'year') .group('curso_ens_superior.ano_censo') .order('curso_ens_superior.ano_censo') .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') @@ -547,6 +548,20 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { .field('localoffer_id') .field('localoffer_name') .join(iesq, 'iq', 'iq.cod_ies=bq.university_id'); + } if (("city" in req.dims) || ("city" in req.filter)) { + let baseq = req.sql.clone() + let cityq = squel.select() + cityq.from('municipio') + .field('municipio.id') + .field('municipio.nome'); + + req.sql = squel.select().from(baseq, 'bq') + .field("'Brasil'", 'name') + .field('ano_censo', 'year') + .field('total') + .field('nome', 'city_name') + .field('city_id') + .join(cityq, 'cq', 'cq.id=bq.city_id'); } next(); }, query, id2str.transform(), addMissing(rqf), response('course_count')); -- GitLab From e4ea3a96bb795234218574293b4bc45f86ffc725 Mon Sep 17 00:00:00 2001 From: Victor Picussa <vp16@inf.ufpr.br> Date: Thu, 14 May 2020 16:37:46 -0300 Subject: [PATCH 11/53] Removed filter check --- src/libs/routes/courseCount.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/routes/courseCount.js b/src/libs/routes/courseCount.js index 567f05cf..74ae6662 100644 --- a/src/libs/routes/courseCount.js +++ b/src/libs/routes/courseCount.js @@ -548,7 +548,7 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { .field('localoffer_id') .field('localoffer_name') .join(iesq, 'iq', 'iq.cod_ies=bq.university_id'); - } if (("city" in req.dims) || ("city" in req.filter)) { + } if ("city" in req.dims) { let baseq = req.sql.clone() let cityq = squel.select() cityq.from('municipio') -- GitLab From 3b38d9d088fdcebe9b5137d9e4e8e4e16dcc1a8c Mon Sep 17 00:00:00 2001 From: Fernando Erd <fcerd15@inf.ufpr.br> Date: Fri, 15 May 2020 10:10:11 -0300 Subject: [PATCH 12/53] Fix Employees --- src/libs/routes/employees.js | 128 ++++++++++++++++++++--------------- 1 file changed, 75 insertions(+), 53 deletions(-) diff --git a/src/libs/routes/employees.js b/src/libs/routes/employees.js index 1e119d1f..7d455e25 100644 --- a/src/libs/routes/employees.js +++ b/src/libs/routes/employees.js @@ -468,67 +468,89 @@ function matchQueries(queryTotal, queryPartial) { employeesApp.get('/', rqfSchool.parse(), (req, res, next) => { req.allEmployees = {} req.allTeacher = {} - - if ("school" in req.filter) { - req.sql.field('SUM(escola.num_funcionarios)', 'total') - .field("'Brasil'", 'name') - .field('escola.ano_censo', 'year') - .from('escola') - .group('escola.ano_censo') - .order('escola.ano_censo') - .where('(escola.situacao_de_funcionamento = 1) AND (escola.ensino_regular = 1 OR escola.ensino_eja = 1 OR escola.educacao_profissional = 1) AND (dependencia_adm_id = 2 OR dependencia_adm_id = 3 OR dependencia_adm_id = 4) AND (escola.id=' + req.filter.school + ')'); - delete req.filter.school; - next(); - } else { - req.sql.field('SUM(escola.num_funcionarios)', 'total') - .field("'Brasil'", 'name') - .field('escola.ano_censo', 'year') - .from('escola') - .group('escola.ano_censo') - .order('escola.ano_censo') - .where('(escola.situacao_de_funcionamento = 1) AND (escola.ensino_regular = 1 OR escola.ensino_eja = 1 OR escola.educacao_profissional = 1) AND (dependencia_adm_id = 2 OR dependencia_adm_id = 3 OR dependencia_adm_id = 4)'); - next(); - } + req.schoolTable = {} + + if ("school" in req.filter) { + req.sql.field('SUM(escola.num_funcionarios)', 'total') + .field("'Brasil'", 'name') + .field('escola.ano_censo', 'year') + .from('escola') + .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) AND (dependencia_adm_id = 2 OR dependencia_adm_id = 3 OR dependencia_adm_id = 4) AND (escola.id=' + req.filter.school + ')'); + delete req.filter.school; + } else { + req.sql.field('SUM(escola.num_funcionarios)', 'total') + .field("'Brasil'", 'name') + .field('escola.ano_censo', 'year') + .from('escola') + .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) AND (dependencia_adm_id = 2 OR dependencia_adm_id = 3 OR dependencia_adm_id = 4)'); + } + next(); }, rqfSchool.build(), query, rqfSchool.parse(), id2str.transform(), (req, res, next) => { req.allEmployees = req.result; - req.resetSql(); - if ("school" in req.filter) { - req.sql.field('SUM(docente_por_escola.total_professores)', 'total') - .field("'Brasil'", 'name') - .field('docente_por_escola.ano_censo', 'year') - .from('docente_por_escola') - .join('escola', null, 'docente_por_escola.escola_id=escola.id AND docente_por_escola.ano_censo=escola.ano_censo') - .group('docente_por_escola.ano_censo') - .order('docente_por_escola.ano_censo') - .where('(docente_por_escola.dependencia_adm_id > 1) AND (docente_por_escola.escola_id=' + req.filter.school + ')'); - } else if ("school" in req.dims) { - req.sql.field('SUM(docente_por_escola.total_professores)', 'total') - .field("'Brasil'", 'name') - .field('docente_por_escola.ano_censo', 'year') - .field('escola.nome_escola', 'school_name') - .from('docente_por_escola') - .join('escola', null, 'docente_por_escola.escola_id=escola.id AND docente_por_escola.ano_censo=escola.ano_censo') - .group('docente_por_escola.ano_censo') - .order('docente_por_escola.ano_censo') - .where('(docente_por_escola.dependencia_adm_id > 1)'); - } else { - req.sql.field('SUM(docente_por_escola.total_professores)', 'total') - .field("'Brasil'", 'name') - .field('docente_por_escola.ano_censo', 'year') - .from('docente_por_escola') - .group('docente_por_escola.ano_censo') - .order('docente_por_escola.ano_censo') - .where('(docente_por_escola.dependencia_adm_id > 1)'); - } + req.resetSql(); + if ("school" in req.filter) { + req.sql.field('SUM(docente_por_escola.total_professores)', 'total') + .field("'Brasil'", 'name') + .field('docente_por_escola.ano_censo', 'year') + .from('docente_por_escola') + .join('escola', null, 'docente_por_escola.escola_id=escola.id AND docente_por_escola.ano_censo=escola.ano_censo') + .group('docente_por_escola.ano_censo') + .order('docente_por_escola.ano_censo') + .where('(docente_por_escola.dependencia_adm_id > 1) AND (docente_por_escola.escola_id=' + req.filter.school + ')'); + } else if ("school" in req.dims) { + req.sql.field('SUM(docente_por_escola.total_professores)', 'total') + .field("'Brasil'", 'name') + .field('docente_por_escola.ano_censo', 'year') + .field('escola.nome_escola', 'school_name') + .from('docente_por_escola') + .join('escola', null, 'docente_por_escola.escola_id=escola.id AND docente_por_escola.ano_censo=escola.ano_censo') + .group('docente_por_escola.ano_censo') + .order('docente_por_escola.ano_censo') + .where('(docente_por_escola.dependencia_adm_id > 1)'); + } else { + req.sql.field('SUM(docente_por_escola.total_professores)', 'total') + .field("'Brasil'", 'name') + .field('docente_por_escola.ano_censo', 'year') + .from('docente_por_escola') + .group('docente_por_escola.ano_censo') + .order('docente_por_escola.ano_censo') + .where('(docente_por_escola.dependencia_adm_id > 1)'); + } next(); -}, rqfSchool.build(), query, id2str.transform(), (req, res, next) => { +}, rqfSchool.build(), query, rqfSchool.parse(), id2str.transform(), (req, res, next) => { req.allTeacher = req.result; - let aux_employees = matchQueries(req.allEmployees, req.allTeacher); - req.result = aux_employees; + req.resetSql(); + req.sql.field('SUM(CASE WHEN escola.qt_prof_admin = 88888 THEN 0 ELSE escola.qt_prof_admin END) + SUM(CASE WHEN escola.qtde_prof_servicos_gerais = 88888 THEN 0 ELSE escola.qtde_prof_servicos_gerais END) + SUM(CASE WHEN escola.qtde_prof_bibliotecario = 88888 THEN 0 ELSE escola.qtde_prof_bibliotecario END) + SUM(CASE WHEN escola.qtde_prof_saude = 88888 THEN 0 ELSE escola.qtde_prof_saude END) + SUM(CASE WHEN escola.qtde_prof_coordenador = 88888 THEN 0 ELSE escola.qtde_prof_coordenador END) + SUM(CASE WHEN escola.qtde_prof_fono = 88888 THEN 0 ELSE escola.qtde_prof_fono END) + SUM(CASE WHEN escola.qtde_prof_nutricionista = 88888 THEN 0 ELSE escola.qtde_prof_nutricionista END) + SUM(CASE WHEN escola.qtde_prof_psicologo = 88888 THEN 0 ELSE escola.qtde_prof_psicologo END) + SUM(CASE WHEN escola.qtde_prof_alimentacao = 88888 THEN 0 ELSE escola.qtde_prof_alimentacao END) + SUM(CASE WHEN escola.qtde_prof_pedagogia = 88888 THEN 0 ELSE escola.qtde_prof_pedagogia END) + SUM(CASE WHEN escola.qtde_prof_secretario = 88888 THEN 0 ELSE escola.qtde_prof_secretario END) + SUM(CASE WHEN escola.qtde_prof_seguranca = 88888 THEN 0 ELSE escola.qtde_prof_seguranca END) + SUM(CASE WHEN escola.qtde_prof_monitores = 88888 THEN 0 ELSE escola.qtde_prof_monitores END)', 'total') + .field("'Brasil'", 'name') + .field('escola.ano_censo', 'year') + .from('escola') + .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) AND (escola.dependencia_adm_id = 2 OR escola.dependencia_adm_id = 3 OR escola.dependencia_adm_id = 4) and ano_censo >= 2019'); + next(); + +}, rqfSchool.build(), query, id2str.transform(), (req, res, next) => { + + req.schoolTable = req.result; + console.log(req.schoolTable) + console.log("AAA"); + if (req.filter.min_year <= 2018 && req.filter.max_year <= 2018) { + let aux_employees = matchQueries(req.allEmployees, req.allTeacher); + req.result = aux_employees; + } else if (req.filter.min_year >= 2019 && req.filter.max_year >= 2019) { + req.result = req.schoolTable; + } else if (req.filter.min_year <= 2018 && req.filter.max_year >= 2019) { + let aux_employees = matchQueries(req.allEmployees, req.allTeacher); + req.result = aux_employees.concat(req.schoolTable); + } next(); }, response('employees')); -- GitLab From 5f0240cfb192313f0e2097bb1c9c9f196905c6a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Wed, 20 May 2020 09:54:05 -0300 Subject: [PATCH 13/53] Add micro and macro regions dims,filters --- src/libs/routes/city.js | 20 ++++++++++++++++ src/libs/routes/enrollment.js | 30 ++++++++++++++++++++++++ src/libs/routes/school.js | 30 ++++++++++++++++++++++++ src/libs/routes/schoolLocation.js | 31 +++++++++++++++++++++++++ src/libs/routes/teacher.js | 30 ++++++++++++++++++++++++ src/libs/routes/universityEnrollment.js | 30 ++++++++++++++++++++++++ 6 files changed, 171 insertions(+) diff --git a/src/libs/routes/city.js b/src/libs/routes/city.js index 42494878..6714206d 100644 --- a/src/libs/routes/city.js +++ b/src/libs/routes/city.js @@ -69,6 +69,26 @@ rqf.addField({ foreign: 'estado_id', foreignTable: 'municipio' } +}).addValue({ + name: 'mesoregion', + table: 'municipio', + tableField: ['nome_mesorregiao', 'mesorregiao_id'], + resultField: ['mesoregion_name', 'mesoregion_id'], + where: { + relation: '=', + type: 'integer', + field: 'mesorregiao_id', + } +}).addValue({ + name: 'microregion', + table: 'municipio', + tableField: ['nome_microrregiao', 'microrregiao_id'], + resultField: ['microregion_name', 'microregion_id'], + where: { + relation: '=', + type: 'integer', + field: 'microrregiao_id', + } }).addField({ name: 'search', field: false, diff --git a/src/libs/routes/enrollment.js b/src/libs/routes/enrollment.js index 87083fcf..1ca90dbf 100644 --- a/src/libs/routes/enrollment.js +++ b/src/libs/routes/enrollment.js @@ -341,6 +341,36 @@ rqf.addField({ foreign: 'regiao_id', foreignTable: 'matricula' } +}).addValue({ + name: 'mesoregion', + table: 'municipio', + tableField: ['nome_mesorregiao', 'mesorregiao_id'], + resultField: ['mesoregion_name', 'mesoregion_id'], + where: { + relation: '=', + type: 'integer', + field: 'municipio_id', + }, + join: { + primary: 'id', + foreign: 'municipio_id', + foreignTable: '@' + } +}).addValue({ + name: 'microregion', + table: 'municipio', + tableField: ['nome_microrregiao', 'microrregiao_id'], + resultField: ['microregion_name', 'microregion_id'], + where: { + relation: '=', + type: 'integer', + field: 'municipio_id', + }, + join: { + primary: 'id', + foreign: 'municipio_id', + foreignTable: '@' + } }).addValueToField({ name: 'state', table: 'estado', diff --git a/src/libs/routes/school.js b/src/libs/routes/school.js index e430ff42..991b6696 100644 --- a/src/libs/routes/school.js +++ b/src/libs/routes/school.js @@ -345,6 +345,36 @@ rqfCount.addField({ foreign: 'estado_id', foreignTable: 'escola' } +}).addValue({ + name: 'mesoregion', + table: 'municipio', + tableField: ['nome_mesorregiao', 'mesorregiao_id'], + resultField: ['mesoregion_name', 'mesoregion_id'], + where: { + relation: '=', + type: 'integer', + field: 'municipio_id', + }, + join: { + primary: 'id', + foreign: 'municipio_id', + foreignTable: '@' + } +}).addValue({ + name: 'microregion', + table: 'municipio', + tableField: ['nome_microrregiao', 'microrregiao_id'], + resultField: ['microregion_name', 'microregion_id'], + where: { + relation: '=', + type: 'integer', + field: 'municipio_id', + }, + join: { + primary: 'id', + foreign: 'municipio_id', + foreignTable: '@' + } }).addValue({ name: 'region', table: 'regiao', diff --git a/src/libs/routes/schoolLocation.js b/src/libs/routes/schoolLocation.js index b18464bf..9b5309bb 100644 --- a/src/libs/routes/schoolLocation.js +++ b/src/libs/routes/schoolLocation.js @@ -45,6 +45,36 @@ rqf.addField({ type: 'integer', field: 'id' } +}).addValue({ + name: 'mesoregion', + table: 'municipio', + tableField: ['nome_mesorregiao', 'mesorregiao_id'], + resultField: ['mesoregion_name', 'mesoregion_id'], + where: { + relation: '=', + type: 'integer', + field: 'municipio_id', + }, + join: { + primary: 'id', + foreign: 'municipio_id', + foreignTable: '@' + } +}).addValue({ + name: 'microregion', + table: 'municipio', + tableField: ['nome_microrregiao', 'microrregiao_id'], + resultField: ['microregion_name', 'microregion_id'], + where: { + relation: '=', + type: 'integer', + field: 'municipio_id', + }, + join: { + primary: 'id', + foreign: 'municipio_id', + foreignTable: '@' + } }).addValueToField({ name: 'city', table: 'municipio', @@ -75,6 +105,7 @@ rqf.addField({ schoolLocationApp.get('/', rqf.parse(), (req, res, next) => { req.dims.city=true; req.dims.school=true; + req.dims.mesoregion=true; req.sql.from('localizacao_escolas') .field("'Brasil'", 'name') diff --git a/src/libs/routes/teacher.js b/src/libs/routes/teacher.js index 59d6f8db..a1fb24f3 100644 --- a/src/libs/routes/teacher.js +++ b/src/libs/routes/teacher.js @@ -265,6 +265,36 @@ rqf.addField({ foreign: 'escola_regiao_id', foreignTable: 'docente' } +}).addValue({ + name: 'mesoregion', + table: 'municipio', + tableField: ['nome_mesorregiao', 'mesorregiao_id'], + resultField: ['mesoregion_name', 'mesoregion_id'], + where: { + relation: '=', + type: 'integer', + field: 'escola_municipio_id', + }, + join: { + primary: 'id', + foreign: 'escola_municipio_id', + foreignTable: '@' + } +}).addValue({ + name: 'microregion', + table: 'municipio', + tableField: ['nome_microrregiao', 'microrregiao_id'], + resultField: ['microregion_name', 'microregion_id'], + where: { + relation: '=', + type: 'integer', + field: 'escola_municipio_id', + }, + join: { + primary: 'id', + foreign: 'escola_municipio_id', + foreignTable: '@' + } }).addValue({ name: 'state', table: 'estado', diff --git a/src/libs/routes/universityEnrollment.js b/src/libs/routes/universityEnrollment.js index a618a7be..a6d2ba44 100644 --- a/src/libs/routes/universityEnrollment.js +++ b/src/libs/routes/universityEnrollment.js @@ -285,6 +285,36 @@ rqf.addField({ foreign: 'cod_municipio_ies', foreignTable: '@' } +}).addValue({ + name: 'mesoregion', + table: 'municipio', + tableField: ['nome_mesorregiao', 'mesorregiao_id'], + resultField: ['mesoregion_name', 'mesoregion_id'], + where: { + relation: '=', + type: 'integer', + field: 'cod_municipio_ies' + }, + join: { + primary: 'id', + foreign: 'cod_municipio_ies', + foreignTable: '@' + } +}).addValue({ + name: 'microregion', + table: 'municipio', + tableField: ['nome_microrregiao', 'microrregiao_id'], + resultField: ['microregion_name', 'microregion_id'], + where: { + relation: '=', + type: 'integer', + field: 'cod_municipio_ies', + }, + join: { + primary: 'id', + foreign: 'cod_municipio_ies', + foreignTable: '@' + } }).addValue({ name: 'region', table: 'regiao', -- GitLab From 122a433c83fe37cdc29ee9f64270ba362a845fbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Wed, 20 May 2020 09:59:36 -0300 Subject: [PATCH 14/53] Add micro and macro regions dims,filters --- src/libs/routes/schoolLocation.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libs/routes/schoolLocation.js b/src/libs/routes/schoolLocation.js index 9b5309bb..2bc37ea7 100644 --- a/src/libs/routes/schoolLocation.js +++ b/src/libs/routes/schoolLocation.js @@ -106,6 +106,7 @@ schoolLocationApp.get('/', rqf.parse(), (req, res, next) => { req.dims.city=true; req.dims.school=true; req.dims.mesoregion=true; + req.dims.microregion=true; req.sql.from('localizacao_escolas') .field("'Brasil'", 'name') -- GitLab From 92b9b0dc3b38bff558bf966c19fc06a1676a7f95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Wed, 20 May 2020 11:42:35 -0300 Subject: [PATCH 15/53] Add mesoregion and microregion routes --- src/libs/routes/api.js | 7 +++- src/libs/routes/city.js | 24 ++--------- src/libs/routes/mesoregion.js | 76 ++++++++++++++++++++++++++++++++++ src/libs/routes/microregion.js | 76 ++++++++++++++++++++++++++++++++++ 4 files changed, 161 insertions(+), 22 deletions(-) create mode 100644 src/libs/routes/mesoregion.js create mode 100644 src/libs/routes/microregion.js diff --git a/src/libs/routes/api.js b/src/libs/routes/api.js index bc8da67c..86333d7d 100644 --- a/src/libs/routes/api.js +++ b/src/libs/routes/api.js @@ -118,6 +118,9 @@ const educationalBudget = require(`${libs}/routes/educationalBudget`); const schoolLocation = require(`${libs}/routes/schoolLocation`); +const microregion = require(`${libs}/routes/microregion`); + +const mesoregion = require(`${libs}/routes/mesoregion`); api.get('/', (req, res) => { res.json({ msg: 'SimCAQ API is running' }); @@ -168,5 +171,7 @@ api.use('/university_enrollment', universityEnrollment); api.use('/university', university); api.use('/university_teacher', universityTeacher); api.use('/course_count', courseCount); -api.use('/school_location', schoolLocation) +api.use('/school_location', schoolLocation); +api.use('/mesoregion', mesoregion); +api.use('/microregion', microregion); module.exports = api; diff --git a/src/libs/routes/city.js b/src/libs/routes/city.js index 6714206d..ef28500f 100644 --- a/src/libs/routes/city.js +++ b/src/libs/routes/city.js @@ -69,26 +69,6 @@ rqf.addField({ foreign: 'estado_id', foreignTable: 'municipio' } -}).addValue({ - name: 'mesoregion', - table: 'municipio', - tableField: ['nome_mesorregiao', 'mesorregiao_id'], - resultField: ['mesoregion_name', 'mesoregion_id'], - where: { - relation: '=', - type: 'integer', - field: 'mesorregiao_id', - } -}).addValue({ - name: 'microregion', - table: 'municipio', - tableField: ['nome_microrregiao', 'microrregiao_id'], - resultField: ['microregion_name', 'microregion_id'], - where: { - relation: '=', - type: 'integer', - field: 'microrregiao_id', - } }).addField({ name: 'search', field: false, @@ -111,7 +91,9 @@ cityApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('municipio.id') .field('municipio.estado_id', 'state_id') .field('municipio.longitude', 'longitude') - .field('municipio.latitude', 'latitude'); + .field('municipio.latitude', 'latitude') + .field('municipio.mesorregiao_id', 'mesoregion_id') + .field('municipio.microrregiao_id', 'microregion_id'); next(); }, query, response('city')); diff --git a/src/libs/routes/mesoregion.js b/src/libs/routes/mesoregion.js new file mode 100644 index 00000000..1180f8ca --- /dev/null +++ b/src/libs/routes/mesoregion.js @@ -0,0 +1,76 @@ +/* +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/>. +*/ + +const express = require('express'); + +const mesoregion = express.Router(); + +const libs = `${process.cwd()}/libs`; + +const squel = require('squel'); + +const query = require(`${libs}/middlewares/query`).query; + +const response = require(`${libs}/middlewares/response`); + +const ReqQueryFields = require(`${libs}/middlewares/reqQueryFields`); + +const config = require(`${libs}/config`); + +const cache = require('apicache').options({ debug: config.debug, statusCodes: {include: [200]} }).middleware; + +let rqf = new ReqQueryFields(); + +mesoregionApp.use(cache('15 day')); + +rqf.addField({ + name: 'filter', + field: false, + where: true +}).addValue({ + name: 'state', + table: 'estado', + tableField: ['nome', 'id'], + resultField: ['state_name', 'state_id'], + where: { + relation: '=', + type: 'integer', + field: 'estado_id', + table: 'municipio' + }, + join: { + primary: 'id', + foreign: 'estado_id', + foreignTable: 'municipio' + } +}); + +mesoregionApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { + req.sql.from('municipio') + .field('municipio.nome_mesorregiao', 'name') + .field('municipio.mesorregiao_id') + .field('municipio.estado_id', 'state_id') + .group('municipio.nome_mesorregiao') + .group('municipio.mesorregiao_id') + .group('municipio.estado_id') + next(); +}, query, response('city')); + +module.exports = mesoregionApp; diff --git a/src/libs/routes/microregion.js b/src/libs/routes/microregion.js new file mode 100644 index 00000000..a7de2511 --- /dev/null +++ b/src/libs/routes/microregion.js @@ -0,0 +1,76 @@ +/* +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/>. +*/ + +const express = require('express'); + +const microregion = express.Router(); + +const libs = `${process.cwd()}/libs`; + +const squel = require('squel'); + +const query = require(`${libs}/middlewares/query`).query; + +const response = require(`${libs}/middlewares/response`); + +const ReqQueryFields = require(`${libs}/middlewares/reqQueryFields`); + +const config = require(`${libs}/config`); + +const cache = require('apicache').options({ debug: config.debug, statusCodes: {include: [200]} }).middleware; + +let rqf = new ReqQueryFields(); + +microregionApp.use(cache('15 day')); + +rqf.addField({ + name: 'filter', + field: false, + where: true +}).addValue({ + name: 'state', + table: 'estado', + tableField: ['nome', 'id'], + resultField: ['state_name', 'state_id'], + where: { + relation: '=', + type: 'integer', + field: 'estado_id', + table: 'municipio' + }, + join: { + primary: 'id', + foreign: 'estado_id', + foreignTable: 'municipio' + } +}); + +microregionApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { + req.sql.from('municipio') + .field('municipio.nome_microrregiao', 'name') + .field('municipio.microrregiao_id') + .field('municipio.estado_id', 'state_id') + .group('municipio.nome_microrregiao') + .group('municipio.microrregiao_id') + .group('municipio.estado_id') + next(); +}, query, response('city')); + +module.exports = microregionApp; -- GitLab From 5c1ad6fa09eb1e01e4178f15525cf59ed8fbbe83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Wed, 20 May 2020 12:03:18 -0300 Subject: [PATCH 16/53] Small fix to mesoregion, microregion routes --- src/libs/routes/api.js | 4 ++-- src/libs/routes/mesoregion.js | 6 +++--- src/libs/routes/microregion.js | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/libs/routes/api.js b/src/libs/routes/api.js index 86333d7d..45bdea87 100644 --- a/src/libs/routes/api.js +++ b/src/libs/routes/api.js @@ -118,10 +118,10 @@ const educationalBudget = require(`${libs}/routes/educationalBudget`); const schoolLocation = require(`${libs}/routes/schoolLocation`); -const microregion = require(`${libs}/routes/microregion`); - const mesoregion = require(`${libs}/routes/mesoregion`); +const microregion = require(`${libs}/routes/microregion`); + api.get('/', (req, res) => { res.json({ msg: 'SimCAQ API is running' }); }); diff --git a/src/libs/routes/mesoregion.js b/src/libs/routes/mesoregion.js index 1180f8ca..9e62d0ef 100644 --- a/src/libs/routes/mesoregion.js +++ b/src/libs/routes/mesoregion.js @@ -20,7 +20,7 @@ along with simcaq-node. If not, see <https://www.gnu.org/licenses/>. const express = require('express'); -const mesoregion = express.Router(); +const mesoregionApp = express.Router(); const libs = `${process.cwd()}/libs`; @@ -69,8 +69,8 @@ mesoregionApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('municipio.estado_id', 'state_id') .group('municipio.nome_mesorregiao') .group('municipio.mesorregiao_id') - .group('municipio.estado_id') + .group('municipio.estado_id'); next(); -}, query, response('city')); +}, query, response('mesoregion')); module.exports = mesoregionApp; diff --git a/src/libs/routes/microregion.js b/src/libs/routes/microregion.js index a7de2511..2816ab42 100644 --- a/src/libs/routes/microregion.js +++ b/src/libs/routes/microregion.js @@ -20,7 +20,7 @@ along with simcaq-node. If not, see <https://www.gnu.org/licenses/>. const express = require('express'); -const microregion = express.Router(); +const microregionApp = express.Router(); const libs = `${process.cwd()}/libs`; @@ -69,8 +69,8 @@ microregionApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .field('municipio.estado_id', 'state_id') .group('municipio.nome_microrregiao') .group('municipio.microrregiao_id') - .group('municipio.estado_id') + .group('municipio.estado_id'); next(); -}, query, response('city')); +}, query, response('microregion')); module.exports = microregionApp; -- GitLab From b254bb4b05a90291e23222c06b56d065fefb51f7 Mon Sep 17 00:00:00 2001 From: Fernando Erd <fcerd15@inf.ufpr.br> Date: Thu, 21 May 2020 09:14:49 -0300 Subject: [PATCH 17/53] Change name in rural location --- src/libs/convert/ruralLocation.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/convert/ruralLocation.js b/src/libs/convert/ruralLocation.js index 7ff47d96..2e09f051 100644 --- a/src/libs/convert/ruralLocation.js +++ b/src/libs/convert/ruralLocation.js @@ -23,7 +23,7 @@ module.exports = function ruralLocation(id) { case 1: return 'Urbana'; case 2: - return 'Rural'; + return 'Rural sem especificação'; case 3: return 'Rural - Área de assentamento'; case 4: -- GitLab From b19d7d26e4e7a021bc0f2c362c0ba3bc6b30ea59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Thu, 21 May 2020 09:30:06 -0300 Subject: [PATCH 18/53] Add mesoregion field to microregion --- src/libs/routes/microregion.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libs/routes/microregion.js b/src/libs/routes/microregion.js index 2816ab42..ed95bf5b 100644 --- a/src/libs/routes/microregion.js +++ b/src/libs/routes/microregion.js @@ -66,9 +66,13 @@ microregionApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { req.sql.from('municipio') .field('municipio.nome_microrregiao', 'name') .field('municipio.microrregiao_id') + .field('municipio.nome_mesorregiao', 'name') + .field('municipio.mesorregiao_id') .field('municipio.estado_id', 'state_id') .group('municipio.nome_microrregiao') .group('municipio.microrregiao_id') + .group('municipio.nome_mesorregiao') + .group('municipio.mesorregiao_id') .group('municipio.estado_id'); next(); }, query, response('microregion')); -- GitLab From e4cb68ef9dad8e4a6bf9e9c4fcb82ff49ad91902 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Thu, 21 May 2020 09:36:02 -0300 Subject: [PATCH 19/53] Fix fields names --- src/libs/routes/mesoregion.js | 4 ++-- src/libs/routes/microregion.js | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/libs/routes/mesoregion.js b/src/libs/routes/mesoregion.js index 9e62d0ef..b321fa62 100644 --- a/src/libs/routes/mesoregion.js +++ b/src/libs/routes/mesoregion.js @@ -64,8 +64,8 @@ rqf.addField({ mesoregionApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { req.sql.from('municipio') - .field('municipio.nome_mesorregiao', 'name') - .field('municipio.mesorregiao_id') + .field('municipio.nome_mesorregiao', 'mesoregion_name') + .field('municipio.mesorregiao_id', 'mesoregion_id') .field('municipio.estado_id', 'state_id') .group('municipio.nome_mesorregiao') .group('municipio.mesorregiao_id') diff --git a/src/libs/routes/microregion.js b/src/libs/routes/microregion.js index ed95bf5b..a7a7b009 100644 --- a/src/libs/routes/microregion.js +++ b/src/libs/routes/microregion.js @@ -64,10 +64,10 @@ rqf.addField({ microregionApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { req.sql.from('municipio') - .field('municipio.nome_microrregiao', 'name') - .field('municipio.microrregiao_id') - .field('municipio.nome_mesorregiao', 'name') - .field('municipio.mesorregiao_id') + .field('municipio.nome_microrregiao', 'microregion_name') + .field('municipio.microrregiao_id', 'microregion_id') + .field('municipio.nome_mesorregiao', 'mesoregion_name') + .field('municipio.mesorregiao_id', 'mesoregion_id') .field('municipio.estado_id', 'state_id') .group('municipio.nome_microrregiao') .group('municipio.microrregiao_id') -- GitLab From c3ce5a0b932d27e1a2f1f5e85f1d3c85697039d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Thu, 21 May 2020 10:28:26 -0300 Subject: [PATCH 20/53] Fix mesoregion, microregion filters --- src/libs/routes/enrollment.js | 10 ++++++---- src/libs/routes/school.js | 10 ++++++---- src/libs/routes/schoolLocation.js | 10 ++++++---- src/libs/routes/teacher.js | 10 ++++++---- src/libs/routes/universityEnrollment.js | 10 ++++++---- 5 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/libs/routes/enrollment.js b/src/libs/routes/enrollment.js index 1ca90dbf..91b4fafe 100644 --- a/src/libs/routes/enrollment.js +++ b/src/libs/routes/enrollment.js @@ -349,12 +349,13 @@ rqf.addField({ where: { relation: '=', type: 'integer', - field: 'municipio_id', + field: 'mesorregiao_id', + table: 'municipio' }, join: { primary: 'id', foreign: 'municipio_id', - foreignTable: '@' + foreignTable: 'matricula' } }).addValue({ name: 'microregion', @@ -364,12 +365,13 @@ rqf.addField({ where: { relation: '=', type: 'integer', - field: 'municipio_id', + field: 'microrregiao_id', + table: 'municipio' }, join: { primary: 'id', foreign: 'municipio_id', - foreignTable: '@' + foreignTable: 'matricula' } }).addValueToField({ name: 'state', diff --git a/src/libs/routes/school.js b/src/libs/routes/school.js index 991b6696..d1f31701 100644 --- a/src/libs/routes/school.js +++ b/src/libs/routes/school.js @@ -353,12 +353,13 @@ rqfCount.addField({ where: { relation: '=', type: 'integer', - field: 'municipio_id', + field: 'mesorregiao_id', + table: 'municipio' }, join: { primary: 'id', foreign: 'municipio_id', - foreignTable: '@' + foreignTable: 'escola' } }).addValue({ name: 'microregion', @@ -368,12 +369,13 @@ rqfCount.addField({ where: { relation: '=', type: 'integer', - field: 'municipio_id', + field: 'microrregiao_id', + table: 'municipio' }, join: { primary: 'id', foreign: 'municipio_id', - foreignTable: '@' + foreignTable: 'escola' } }).addValue({ name: 'region', diff --git a/src/libs/routes/schoolLocation.js b/src/libs/routes/schoolLocation.js index 2bc37ea7..b37f0d1b 100644 --- a/src/libs/routes/schoolLocation.js +++ b/src/libs/routes/schoolLocation.js @@ -53,12 +53,13 @@ rqf.addField({ where: { relation: '=', type: 'integer', - field: 'municipio_id', + field: 'mesorregiao_id', + table: 'municipio' }, join: { primary: 'id', foreign: 'municipio_id', - foreignTable: '@' + foreignTable: 'localizacao_escolas' } }).addValue({ name: 'microregion', @@ -68,12 +69,13 @@ rqf.addField({ where: { relation: '=', type: 'integer', - field: 'municipio_id', + field: 'microrregiao_id', + table: 'municipio' }, join: { primary: 'id', foreign: 'municipio_id', - foreignTable: '@' + foreignTable: 'localizacao_escolas' } }).addValueToField({ name: 'city', diff --git a/src/libs/routes/teacher.js b/src/libs/routes/teacher.js index a1fb24f3..2b2037c4 100644 --- a/src/libs/routes/teacher.js +++ b/src/libs/routes/teacher.js @@ -273,12 +273,13 @@ rqf.addField({ where: { relation: '=', type: 'integer', - field: 'escola_municipio_id', + field: 'mesorregiao_id', + table: 'municipio' }, join: { primary: 'id', foreign: 'escola_municipio_id', - foreignTable: '@' + foreignTable: 'docente' } }).addValue({ name: 'microregion', @@ -288,12 +289,13 @@ rqf.addField({ where: { relation: '=', type: 'integer', - field: 'escola_municipio_id', + field: 'microrregiao_id', + table: 'municipio' }, join: { primary: 'id', foreign: 'escola_municipio_id', - foreignTable: '@' + foreignTable: 'docente' } }).addValue({ name: 'state', diff --git a/src/libs/routes/universityEnrollment.js b/src/libs/routes/universityEnrollment.js index a6d2ba44..748df1c4 100644 --- a/src/libs/routes/universityEnrollment.js +++ b/src/libs/routes/universityEnrollment.js @@ -293,12 +293,13 @@ rqf.addField({ where: { relation: '=', type: 'integer', - field: 'cod_municipio_ies' + field: 'mesorregiao_id', + table: 'municipio' }, join: { primary: 'id', foreign: 'cod_municipio_ies', - foreignTable: '@' + foreignTable: 'aluno_ens_superior' } }).addValue({ name: 'microregion', @@ -308,12 +309,13 @@ rqf.addField({ where: { relation: '=', type: 'integer', - field: 'cod_municipio_ies', + field: 'microrregiao_id', + table: 'municipio' }, join: { primary: 'id', foreign: 'cod_municipio_ies', - foreignTable: '@' + foreignTable: 'aluno_ens_superior' } }).addValue({ name: 'region', -- GitLab From 268614439eb053941abc1a9dcadc00c3a546e5a2 Mon Sep 17 00:00:00 2001 From: Victor Picussa <vp16@inf.ufpr.br> Date: Thu, 21 May 2020 10:48:44 -0300 Subject: [PATCH 21/53] Fix courses --- src/libs/routes/courseCount.js | 59 +++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 15 deletions(-) diff --git a/src/libs/routes/courseCount.js b/src/libs/routes/courseCount.js index 74ae6662..2e478626 100644 --- a/src/libs/routes/courseCount.js +++ b/src/libs/routes/courseCount.js @@ -289,8 +289,8 @@ rqf.addField({ }).addValue({ name: 'localoffer', table: 'localoferta_ens_superior', - tableField: ['cod_ies', 'cod_local_oferta', 'nome'], - resultField: ['university_id', 'localoffer_id', 'localoffer_name'], + tableField: ['cod_local_oferta', 'nome'], + resultField: ['localoffer_id', 'localoffer_name'], where: { relation: '=', type: 'integer', @@ -487,35 +487,47 @@ rqf.addField({ }); courseCountApp.get('/', rqf.parse(), (req, res, next) => { - console.log(req) - if ("university" in req.dims) { - req.sql.from('curso_ens_superior') - .field('COUNT(curso_ens_superior.cod_curso)', 'total') + if (("state" in req.dims) || ("city" in req.dims) || ("region" in req.dims) || + ("state" in req.filter) || ("city" in req.filter) || ("region" in req.filter)) { + req.sql.from('curso_ens_superior') + .field('COUNT(DISTINCT curso_ens_superior.cod_curso)', 'total') .field("'Brasil'", 'name') - .field('curso_ens_superior.ano_censo', 'year') - .group('curso_ens_superior.cod_ies') + .field('curso_ens_superior.ano_censo') + .field('curso_ens_superior.ano_censo', 'year') .group('curso_ens_superior.ano_censo') - .order('curso_ens_superior.cod_ies') .order('curso_ens_superior.ano_censo') .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') .where('curso_ens_superior.cod_nivel_academico = 1'); } else if ("localoffer" in req.dims) { + if ("university" in req.dims) { + req.sql.from('curso_ens_superior') + .field('curso_ens_superior.ano_censo') + .field('COUNT(localoferta_ens_superior.cod_local_oferta)', 'total') + .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') + .where('curso_ens_superior.cod_nivel_academico = 1') + .group('curso_ens_superior.ano_censo') + .order('curso_ens_superior.ano_censo') + .order('localoferta_ens_superior.cod_local_oferta'); + + } else { req.sql.from('curso_ens_superior') .field('curso_ens_superior.ano_censo') .field('COUNT(localoferta_ens_superior.cod_local_oferta)', 'total') + .field('localoferta_ens_superior.cod_ies', 'university_id') .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') .where('curso_ens_superior.cod_nivel_academico = 1') .group('curso_ens_superior.ano_censo') .order('curso_ens_superior.ano_censo') .order('localoferta_ens_superior.cod_local_oferta'); - } else if (("state" in req.dims) || ("city" in req.dims) || ("region" in req.dims) || - ("state" in req.filter) || ("city" in req.filter) || ("region" in req.filter)) { - req.sql.from('curso_ens_superior') - .field('COUNT(DISTINCT curso_ens_superior.cod_curso)', 'total') + } + } else if ("university" in req.dims) { + req.sql.from('curso_ens_superior') + .field('COUNT(curso_ens_superior.cod_curso)', 'total') .field("'Brasil'", 'name') .field('curso_ens_superior.ano_censo') - .field('curso_ens_superior.ano_censo', 'year') + .group('curso_ens_superior.cod_ies') .group('curso_ens_superior.ano_censo') + .order('curso_ens_superior.cod_ies') .order('curso_ens_superior.ano_censo') .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') .where('curso_ens_superior.cod_nivel_academico = 1'); @@ -548,7 +560,8 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { .field('localoffer_id') .field('localoffer_name') .join(iesq, 'iq', 'iq.cod_ies=bq.university_id'); - } if ("city" in req.dims) { + } + if ("city" in req.dims) { let baseq = req.sql.clone() let cityq = squel.select() cityq.from('municipio') @@ -563,6 +576,22 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { .field('city_id') .join(cityq, 'cq', 'cq.id=bq.city_id'); } + if ("university" in req.dims) { + let baseq = req.sql.clone() + let iesq = squel.select() + + iesq.from('ies_ens_superior') + .field('ies_ens_superior.cod_ies') + .field('ies_ens_superior.nome_ies'); + + req.sql = squel.select().from(baseq, 'bq') + .field("'Brasil'", 'name') + .field('ano_censo', 'year') + .field('total') + .field('university_id') + .field('nome_ies', 'university_name') + .join(iesq, 'iq', 'iq.cod_ies=bq.university_id'); + } next(); }, query, id2str.transform(), addMissing(rqf), response('course_count')); -- GitLab From 7330e933b27872360914de37ecfc72e9ab153daa Mon Sep 17 00:00:00 2001 From: Victor Picussa <vp16@inf.ufpr.br> Date: Thu, 21 May 2020 11:14:33 -0300 Subject: [PATCH 22/53] Query group --- src/libs/routes/courseCount.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libs/routes/courseCount.js b/src/libs/routes/courseCount.js index 2e478626..28de65c5 100644 --- a/src/libs/routes/courseCount.js +++ b/src/libs/routes/courseCount.js @@ -517,6 +517,7 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') .where('curso_ens_superior.cod_nivel_academico = 1') .group('curso_ens_superior.ano_censo') + .group('localoferta_ens_superior.cod_ies') .order('curso_ens_superior.ano_censo') .order('localoferta_ens_superior.cod_local_oferta'); } -- GitLab From 70648a9e0e883aea01a46c2363d458097657e981 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Fri, 22 May 2020 09:22:39 -0300 Subject: [PATCH 23/53] Small change to mesoregion and microregion routes --- src/libs/routes/mesoregion.js | 4 ++-- src/libs/routes/microregion.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libs/routes/mesoregion.js b/src/libs/routes/mesoregion.js index b321fa62..0feb7627 100644 --- a/src/libs/routes/mesoregion.js +++ b/src/libs/routes/mesoregion.js @@ -64,8 +64,8 @@ rqf.addField({ mesoregionApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { req.sql.from('municipio') - .field('municipio.nome_mesorregiao', 'mesoregion_name') - .field('municipio.mesorregiao_id', 'mesoregion_id') + .field('municipio.nome_mesorregiao', 'name') + .field('municipio.mesorregiao_id', 'id') .field('municipio.estado_id', 'state_id') .group('municipio.nome_mesorregiao') .group('municipio.mesorregiao_id') diff --git a/src/libs/routes/microregion.js b/src/libs/routes/microregion.js index a7a7b009..0b9b0e1a 100644 --- a/src/libs/routes/microregion.js +++ b/src/libs/routes/microregion.js @@ -64,8 +64,8 @@ rqf.addField({ microregionApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { req.sql.from('municipio') - .field('municipio.nome_microrregiao', 'microregion_name') - .field('municipio.microrregiao_id', 'microregion_id') + .field('municipio.nome_microrregiao', 'name') + .field('municipio.microrregiao_id', 'id') .field('municipio.nome_mesorregiao', 'mesoregion_name') .field('municipio.mesorregiao_id', 'mesoregion_id') .field('municipio.estado_id', 'state_id') -- GitLab From cbfc33bb4713f03bbb4814140ab7bcc9a14a783b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Fri, 22 May 2020 09:32:31 -0300 Subject: [PATCH 24/53] Small change to schoolLocation route --- src/libs/routes/schoolLocation.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libs/routes/schoolLocation.js b/src/libs/routes/schoolLocation.js index b37f0d1b..a38b019a 100644 --- a/src/libs/routes/schoolLocation.js +++ b/src/libs/routes/schoolLocation.js @@ -111,9 +111,12 @@ schoolLocationApp.get('/', rqf.parse(), (req, res, next) => { req.dims.microregion=true; req.sql.from('localizacao_escolas') - .field("'Brasil'", 'name') + .field('localizacao_escolas.nome', 'name') + .field('localizacao_escolas.id', 'id') .field('localizacao_escolas.latitude', 'latitude') .field('localizacao_escolas.longitude', 'longitude') + .group('localizacao_escolas.nome') + .group('localizacao_escolas.id') .group('localizacao_escolas.latitude') .group('localizacao_escolas.longitude'); next(); -- GitLab From 041c22bb520bcc707392147bf90108bb08d77b72 Mon Sep 17 00:00:00 2001 From: Fernando Erd <fcerd15@inf.ufpr.br> Date: Fri, 22 May 2020 09:46:21 -0300 Subject: [PATCH 25/53] Push to homologa function employees dims --- src/libs/routes/employees.js | 244 ++++++++++++++++++++++++++--------- 1 file changed, 182 insertions(+), 62 deletions(-) diff --git a/src/libs/routes/employees.js b/src/libs/routes/employees.js index 7d455e25..bd0d3b69 100644 --- a/src/libs/routes/employees.js +++ b/src/libs/routes/employees.js @@ -115,6 +115,18 @@ employeesApp.get('/rural_location', (req, res, next) => { next(); }, response('rural_location')); +employeesApp.get('/function', (req, res, next) => { + req.result = [ + {id: 1, name: "Urbana"}, + {id: 2, name: "Rural"}, + {id: 3, name: "Rural - Área de assentamento"}, + {id: 4, name: "Rural - Terra indígena"}, + {id: 5, name: "Rural - Área remanescente de quilombos"}, + {id: 6, name: "Rural - Unidade de uso sustentável"} + ]; + next(); +}, response('function')); + rqfSchool.addField({ name: 'filter', field: false, @@ -243,6 +255,16 @@ rqfSchool.addField({ type: 'integer', field: 'localidade_area_rural' } +}).addValue({ + name: 'function', + table: '@', + tableField: 'a', + resultField: 'function_id', + where: { + relation: '=', + type: 'integer', + field: 'a' + } }).addValue({ name: 'min_year', table: '@', @@ -425,6 +447,65 @@ rqfTeacher.addField({ } }); +function formatFunction(queryOriginal,reqDims) { + delete reqDims.size; + delete reqDims.function; + let dims = Object.keys(reqDims); //se for = 0, apenas lidamos com a dimensao function. Se for = 1, lidamos com function mais a dimensao q esta nesse array. + console.log(dims) + let name = { + qtde_admin: "Administrativos", + qtde_servicos_gerais: "Serviços Gerais", + qtde_bibliotecario: "Bibliotecário", + qtde_saude: "Saúde", + qtde_coordenador: "Coordenador", + qtde_fono: "Fonoaudiólogo", + qtde_nutricionista: "Nutricionista", + qtde_psicologo: "Psicólogo", + qtde_alimentacao: "Alimentação", + qtde_pedagogia: "Pedagogia", + qtde_secretario: "Secretário", + qtde_seguranca: "Segurança", + qtde_monitores: "Monitores" + } + let resultObj = [] + //Nesse caso apenas precisamos acertar as dimensoes que o banco retorna, ou seja, criando um objeto para cada funcao de funcionario + if (dims.length == 0) { + queryOriginal.forEach((result) => { + Object.keys(result).forEach(function(key,index) { + if (key.includes("qtde")) { + let newObj = { + year: result["year"], + function_id: index, + function_name: name[key], + total: result[key] + } + resultObj.push(newObj); + } + }) + }) + } + //Nesse caso precisamos copiar o id e name da variavel que está na dimensão junto com funcionarios por função + else { + queryOriginal.forEach((result) => { + Object.keys(result).forEach(function(key,index) { + if (key.includes("qtde")) { + let newObj = { + year: result["year"], + function_id: index, + function_name: name[key], + total: result[key] + } + newObj[dims[0] + "_id"] = result[dims[0] + "_id"]; + newObj[dims[0] + "_name"] = result[dims[0] + "_name"]; + resultObj.push(newObj); + } + }) + }) + } + + return resultObj; + +} function matchQueries(queryTotal, queryPartial) { let match = []; @@ -456,9 +537,11 @@ function matchQueries(queryTotal, queryPartial) { if(objMatch) { newObj.total = result.total - objMatch.total; - newObj.total_employees = result.total; - newObj.total_teachers = objMatch.total - match.push(newObj); + if (newObj.total > 0) { + newObj.total_employees = result.total; + newObj.total_teachers = objMatch.total + match.push(newObj); + } } }); @@ -469,79 +552,116 @@ employeesApp.get('/', rqfSchool.parse(), (req, res, next) => { req.allEmployees = {} req.allTeacher = {} req.schoolTable = {} - - if ("school" in req.filter) { - req.sql.field('SUM(escola.num_funcionarios)', 'total') - .field("'Brasil'", 'name') - .field('escola.ano_censo', 'year') - .from('escola') - .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) AND (dependencia_adm_id = 2 OR dependencia_adm_id = 3 OR dependencia_adm_id = 4) AND (escola.id=' + req.filter.school + ')'); - delete req.filter.school; - } else { - req.sql.field('SUM(escola.num_funcionarios)', 'total') - .field("'Brasil'", 'name') - .field('escola.ano_censo', 'year') - .from('escola') - .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) AND (dependencia_adm_id = 2 OR dependencia_adm_id = 3 OR dependencia_adm_id = 4)'); - } + delete req.dims.function; + if ("school" in req.filter) { + req.sql.field('SUM(escola.num_funcionarios)', 'total') + .field("'Brasil'", 'name') + .field('escola.ano_censo', 'year') + .from('escola') + .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) AND (dependencia_adm_id = 2 OR dependencia_adm_id = 3 OR dependencia_adm_id = 4) AND (escola.id=' + req.filter.school + ')'); + delete req.filter.school; + } else { + req.sql.field('SUM(escola.num_funcionarios)', 'total') + .field("'Brasil'", 'name') + .field('escola.ano_censo', 'year') + .from('escola') + .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) AND (dependencia_adm_id = 2 OR dependencia_adm_id = 3 OR dependencia_adm_id = 4)'); + } next(); }, rqfSchool.build(), query, rqfSchool.parse(), id2str.transform(), (req, res, next) => { req.allEmployees = req.result; - req.resetSql(); - if ("school" in req.filter) { - req.sql.field('SUM(docente_por_escola.total_professores)', 'total') - .field("'Brasil'", 'name') - .field('docente_por_escola.ano_censo', 'year') - .from('docente_por_escola') - .join('escola', null, 'docente_por_escola.escola_id=escola.id AND docente_por_escola.ano_censo=escola.ano_censo') - .group('docente_por_escola.ano_censo') - .order('docente_por_escola.ano_censo') - .where('(docente_por_escola.dependencia_adm_id > 1) AND (docente_por_escola.escola_id=' + req.filter.school + ')'); - } else if ("school" in req.dims) { - req.sql.field('SUM(docente_por_escola.total_professores)', 'total') - .field("'Brasil'", 'name') - .field('docente_por_escola.ano_censo', 'year') - .field('escola.nome_escola', 'school_name') - .from('docente_por_escola') - .join('escola', null, 'docente_por_escola.escola_id=escola.id AND docente_por_escola.ano_censo=escola.ano_censo') - .group('docente_por_escola.ano_censo') - .order('docente_por_escola.ano_censo') - .where('(docente_por_escola.dependencia_adm_id > 1)'); - } else { - req.sql.field('SUM(docente_por_escola.total_professores)', 'total') - .field("'Brasil'", 'name') - .field('docente_por_escola.ano_censo', 'year') - .from('docente_por_escola') - .group('docente_por_escola.ano_censo') - .order('docente_por_escola.ano_censo') - .where('(docente_por_escola.dependencia_adm_id > 1)'); - } + req.resetSql(); + delete req.dims.function; + if ("school" in req.filter) { + req.sql.field('SUM(docente_por_escola.total_professores)', 'total') + .field("'Brasil'", 'name') + .field('docente_por_escola.ano_censo', 'year') + .from('docente_por_escola') + .join('escola', null, 'docente_por_escola.escola_id=escola.id AND docente_por_escola.ano_censo=escola.ano_censo') + .group('docente_por_escola.ano_censo') + .order('docente_por_escola.ano_censo') + .where('(docente_por_escola.dependencia_adm_id > 1) AND (docente_por_escola.escola_id=' + req.filter.school + ')'); + } else if ("school" in req.dims) { + req.sql.field('SUM(docente_por_escola.total_professores)', 'total') + .field("'Brasil'", 'name') + .field('docente_por_escola.ano_censo', 'year') + .field('escola.nome_escola', 'school_name') + .from('docente_por_escola') + .join('escola', null, 'docente_por_escola.escola_id=escola.id AND docente_por_escola.ano_censo=escola.ano_censo') + .group('docente_por_escola.ano_censo') + .order('docente_por_escola.ano_censo') + .where('(docente_por_escola.dependencia_adm_id > 1)'); + } else { + req.sql.field('SUM(docente_por_escola.total_professores)', 'total') + .field("'Brasil'", 'name') + .field('docente_por_escola.ano_censo', 'year') + .from('docente_por_escola') + .group('docente_por_escola.ano_censo') + .order('docente_por_escola.ano_censo') + .where('(docente_por_escola.dependencia_adm_id > 1)'); + } next(); }, rqfSchool.build(), query, rqfSchool.parse(), id2str.transform(), (req, res, next) => { req.allTeacher = req.result; + console.log("AAA"); + console.log("BBB"); + console.log("DEI UM RESET") req.resetSql(); - req.sql.field('SUM(CASE WHEN escola.qt_prof_admin = 88888 THEN 0 ELSE escola.qt_prof_admin END) + SUM(CASE WHEN escola.qtde_prof_servicos_gerais = 88888 THEN 0 ELSE escola.qtde_prof_servicos_gerais END) + SUM(CASE WHEN escola.qtde_prof_bibliotecario = 88888 THEN 0 ELSE escola.qtde_prof_bibliotecario END) + SUM(CASE WHEN escola.qtde_prof_saude = 88888 THEN 0 ELSE escola.qtde_prof_saude END) + SUM(CASE WHEN escola.qtde_prof_coordenador = 88888 THEN 0 ELSE escola.qtde_prof_coordenador END) + SUM(CASE WHEN escola.qtde_prof_fono = 88888 THEN 0 ELSE escola.qtde_prof_fono END) + SUM(CASE WHEN escola.qtde_prof_nutricionista = 88888 THEN 0 ELSE escola.qtde_prof_nutricionista END) + SUM(CASE WHEN escola.qtde_prof_psicologo = 88888 THEN 0 ELSE escola.qtde_prof_psicologo END) + SUM(CASE WHEN escola.qtde_prof_alimentacao = 88888 THEN 0 ELSE escola.qtde_prof_alimentacao END) + SUM(CASE WHEN escola.qtde_prof_pedagogia = 88888 THEN 0 ELSE escola.qtde_prof_pedagogia END) + SUM(CASE WHEN escola.qtde_prof_secretario = 88888 THEN 0 ELSE escola.qtde_prof_secretario END) + SUM(CASE WHEN escola.qtde_prof_seguranca = 88888 THEN 0 ELSE escola.qtde_prof_seguranca END) + SUM(CASE WHEN escola.qtde_prof_monitores = 88888 THEN 0 ELSE escola.qtde_prof_monitores END)', 'total') - .field("'Brasil'", 'name') - .field('escola.ano_censo', 'year') - .from('escola') - .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) AND (escola.dependencia_adm_id = 2 OR escola.dependencia_adm_id = 3 OR escola.dependencia_adm_id = 4) and ano_censo >= 2019'); + console.log("VOU PRINTAR O REQ DIMS") + console.log(req.dims); + console.log(req.filter); + if ("function" in req.dims) { + console.log("TO NO IF"); + req.sql.field('SUM(CASE WHEN escola.qt_prof_admin = 88888 THEN 0 ELSE escola.qt_prof_admin END)', 'qtde_admin') + .field('SUM(CASE WHEN escola.qtde_prof_servicos_gerais = 88888 THEN 0 ELSE escola.qtde_prof_servicos_gerais END) AS qtde_servicos_gerais') + .field('SUM(CASE WHEN escola.qtde_prof_bibliotecario = 88888 THEN 0 ELSE escola.qtde_prof_bibliotecario END)', 'qtde_bibliotecario') + .field('SUM(CASE WHEN escola.qtde_prof_saude = 88888 THEN 0 ELSE escola.qtde_prof_saude END)','qtde_saude') + .field('SUM(CASE WHEN escola.qtde_prof_coordenador = 88888 THEN 0 ELSE escola.qtde_prof_coordenador END)','qtde_coordenador') + .field('SUM(CASE WHEN escola.qtde_prof_fono = 88888 THEN 0 ELSE escola.qtde_prof_fono END)','qtde_fono') + .field('SUM(CASE WHEN escola.qtde_prof_nutricionista = 88888 THEN 0 ELSE escola.qtde_prof_nutricionista END)', 'qtde_nutricionista') + .field('SUM(CASE WHEN escola.qtde_prof_psicologo = 88888 THEN 0 ELSE escola.qtde_prof_psicologo END)', 'qtde_psicologo') + .field('SUM(CASE WHEN escola.qtde_prof_alimentacao = 88888 THEN 0 ELSE escola.qtde_prof_alimentacao END)','qtde_alimentacao') + .field('SUM(CASE WHEN escola.qtde_prof_pedagogia = 88888 THEN 0 ELSE escola.qtde_prof_pedagogia END)', 'qtde_pedagogia') + .field('SUM(CASE WHEN escola.qtde_prof_secretario = 88888 THEN 0 ELSE escola.qtde_prof_secretario END)','qtde_secretario') + .field('SUM(CASE WHEN escola.qtde_prof_seguranca = 88888 THEN 0 ELSE escola.qtde_prof_seguranca END)','qtde_seguranca') + .field('SUM(CASE WHEN escola.qtde_prof_monitores = 88888 THEN 0 ELSE escola.qtde_prof_monitores END)', 'qtde_monitores') + .field("'Brasil'", 'name') + .field('escola.ano_censo', 'year') + .from('escola') + .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) AND (escola.dependencia_adm_id = 2 OR escola.dependencia_adm_id = 3 OR escola.dependencia_adm_id = 4) and ano_censo >= 2019'); + delete req.dims.function; + } else { + console.log("AAA to no if") + req.sql.field('SUM(CASE WHEN escola.qt_prof_admin = 88888 THEN 0 ELSE escola.qt_prof_admin END) + SUM(CASE WHEN escola.qtde_prof_servicos_gerais = 88888 THEN 0 ELSE escola.qtde_prof_servicos_gerais END) + SUM(CASE WHEN escola.qtde_prof_bibliotecario = 88888 THEN 0 ELSE escola.qtde_prof_bibliotecario END) + SUM(CASE WHEN escola.qtde_prof_saude = 88888 THEN 0 ELSE escola.qtde_prof_saude END) + SUM(CASE WHEN escola.qtde_prof_coordenador = 88888 THEN 0 ELSE escola.qtde_prof_coordenador END) + SUM(CASE WHEN escola.qtde_prof_fono = 88888 THEN 0 ELSE escola.qtde_prof_fono END) + SUM(CASE WHEN escola.qtde_prof_nutricionista = 88888 THEN 0 ELSE escola.qtde_prof_nutricionista END) + SUM(CASE WHEN escola.qtde_prof_psicologo = 88888 THEN 0 ELSE escola.qtde_prof_psicologo END) + SUM(CASE WHEN escola.qtde_prof_alimentacao = 88888 THEN 0 ELSE escola.qtde_prof_alimentacao END) + SUM(CASE WHEN escola.qtde_prof_pedagogia = 88888 THEN 0 ELSE escola.qtde_prof_pedagogia END) + SUM(CASE WHEN escola.qtde_prof_secretario = 88888 THEN 0 ELSE escola.qtde_prof_secretario END) + SUM(CASE WHEN escola.qtde_prof_seguranca = 88888 THEN 0 ELSE escola.qtde_prof_seguranca END) + SUM(CASE WHEN escola.qtde_prof_monitores = 88888 THEN 0 ELSE escola.qtde_prof_monitores END)', 'total') + .field("'Brasil'", 'name') + .field('escola.ano_censo', 'year') + .from('escola') + .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) AND (escola.dependencia_adm_id = 2 OR escola.dependencia_adm_id = 3 OR escola.dependencia_adm_id = 4) and ano_censo >= 2019'); + } next(); -}, rqfSchool.build(), query, id2str.transform(), (req, res, next) => { +}, rqfSchool.build(), query, rqfSchool.parse(), id2str.transform(), (req, res, next) => { + + console.log(req.dims) + if ("function" in req.dims) { + let aux_employes = formatFunction(req.result, req.dims); + req.schoolTable = aux_employes; + } else { + req.schoolTable = req.result + } - req.schoolTable = req.result; - console.log(req.schoolTable) - console.log("AAA"); if (req.filter.min_year <= 2018 && req.filter.max_year <= 2018) { let aux_employees = matchQueries(req.allEmployees, req.allTeacher); req.result = aux_employees; -- GitLab From 3bc9b701456c59ca42398ee84febf1f870b6adb4 Mon Sep 17 00:00:00 2001 From: Fernando Erd <fcerd15@inf.ufpr.br> Date: Wed, 27 May 2020 10:37:58 -0300 Subject: [PATCH 26/53] Change employees to new table --- src/libs/routes/employees.js | 73 ++++-------------------------------- 1 file changed, 8 insertions(+), 65 deletions(-) diff --git a/src/libs/routes/employees.js b/src/libs/routes/employees.js index bd0d3b69..abaa191b 100644 --- a/src/libs/routes/employees.js +++ b/src/libs/routes/employees.js @@ -549,77 +549,22 @@ function matchQueries(queryTotal, queryPartial) { } employeesApp.get('/', rqfSchool.parse(), (req, res, next) => { - req.allEmployees = {} req.allTeacher = {} req.schoolTable = {} delete req.dims.function; - if ("school" in req.filter) { - req.sql.field('SUM(escola.num_funcionarios)', 'total') - .field("'Brasil'", 'name') - .field('escola.ano_censo', 'year') - .from('escola') - .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) AND (dependencia_adm_id = 2 OR dependencia_adm_id = 3 OR dependencia_adm_id = 4) AND (escola.id=' + req.filter.school + ')'); - delete req.filter.school; - } else { - req.sql.field('SUM(escola.num_funcionarios)', 'total') - .field("'Brasil'", 'name') - .field('escola.ano_censo', 'year') - .from('escola') - .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) AND (dependencia_adm_id = 2 OR dependencia_adm_id = 3 OR dependencia_adm_id = 4)'); - } - next(); -}, rqfSchool.build(), query, rqfSchool.parse(), id2str.transform(), (req, res, next) => { - - req.allEmployees = req.result; - req.resetSql(); - delete req.dims.function; - if ("school" in req.filter) { - req.sql.field('SUM(docente_por_escola.total_professores)', 'total') - .field("'Brasil'", 'name') - .field('docente_por_escola.ano_censo', 'year') - .from('docente_por_escola') - .join('escola', null, 'docente_por_escola.escola_id=escola.id AND docente_por_escola.ano_censo=escola.ano_censo') - .group('docente_por_escola.ano_censo') - .order('docente_por_escola.ano_censo') - .where('(docente_por_escola.dependencia_adm_id > 1) AND (docente_por_escola.escola_id=' + req.filter.school + ')'); - } else if ("school" in req.dims) { - req.sql.field('SUM(docente_por_escola.total_professores)', 'total') - .field("'Brasil'", 'name') - .field('docente_por_escola.ano_censo', 'year') - .field('escola.nome_escola', 'school_name') - .from('docente_por_escola') - .join('escola', null, 'docente_por_escola.escola_id=escola.id AND docente_por_escola.ano_censo=escola.ano_censo') - .group('docente_por_escola.ano_censo') - .order('docente_por_escola.ano_censo') - .where('(docente_por_escola.dependencia_adm_id > 1)'); - } else { - req.sql.field('SUM(docente_por_escola.total_professores)', 'total') - .field("'Brasil'", 'name') - .field('docente_por_escola.ano_censo', 'year') - .from('docente_por_escola') - .group('docente_por_escola.ano_censo') - .order('docente_por_escola.ano_censo') - .where('(docente_por_escola.dependencia_adm_id > 1)'); - } + req.sql.field('SUM(funcionarios_por_escola.total)', 'total') + .field('funcionarios_por_escola.ano_censo', 'year') + .from('funcionarios_por_escola') + .group('funcionarios_por_escola.ano_censo') + .order('funcionarios_por_escola.ano_censo') next(); }, rqfSchool.build(), query, rqfSchool.parse(), id2str.transform(), (req, res, next) => { - + req.allTeacher = req.result; - console.log("AAA"); - console.log("BBB"); - console.log("DEI UM RESET") req.resetSql(); - console.log("VOU PRINTAR O REQ DIMS") - console.log(req.dims); - console.log(req.filter); if ("function" in req.dims) { - console.log("TO NO IF"); req.sql.field('SUM(CASE WHEN escola.qt_prof_admin = 88888 THEN 0 ELSE escola.qt_prof_admin END)', 'qtde_admin') .field('SUM(CASE WHEN escola.qtde_prof_servicos_gerais = 88888 THEN 0 ELSE escola.qtde_prof_servicos_gerais END) AS qtde_servicos_gerais') .field('SUM(CASE WHEN escola.qtde_prof_bibliotecario = 88888 THEN 0 ELSE escola.qtde_prof_bibliotecario END)', 'qtde_bibliotecario') @@ -641,7 +586,6 @@ employeesApp.get('/', rqfSchool.parse(), (req, res, next) => { .where('(escola.situacao_funcionamento_pareada = 1) AND (escola.ensino_regular = 1 OR escola.ensino_eja = 1 OR escola.educacao_profissional = 1) AND (escola.dependencia_adm_id = 2 OR escola.dependencia_adm_id = 3 OR escola.dependencia_adm_id = 4) and ano_censo >= 2019'); delete req.dims.function; } else { - console.log("AAA to no if") req.sql.field('SUM(CASE WHEN escola.qt_prof_admin = 88888 THEN 0 ELSE escola.qt_prof_admin END) + SUM(CASE WHEN escola.qtde_prof_servicos_gerais = 88888 THEN 0 ELSE escola.qtde_prof_servicos_gerais END) + SUM(CASE WHEN escola.qtde_prof_bibliotecario = 88888 THEN 0 ELSE escola.qtde_prof_bibliotecario END) + SUM(CASE WHEN escola.qtde_prof_saude = 88888 THEN 0 ELSE escola.qtde_prof_saude END) + SUM(CASE WHEN escola.qtde_prof_coordenador = 88888 THEN 0 ELSE escola.qtde_prof_coordenador END) + SUM(CASE WHEN escola.qtde_prof_fono = 88888 THEN 0 ELSE escola.qtde_prof_fono END) + SUM(CASE WHEN escola.qtde_prof_nutricionista = 88888 THEN 0 ELSE escola.qtde_prof_nutricionista END) + SUM(CASE WHEN escola.qtde_prof_psicologo = 88888 THEN 0 ELSE escola.qtde_prof_psicologo END) + SUM(CASE WHEN escola.qtde_prof_alimentacao = 88888 THEN 0 ELSE escola.qtde_prof_alimentacao END) + SUM(CASE WHEN escola.qtde_prof_pedagogia = 88888 THEN 0 ELSE escola.qtde_prof_pedagogia END) + SUM(CASE WHEN escola.qtde_prof_secretario = 88888 THEN 0 ELSE escola.qtde_prof_secretario END) + SUM(CASE WHEN escola.qtde_prof_seguranca = 88888 THEN 0 ELSE escola.qtde_prof_seguranca END) + SUM(CASE WHEN escola.qtde_prof_monitores = 88888 THEN 0 ELSE escola.qtde_prof_monitores END)', 'total') .field("'Brasil'", 'name') .field('escola.ano_censo', 'year') @@ -654,7 +598,6 @@ employeesApp.get('/', rqfSchool.parse(), (req, res, next) => { }, rqfSchool.build(), query, rqfSchool.parse(), id2str.transform(), (req, res, next) => { - console.log(req.dims) if ("function" in req.dims) { let aux_employes = formatFunction(req.result, req.dims); req.schoolTable = aux_employes; @@ -663,12 +606,12 @@ employeesApp.get('/', rqfSchool.parse(), (req, res, next) => { } if (req.filter.min_year <= 2018 && req.filter.max_year <= 2018) { - let aux_employees = matchQueries(req.allEmployees, req.allTeacher); + let aux_employees = req.allTeacher; req.result = aux_employees; } else if (req.filter.min_year >= 2019 && req.filter.max_year >= 2019) { req.result = req.schoolTable; } else if (req.filter.min_year <= 2018 && req.filter.max_year >= 2019) { - let aux_employees = matchQueries(req.allEmployees, req.allTeacher); + let aux_employees = req.allTeacher; req.result = aux_employees.concat(req.schoolTable); } next(); -- GitLab From c6d18e45d044b327fe6759da14059a1c0e765ae5 Mon Sep 17 00:00:00 2001 From: Fernando Erd <fcerd15@inf.ufpr.br> Date: Wed, 27 May 2020 10:55:30 -0300 Subject: [PATCH 27/53] Add SC 2009 condition --- src/libs/routes/employees.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libs/routes/employees.js b/src/libs/routes/employees.js index abaa191b..c9504a7e 100644 --- a/src/libs/routes/employees.js +++ b/src/libs/routes/employees.js @@ -558,6 +558,7 @@ employeesApp.get('/', rqfSchool.parse(), (req, res, next) => { .from('funcionarios_por_escola') .group('funcionarios_por_escola.ano_censo') .order('funcionarios_por_escola.ano_censo') + .where('(docente.ano_censo <> 2009 or docente.escola_estado_id <> 42)') next(); }, rqfSchool.build(), query, rqfSchool.parse(), id2str.transform(), (req, res, next) => { -- GitLab From 68411e9dea2c440cf175a7b1969a78786b895308 Mon Sep 17 00:00:00 2001 From: Fernando Erd <fcerd15@inf.ufpr.br> Date: Wed, 27 May 2020 10:59:25 -0300 Subject: [PATCH 28/53] Fix error --- src/libs/routes/employees.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/routes/employees.js b/src/libs/routes/employees.js index c9504a7e..cee84120 100644 --- a/src/libs/routes/employees.js +++ b/src/libs/routes/employees.js @@ -558,7 +558,7 @@ employeesApp.get('/', rqfSchool.parse(), (req, res, next) => { .from('funcionarios_por_escola') .group('funcionarios_por_escola.ano_censo') .order('funcionarios_por_escola.ano_censo') - .where('(docente.ano_censo <> 2009 or docente.escola_estado_id <> 42)') + .where('(funcionarios_por_escola.ano_censo <> 2009 or funcionarios_por_escola.estado_id <> 42)') next(); }, rqfSchool.build(), query, rqfSchool.parse(), id2str.transform(), (req, res, next) => { -- GitLab From 0f038a6b671d4009e5641a6ee487c4b00cd76735 Mon Sep 17 00:00:00 2001 From: Victor Picussa <vic_picussa2@hotmail.com> Date: Thu, 28 May 2020 10:51:19 -0300 Subject: [PATCH 29/53] Courses variable name fix --- src/libs/routes/courseCount.js | 56 +++++++++++++++++----------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/libs/routes/courseCount.js b/src/libs/routes/courseCount.js index 28de65c5..294f98f4 100644 --- a/src/libs/routes/courseCount.js +++ b/src/libs/routes/courseCount.js @@ -366,7 +366,7 @@ rqf.addField({ name:'ocde_detailed', table: 'curso_ens_superior', tableField: ['cod_ocde_area_detalhada', 'nome_ocde_area_detalhada'], - resultField: ['ocde_detailed_id', 'ocde_datailed_name'], + resultField: ['ocde_detailed_id', 'ocde_detailed_name'], where: { relation: '=', type: 'integer', @@ -396,7 +396,7 @@ rqf.addField({ name:'cine_detailed', table: 'curso_ens_superior', tableField: ['cod_cine_area_detalhada', 'nome_cine_area_detalhada'], - resultField: ['cine_detailed_id', 'cine_datailed_name'], + resultField: ['cine_detailed_id', 'cine_detailed_name'], where: { relation: '=', type: 'integer', @@ -489,11 +489,11 @@ rqf.addField({ courseCountApp.get('/', rqf.parse(), (req, res, next) => { if (("state" in req.dims) || ("city" in req.dims) || ("region" in req.dims) || ("state" in req.filter) || ("city" in req.filter) || ("region" in req.filter)) { - req.sql.from('curso_ens_superior') + req.sql.from('curso_ens_superior') .field('COUNT(DISTINCT curso_ens_superior.cod_curso)', 'total') .field("'Brasil'", 'name') .field('curso_ens_superior.ano_censo') - .field('curso_ens_superior.ano_censo', 'year') + .field('curso_ens_superior.ano_censo', 'year') .group('curso_ens_superior.ano_censo') .order('curso_ens_superior.ano_censo') .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') @@ -501,19 +501,19 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { } else if ("localoffer" in req.dims) { if ("university" in req.dims) { req.sql.from('curso_ens_superior') - .field('curso_ens_superior.ano_censo') - .field('COUNT(localoferta_ens_superior.cod_local_oferta)', 'total') - .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') - .where('curso_ens_superior.cod_nivel_academico = 1') - .group('curso_ens_superior.ano_censo') - .order('curso_ens_superior.ano_censo') - .order('localoferta_ens_superior.cod_local_oferta'); + .field('curso_ens_superior.ano_censo') + .field('COUNT(localoferta_ens_superior.cod_local_oferta)', 'total') + .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') + .where('curso_ens_superior.cod_nivel_academico = 1') + .group('curso_ens_superior.ano_censo') + .order('curso_ens_superior.ano_censo') + .order('localoferta_ens_superior.cod_local_oferta'); } else { req.sql.from('curso_ens_superior') .field('curso_ens_superior.ano_censo') .field('COUNT(localoferta_ens_superior.cod_local_oferta)', 'total') - .field('localoferta_ens_superior.cod_ies', 'university_id') + .field('localoferta_ens_superior.cod_ies', 'university_id') .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') .where('curso_ens_superior.cod_nivel_academico = 1') .group('curso_ens_superior.ano_censo') @@ -546,7 +546,7 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { }, rqf.build(), query, id2str.transform(), (req, res, next) => { if ("localoffer" in req.dims) { let baseq = req.sql.clone() - let iesq = squel.select() + let iesq = squel.select() iesq.from('ies_ens_superior') .field('ies_ens_superior.cod_ies') @@ -554,22 +554,22 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { req.sql = squel.select().from(baseq, 'bq') .field("'Brasil'", 'name') - .field('ano_censo', 'year') - .field('total') - .field('university_id') - .field('nome_ies', 'university_name') - .field('localoffer_id') - .field('localoffer_name') + .field('ano_censo', 'year') + .field('total') + .field('university_id') + .field('nome_ies', 'university_name') + .field('localoffer_id') + .field('localoffer_name') .join(iesq, 'iq', 'iq.cod_ies=bq.university_id'); } if ("city" in req.dims) { let baseq = req.sql.clone() - let cityq = squel.select() - cityq.from('municipio') + let cityq = squel.select() + cityq.from('municipio') .field('municipio.id') .field('municipio.nome'); - req.sql = squel.select().from(baseq, 'bq') + req.sql = squel.select().from(baseq, 'bq') .field("'Brasil'", 'name') .field('ano_censo', 'year') .field('total') @@ -579,18 +579,18 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { } if ("university" in req.dims) { let baseq = req.sql.clone() - let iesq = squel.select() + let iesq = squel.select() iesq.from('ies_ens_superior') .field('ies_ens_superior.cod_ies') .field('ies_ens_superior.nome_ies'); - req.sql = squel.select().from(baseq, 'bq') + req.sql = squel.select().from(baseq, 'bq') .field("'Brasil'", 'name') - .field('ano_censo', 'year') - .field('total') - .field('university_id') - .field('nome_ies', 'university_name') + .field('ano_censo', 'year') + .field('total') + .field('university_id') + .field('nome_ies', 'university_name') .join(iesq, 'iq', 'iq.cod_ies=bq.university_id'); } next(); -- GitLab From 4039497caf877b4ad54098e01dca6c3d49f1dc78 Mon Sep 17 00:00:00 2001 From: Fernando Erd <fcerd15@inf.ufpr.br> Date: Fri, 29 May 2020 09:31:10 -0300 Subject: [PATCH 30/53] Add null case in employees --- src/libs/routes/employees.js | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/libs/routes/employees.js b/src/libs/routes/employees.js index cee84120..612ea4cd 100644 --- a/src/libs/routes/employees.js +++ b/src/libs/routes/employees.js @@ -447,6 +447,7 @@ rqfTeacher.addField({ } }); + function formatFunction(queryOriginal,reqDims) { delete reqDims.size; delete reqDims.function; @@ -465,7 +466,8 @@ function formatFunction(queryOriginal,reqDims) { qtde_pedagogia: "Pedagogia", qtde_secretario: "Secretário", qtde_seguranca: "Segurança", - qtde_monitores: "Monitores" + qtde_monitores: "Monitores", + qtde_null: "Não Classificada" } let resultObj = [] //Nesse caso apenas precisamos acertar as dimensoes que o banco retorna, ou seja, criando um objeto para cada funcao de funcionario @@ -551,18 +553,26 @@ function matchQueries(queryTotal, queryPartial) { employeesApp.get('/', rqfSchool.parse(), (req, res, next) => { req.allTeacher = {} req.schoolTable = {} - delete req.dims.function; - - req.sql.field('SUM(funcionarios_por_escola.total)', 'total') - .field('funcionarios_por_escola.ano_censo', 'year') - .from('funcionarios_por_escola') - .group('funcionarios_por_escola.ano_censo') - .order('funcionarios_por_escola.ano_censo') - .where('(funcionarios_por_escola.ano_censo <> 2009 or funcionarios_por_escola.estado_id <> 42)') + + if ("function" in req.dims) { + delete req.dims.function; + req.sql.field('SUM(funcionarios_por_escola.total)', 'qtde_null') + .field('funcionarios_por_escola.ano_censo', 'year') + .from('funcionarios_por_escola') + .group('funcionarios_por_escola.ano_censo') + .order('funcionarios_por_escola.ano_censo') + } else { + delete req.dims.function; + req.sql.field('SUM(funcionarios_por_escola.total)', 'total') + .field('funcionarios_por_escola.ano_censo', 'year') + .from('funcionarios_por_escola') + .group('funcionarios_por_escola.ano_censo') + .order('funcionarios_por_escola.ano_censo') + } next(); }, rqfSchool.build(), query, rqfSchool.parse(), id2str.transform(), (req, res, next) => { - + req.allTeacher = req.result; req.resetSql(); if ("function" in req.dims) { @@ -601,6 +611,7 @@ employeesApp.get('/', rqfSchool.parse(), (req, res, next) => { if ("function" in req.dims) { let aux_employes = formatFunction(req.result, req.dims); + req.allTeacher = formatFunction(req.allTeacher, req.dims); req.schoolTable = aux_employes; } else { req.schoolTable = req.result -- GitLab From f8dda283ba0d8484892281caa3fb3aee2e0ec19c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Fri, 29 May 2020 09:33:48 -0300 Subject: [PATCH 31/53] Change classroomCount salas var --- src/libs/routes/classroomCount.js | 2 +- src/libs/routes/schoolLocation.js | 11 ----------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/src/libs/routes/classroomCount.js b/src/libs/routes/classroomCount.js index bf447a3b..4f1c1991 100644 --- a/src/libs/routes/classroomCount.js +++ b/src/libs/routes/classroomCount.js @@ -285,7 +285,7 @@ classroomCountApp.post('/', rqf.parse(), (req, res, next) => { req.dims.location = true; req.dims.school_building = true; - req.sql.field('SUM(escola.num_salas)', 'total') + req.sql.field('SUM(escola.qtde_salas_utilizadas_dentro)', 'total') .field("'Brasil'", 'name') .field('escola.ano_censo', 'year') .from('escola') diff --git a/src/libs/routes/schoolLocation.js b/src/libs/routes/schoolLocation.js index a38b019a..5c0d98ff 100644 --- a/src/libs/routes/schoolLocation.js +++ b/src/libs/routes/schoolLocation.js @@ -92,21 +92,10 @@ rqf.addField({ foreign: 'municipio_id', foreignTable: '@' } -}, 'dims').addValueToField({ - name: 'school', - table: 'localizacao_escolas', - tableField: ['nome', 'id'], - resultField: ['school_name', 'school_id'], - where: { - relation: '=', - type: 'integer', - field: 'id' - }, }, 'dims'); schoolLocationApp.get('/', rqf.parse(), (req, res, next) => { req.dims.city=true; - req.dims.school=true; req.dims.mesoregion=true; req.dims.microregion=true; -- GitLab From dc22f8773dee229c19b73ef5e7f7fceff367e7b2 Mon Sep 17 00:00:00 2001 From: Fernando Erd <fcerd@inf.ufpr.br> Date: Fri, 29 May 2020 09:41:02 -0300 Subject: [PATCH 32/53] Update src/libs/routes/employees.js --- src/libs/routes/employees.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/routes/employees.js b/src/libs/routes/employees.js index 612ea4cd..2985368a 100644 --- a/src/libs/routes/employees.js +++ b/src/libs/routes/employees.js @@ -467,7 +467,7 @@ function formatFunction(queryOriginal,reqDims) { qtde_secretario: "Secretário", qtde_seguranca: "Segurança", qtde_monitores: "Monitores", - qtde_null: "Não Classificada" + qtde_null: "Não Classificado" } let resultObj = [] //Nesse caso apenas precisamos acertar as dimensoes que o banco retorna, ou seja, criando um objeto para cada funcao de funcionario -- GitLab From 59f7885fd82b7c3d3f2b16572603bd6357335dfa Mon Sep 17 00:00:00 2001 From: Fernando Erd <fcerd@inf.ufpr.br> Date: Fri, 29 May 2020 09:42:28 -0300 Subject: [PATCH 33/53] Update employees.js -- GitLab From 9db039a6c036bd1fc8153e45c1f8dd7aad7f00a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Fri, 29 May 2020 09:55:12 -0300 Subject: [PATCH 34/53] Change classroom qnt salas var --- src/libs/routes/classroom.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/routes/classroom.js b/src/libs/routes/classroom.js index 538ca7b0..8e2b6a7e 100644 --- a/src/libs/routes/classroom.js +++ b/src/libs/routes/classroom.js @@ -244,7 +244,7 @@ rqf.addField({ classroomApp.get('/', cache('15 day'), rqf.parse(), rqf.build(), (req, res, next) => { req.sql.from('escola') - .field('SUM(escola.num_salas)', 'total') + .field('SUM(escola.qtde_salas_utilizadas_dentro)', 'total') .field("'Brasil'", 'name') .field('escola.ano_censo', 'year') .group('escola.ano_censo') -- GitLab From c06c2b1cd2e486e5bb4e3dfc4ecff714748ea3fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Fri, 29 May 2020 10:12:02 -0300 Subject: [PATCH 35/53] Change simcaq classCount base filter --- src/libs/routes/classCount.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/routes/classCount.js b/src/libs/routes/classCount.js index efa33011..27132383 100644 --- a/src/libs/routes/classCount.js +++ b/src/libs/routes/classCount.js @@ -367,7 +367,7 @@ classCountApp.get('/count', rqf.parse(), (req, res, next) => { .from('turma') .group('turma.ano_censo') .order('turma.ano_censo') - .where('turma.tipo_turma_id = 0 AND turma.dependencia_adm_id <= 3 AND ((turma.etapa_resumida >= 1 AND turma.etapa_resumida <= 7) OR turma.etapa_resumida = 99)'); + .where('turma.local_turma = 0 AND turma.dependencia_adm_id <= 3 AND ((turma.etapa_resumida >= 1 AND turma.etapa_resumida <= 7) OR turma.etapa_resumida = 99)'); next(); }, rqf.build(), query, addMissing(rqf), id2str.transform(), response('class_count')); -- GitLab From 40e673b8779c099eb3aa5b7a1581247bdad632b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Fri, 29 May 2020 10:22:49 -0300 Subject: [PATCH 36/53] Update dailyChargeAmount filters --- src/libs/routes/dailyChargeAmount.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/libs/routes/dailyChargeAmount.js b/src/libs/routes/dailyChargeAmount.js index 4eef5dcd..d2303a39 100644 --- a/src/libs/routes/dailyChargeAmount.js +++ b/src/libs/routes/dailyChargeAmount.js @@ -373,7 +373,7 @@ dailyChargeAmountApp.get('/', rqf.parse(), (req, res, next) => { .group('turma.etapa_resumida') .order('turma.ano_censo') .order('turma.etapa_resumida') - .where('turma.tipo_turma_id <= 3 and turma.dependencia_adm_id <= 3') + .where('((turma.tipo_turma_id <= 3 AND turma.tipo_atendimento_id is NULL) OR (turma.tipo_atendimento_id <= 2 AND turma.tipo_turma_id is NULL)) and turma.dependencia_adm_id <= 3') } else { res.status(400); next({ @@ -428,13 +428,13 @@ dailyChargeAmountApp.get('/average', rqf.parse(), rqf.build(), (req, res, next) .field('duracao_turma') .field('etapas_mod_ensino_segmento_id') .field('ROW_NUMBER() OVER(PARTITION BY etapas_mod_ensino_segmento_id ORDER BY duracao_turma)', 'rowno') - .where('tipo_turma_id <= 3') + .where('((turma.tipo_turma_id <= 3 AND turma.tipo_atendimento_id is NULL) OR (turma.tipo_atendimento_id <= 2 AND turma.tipo_turma_id is NULL))') let tableG = baseQ.clone(); tableG.from('turma') .field('1+COUNT(*)', 'counter') .field('etapas_mod_ensino_segmento_id') - .where('tipo_turma_id <= 3') + .where('((turma.tipo_turma_id <= 3 AND turma.tipo_atendimento_id is NULL) OR (turma.tipo_atendimento_id <= 2 AND turma.tipo_turma_id is NULL))') .group('etapas_mod_ensino_segmento_id') let joinRG = squel.select(); @@ -458,7 +458,8 @@ dailyChargeAmountApp.get('/average', rqf.parse(), rqf.build(), (req, res, next) .group('turma.etapas_mod_ensino_segmento_id') .order('turma.ano_censo') .order('turma.etapas_mod_ensino_segmento_id') - .where('turma.tipo_turma_id <= 3 and m.etapas_mod_ensino_segmento_id = turma.etapas_mod_ensino_segmento_id') + .where('((turma.tipo_turma_id <= 3 AND turma.tipo_atendimento_id is NULL) OR (turma.tipo_atendimento_id <= 2 AND turma.tipo_turma_id is NULL)) \ + and m.etapas_mod_ensino_segmento_id = turma.etapas_mod_ensino_segmento_id') } else { res.status(400); next({ -- GitLab From b04ef94c7b383946ab16f61232489566a1c1f89e Mon Sep 17 00:00:00 2001 From: Fernando Erd <fcerd15@inf.ufpr.br> Date: Fri, 29 May 2020 10:31:56 -0300 Subject: [PATCH 37/53] Add SC condition --- src/libs/routes/employees.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libs/routes/employees.js b/src/libs/routes/employees.js index 2985368a..cc60affa 100644 --- a/src/libs/routes/employees.js +++ b/src/libs/routes/employees.js @@ -561,6 +561,7 @@ employeesApp.get('/', rqfSchool.parse(), (req, res, next) => { .from('funcionarios_por_escola') .group('funcionarios_por_escola.ano_censo') .order('funcionarios_por_escola.ano_censo') + .where('funcionarios_por_escola.ano_censo <> 2009 or funcionarios_por_escola.estado_id <> 42') } else { delete req.dims.function; req.sql.field('SUM(funcionarios_por_escola.total)', 'total') @@ -568,6 +569,7 @@ employeesApp.get('/', rqfSchool.parse(), (req, res, next) => { .from('funcionarios_por_escola') .group('funcionarios_por_escola.ano_censo') .order('funcionarios_por_escola.ano_censo') + .where('funcionarios_por_escola.ano_censo <> 2009 or funcionarios_por_escola.estado_id <> 42') } next(); -- GitLab From 7ca2bf289a40690a06cc65f28a36e872d9f8f6ea Mon Sep 17 00:00:00 2001 From: Fernando Erd <fcerd15@inf.ufpr.br> Date: Fri, 29 May 2020 11:33:10 -0300 Subject: [PATCH 38/53] Change employees category --- src/libs/routes/employees.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/libs/routes/employees.js b/src/libs/routes/employees.js index cc60affa..43fcc476 100644 --- a/src/libs/routes/employees.js +++ b/src/libs/routes/employees.js @@ -117,12 +117,20 @@ employeesApp.get('/rural_location', (req, res, next) => { employeesApp.get('/function', (req, res, next) => { req.result = [ - {id: 1, name: "Urbana"}, - {id: 2, name: "Rural"}, - {id: 3, name: "Rural - Área de assentamento"}, - {id: 4, name: "Rural - Terra indígena"}, - {id: 5, name: "Rural - Área remanescente de quilombos"}, - {id: 6, name: "Rural - Unidade de uso sustentável"} + {id: 0, name: "Administrativos"}, + {id: 1, name: "Serviços Gerais"}, + {id: 2, name: "Bibliotecário"}, + {id: 3, name: "Saúde"}, + {id: 4, name: "Coordenador"}, + {id: 5, name: "Fonoaudiólogo"}, + {id: 6, name: "Nutricionista"}, + {id: 7, name: "Psicólogo"}, + {id: 8, name: "Alimentação"}, + {id: 9, name: "Pedagogia"}, + {id: 10, name: "Secretário"}, + {id: 11, name: "Segurança"}, + {id: 12, name: "Monitores"}, + {id: 99, name: "Não Classificado"} ]; next(); }, response('function')); -- GitLab From b9e688d3d0088d900d6b4777d733e5e88a66b12a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Tue, 2 Jun 2020 10:39:09 -0300 Subject: [PATCH 39/53] Update infrastructure with 2019 vars --- src/libs/routes/cub.js | 2 +- src/libs/routes/schoolInfrastructure.js | 84 +++++++++++-------------- 2 files changed, 37 insertions(+), 49 deletions(-) diff --git a/src/libs/routes/cub.js b/src/libs/routes/cub.js index 5310f0be..3707e7f0 100644 --- a/src/libs/routes/cub.js +++ b/src/libs/routes/cub.js @@ -173,6 +173,6 @@ cubApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { } next(); -}, query, addMissing(rqf), id2str.transform(), response('cub')); +}, query, id2str.transform(), response('cub')); module.exports = cubApp; diff --git a/src/libs/routes/schoolInfrastructure.js b/src/libs/routes/schoolInfrastructure.js index 32f316a4..ced26a2f 100644 --- a/src/libs/routes/schoolInfrastructure.js +++ b/src/libs/routes/schoolInfrastructure.js @@ -360,35 +360,24 @@ infrastructureApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { req.queryIndex.allSchoolsNotSchoolBuilding = req.querySet.push(allSchoolsNotSchoolBuilding) - 1; // Bibliotecas - // Se (situacao_de_funcionamento=1) & (dependencia_adm_id<=3) & (CEBES027P1=1) & - // (ensino_regular=1 | ensino_eja=1 | educacao_profissional=1) & - // (reg_fund_ai_t1=1 | reg_fund_af_t1=1 | reg_medio_medio_t1=1 | ensino_eja_fund= 1 | - // ensino_eja_medio= 1 | ensino_eja_prof= 1 | esp_eja_fund=1 | esp_eja_medio=1 | ensino_esp_exclusiva_eja_prof=1) & (localizacao_id=1) então conta id - let allLibraries = allUrbanSchools.clone(); - allLibraries.where('reg_fund_ai_t1=1 OR reg_fund_af_t1=1 OR reg_medio_medio_t1=1 OR ensino_eja_fund= 1 OR ensino_eja_medio= 1 OR ensino_eja_prof= 1 OR esp_eja_fund=1 OR esp_eja_medio=1 OR ensino_esp_exclusiva_eja_prof=1'); - req.queryIndex.allLibraries = req.querySet.push(allLibraries) - 1; + req.queryIndex.allLibraries = req.queryIndex.allUrbanSchools; - let haveLibraries = allLibraries.clone(); + let haveLibraries = allUrbanSchools.clone(); haveLibraries.where('escola.biblioteca = 1'); req.queryIndex.haveLibraries = req.querySet.push(haveLibraries) - 1; - let needLibraries = allLibraries.clone(); + let needLibraries = allUrbanSchools.clone(); needLibraries.where('escola.biblioteca = 0'); req.queryIndex.needLibraries = req.querySet.push(needLibraries) - 1; - // Bibliotecas/Sala de leitura - // Se (situacao_de_funcionamento=1) & (dependencia_adm_id<=3) & (CEBES027P1=1) & (ensino_regular=1 | ensino_eja=1 | educacao_profissional=1) & - // (reg_fund_ai_t1=1 | reg_fund_af_t1=1 | reg_medio_medio_t1=1 | ensino_eja_fund= 1 | ensino_eja_medio= 1 | - // ensino_eja_prof= 1 | esp_eja_fund=1 | esp_eja_medio=1 | ensino_esp_exclusiva_eja_prof=1) & (localizacao_id=2) então conta id - let allLibrariesReadingRoom = allCountrySchools.clone(); - allLibrariesReadingRoom.where('reg_fund_ai_t1=1 OR reg_fund_af_t1=1 OR reg_medio_medio_t1=1 OR ensino_eja_fund=1 OR ensino_eja_medio=1 OR ensino_eja_prof=1 OR esp_eja_fund=1 OR esp_eja_medio=1 OR ensino_esp_exclusiva_eja_prof=1'); - req.queryIndex.allLibrariesReadingRoom = req.querySet.push(allLibrariesReadingRoom) - 1; + // Sala de leitura + req.queryIndex.allLibrariesReadingRoom = req.queryIndex.allCountrySchools; - let haveLibrariesReadingRoom = allLibrariesReadingRoom.clone(); + let haveLibrariesReadingRoom = allCountrySchools.clone(); haveLibrariesReadingRoom.where('escola.biblioteca_sala_leitura = true'); req.queryIndex.haveLibrariesReadingRoom = req.querySet.push(haveLibrariesReadingRoom) - 1; - let needLibrariesReadingRoom = allLibrariesReadingRoom.clone(); + let needLibrariesReadingRoom = allCountrySchools.clone(); needLibrariesReadingRoom.where('escola.biblioteca_sala_leitura = false'); req.queryIndex.needLibrariesReadingRoom = req.querySet.push(needLibrariesReadingRoom) - 1; @@ -437,20 +426,20 @@ infrastructureApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { needKidsPark.where('escola.parque_infantil = 0'); req.queryIndex.needKidsPark = req.querySet.push(needKidsPark) - 1; - // Berçário - let allCribs = allSchools.clone(); - allCribs.where('escola.reg_infantil_creche_t1 = 1'); - req.queryIndex.allCribs = req.querySet.push(allCribs) - 1; + // // Berçário + // let allCribs = allSchools.clone(); + // allCribs.where('escola.reg_infantil_creche_t1 = 1'); + // req.queryIndex.allCribs = req.querySet.push(allCribs) - 1; - let haveCribs = allCribs.clone(); - haveCribs.where('escola.bercario = 1'); - req.queryIndex.haveCribs = req.querySet.push(haveCribs) - 1; + // let haveCribs = allCribs.clone(); + // haveCribs.where('escola.bercario = 1'); + // req.queryIndex.haveCribs = req.querySet.push(haveCribs) - 1; - let needCribs = allCribs.clone(); - needCribs.where('escola.bercario = 0'); - req.queryIndex.needCribs = req.querySet.push(needCribs) - 1; + // let needCribs = allCribs.clone(); + // needCribs.where('escola.bercario = 0'); + // req.queryIndex.needCribs = req.querySet.push(needCribs) - 1; - // Quadra Coberta + // Quadra de esportes let allSportsCourt = allSchools.clone(); allSportsCourt.where('reg_fund_ai_t1=1 or reg_fund_af_t1=1 or reg_medio_medio_t1=1 or ensino_eja_fund= 1 or ensino_eja_medio= 1 or ensino_eja_prof= 1 or esp_eja_fund=1 or esp_eja_medio=1 or ensino_esp_exclusiva_eja_prof=1'); req.queryIndex.allSportsCourt = req.querySet.push(allSportsCourt) - 1; @@ -463,7 +452,7 @@ infrastructureApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { needSportsCourt.where('escola.quadra_esportes = 0'); req.queryIndex.needSportsCourt = req.querySet.push(needSportsCourt) - 1; - // Cobertura de quadra esportiva + // Quadras a serem cobertas // Se (situacao_de_funcionamento=1) and (ensino_regular=1 OR ensino_eja=1 OR educacao_profissional=1) and (local_func_predio_escolar=1) and // (dependencia_adm_id<=3) and (reg_fund_ai_t1=1 or reg_fund_af_t1=1 or reg_medio_medio_t1=1 or ensino_eja_fund= 1 or ensino_eja_medio= 1 or // ensino_eja_prof= 1 or esp_eja_fund=1 or esp_eja_medio=1 or ensino_esp_exclusiva_eja_prof=1) and (quadra_esportes_descoberta=1) então conta id @@ -479,7 +468,7 @@ infrastructureApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { req.queryIndex.allCourtyard = req.queryIndex.allSchools; let haveCourtyard = allSchools.clone(); - haveCourtyard.where('escola.patio = 2 OR escola.patio = 1'); + haveCourtyard.where('escola.patio = 1 OR escola.patio = 2'); req.queryIndex.haveCourtyard = req.querySet.push(haveCourtyard) - 1; let needCourtyard = allSchools.clone(); @@ -488,7 +477,7 @@ infrastructureApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { // Cobertura do Pátio let allCourtyardCoverage = allSchools.clone(); - allCourtyardCoverage.where('escola.patio = 1'); + allCourtyardCoverage.where('escola.patio_descoberto = 1'); req.queryIndex.allCourtyardCoverage = req.querySet.push(allCourtyardCoverage) - 1; req.queryIndex.haveCourtyardCoverage = req.queryIndex.allCourtyardCoverage; // It must be [] @@ -585,15 +574,15 @@ infrastructureApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { needBroadbandInternet.where('escola.internet_banda_larga = 0'); req.queryIndex.needBroadbandInternet = req.querySet.push(needBroadbandInternet) - 1; - // Sanitário dentro do prédio + // Banheiro req.queryIndex.allInsideBathroom = req.queryIndex.allSchools; let haveInsideBathroom = allSchools.clone(); - haveInsideBathroom.where('escola.sanitario_dentro_predio = 1'); + haveInsideBathroom.where('escola.banheiro = 1'); req.queryIndex.haveInsideBathroom = req.querySet.push(haveInsideBathroom) - 1; let needInsideBathroom = allSchools.clone(); - needInsideBathroom.where('escola.sanitario_dentro_predio = 0'); + needInsideBathroom.where('escola.banheiro = 0'); req.queryIndex.needInsideBathroom = req.querySet.push(needInsideBathroom) - 1; // Banheiro adequado para educação infantil dentro do prédio @@ -615,55 +604,55 @@ infrastructureApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { req.queryIndex.allEletricPower = req.queryIndex.allSchools; let haveEletricPower = allSchools.clone(); - haveEletricPower.where('escola.fornecimento_energia = 1'); + haveEletricPower.where('escola.energia_inexistente = 0'); req.queryIndex.haveEletricPower = req.querySet.push(haveEletricPower) - 1; let needEletricPower = allSchools.clone(); - needEletricPower.where('escola.fornecimento_energia = 0'); + needEletricPower.where('escola.energia_inexistente = 1'); req.queryIndex.needEletricPower = req.querySet.push(needEletricPower) - 1; // Abastecimento de água req.queryIndex.allWaterSupply = req.queryIndex.allSchools; let haveWaterSupply = allSchools.clone(); - haveWaterSupply.where('escola.fornecimento_agua = 1'); + haveWaterSupply.where('escola.agua_inexistente = 0'); req.queryIndex.haveWaterSupply = req.querySet.push(haveWaterSupply) - 1; let needWaterSupply = allSchools.clone(); - needWaterSupply.where('escola.fornecimento_agua = 0'); + needWaterSupply.where('escola.agua_inexistente = 1'); req.queryIndex.needWaterSupply = req.querySet.push(needWaterSupply) - 1; - // Água filtrada + // Água Potável req.queryIndex.allFilteredWater = req.queryIndex.allSchools; let haveFilteredWater = allSchools.clone(); - haveFilteredWater.where('escola.agua_filtrada = 1'); + haveFilteredWater.where('escola.agua_potavel = 1'); req.queryIndex.haveFilteredWater = req.querySet.push(haveFilteredWater) - 1; let needFilteredWater = allSchools.clone(); - needFilteredWater.where('escola.agua_filtrada = 0'); + needFilteredWater.where('escola.agua_potavel = 0'); req.queryIndex.needFilteredWater = req.querySet.push(needFilteredWater) - 1; // Coleta de esgoto req.queryIndex.allSewage = req.queryIndex.allSchools; let haveSewage = allSchools.clone(); - haveSewage.where('escola.esgoto_sanitario = 1'); + haveSewage.where('escola.esgoto_rede_publica = 1 OR escola.esgoto_fossa_septica = 1'); req.queryIndex.haveSewage = req.querySet.push(haveSewage) - 1; let needSewage = allSchools.clone(); - needSewage.where('escola.esgoto_sanitario = 0'); + needSewage.where('escola.esgoto_rede_publica = 0 AND escola.esgoto_fossa_septica = 0'); req.queryIndex.needSewage = req.querySet.push(needSewage) - 1; // Dependências adaptada para pessoas com deficiências req.queryIndex.allAdaptedBuilding = req.queryIndex.allSchools; let haveAdaptedBuilding = allSchools.clone(); - haveAdaptedBuilding.where('escola.dependencias_pne = 1'); + haveAdaptedBuilding.where('escola.acessibilidade_inexistente = 0'); req.queryIndex.haveAdaptedBuilding = req.querySet.push(haveAdaptedBuilding) - 1; let needAdaptedBuilding = allSchools.clone(); - needAdaptedBuilding.where('escola.dependencias_pne = 0'); + needAdaptedBuilding.where('escola.acessibilidade_inexistente = 1'); req.queryIndex.needAdaptedBuilding = req.querySet.push(needAdaptedBuilding) - 1; // Banheiros adaptados para pessoas com deficiências @@ -692,7 +681,7 @@ infrastructureApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { let computer_lab = matchQueries(req.result[req.queryIndex.allInfLab], req.result[req.queryIndex.haveInfLab], req.result[req.queryIndex.needInfLab]); let science_lab = matchQueries(req.result[req.queryIndex.allScienceLab], req.result[req.queryIndex.haveScienceLab], req.result[req.queryIndex.needScienceLab]); let kids_park = matchQueries(req.result[req.queryIndex.allKidsPark], req.result[req.queryIndex.haveKidsPark], req.result[req.queryIndex.needKidsPark]); - let nursery = matchQueries(req.result[req.queryIndex.allCribs], req.result[req.queryIndex.haveCribs], req.result[req.queryIndex.needCribs]); + // let nursery = matchQueries(req.result[req.queryIndex.allCribs], req.result[req.queryIndex.haveCribs], req.result[req.queryIndex.needCribs]); let sports_court = matchQueries(req.result[req.queryIndex.allSportsCourt], req.result[req.queryIndex.haveSportsCourt], req.result[req.queryIndex.needSportsCourt]); let sports_court_coverage = matchQueries(req.result[req.queryIndex.allSportsCourtCoverage], [], req.result[req.queryIndex.needSportsCourtCoverage], true); // have = [] let courtyard = matchQueries(req.result[req.queryIndex.allCourtyard], req.result[req.queryIndex.haveCourtyard], req.result[req.queryIndex.needCourtyard]); @@ -724,7 +713,6 @@ infrastructureApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { computer_lab, science_lab, kids_park, - nursery, sports_court, sports_court_coverage, courtyard, -- GitLab From 8fa062a57e4940a58bb86e67a60ec3c572d24fff Mon Sep 17 00:00:00 2001 From: Victor Picussa <vp16@inf.ufpr.br> Date: Wed, 3 Jun 2020 18:34:37 -0300 Subject: [PATCH 40/53] Region id order --- src/libs/middlewares/addMissing.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/middlewares/addMissing.js b/src/libs/middlewares/addMissing.js index 1050a1df..21ff8af0 100644 --- a/src/libs/middlewares/addMissing.js +++ b/src/libs/middlewares/addMissing.js @@ -72,7 +72,7 @@ module.exports = function addMissing(rqf) { } if (dimsValues[rqfName].indexOf(r[rqfName]) === -1) { - if (['school', 'city', 'state', 'region', 'arrangement'].includes(dim)) { // those should be ordered by its name + if (['school', 'city', 'state', 'arrangement'].includes(dim)) { // those should be ordered by its name let namePosition = binarySearch(r[secondaryRqfName], dimsNames[secondaryRqfName], 0, dimsNames[secondaryRqfName].length) // find the position of the name in alphabetical order and keep the names vector ordered dimsValues[rqfName].splice(namePosition.pos, 0, r[rqfName]); dimsNames[secondaryRqfName].splice(namePosition.pos, 0, r[secondaryRqfName]); -- GitLab From bb2b796c758d1a57cc9ebe7e1c81b19132aaa7af Mon Sep 17 00:00:00 2001 From: Fernando Erd <fcerd15@inf.ufpr.br> Date: Thu, 4 Jun 2020 11:18:19 -0300 Subject: [PATCH 41/53] Arrangement Filter --- src/libs/routes/school.js | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/libs/routes/school.js b/src/libs/routes/school.js index d1f31701..b72df7c7 100644 --- a/src/libs/routes/school.js +++ b/src/libs/routes/school.js @@ -175,6 +175,22 @@ schoolApp.get('/education_eja', cache('15 day'), (req, res, next) => { next(); }, response('education_eja')); + +schoolApp.get('/arrangement', cache('15 day'), (req, res, next) => { + req.result = [ + {id: 0, name: 'Creche'}, + {id: 1, name: 'Pré Escola'}, + {id: 2, name: 'Ensino Fundamental - AI'}, + {id: 3, name: 'Ensino Fundamental - AF'}, + {id: 4, name: 'Ed. Infantil Unificada/Multietapa/Multissérie/Correção fluxo'}, + {id: 5, name: 'Ensino Médio'}, + {id: 6, name: 'Ensino EJA'}, + {id: 7, name: 'Educação Profissional'}, + {id: 8, name: 'Educação Especial Exclusiva'} + ]; + next(); +}, response('arrangement')); + schoolApp.get('/integral_time', cache('15 day'), (req, res, next) => { req.result = [ {id: 0, name: 'Não'}, @@ -595,7 +611,9 @@ schoolApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { next(); }, query, response('school')); -schoolApp.get('/count', cache('15 day'), rqfCount.parse(), rqfCount.build(), (req, res, next) => { +schoolApp.get('/count', cache('15 day'), rqfCount.parse(), (req, res, next) => { + console.log(req.filter); + let arrang = ["arranjo_creche", "arranjo_pre", "arranjo_fundamental_ai", "arranjo_fundamental_af", "arranjo_multietapa", "arranjo_ensino_medio", "ensino_eja", "educacao_profissional", "ensino_especial"]; req.sql.from('escola') .field('COUNT(escola.id)', 'total') @@ -603,8 +621,20 @@ schoolApp.get('/count', cache('15 day'), rqfCount.parse(), rqfCount.build(), (re .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)'); + .where('escola.situacao_funcionamento_pareada = 1 AND (escola.ensino_regular = 1 OR escola.ensino_eja=1 or escola.educacao_profissional=1)') + + //Transforma a query em OR se tiver o filtro do arranjo + if (req.filter.arrangement) { + let arrangementQuery = ""; + for (let i = 0; i < req.filter.arrangement.length - 1; i++) { + arrangementQuery += 'escola.' + arrang[req.filter.arrangement[i]] + ' = 1 OR '; + } + // o ultimo elemento precisa ser sem o OR + arrangementQuery += 'escola.' + arrang[req.filter.arrangement[req.filter.arrangement.length - 1]] + ' = 1'; + req.sql.where('' + arrangementQuery); + } + delete req.filter.arrangement next(); -}, query, id2str.transform(), addMissing(rqfCount), response('school')); +}, rqfCount.build(), query, id2str.transform(), addMissing(rqfCount), response('school')); module.exports = schoolApp; -- GitLab From e5ffaa0eb72434a0370fd466bb0a2f582694af99 Mon Sep 17 00:00:00 2001 From: Victor Picussa <vp16@inf.ufpr.br> Date: Fri, 12 Jun 2020 10:56:12 -0300 Subject: [PATCH 42/53] Added modifications --- src/libs/routes/courseCount.js | 88 ++++++++-------------------------- 1 file changed, 19 insertions(+), 69 deletions(-) diff --git a/src/libs/routes/courseCount.js b/src/libs/routes/courseCount.js index 294f98f4..50f7ceb8 100644 --- a/src/libs/routes/courseCount.js +++ b/src/libs/routes/courseCount.js @@ -273,8 +273,8 @@ rqf.addField({ }).addValue({ name: 'city', table: 'localoferta_ens_superior', - tableField: 'cod_municipio', - resultField: 'city_id', + tableField: ['cod_municipio', 'nome_municipio'], + resultField: ['city_id', 'city_name'], where: { relation: '=', type: 'integer', @@ -366,7 +366,7 @@ rqf.addField({ name:'ocde_detailed', table: 'curso_ens_superior', tableField: ['cod_ocde_area_detalhada', 'nome_ocde_area_detalhada'], - resultField: ['ocde_detailed_id', 'ocde_detailed_name'], + resultField: ['ocde_detailed_id', 'ocde_datailed_name'], where: { relation: '=', type: 'integer', @@ -396,7 +396,7 @@ rqf.addField({ name:'cine_detailed', table: 'curso_ens_superior', tableField: ['cod_cine_area_detalhada', 'nome_cine_area_detalhada'], - resultField: ['cine_detailed_id', 'cine_detailed_name'], + resultField: ['cine_detailed_id', 'cine_datailed_name'], where: { relation: '=', type: 'integer', @@ -489,11 +489,10 @@ rqf.addField({ courseCountApp.get('/', rqf.parse(), (req, res, next) => { if (("state" in req.dims) || ("city" in req.dims) || ("region" in req.dims) || ("state" in req.filter) || ("city" in req.filter) || ("region" in req.filter)) { - req.sql.from('curso_ens_superior') + req.sql.from('curso_ens_superior') .field('COUNT(DISTINCT curso_ens_superior.cod_curso)', 'total') .field("'Brasil'", 'name') - .field('curso_ens_superior.ano_censo') - .field('curso_ens_superior.ano_censo', 'year') + .field('curso_ens_superior.ano_censo', 'year') .group('curso_ens_superior.ano_censo') .order('curso_ens_superior.ano_censo') .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') @@ -501,23 +500,25 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { } else if ("localoffer" in req.dims) { if ("university" in req.dims) { req.sql.from('curso_ens_superior') - .field('curso_ens_superior.ano_censo') - .field('COUNT(localoferta_ens_superior.cod_local_oferta)', 'total') - .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') - .where('curso_ens_superior.cod_nivel_academico = 1') - .group('curso_ens_superior.ano_censo') - .order('curso_ens_superior.ano_censo') - .order('localoferta_ens_superior.cod_local_oferta'); + .field('curso_ens_superior.ano_censo', 'year') + .field('COUNT(localoferta_ens_superior.cod_local_oferta)', 'total') + .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') + .where('curso_ens_superior.cod_nivel_academico = 1') + .group('curso_ens_superior.ano_censo') + .order('curso_ens_superior.ano_censo') + .order('localoferta_ens_superior.cod_local_oferta'); } else { req.sql.from('curso_ens_superior') - .field('curso_ens_superior.ano_censo') + .field('curso_ens_superior.ano_censo', 'year') .field('COUNT(localoferta_ens_superior.cod_local_oferta)', 'total') - .field('localoferta_ens_superior.cod_ies', 'university_id') + .field('localoferta_ens_superior.cod_ies', 'university_id') + .field('curso_ens_superior.nome_ies', 'university_name') .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') .where('curso_ens_superior.cod_nivel_academico = 1') .group('curso_ens_superior.ano_censo') .group('localoferta_ens_superior.cod_ies') + .group('curso_ens_superior.nome_ies') .order('curso_ens_superior.ano_censo') .order('localoferta_ens_superior.cod_local_oferta'); } @@ -525,7 +526,7 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { req.sql.from('curso_ens_superior') .field('COUNT(curso_ens_superior.cod_curso)', 'total') .field("'Brasil'", 'name') - .field('curso_ens_superior.ano_censo') + .field('curso_ens_superior.ano_censo', 'year') .group('curso_ens_superior.cod_ies') .group('curso_ens_superior.ano_censo') .order('curso_ens_superior.cod_ies') @@ -543,57 +544,6 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { .where('curso_ens_superior.cod_nivel_academico = 1'); } next(); -}, rqf.build(), query, id2str.transform(), (req, res, next) => { - if ("localoffer" in req.dims) { - let baseq = req.sql.clone() - let iesq = squel.select() - - iesq.from('ies_ens_superior') - .field('ies_ens_superior.cod_ies') - .field('ies_ens_superior.nome_ies'); - - req.sql = squel.select().from(baseq, 'bq') - .field("'Brasil'", 'name') - .field('ano_censo', 'year') - .field('total') - .field('university_id') - .field('nome_ies', 'university_name') - .field('localoffer_id') - .field('localoffer_name') - .join(iesq, 'iq', 'iq.cod_ies=bq.university_id'); - } - if ("city" in req.dims) { - let baseq = req.sql.clone() - let cityq = squel.select() - cityq.from('municipio') - .field('municipio.id') - .field('municipio.nome'); - - req.sql = squel.select().from(baseq, 'bq') - .field("'Brasil'", 'name') - .field('ano_censo', 'year') - .field('total') - .field('nome', 'city_name') - .field('city_id') - .join(cityq, 'cq', 'cq.id=bq.city_id'); - } - if ("university" in req.dims) { - let baseq = req.sql.clone() - let iesq = squel.select() - - iesq.from('ies_ens_superior') - .field('ies_ens_superior.cod_ies') - .field('ies_ens_superior.nome_ies'); - - req.sql = squel.select().from(baseq, 'bq') - .field("'Brasil'", 'name') - .field('ano_censo', 'year') - .field('total') - .field('university_id') - .field('nome_ies', 'university_name') - .join(iesq, 'iq', 'iq.cod_ies=bq.university_id'); - } - next(); -}, query, id2str.transform(), addMissing(rqf), response('course_count')); +}, rqf.build(), query, id2str.transform(), addMissing(rqf), response('course_count')); module.exports = courseCountApp; -- GitLab From 77e38292b31356da7e87795909e583c05c57da79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Mon, 15 Jun 2020 09:59:45 -0300 Subject: [PATCH 43/53] Change patios a serem cobertos var --- src/libs/routes/schoolInfrastructure.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/routes/schoolInfrastructure.js b/src/libs/routes/schoolInfrastructure.js index ced26a2f..c74f0e30 100644 --- a/src/libs/routes/schoolInfrastructure.js +++ b/src/libs/routes/schoolInfrastructure.js @@ -475,9 +475,9 @@ infrastructureApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { needCourtyard.where('escola.patio = 0'); req.queryIndex.needCourtyard = req.querySet.push(needCourtyard) - 1; - // Cobertura do Pátio + // Pátios a serem cobertos let allCourtyardCoverage = allSchools.clone(); - allCourtyardCoverage.where('escola.patio_descoberto = 1'); + allCourtyardCoverage.where('escola.patio = 1'); req.queryIndex.allCourtyardCoverage = req.querySet.push(allCourtyardCoverage) - 1; req.queryIndex.haveCourtyardCoverage = req.queryIndex.allCourtyardCoverage; // It must be [] -- GitLab From 23a4d0252474efa9c49f2a06c63d1858ad58ce4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Mon, 15 Jun 2020 10:43:14 -0300 Subject: [PATCH 44/53] Update req filters in dailyChargeAmount --- src/libs/routes/dailyChargeAmount.js | 185 +++++++++++++-------------- 1 file changed, 89 insertions(+), 96 deletions(-) diff --git a/src/libs/routes/dailyChargeAmount.js b/src/libs/routes/dailyChargeAmount.js index d2303a39..bac32807 100644 --- a/src/libs/routes/dailyChargeAmount.js +++ b/src/libs/routes/dailyChargeAmount.js @@ -42,7 +42,7 @@ const config = require(`${libs}/config`); const addMissing = require(`${libs}/middlewares/addMissing`); -const cache = require('apicache').options({ debug: config.debug, statusCodes: {include: [200]} }).middleware; +const cache = require('apicache').options({ debug: config.debug, statusCodes: { include: [200] } }).middleware; let rqf = new ReqQueryFields(); @@ -52,27 +52,27 @@ let rqfCount = new ReqQueryFields(); dailyChargeAmountApp.get('/year_range', (req, res, next) => { req.sql.from('turma') - .field('MIN(turma.ano_censo)', 'start_year') - .field('MAX(turma.ano_censo)', 'end_year'); + .field('MIN(turma.ano_censo)', 'start_year') + .field('MAX(turma.ano_censo)', 'end_year'); next(); }, query, response('range')); dailyChargeAmountApp.get('/years', (req, res, next) => { req.sql.from('turma') - .field('DISTINCT turma.ano_censo', 'year'); + .field('DISTINCT turma.ano_censo', 'year'); next(); }, query, response('years')); dailyChargeAmountApp.get('/source', (req, res, next) => { req.sql.from('fonte') - .field('fonte', 'source') - .where('tabela = \'turma\''); + .field('fonte', 'source') + .where('tabela = \'turma\''); next(); }, query, response('source')); dailyChargeAmountApp.get('/adm_dependency', (req, res, next) => { req.result = []; - for(let i = 1; i <= 4; ++i) { + for (let i = 1; i <= 4; ++i) { req.result.push({ id: i, name: id2str.admDependency(i) @@ -83,7 +83,7 @@ dailyChargeAmountApp.get('/adm_dependency', (req, res, next) => { dailyChargeAmountApp.get('/adm_dependency_detailed', cache('15 day'), (req, res, next) => { req.result = []; - for(let i = 1; i <= 6; ++i) { + for (let i = 1; i <= 6; ++i) { req.result.push({ id: i, name: id2str.admDependencyPriv(i) @@ -94,58 +94,58 @@ dailyChargeAmountApp.get('/adm_dependency_detailed', cache('15 day'), (req, res, dailyChargeAmountApp.get('/location', cache('15 day'), (req, res, next) => { req.result = [ - {id: 1, name: 'Urbana'}, - {id: 2, name: 'Rural'} + { id: 1, name: 'Urbana' }, + { id: 2, name: 'Rural' } ]; next(); }, response('location')); dailyChargeAmountApp.get('/rural_location', (req, res, next) => { req.result = [ - {id: 1, name: "Urbana"}, - {id: 2, name: "Rural"}, - {id: 3, name: "Rural - Área de assentamento"}, - {id: 4, name: "Rural - Terra indígena"}, - {id: 5, name: "Rural - Área remanescente de quilombos"}, - {id: 6, name: "Rural - Unidade de uso sustentável"} + { id: 1, name: "Urbana" }, + { id: 2, name: "Rural" }, + { id: 3, name: "Rural - Área de assentamento" }, + { id: 4, name: "Rural - Terra indígena" }, + { id: 5, name: "Rural - Área remanescente de quilombos" }, + { id: 6, name: "Rural - Unidade de uso sustentável" } ]; next(); }, response('rural_location')); dailyChargeAmountApp.get('/education_level_short', (req, res, next) => { req.result = [ - {id: null, name: 'Não classificada'}, - {id: 1, name: 'Creche'}, - {id: 2, name: 'Pré-Escola'}, - {id: 3, name: 'Ensino Fundamental - anos iniciais'}, - {id: 4, name: 'Ensino Fundamental - anos finais'}, - {id: 5, name: 'Ensino Médio'}, - {id: 6, name: 'EJA'}, - {id: 7, name: 'EE exclusiva'} + { id: null, name: 'Não classificada' }, + { id: 1, name: 'Creche' }, + { id: 2, name: 'Pré-Escola' }, + { id: 3, name: 'Ensino Fundamental - anos iniciais' }, + { id: 4, name: 'Ensino Fundamental - anos finais' }, + { id: 5, name: 'Ensino Médio' }, + { id: 6, name: 'EJA' }, + { id: 7, name: 'EE exclusiva' } ]; next(); }, response('education_level_short')); dailyChargeAmountApp.get('/average/education_level_mod', (req, res, next) => { req.result = [ - {id: null, name: 'Não classificada'}, - {id: 1, name: 'Creche'}, - {id: 2, name: 'Pré-Escola'}, - {id: 3, name: 'Educação Infantil Unificada'}, - {id: 4, name: 'Ensino Fundamental - anos iniciais'}, - {id: 5, name: 'Ensino Fundamental - anos finais'}, - {id: 6, name: 'Ensino Médio'}, - {id: 7, name: 'Turma Multisseriadas e Multietapas'}, - {id: 8, name: 'EJA - Ensino Fundamental'}, - {id: 9, name: 'EJA - Ensino Médio'}, - {id: 10, name: 'Educação Profissional'} + { id: null, name: 'Não classificada' }, + { id: 1, name: 'Creche' }, + { id: 2, name: 'Pré-Escola' }, + { id: 3, name: 'Educação Infantil Unificada' }, + { id: 4, name: 'Ensino Fundamental - anos iniciais' }, + { id: 5, name: 'Ensino Fundamental - anos finais' }, + { id: 6, name: 'Ensino Médio' }, + { id: 7, name: 'Turma Multisseriadas e Multietapas' }, + { id: 8, name: 'EJA - Ensino Fundamental' }, + { id: 9, name: 'EJA - Ensino Médio' }, + { id: 10, name: 'Educação Profissional' } ]; next(); }, response('education_level_mod')); dailyChargeAmountApp.get('/period', (req, res, next) => { req.result = []; - for(let i = 1; i <= 3; ++i) { + for (let i = 1; i <= 3; ++i) { req.result.push({ id: i, name: id2str.period(i) @@ -160,9 +160,9 @@ dailyChargeAmountApp.get('/period', (req, res, next) => { dailyChargeAmountApp.get('/integral_time', (req, res, next) => { req.result = [ - {id: null, name: 'Não Disponível'}, - {id: 0, name: 'Não'}, - {id: 1, name: 'Sim'} + { id: null, name: 'Não Disponível' }, + { id: 0, name: 'Não' }, + { id: 1, name: 'Sim' } ]; next(); }, response('integral_time')); @@ -343,37 +343,30 @@ rqf.addField({ dailyChargeAmountApp.get('/', rqf.parse(), (req, res, next) => { var status = 0; - if ('integral_time' in req.filter) { - if (req.filter['integral_time'] == '0' - && ('period' in req.filter)) { - if (req.filter['period'].length == 1 - && req.filter['period'][0] == '3') { - status = 1; - } else if (req.filter['period'].length <= 2 - && (req.filter['period'].includes('1') - || req.filter['period'].includes('2')) - && (!req.filter['period'].includes('3'))) { - status = 1; - } - } else if (req.filter['integral_time'] == '1') { + if ('period' in req.filter) { + if (req.filter['period'].length == 1 && (req.filter['period'][0] == '3' || req.filter['period'][0] === 4)) { + status = 1; + } else if (req.filter['period'].length <= 2 && (req.filter['period'].includes('1') || req.filter['period'].includes('2')) && (!req.filter['period'].includes('3'))) { status = 1; } + } else if (req.filter['integral_time'] == '1') { + status = 1; } if (status) { req.sql.from('turma') - .field('turma.ano_censo', 'year') - .field('turma.etapa_resumida', 'education_level_short_id') - .field('AVG(turma.duracao_turma)/60.0', 'average_class_duration') - .field('MEDIAN(turma.duracao_turma)/60.0', 'median_class_duration') - .field('STDDEV_SAMP(turma.duracao_turma)/60.0', 'std_class_duration') - .field('QUANTILE(turma.duracao_turma, 0.25)/60.0', 'fstqt_class_duration') - .field('QUANTILE(turma.duracao_turma, 0.75)/60.0', 'thdqt_class_duration') - .group('turma.ano_censo') - .group('turma.etapa_resumida') - .order('turma.ano_censo') - .order('turma.etapa_resumida') - .where('((turma.tipo_turma_id <= 3 AND turma.tipo_atendimento_id is NULL) OR (turma.tipo_atendimento_id <= 2 AND turma.tipo_turma_id is NULL)) and turma.dependencia_adm_id <= 3') + .field('turma.ano_censo', 'year') + .field('turma.etapa_resumida', 'education_level_short_id') + .field('AVG(turma.duracao_turma)/60.0', 'average_class_duration') + .field('MEDIAN(turma.duracao_turma)/60.0', 'median_class_duration') + .field('STDDEV_SAMP(turma.duracao_turma)/60.0', 'std_class_duration') + .field('QUANTILE(turma.duracao_turma, 0.25)/60.0', 'fstqt_class_duration') + .field('QUANTILE(turma.duracao_turma, 0.75)/60.0', 'thdqt_class_duration') + .group('turma.ano_censo') + .group('turma.etapa_resumida') + .order('turma.ano_censo') + .order('turma.etapa_resumida') + .where('((turma.tipo_turma_id <= 3 AND turma.tipo_atendimento_id is NULL) OR (turma.tipo_atendimento_id <= 2 AND turma.tipo_turma_id is NULL)) and turma.dependencia_adm_id <= 3') } else { res.status(400); next({ @@ -403,16 +396,16 @@ dailyChargeAmountApp.get('/', rqf.parse(), (req, res, next) => { dailyChargeAmountApp.get('/average', rqf.parse(), rqf.build(), (req, res, next) => { var status = 0; if (('education_level_mod' in req.filter || 'education_level_mod' in req.dims) - && ('integral_time' in req.filter)) { + && ('integral_time' in req.filter)) { if (req.filter['integral_time'] == '0' - && ('period' in req.filter)) { + && ('period' in req.filter)) { if (req.filter['period'].length == 1 - && req.filter['period'][0] == '3') { + && req.filter['period'][0] == '3') { status = 1; } else if (req.filter['period'].length <= 2 - && (req.filter['period'].includes('1') - || req.filter['period'].includes('2')) - && (!req.filter['period'].includes('3'))) { + && (req.filter['period'].includes('1') + || req.filter['period'].includes('2')) + && (!req.filter['period'].includes('3'))) { status = 1; } } else if (req.filter['integral_time'] == '1') { @@ -425,40 +418,40 @@ dailyChargeAmountApp.get('/average', rqf.parse(), rqf.build(), (req, res, next) let tableR = baseQ.clone(); tableR.from('turma') - .field('duracao_turma') - .field('etapas_mod_ensino_segmento_id') - .field('ROW_NUMBER() OVER(PARTITION BY etapas_mod_ensino_segmento_id ORDER BY duracao_turma)', 'rowno') - .where('((turma.tipo_turma_id <= 3 AND turma.tipo_atendimento_id is NULL) OR (turma.tipo_atendimento_id <= 2 AND turma.tipo_turma_id is NULL))') + .field('duracao_turma') + .field('etapas_mod_ensino_segmento_id') + .field('ROW_NUMBER() OVER(PARTITION BY etapas_mod_ensino_segmento_id ORDER BY duracao_turma)', 'rowno') + .where('((turma.tipo_turma_id <= 3 AND turma.tipo_atendimento_id is NULL) OR (turma.tipo_atendimento_id <= 2 AND turma.tipo_turma_id is NULL))') let tableG = baseQ.clone(); tableG.from('turma') - .field('1+COUNT(*)', 'counter') - .field('etapas_mod_ensino_segmento_id') - .where('((turma.tipo_turma_id <= 3 AND turma.tipo_atendimento_id is NULL) OR (turma.tipo_atendimento_id <= 2 AND turma.tipo_turma_id is NULL))') - .group('etapas_mod_ensino_segmento_id') + .field('1+COUNT(*)', 'counter') + .field('etapas_mod_ensino_segmento_id') + .where('((turma.tipo_turma_id <= 3 AND turma.tipo_atendimento_id is NULL) OR (turma.tipo_atendimento_id <= 2 AND turma.tipo_turma_id is NULL))') + .group('etapas_mod_ensino_segmento_id') let joinRG = squel.select(); joinRG.from(tableR, 'R') - .field('R.etapas_mod_ensino_segmento_id') - .field('AVG(1.0*R.duracao_turma)/60', 'median_value') - .join(tableG, 'G', 'R.etapas_mod_ensino_segmento_id = G.etapas_mod_ensino_segmento_id AND R.rowNo BETWEEN G.counter/2 AND G.counter/2+G.counter%2') - .group('R.etapas_mod_ensino_segmento_id') + .field('R.etapas_mod_ensino_segmento_id') + .field('AVG(1.0*R.duracao_turma)/60', 'median_value') + .join(tableG, 'G', 'R.etapas_mod_ensino_segmento_id = G.etapas_mod_ensino_segmento_id AND R.rowNo BETWEEN G.counter/2 AND G.counter/2+G.counter%2') + .group('R.etapas_mod_ensino_segmento_id') req.sql - .from('turma') - .from(joinRG, 'm') - .field('turma.ano_censo', 'year') - .field('turma.etapas_mod_ensino_segmento_id', 'education_level_mod_id') - .field('AVG(turma.duracao_turma)/60.0', 'average_class_duration') - .field('AVG(m.median_value)', 'median_class_duration') - .field('STDDEV_SAMP(turma.duracao_turma)/60.0', 'std_class_duration') - .field('QUANTILE(turma.duracao_turma, 0.25)/60.0', 'fstqt_class_duration') - .field('QUANTILE(turma.duracao_turma, 0.75)/60.0', 'thdqt_class_duration') - .group('turma.ano_censo') - .group('turma.etapas_mod_ensino_segmento_id') - .order('turma.ano_censo') - .order('turma.etapas_mod_ensino_segmento_id') - .where('((turma.tipo_turma_id <= 3 AND turma.tipo_atendimento_id is NULL) OR (turma.tipo_atendimento_id <= 2 AND turma.tipo_turma_id is NULL)) \ + .from('turma') + .from(joinRG, 'm') + .field('turma.ano_censo', 'year') + .field('turma.etapas_mod_ensino_segmento_id', 'education_level_mod_id') + .field('AVG(turma.duracao_turma)/60.0', 'average_class_duration') + .field('AVG(m.median_value)', 'median_class_duration') + .field('STDDEV_SAMP(turma.duracao_turma)/60.0', 'std_class_duration') + .field('QUANTILE(turma.duracao_turma, 0.25)/60.0', 'fstqt_class_duration') + .field('QUANTILE(turma.duracao_turma, 0.75)/60.0', 'thdqt_class_duration') + .group('turma.ano_censo') + .group('turma.etapas_mod_ensino_segmento_id') + .order('turma.ano_censo') + .order('turma.etapas_mod_ensino_segmento_id') + .where('((turma.tipo_turma_id <= 3 AND turma.tipo_atendimento_id is NULL) OR (turma.tipo_atendimento_id <= 2 AND turma.tipo_turma_id is NULL)) \ and m.etapas_mod_ensino_segmento_id = turma.etapas_mod_ensino_segmento_id') } else { res.status(400); -- GitLab From f2d7cadf88d99c5dcbbc01b6169910ac703d5205 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Mon, 15 Jun 2020 10:46:07 -0300 Subject: [PATCH 45/53] Update req filters in dailyChargeAmount --- src/libs/routes/dailyChargeAmount.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/routes/dailyChargeAmount.js b/src/libs/routes/dailyChargeAmount.js index bac32807..4af6cb7d 100644 --- a/src/libs/routes/dailyChargeAmount.js +++ b/src/libs/routes/dailyChargeAmount.js @@ -344,7 +344,7 @@ rqf.addField({ dailyChargeAmountApp.get('/', rqf.parse(), (req, res, next) => { var status = 0; if ('period' in req.filter) { - if (req.filter['period'].length == 1 && (req.filter['period'][0] == '3' || req.filter['period'][0] === 4)) { + if (req.filter['period'].length == 1 && (req.filter['period'][0] == '3' || req.filter['period'][0] === '4')) { status = 1; } else if (req.filter['period'].length <= 2 && (req.filter['period'].includes('1') || req.filter['period'].includes('2')) && (!req.filter['period'].includes('3'))) { status = 1; -- GitLab From 1275c9276174ae18abdb668dc95ef4673982a3df Mon Sep 17 00:00:00 2001 From: Fernando Erd <fcerd@inf.ufpr.br> Date: Mon, 15 Jun 2020 11:40:10 -0300 Subject: [PATCH 46/53] Update .gitlab-ci.yml --- .gitlab-ci.yml | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4a127f37..356b1c4b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -10,23 +10,34 @@ variables: MONGO_URI: 'mongodb://mongo/app_name' NODE_ENV: 'test' -before_script: - - node -v - - npm install --global gulp gulp-cli babel babel-cli babel-core babel-register mocha gulp-mocha gulp-eslint - - npm install - - curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py - - python get-pip.py +#run_tests: +# stage: test +# before_script: +# - node -v +# - npm install --global gulp gulp-cli babel babel-cli babel-core babel-register mocha gulp-mocha #gulp-eslint +# - npm install +# script: +# - ping -W1 -c1 mongo +# - sed -i -e 's/false/true/g' config.json +# - gulp build +# - gulp test +# tags: +# - node -run_tests: +regression_tests: stage: test + before_script: + - npm install --global gulp gulp-cli babel babel-cli babel-core babel-register mocha gulp-mocha gulp-eslint + - npm install + - gulp build && gulp & + - curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py + - python get-pip.py + - sleep 60 script: + - git clone https://gitlab.c3sl.ufpr.br/simcaq/lde-api-regression-test.git - - ping -W1 -c1 mongo - - sed -i -e 's/false/true/g' config.json - - gulp build - - gulp test - cd lde-api-regression-test - pip install -r requirements.txt - - python regression_test.py --compare + - python manage.py compare --verbose tags: - node -- GitLab From 19bccb38fe5924551b96614cd0b0c9474c3c80ff Mon Sep 17 00:00:00 2001 From: Victor Picussa <vp16@inf.ufpr.br> Date: Mon, 15 Jun 2020 22:18:10 -0300 Subject: [PATCH 47/53] Changed variables to work with new protocols --- src/libs/routes/courseCount.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libs/routes/courseCount.js b/src/libs/routes/courseCount.js index 50f7ceb8..3168ba4a 100644 --- a/src/libs/routes/courseCount.js +++ b/src/libs/routes/courseCount.js @@ -241,7 +241,7 @@ rqf.addField({ }).addValue({ name: 'region', table: 'localoferta_ens_superior', - tableField: ['nome_regiao_curso', 'cod_regiao_curso'], + tableField: ['nome_regiao', 'cod_regiao'], resultField: ['region_name', 'region_id'], where: { relation: '=', @@ -257,7 +257,7 @@ rqf.addField({ }).addValue({ name: 'state', table: 'localoferta_ens_superior', - tableField: ['sigla_uf', 'cod_uf'], + tableField: ['sigla_uf_t', 'cod_uf_t'], resultField: ['state_name', 'state_id'], where: { relation: '=', @@ -273,7 +273,7 @@ rqf.addField({ }).addValue({ name: 'city', table: 'localoferta_ens_superior', - tableField: ['cod_municipio', 'nome_municipio'], + tableField: ['cod_municipio_t', 'nome_municipio_t'], resultField: ['city_id', 'city_name'], where: { relation: '=', -- GitLab From bd8f24dcdabf0379161af7e95e5a08f4cebf78bc Mon Sep 17 00:00:00 2001 From: Victor Picussa <vic_picussa2@hotmail.com> Date: Tue, 16 Jun 2020 01:36:14 -0300 Subject: [PATCH 48/53] Removed ordenation for location, yeah i know --- src/libs/middlewares/addMissing.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/middlewares/addMissing.js b/src/libs/middlewares/addMissing.js index 21ff8af0..298deaee 100644 --- a/src/libs/middlewares/addMissing.js +++ b/src/libs/middlewares/addMissing.js @@ -72,7 +72,7 @@ module.exports = function addMissing(rqf) { } if (dimsValues[rqfName].indexOf(r[rqfName]) === -1) { - if (['school', 'city', 'state', 'arrangement'].includes(dim)) { // those should be ordered by its name + if (['school', 'arrangement'].includes(dim)) { // those should be ordered by its name let namePosition = binarySearch(r[secondaryRqfName], dimsNames[secondaryRqfName], 0, dimsNames[secondaryRqfName].length) // find the position of the name in alphabetical order and keep the names vector ordered dimsValues[rqfName].splice(namePosition.pos, 0, r[rqfName]); dimsNames[secondaryRqfName].splice(namePosition.pos, 0, r[secondaryRqfName]); -- GitLab From 7ba60eb4fe4025cccec2527fd84e7640e3ae49e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Tue, 16 Jun 2020 10:20:07 -0300 Subject: [PATCH 49/53] Change outOfSchool to follow pattern --- src/libs/routes/outOfSchool.js | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/libs/routes/outOfSchool.js b/src/libs/routes/outOfSchool.js index 91bac8dd..6d2461f3 100644 --- a/src/libs/routes/outOfSchool.js +++ b/src/libs/routes/outOfSchool.js @@ -346,12 +346,22 @@ simcaqRqf.addField({ }); outOfSchoolApp.get('/simcaq', simcaqRqf.parse(), simcaqRqf.build(), (req, res, next) => { - req.sql.from('populacao_fora_da_escola') - .field('SUM(populacao_fora_da_escola.pop_fora_escola)', 'total') - .field("'Brasil'", 'name') - .field('populacao_fora_da_escola.ano_censo') - .group('populacao_fora_da_escola.ano_censo') - .order('populacao_fora_da_escola.ano_censo'); + if ('state' in req.filter || 'city' in req.filter) { // Query in state/city level + req.sql.from('populacao_fora_da_escola') + .field('SUM(populacao_fora_da_escola.pop_fora_escola)', 'total') + .field("'Brasil'", 'name') + .field('populacao_fora_da_escola.ano_censo') + .group('populacao_fora_da_escola.ano_censo') + .order('populacao_fora_da_escola.ano_censo'); + } else { // Query in 'Brasil' level + req.sql.from('populacao_fora_da_escola') + .field('SUM(populacao_fora_da_escola.pop_fora_escola)', 'total') + .field("'Brasil'", 'name') + .field('populacao_fora_da_escola.ano_censo') + .where('populacao_fora_da_escola.brasil = 1') + .group('populacao_fora_da_escola.ano_censo') + .order('populacao_fora_da_escola.ano_censo'); + } next(); }, query, (req, res, next) => { -- GitLab From d67a211753fb91439c964003986d1509482e302e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Tue, 16 Jun 2020 11:05:07 -0300 Subject: [PATCH 50/53] Remove state filter from outOfSchool when it is called with a city filter --- src/libs/routes/outOfSchool.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/libs/routes/outOfSchool.js b/src/libs/routes/outOfSchool.js index 6d2461f3..15d8599c 100644 --- a/src/libs/routes/outOfSchool.js +++ b/src/libs/routes/outOfSchool.js @@ -345,8 +345,11 @@ simcaqRqf.addField({ } }); -outOfSchoolApp.get('/simcaq', simcaqRqf.parse(), simcaqRqf.build(), (req, res, next) => { +outOfSchoolApp.get('/simcaq', simcaqRqf.parse(), (req, res, next) => { if ('state' in req.filter || 'city' in req.filter) { // Query in state/city level + + if ('city' in req.filter && 'state' in req.filter) delete req.filter.state // use only the city filter because of the table particularities + req.sql.from('populacao_fora_da_escola') .field('SUM(populacao_fora_da_escola.pop_fora_escola)', 'total') .field("'Brasil'", 'name') @@ -364,7 +367,7 @@ outOfSchoolApp.get('/simcaq', simcaqRqf.parse(), simcaqRqf.build(), (req, res, n } next(); -}, query, (req, res, next) => { +}, simcaqRqf.build(), query, (req, res, next) => { req.result.forEach((i) => { i.total = parseInt(i.total); }); -- GitLab From 8ad978651d6158d583d4d6a699acc7191bd33d31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Tue, 16 Jun 2020 11:29:01 -0300 Subject: [PATCH 51/53] Fix city e state dims --- src/libs/routes/outOfSchool.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/routes/outOfSchool.js b/src/libs/routes/outOfSchool.js index 15d8599c..fcd57867 100644 --- a/src/libs/routes/outOfSchool.js +++ b/src/libs/routes/outOfSchool.js @@ -346,7 +346,7 @@ simcaqRqf.addField({ }); outOfSchoolApp.get('/simcaq', simcaqRqf.parse(), (req, res, next) => { - if ('state' in req.filter || 'city' in req.filter) { // Query in state/city level + if ('state' in req.filter || 'city' in req.filter || 'state' in req.dims || 'city' in req.dims) { // Query in state/city level if ('city' in req.filter && 'state' in req.filter) delete req.filter.state // use only the city filter because of the table particularities -- GitLab From 1a71d4a3090407196ed4b0e40e7763486d25b97e Mon Sep 17 00:00:00 2001 From: Victor Picussa <vic_picussa2@hotmail.com> Date: Wed, 17 Jun 2020 11:02:07 -0300 Subject: [PATCH 52/53] Restore files --- src/libs/convert/stateName.js | 2 - src/libs/middlewares/addMissing.js | 2 +- src/libs/routes/courseCount.js | 206 +++++++---------------------- 3 files changed, 46 insertions(+), 164 deletions(-) diff --git a/src/libs/convert/stateName.js b/src/libs/convert/stateName.js index fe268ebc..4760d242 100644 --- a/src/libs/convert/stateName.js +++ b/src/libs/convert/stateName.js @@ -74,7 +74,5 @@ module.exports = function stateName(id) { return 'Goiás'; case 53: return 'Distrito Federal'; - case 99: - return 'Exterior'; } }; diff --git a/src/libs/middlewares/addMissing.js b/src/libs/middlewares/addMissing.js index 298deaee..1050a1df 100644 --- a/src/libs/middlewares/addMissing.js +++ b/src/libs/middlewares/addMissing.js @@ -72,7 +72,7 @@ module.exports = function addMissing(rqf) { } if (dimsValues[rqfName].indexOf(r[rqfName]) === -1) { - if (['school', 'arrangement'].includes(dim)) { // those should be ordered by its name + if (['school', 'city', 'state', 'region', 'arrangement'].includes(dim)) { // those should be ordered by its name let namePosition = binarySearch(r[secondaryRqfName], dimsNames[secondaryRqfName], 0, dimsNames[secondaryRqfName].length) // find the position of the name in alphabetical order and keep the names vector ordered dimsValues[rqfName].splice(namePosition.pos, 0, r[rqfName]); dimsNames[secondaryRqfName].splice(namePosition.pos, 0, r[secondaryRqfName]); diff --git a/src/libs/routes/courseCount.js b/src/libs/routes/courseCount.js index 3168ba4a..9a7f9d4e 100644 --- a/src/libs/routes/courseCount.js +++ b/src/libs/routes/courseCount.js @@ -40,8 +40,12 @@ const config = require(`${libs}/config`); const addMissing = require(`${libs}/middlewares/addMissing`); +const cache = require('apicache').options({ debug: config.debug, statusCodes: {include: [200]} }).middleware; + let rqf = new ReqQueryFields(); +courseCountApp.use(cache('15 day')); + courseCountApp.get('/upper_adm_dependency', (req, res, next) => { req.result = []; for(let i = 1; i <= 7; ++i) { @@ -55,8 +59,7 @@ courseCountApp.get('/upper_adm_dependency', (req, res, next) => { courseCountApp.get('/years', (req, res, next) => { req.sql.from('curso_ens_superior') - .field('DISTINCT curso_ens_superior.ano_censo', 'year') - .where('curso_ens_superior.ano_censo > 2010'); + .field('DISTINCT curso_ens_superior.ano_censo', 'year'); next(); }, query, response('years')); @@ -78,6 +81,15 @@ courseCountApp.get('/academic_organization', (req, res, next) => { next(); }, response('academic_organization')); +courseCountApp.get('/capital', (req, res, next) => { + req.result = [ + {id: null, name: 'Não Classificado'}, + {id: 0, name: 'Não'}, + {id: 1, name: 'Sim'} + ]; + next(); +}, response('capital')); + courseCountApp.get('/ocde_geral', (req, res, next) => { req.result = []; for(let i = 1; i <= 8; ++i) { @@ -127,55 +139,6 @@ courseCountApp.get('/ocde_detailed', (req, res, next) => { next(); }, response('ocde_detailed')); -courseCountApp.get('/cine_geral', (req, res, next) => { - req.result = []; - for(let i = 0; i <= 10; ++i) { - req.result.push({ - id: i, - name: id2str.cineGeral(i) - }); - }; - next(); -}, response('cine_geral')); - -courseCountApp.get('/cine_specific', (req, res, next) => { - req.result = []; - const defaultCase = null; - for(let i = 1; i <= 104; ++i) { - let obj = { - id: i, - name: id2str.cineSpecific(i) - }; - if (obj.name !== id2str.cineSpecific(defaultCase)){ - req.result.push(obj); - } - }; - req.result.push({ - id: defaultCase, - name: id2str.cineSpecific(defaultCase) - }); - next(); -}, response('cine_specific')); - -courseCountApp.get('/cine_detailed', (req, res, next) => { - req.result = []; - const defaultCase = null; - for(let i = 11; i <= 1041; ++i) { - let obj = { - id: i, - name: id2str.cineDetailed(i) - }; - if (obj.name !== id2str.cineDetailed(defaultCase)){ - req.result.push(obj); - } - }; - req.result.push({ - id: defaultCase, - name: id2str.cineDetailed(defaultCase) - }); - next(); -}, response('cine_detailed')); - courseCountApp.get('/academic_level', (req, res, next) => { req.result = []; for(let i = 1; i <= 4; ++i) { @@ -223,13 +186,6 @@ courseCountApp.get('/university', (req, res, next) => { next(); }, query, response('university')); -courseCountApp.get('/localoffer', (req, res, next) => { - req.sql.from('localoferta_ens_superior', 'l') - .field('DISTINCT l.nome', 'localoffer_name') - .field('l.cod_local_oferta', 'localoffer_id'); - next(); -}, query, response('localoffer')); - rqf.addField({ name: 'filter', field: false, @@ -240,67 +196,49 @@ rqf.addField({ where: false }).addValue({ name: 'region', - table: 'localoferta_ens_superior', - tableField: ['nome_regiao', 'cod_regiao'], + table: 'regiao', + tableField: ['nome', 'id'], resultField: ['region_name', 'region_id'], where: { relation: '=', type: 'integer', - field: 'cod_regiao_curso', - table: 'localoferta_ens_superior' + field: 'id' }, join: { - primary: ['ano_censo', 'cod_curso'], - foreign: ['ano_censo', 'cod_curso'], + primary: 'nome', + foreign: 'nome_regiao_curso', foreignTable: 'curso_ens_superior' } }).addValue({ name: 'state', - table: 'localoferta_ens_superior', - tableField: ['sigla_uf_t', 'cod_uf_t'], + table: 'estado', + tableField: ['nome', 'id'], resultField: ['state_name', 'state_id'], where: { relation: '=', type: 'integer', - field: 'cod_uf', - table: 'localoferta_ens_superior' + field: 'id' }, join: { - primary: ['ano_censo', 'cod_curso'], - foreign: ['ano_censo', 'cod_curso'], + primary: 'id', + foreign: 'cod_uf_curso', foreignTable: 'curso_ens_superior' } }).addValue({ name: 'city', - table: 'localoferta_ens_superior', - tableField: ['cod_municipio_t', 'nome_municipio_t'], - resultField: ['city_id', 'city_name'], + table: 'municipio', + tableField: ['nome', 'id'], + resultField: ['city_name', 'city_id'], where: { relation: '=', type: 'integer', - field: 'cod_municipio', - table: 'localoferta_ens_superior' + field: 'cod_municipio_curso', + table: '@' }, join: { - primary: ['ano_censo', 'cod_curso'], - foreign: ['ano_censo', 'cod_curso'], - foreignTable: 'curso_ens_superior' - } -}).addValue({ - name: 'localoffer', - table: 'localoferta_ens_superior', - tableField: ['cod_local_oferta', 'nome'], - resultField: ['localoffer_id', 'localoffer_name'], - where: { - relation: '=', - type: 'integer', - field: 'cod_curso', - table: 'curso_ens_superior' - }, - join: { - primary: ['ano_censo', 'cod_curso'], - foreign: ['ano_censo', 'cod_curso'], - foreignTable: 'curso_ens_superior' + primary: 'id', + foreign: 'cod_municipio_curso', + foreignTable: '@' } }).addValue({ name: 'university', @@ -332,6 +270,16 @@ rqf.addField({ type: 'integer', field: 'cod_organizacao_academica' } +}).addValue({ + name:'capital', + table: 'curso_ens_superior', + tableField: 'tfd_capital_curso', + resultField: 'capital_id', + where: { + relation: '=', + type: 'integer', + field: 'tfd_capital_curso' + } }).addValue({ name:'course', table: 'curso_ens_superior', @@ -372,36 +320,6 @@ rqf.addField({ type: 'integer', field: 'cod_ocde_area_detalhada' } -}).addValue({ - name:'cine_specific', - table: 'curso_ens_superior', - tableField: ['cod_cine_area_especifica', 'nome_cine_area_especifica'], - resultField: ['cine_specific_id', 'cine_specific_name'], - where: { - relation: '=', - type: 'integer', - field: 'cod_cine_area_especifica' - } -}).addValue({ - name:'cine_geral', - table: 'curso_ens_superior', - tableField: ['cod_cine_area_geral', 'nome_cine_area_geral'], - resultField: ['cine_geral_id', 'cine_geral_name'], - where: { - relation: '=', - type: 'integer', - field: 'cod_cine_area_geral' - } -}).addValue({ - name:'cine_detailed', - table: 'curso_ens_superior', - tableField: ['cod_cine_area_detalhada', 'nome_cine_area_detalhada'], - resultField: ['cine_detailed_id', 'cine_datailed_name'], - where: { - relation: '=', - type: 'integer', - field: 'cod_cine_area_detalhada' - } }).addValue({ name:'academic_level', table: 'curso_ens_superior', @@ -487,42 +405,7 @@ rqf.addField({ }); courseCountApp.get('/', rqf.parse(), (req, res, next) => { - if (("state" in req.dims) || ("city" in req.dims) || ("region" in req.dims) || - ("state" in req.filter) || ("city" in req.filter) || ("region" in req.filter)) { - req.sql.from('curso_ens_superior') - .field('COUNT(DISTINCT curso_ens_superior.cod_curso)', 'total') - .field("'Brasil'", 'name') - .field('curso_ens_superior.ano_censo', 'year') - .group('curso_ens_superior.ano_censo') - .order('curso_ens_superior.ano_censo') - .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') - .where('curso_ens_superior.cod_nivel_academico = 1'); - } else if ("localoffer" in req.dims) { - if ("university" in req.dims) { - req.sql.from('curso_ens_superior') - .field('curso_ens_superior.ano_censo', 'year') - .field('COUNT(localoferta_ens_superior.cod_local_oferta)', 'total') - .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') - .where('curso_ens_superior.cod_nivel_academico = 1') - .group('curso_ens_superior.ano_censo') - .order('curso_ens_superior.ano_censo') - .order('localoferta_ens_superior.cod_local_oferta'); - - } else { - req.sql.from('curso_ens_superior') - .field('curso_ens_superior.ano_censo', 'year') - .field('COUNT(localoferta_ens_superior.cod_local_oferta)', 'total') - .field('localoferta_ens_superior.cod_ies', 'university_id') - .field('curso_ens_superior.nome_ies', 'university_name') - .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') - .where('curso_ens_superior.cod_nivel_academico = 1') - .group('curso_ens_superior.ano_censo') - .group('localoferta_ens_superior.cod_ies') - .group('curso_ens_superior.nome_ies') - .order('curso_ens_superior.ano_censo') - .order('localoferta_ens_superior.cod_local_oferta'); - } - } else if ("university" in req.dims) { + if ("university" in req.dims) { req.sql.from('curso_ens_superior') .field('COUNT(curso_ens_superior.cod_curso)', 'total') .field("'Brasil'", 'name') @@ -533,7 +416,8 @@ courseCountApp.get('/', rqf.parse(), (req, res, next) => { .order('curso_ens_superior.ano_censo') .where('curso_ens_superior.tipo_atributo_ingresso <> 1 OR curso_ens_superior.tipo_atributo_ingresso is NULL') .where('curso_ens_superior.cod_nivel_academico = 1'); - } else { + } + else { req.sql.from('curso_ens_superior') .field('COUNT(curso_ens_superior.cod_curso)', 'total') .field("'Brasil'", 'name') -- GitLab From dfa1c61c125f9a742e9eb6bfbda51f6c53fbc6e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Wed, 17 Jun 2020 11:19:34 -0300 Subject: [PATCH 53/53] v.1.14.0 --- CHANGELOG.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 657bbdfa..9ddb1709 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,24 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## 1.14.0 - 2020-06-17 +## Added +- Route school_location +- Route mesoregion +- Route microregion +## Changed +- City route now returns microregion_id and mesoregion_id +- Update classCount base filters +- Update classroom base query +- Update classroomCount base filters in school +- Removed addMissing from cub route +- Changed dailyChargeAmount filter pattern +- Enrollment now has mesoregion/microregion dims/filters +- Changed reqFilters in outOfSchool route +- School now has mesoregion/microregion dims/filters +- Teacher now has mesoregion/microregion dims/filters +- UnivesityEnrollment now has mesoregion/microregion dims/filters + ## 1.13.2 - 2020-05-21 ## Changed - Rename rural category -- GitLab