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] 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