diff --git a/src/libs/routes/api.js b/src/libs/routes/api.js index 70311ae060f1da33789a0c05ba4b9f74a2bdd1e7..7d9b7644118ac6c59f6f76fe267b378f01576aa9 100644 --- a/src/libs/routes/api.js +++ b/src/libs/routes/api.js @@ -56,6 +56,8 @@ const downloads = require(`${libs}/routes/downloads`); const infrastructure = require(`${libs}/routes/infrastructure`); +const schoolInfrastructure = require(`${libs}/routes/school_infrastructure`); + const distributionFactor = require(`${libs}/routes/distributionFactor`); const siope = require(`${libs}/routes/siope`); @@ -98,6 +100,7 @@ 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); api.use('/siope', siope); api.use('/out_of_school', outOfSchool); diff --git a/src/libs/routes/school_infrastructure.js b/src/libs/routes/school_infrastructure.js index 33d731658f84262d8a40f39ba6149a7473ff0e79..5244b465c5ecbf52c1698e84b5bada3631a3098d 100644 --- a/src/libs/routes/school_infrastructure.js +++ b/src/libs/routes/school_infrastructure.js @@ -230,7 +230,7 @@ rqf.addField({ } }); -function matchQueries(queryTotal, queryPartial) { +function matchQueries(queryTotal, queryPartial, queryNeeded) { let match = []; queryTotal.forEach((result) => { let newObj = {}; @@ -240,7 +240,8 @@ function matchQueries(queryTotal, queryPartial) { }); let index = keys.indexOf('total'); if(index > -1) keys.splice(index, 1); - let objMatch = null; + let partialMatch = null; + let needMatch = null; for(let i = 0; i < queryPartial.length; ++i) { let partial = queryPartial[i]; @@ -253,15 +254,32 @@ function matchQueries(queryTotal, queryPartial) { } } if(foundMatch) { - objMatch = partial; + partialMatch = partial; break; } } - if(objMatch) { - newObj.percentage = (objMatch.total / result.total) * 100; - newObj.partial = objMatch.total; - newObj.total = result.total + for(let i = 0; i < queryNeeded.length; ++i) { + let needed = queryNeeded[i]; + let foundMatch = true; + for(let j = 0; j < keys.length; ++j) { + let key = keys[j]; + if(needed[key] !== result[key]) { + foundMatch = false; + break; + } + } + if(foundMatch) { + needMatch = needed; + break; + } + } + + if(partialMatch && needMatch) { + newObj.percentage = (partialMatch.total / result.total) * 100; + newObj.partial = partialMatch.total; + newObj.total = result.total; + newObj.need_adaptation = needMatch.total; match.push(newObj); } }); @@ -284,6 +302,7 @@ infrastructureApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { .where('escola.local_func_predio_escolar = 1') .where('escola.dependencia_adm_id <= 3') .order('escola.ano_censo'); + req.queryIndex.allSchools = req.querySet.push(allSchools) - 1; // Bibliotecas let allLibraries = allSchools.clone(); @@ -386,20 +405,30 @@ infrastructureApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { let needSportsCourtCoverage = allSportsCourt.clone(); needSportsCourtCoverage.where('escola.quadra_esportes_descoberta = 0'); + req.queryIndex.needSportsCourtCoverage = req.querySet.push(needSportsCourtCoverage) - 1; // Pátio req.queryIndex.allCourtyard = req.queryIndex.allSchools; let haveCourtyard = allSchools.clone(); - haveCourtyard.where('escola.patio_coberto = 1'); + haveCourtyard.where('escola.patio_coberto = 1 OR escola.patio_descoberto = 1'); req.queryIndex.haveCourtyard = req.querySet.push(haveCourtyard) - 1; let needCourtyard = allSchools.clone(); - needCourtyard.where('escola.patio_descoberto = 0'); + needCourtyard.where('escola.patio_descoberto = 0 AND escola.patio_descoberto = 0'); req.queryIndex.needCourtyard = req.querySet.push(needCourtyard) - 1; // Cobertura do Pátio - // TODO: + // FIXME: possÃvel fixme no where + req.queryIndex.allCourtyardCoverage = req.queryIndex.allSchools; + + let haveCourtyardCoverage = allSchools.clone(); + haveCourtyardCoverage.where('escola.patio_coberto=0 AND escola.patio_descoberto = 1'); + req.queryIndex.haveCourtyardCoverage = req.querySet.push(haveCourtyardCoverage) - 1; + + let needCourtyardCoverage = allSchools.clone(); + needCourtyardCoverage.where('escola.patio_coberto=0 AND escola.patio_descoberto=0'); + req.queryIndex.needCourtyardCoverage = req.querySet.push(needCourtyardCoverage) - 1; // Sala de direção req.queryIndex.allDirectorRoom = req.queryIndex.allLibraries; @@ -489,13 +518,6 @@ infrastructureApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { needBroadbandInternet.where('escola.internet_banda_larga = 0'); req.queryIndex.needBroadbandInternet = req.querySet.push(needBroadbandInternet) - 1; - // Banheiro dentro do prédio - req.queryIndex.allInsideBathroom = req.queryIndex.allSecretary; - - let haveInsideBathroom = allSecretary.clone(); - haveInsideBathroom.where('escola.sanitario_dentro_predio = 1'); - req.queryIndex.haveInsideBathroom = req.querySet.push(haveInsideBathroom) - 1; - // Banheiro adequado para educação infantil dentro do prédio req.queryIndex.allInsideKidsBathroom = req.queryIndex.allKidsPark; @@ -503,88 +525,95 @@ infrastructureApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { haveInsideKidsBathroom.where('escola.sanitario_ei = 1'); req.queryIndex.haveInsideKidsBathroom = req.querySet.push(haveInsideKidsBathroom) - 1; - // Fornecimento de energia - req.queryIndex.allEletricEnergy = req.queryIndex.allSecretary; - - let haveEletricEnergy = allSecretary.clone(); - haveEletricEnergy.where('escola.fornecimento_energia = 1'); - req.queryIndex.haveEletricEnergy = req.querySet.push(haveEletricEnergy) - 1; + let needInsideKidsBathroom = allKidsPark.clone(); + needInsideKidsBathroom.where('escola.sanitario_ei = 0'); + req.queryIndex.needInsideKidsBathroom = req.querySet.push(needInsideKidsBathroom) - 1; // Abastecimento de água - req.queryIndex.allWaterSupply = req.queryIndex.allSecretary; + req.queryIndex.allWaterSupply = req.queryIndex.allSchools; - let haveWaterSupply = allSecretary.clone(); + let haveWaterSupply = allSchools.clone(); haveWaterSupply.where('escola.fornecimento_agua = 1'); req.queryIndex.haveWaterSupply = req.querySet.push(haveWaterSupply) - 1; + let needWaterSupply = allSchools.clone(); + needWaterSupply.where('escola.fornecimento_agua = 0'); + req.queryIndex.needWaterSupply = req.querySet.push(needWaterSupply) - 1; + // Ãgua filtrada - req.queryIndex.allFilteredWater = req.queryIndex.allSecretary; + req.queryIndex.allFilteredWater = req.queryIndex.allSchools; - let haveFilteredWater = allSecretary.clone(); + let haveFilteredWater = allSchools.clone(); haveFilteredWater.where('escola.agua_filtrada = 1'); req.queryIndex.haveFilteredWater = req.querySet.push(haveFilteredWater) - 1; + let needFilteredWater = allSchools.clone(); + needFilteredWater.where('escola.agua_filtrada = 0'); + req.queryIndex.needFilteredWater = req.querySet.push(needFilteredWater) - 1; + // Coleta de esgoto - req.queryIndex.allSewage = req.queryIndex.allSecretary; + req.queryIndex.allSewage = req.queryIndex.allSchools; - let haveSewage = allSecretary.clone(); + let haveSewage = allSchools.clone(); haveSewage.where('escola.esgoto_sanitario = 1'); req.queryIndex.haveSewage = req.querySet.push(haveSewage) - 1; - // Sala de recursos multifuncionais para Atendimento Educacional Especializado - req.queryIndex.allMultifunctionRoom = req.queryIndex.allSecretary; + let needSewage = allSchools.clone(); + needSewage.where('escola.esgoto_sanitario = 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'); + req.queryIndex.haveAdaptedBuilding = req.querySet.push(haveAdaptedBuilding) - 1; - let haveMultifunctionRoom = allSecretary.clone(); - haveMultifunctionRoom.where('escola.sala_atendimento_especial = 1'); - req.queryIndex.haveMultifunctionRoom = req.querySet.push(haveMultifunctionRoom) - 1; + let needAdaptedBuilding = allSchools.clone(); + needAdaptedBuilding.where('escola.dependencias_pne = 0'); + req.queryIndex.needAdaptedBuilding = req.querySet.push(needAdaptedBuilding) - 1; // Banheiros adaptados para pessoas com deficiências - req.queryIndex.allSpecialBathroom = req.queryIndex.allSecretary; + req.queryIndex.allSpecialBathroom = req.queryIndex.allSchools; - let haveSpecialBathroom = allSecretary.clone(); + let haveSpecialBathroom = allSchools.clone(); haveSpecialBathroom.where('escola.sanitario_pne = 1'); req.queryIndex.haveSpecialBathroom = req.querySet.push(haveSpecialBathroom) - 1; - // Dependências adaptada para pessoas com deficiências - req.queryIndex.allAdaptedBuilding = req.queryIndex.allSecretary; + let needSpecialBathroom = allSchools.clone(); + needSpecialBathroom.where('escola.sanitario_pne = 1'); + req.queryIndex.needSpecialBathroom = req.querySet.push(needSpecialBathroom) - 1; - let haveAdaptedBuilding = allSecretary.clone(); - haveAdaptedBuilding.where('escola.dependencias_pne = 1'); - req.queryIndex.haveAdaptedBuilding = req.querySet.push(haveAdaptedBuilding) - 1; next(); }, multiQuery, (req, res, next) => { // Faz o matching entre os resultados - let school_place = matchQueries(req.result[req.queryIndex.allSchools], req.result[req.queryIndex.schoolPlace]); - let libraries = matchQueries(req.result[req.queryIndex.allLibraries], req.result[req.queryIndex.haveLibraries]); - let libraries_reading_room = matchQueries(req.result[req.queryIndex.allLibrariesReadingRoom], req.result[req.queryIndex.haveLibrariesReadingRoom]); - let computer_lab = matchQueries(req.result[req.queryIndex.allInfLab], req.result[req.queryIndex.haveInfLab]); - let science_lab = matchQueries(req.result[req.queryIndex.allScienceLab], req.result[req.queryIndex.haveScienceLab]); - let kids_park = matchQueries(req.result[req.queryIndex.allKidsPark], req.result[req.queryIndex.haveKidsPark]); - let nursery = matchQueries(req.result[req.queryIndex.allCribs], req.result[req.queryIndex.haveCribs]); - let sports_court = matchQueries(req.result[req.queryIndex.allSportsCourt], req.result[req.queryIndex.haveSportsCourt]); - let covered_sports_court = matchQueries(req.result[req.queryIndex.allCoveredSportsCourt], req.result[req.queryIndex.haveCoveredSportsCourt]); - let uncovered_sports_court = matchQueries(req.result[req.queryIndex.allUncoveredSportsCourt], req.result[req.queryIndex.haveUncoveredSportsCourt]); - let director_room = matchQueries(req.result[req.queryIndex.allDirectorRoom], req.result[req.queryIndex.haveDirectorRoom]); - let secretary = matchQueries(req.result[req.queryIndex.allSecretary], req.result[req.queryIndex.haveSecretary]); - let teacher_room = matchQueries(req.result[req.queryIndex.allTeacherRoom], req.result[req.queryIndex.haveTeacherRoom]); - let kitchen = matchQueries(req.result[req.queryIndex.allKitchen], req.result[req.queryIndex.haveKitchen]); - let storeroom = matchQueries(req.result[req.queryIndex.allStoreroom], req.result[req.queryIndex.haveStoreroom]); - let warehouse = matchQueries(req.result[req.queryIndex.allWarehouse], req.result[req.queryIndex.haveWarehouse]); - let internet = matchQueries(req.result[req.queryIndex.allInternet], req.result[req.queryIndex.haveInternet]); - let broadband_internet = matchQueries(req.result[req.queryIndex.allBroadbandInternet], req.result[req.queryIndex.haveBroadbandInternet]); - let inside_bathroom = matchQueries(req.result[req.queryIndex.allInsideBathroom], req.result[req.queryIndex.haveInsideBathroom]); - let inside_kids_bathroom = matchQueries(req.result[req.queryIndex.allInsideKidsBathroom], req.result[req.queryIndex.haveInsideKidsBathroom]); - let eletric_energy = matchQueries(req.result[req.queryIndex.allEletricEnergy], req.result[req.queryIndex.haveEletricEnergy]); - let water_supply = matchQueries(req.result[req.queryIndex.allWaterSupply], req.result[req.queryIndex.haveWaterSupply]); - let filtered_water = matchQueries(req.result[req.queryIndex.allFilteredWater], req.result[req.queryIndex.haveFilteredWater]); - let sewage_treatment = matchQueries(req.result[req.queryIndex.allSewage], req.result[req.queryIndex.haveSewage]); - let special_multifunction_room = matchQueries(req.result[req.queryIndex.allMultifunctionRoom], req.result[req.queryIndex.haveMultifunctionRoom]); - let special_bathroom = matchQueries(req.result[req.queryIndex.allSpecialBathroom], req.result[req.queryIndex.haveSpecialBathroom]); - let adapted_building = matchQueries(req.result[req.queryIndex.allAdaptedBuilding], req.result[req.queryIndex.haveAdaptedBuilding]); + let libraries = matchQueries(req.result[req.queryIndex.allLibraries], req.result[req.queryIndex.haveLibraries], req.result[req.queryIndex.needLibraries]); + let libraries_reading_room = matchQueries(req.result[req.queryIndex.allLibrariesReadingRoom], req.result[req.queryIndex.haveLibrariesReadingRoom], req.result[req.queryIndex.needLibrariesReadingRoom]); + 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 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.haveSportsCourtCoverage], req.result[req.queryIndex.needSportsCourtCoverage]); + let courtyard = matchQueries(req.result[req.queryIndex.allCourtyard], req.result[req.queryIndex.haveCourtyard], req.result[req.queryIndex.needCourtyard]); + let courtyard_coverage = matchQueries(req.result[req.queryIndex.allCourtyardCoverage], req.result[req.queryIndex.haveCourtyardCoverage], req.result[req.queryIndex.needCourtyardCoverage]); + let director_room = matchQueries(req.result[req.queryIndex.allDirectorRoom], req.result[req.queryIndex.haveDirectorRoom], req.result[req.queryIndex.needDirectorRoom]); + let secretary = matchQueries(req.result[req.queryIndex.allSecretary], req.result[req.queryIndex.haveSecretary], req.result[req.queryIndex.needSecretary]); + let teacher_room = matchQueries(req.result[req.queryIndex.allTeacherRoom], req.result[req.queryIndex.haveTeacherRoom], req.result[req.queryIndex.needTeacherRoom]); + let kitchen = matchQueries(req.result[req.queryIndex.allKitchen], req.result[req.queryIndex.haveKitchen], req.result[req.queryIndex.needKitchen]); + let storeroom = matchQueries(req.result[req.queryIndex.allStoreroom], req.result[req.queryIndex.haveStoreroom], req.result[req.queryIndex.needStoreroom]); + let warehouse = matchQueries(req.result[req.queryIndex.allWarehouse], req.result[req.queryIndex.haveWarehouse], req.result[req.queryIndex.needWarehouse]); + let internet = matchQueries(req.result[req.queryIndex.allInternet], req.result[req.queryIndex.haveInternet], req.result[req.queryIndex.needInternet]); + let broadband_internet = matchQueries(req.result[req.queryIndex.allBroadbandInternet], req.result[req.queryIndex.haveBroadbandInternet], req.result[req.queryIndex.needBroadbandInternet]); + let inside_kids_bathroom = matchQueries(req.result[req.queryIndex.allInsideKidsBathroom], req.result[req.queryIndex.haveInsideKidsBathroom], req.result[req.queryIndex.needInsideKidsBathroom]); + let water_supply = matchQueries(req.result[req.queryIndex.allWaterSupply], req.result[req.queryIndex.haveWaterSupply], req.result[req.queryIndex.needWaterSupply]); + let filtered_water = matchQueries(req.result[req.queryIndex.allFilteredWater], req.result[req.queryIndex.haveFilteredWater], req.result[req.queryIndex.needFilteredWater]); + let sewage = matchQueries(req.result[req.queryIndex.allSewage], req.result[req.queryIndex.haveSewage], req.result[req.queryIndex.needSewage]); + let adapted_building = matchQueries(req.result[req.queryIndex.allAdaptedBuilding], req.result[req.queryIndex.haveAdaptedBuilding], req.result[req.queryIndex.needAdaptedBuilding]); + let special_bathroom = matchQueries(req.result[req.queryIndex.allSpecialBathroom], req.result[req.queryIndex.haveSpecialBathroom], req.result[req.queryIndex.needSpecialBathroom]); req.result = [{ - school_place, libraries, libraries_reading_room, computer_lab, @@ -592,8 +621,9 @@ infrastructureApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { kids_park, nursery, sports_court, - covered_sports_court, - uncovered_sports_court, + sports_court_coverage, + courtyard, + courtyard_coverage, director_room, secretary, teacher_room, @@ -602,15 +632,12 @@ infrastructureApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { warehouse, internet, broadband_internet, - inside_bathroom, inside_kids_bathroom, - eletric_energy, water_supply, filtered_water, - sewage_treatment, - special_multifunction_room, - special_bathroom, - adapted_building + sewage, + adapted_building, + special_bathroom }]; next();