diff --git a/src/libs/routes_v1/rateSchoolNew.js b/src/libs/routes_v1/rateSchoolNew.js index a6ae0218aaa01e00cb695ac59a690a836a532d2c..237edfa1d5fa2d3033ded9b103452b5f01ba1e1b 100644 --- a/src/libs/routes_v1/rateSchoolNew.js +++ b/src/libs/routes_v1/rateSchoolNew.js @@ -308,20 +308,49 @@ rqf.addField({ } }); -// The queries are matched and the total is calculated -function matchQueries(attendsSchoolObj, populationObj) { - let match = []; - - for (let i = 0; i < attendsSchoolObj.length; i++) { - let newObj = attendsSchoolObj[i]; - - newObj.total = (attendsSchoolObj[i].total / populationObj[i].total) * 100; +/* + The queries are matched and the total is calculated. + This function is necessary to match the results of the + 2 queries with the right pair. In some queries, the result + doesn't exist in one of the 2, so, we need to run this algorithm + to match them right. +*/ - newObj.age_range_id = newObj.faixa_etaria; - delete newObj.faixa_etaria; +function matchQueries(queryPartial, queryTotal) { + let match = []; + queryTotal.forEach((result) => { + let newObj = {}; + let keys = Object.keys(result); + keys.forEach((key) => { + newObj[key] = result[key]; + }); + let index = keys.indexOf('total'); + if(index > -1) keys.splice(index, 1); + let objMatch = null; + + for(let i = 0; i < queryPartial.length; ++i) { + let partial = queryPartial[i]; + let foundMatch = true; + for(let j = 0; j < keys.length; ++j) { + let key = keys[j]; + if(partial[key] !== result[key]) { + foundMatch = false; + break; + } + } + if(foundMatch) { + objMatch = partial; + break; + } + } - match.push(newObj); - } + if(objMatch) { + newObj.denominator = result.total; + newObj.partial = objMatch.total; + newObj.total = (objMatch.total / result.total) * 100; + match.push(newObj); + } + }); return match; }