Feat(home): over time tag spending comparison

This commit is contained in:
2019-01-27 07:18:50 +01:00
parent cd313264af
commit 7fc1675052
5 changed files with 213 additions and 61 deletions

View File

@@ -29,8 +29,48 @@ export function formatDate (row, field = 'Date') {
row[field] = moment(row[field], 'DD/MM/YYYY', true)
}
export function total (row, field = 'Montant') {
var sum = row.map(x => parseFloat(x[field]))
export function total (rows, field = 'Montant') {
var sum = rows.map(x => parseFloat(x[field]))
.reduce((sum, x) => sum + x, 0)
return Math.round(sum)
}
export function tag_filter (rows, tags, invert=false) {
// filter rows by tags
// invert inverts the selection
return rows.filter(row => {
if (invert) {
return tags.some(t => {
return row.tags.map(t => t.name.toLowerCase())
.indexOf(t.toLowerCase()) < 0
})
} else {
return tags.every(t => {
return row.tags.map(t => t.name.toLowerCase())
.indexOf(t.toLowerCase()) > -1
})
}
})
}
function objectMap (object, mapFn) {
// map a function on object value
return Object.keys(object).reduce(function(result, key) {
result[key] = mapFn(object[key])
return result
}, {})
}
export function groupBy (rows, grouping, agg) {
// Group rows by field then apply agg
var groups = rows.reduce((stock, row) => {
var group = grouping(row)
if (stock[group]) {
stock[group].push(row)
} else {
stock[group] = [row]
}
return stock
}, {})
return objectMap(groups, group => agg(group))
}