From 19c78f53f062f3885a659e90e355e302df944a1d Mon Sep 17 00:00:00 2001 From: Vytor Calixto <vytorcalixto@gmail.com> Date: Tue, 28 Mar 2017 09:57:27 -0300 Subject: [PATCH] Add UC408 route --- src/libs/routes/enrollment.js | 182 +++++++++++++++++++++++++++++++--- 1 file changed, 167 insertions(+), 15 deletions(-) diff --git a/src/libs/routes/enrollment.js b/src/libs/routes/enrollment.js index 5f0cdd04..d29baf0d 100644 --- a/src/libs/routes/enrollment.js +++ b/src/libs/routes/enrollment.js @@ -27,9 +27,9 @@ enrollmentApp.get('/year_range', (req, res, next) => { enrollmentApp.get('/location', (req, res, next) => { req.sql = squel.select() - .field('id') - .field('descricao', 'name') - .from('localizacao'); + .field('id') + .field('descricao', 'name') + .from('localizacao'); next(); }, query, response('location')); @@ -287,28 +287,28 @@ enrollmentApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { if(typeof result.gender_id !== 'undefined') { switch (result.gender_id) { case 1: - result.gender_name = 'Masculino'; - break; + result.gender_name = 'Masculino'; + break; case 2: - result.gender_name = 'Feminino'; - break; + result.gender_name = 'Feminino'; + break; } delete result.gender_id; } if(typeof result.period_id !== 'undefined') { switch (result.period_id) { case 1: - result.period_name = 'Diurno'; - break; + result.period_name = 'Diurno'; + break; case 2: - result.period_name = 'Noturno'; - break; + result.period_name = 'Noturno'; + break; case 3: - result.period_name = 'Integral'; - break; + result.period_name = 'Integral'; + break; default: - result.period_name = 'Indefinido'; - break; + result.period_name = 'Indefinido'; + break; } delete result.period_id; } @@ -316,4 +316,156 @@ enrollmentApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { next(); }, response('enrollment')); +function schoolYearIdToStr(schoolYearId) { + let schoolYearStr; + switch(schoolYearId) { + case 11: + schoolYearStr = 'Creche - Menor de 1 ano'; + break; + case 12: + schoolYearStr = 'Creche - 1 ano'; + break; + case 13: + schoolYearStr = 'Creche - 2 anos'; + break; + case 14: + schoolYearStr = 'Creche - 3 anos'; + break; + case 21: + schoolYearStr = 'Pré-escola - 4 anos'; + break; + case 22: + schoolYearStr = 'Pré-escola - 5 anos'; + break; + case 31: + schoolYearStr = 'Ens. Fundamental - 1º Ano'; + break; + case 32: + schoolYearStr = 'Ens. Fundamental - 1ª série/2º ano'; + break; + case 33: + schoolYearStr = 'Ens. Fundamental - 2ª série/3º ano'; + break; + case 34: + schoolYearStr = 'Ens. Fundamental - 3ª série/4º ano'; + break; + case 35: + schoolYearStr = 'Ens. Fundamental - 4ª série/5º Ano'; + break; + case 41: + schoolYearStr = 'Ens. Fundamental - 5ª série/6º ano'; + break; + case 42: + schoolYearStr = 'Ens. Fundamental - 6ª série/7º ano'; + break; + case 43: + schoolYearStr = 'Ens. Fundamental - 7ª série/8º ano'; + break; + case 44: + schoolYearStr = 'Ens. Fundamental - 8ª serie/9º ano'; + break; + case 51: + schoolYearStr = 'Ens. Médio - 1ª série'; // equivalent to 'EM 1 Série' + break; + case 52: + schoolYearStr = 'Ens. Médio - 2ª série'; // equivalent to 'EM 2 Série' + break; + case 53: + schoolYearStr = 'Ens. Médio - 3ª série'; // equivalent to 'EM 3 Série' + break; + case 54: + schoolYearStr = 'Ens. Médio - 4ª série'; // equivalent to 'EM 4 Série' + break; + case 61: + schoolYearStr = 'EJA - anos iniciais do Ens. Fundamental'; + break; + case 62: + schoolYearStr = 'EJA - anos finais do Ens. Fundamental'; + break; + case 63: + schoolYearStr = 'EJA - Ensino Médio'; + break; + case 64: + schoolYearStr = 'EJA semi-presencial'; + break; + case 71: + schoolYearStr = 'Educação Profissional'; + break; + default: + schoolYearStr = 'Não classificado'; + } + return schoolYearStr; +} + +let simRqf = new ReqQueryFields(); + +simRqf.addField({ + name: 'filter' +}).addValue({ + name: 'simulation_time' +}) + +enrollmentApp.get('/offer_projection', simRqf.parse(), (req, res, next) => { + const max_year = squel.select() + .field('MAX(matricula.ano_censo)') + .from('matricula') + .toString(); + + req.sql.field('matricula.ano_censo', 'offerYear') + .field('turma.turno', 'period_id') + .field('etapa_ensino.desc_etapa', 'education_level_name') + .field('etapa_ensino.id', 'education_level_id') + .field('matricula.serie_ano_id') + .field('COUNT(matricula.id)', 'currentOffer') + .from('matricula') + .join('etapa_ensino', null, 'matricula.etapa_ensino_id=etapa_ensino.id') + .join('turma', null, 'matricula.turma_id=turma.id') + .where('matricula.tipo <= 3') + .where(`matricula.ano_censo IN (${max_year})`) + .where('turma.turno <= 2') + .group('matricula.ano_censo') + .group('turma.turno') + .group('etapa_ensino.desc_etapa') + .group('etapa_ensino.id') + .group('matricula.serie_ano_id'); + + next(); +}, query, (req, res, next) => { + let years = parseInt(req.filter.simulation_time, 10); + if(isNaN(years)) years = 0; + let offerYear = req.result[0].offerYear; + let temp = {daytime: {}, nightly: {}}; + let result = { + daytime: [], + nightly: [], + offerYear, + years: Array.apply(null, {length: years}).map(Number.call, Number).map((i)=>i+offerYear+1) + }; + req.result.forEach((i) => { + let period = (i.period_id === 1) ? 'daytime' : 'nightly'; + if(typeof temp[period][i.education_level_name] === 'undefined') { + temp[period][i.education_level_name] = { + id: i.education_level_id, + name: i.education_level_name, + currentOffer: 0, + grades: [] + }; + } + temp[period][i.education_level_name].currentOffer += i.currentOffer; + temp[period][i.education_level_name].grades.push({ + id: i.serie_ano_id, + name: schoolYearIdToStr(i.serie_ano_id), + currentOffer: i.currentOffer + }); + }); + Object.keys(temp.daytime).forEach((k) => { + result.daytime.push(temp.daytime[k]); + }); + Object.keys(temp.nightly).forEach((k) => { + result.nightly.push(temp.nightly[k]); + }); + req.result = result; + next(); +}, response('offer_projection')); + module.exports = enrollmentApp; -- GitLab