Newer
Older
module.exports = function addMissing(rqf){
return (req, res, next) => {
let dims = Object.keys(req.dims).filter(i => {return i !== 'size';});
// FIXME: No momento, só funciona para duas dimensões (padrão para o LDE)
if(dims.length != 2) return next();
if(req.filter.min_year != req.filter.max_year) return next();
if(req.result.length === 0) return next();
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
let result = req.result;
let dimsValues = {};
result.forEach((r) => {
dims.forEach((dim) => {
let rqfName = rqf.fieldValues[dim].resultField;
if(typeof dimsValues[rqfName] === 'undefined') {
dimsValues[rqfName] = [];
}
if(dimsValues[rqfName].indexOf(r[rqfName]) === -1) {
dimsValues[rqfName].push(r[rqfName]);
}
})
});
let G = {};
let rqfName = rqf.fieldValues[dims[0]].resultField;
let rqfName2 = rqf.fieldValues[dims[1]].resultField;
G[rqfName] = {};
dimsValues[rqfName].forEach((value) => {
let secondDim = {};
dimsValues[rqfName2].forEach((dValue) => {
secondDim[dValue] = false;
});
G[rqfName][value] = {};
G[rqfName][value][rqfName2] = secondDim;
});
result.forEach((r) => {
let resultDim1 = r[rqfName];
let resultDim2 = r[rqfName2];
G[rqfName][resultDim1][rqfName2][resultDim2] = true;
});
Object.keys(G[rqfName]).forEach((dim1Value) => {
Object.keys(G[rqfName][dim1Value][rqfName2]).forEach((dim2Value) => {
let value = G[rqfName][dim1Value][rqfName2][dim2Value];
if(!value) {
let newEntry = Object.assign({}, result[0], {[rqfName]: parseInt(dim1Value, 10), [rqfName2]: parseInt(dim2Value, 10), total: 0});
// result.push(newEntry);
let index = 0;
for(let i = 0; i < result.length; ++i) {
let r = result[i];
index = i;
if(r[rqfName] > newEntry[rqfName]) break;
if(r[rqfName] == newEntry[rqfName] && r[rqfName2] > newEntry[rqfName2]) break;
}
let newResult = [...result.slice(0, index), newEntry, ...result.slice(index, result.length)];
result = newResult;
}
});
});
req.result = result;
next();
};
};