dropped a whole lot of dead code

This commit is contained in:
Gwenhael Le Moine 2017-11-23 09:44:56 +01:00
parent ae58ed0a37
commit 654b87aa00
No known key found for this signature in database
GPG key ID: FDFE3669426707A7
3 changed files with 126 additions and 228 deletions

View file

@ -21,108 +21,46 @@ app.component('dashboard', {
controller: ['$filter', '$q', 'API', controller: ['$filter', '$q', 'API',
function ($filter, $q, API) { function ($filter, $q, API) {
var ctrl = this; var ctrl = this;
ctrl.xFunction = function () { ctrl.xFunction = function () { return function (d) { return d.account; }; };
return function (d) { ctrl.yFunction = function () { return function (d) { return d.amount; }; };
return d.account;
};
};
ctrl.yFunction = function () {
return function (d) {
return d.amount;
};
};
ctrl.toolTipContentFunction = function () { ctrl.toolTipContentFunction = function () {
return function (key, x, y, e, graph) { return function (key, x, y, e, graph) {
var details = ctrl.balance.details[key]; var details = ctrl.balance.details[key];
return '<md-content><h3>' + key + '</h3>' + '<table>' + _(details).map(function (transaction) { console.log(details);
return '<tr><td>' + transaction.date + '</td><td>' + transaction.payee + '</td><td style="text-align: right">' + $filter('number')(transaction.amount, 2) + ' ' + transaction.currency + '</td></tr>'; return "<md-content><h3>" + key + "</h3><table>" + _(details).map(function (transaction) {
}).join('') + '<tr><th></th><th>Total :</th><th>' + x + ' €</th></tr>' + '</table></md-content>'; return "<tr><td>" + transaction.date + "</td><td>" + transaction.payee + "</td><td style=\"text-align: right\">" + $filter('number')(transaction.amount, 2) + " " + transaction.currency + "</td></tr>";
}).join('') + "<tr><th></th><th>Total :</th><th>" + x + " \u20AC</th></tr></table></md-content>'";
}; };
}; };
var score_account = function (account) { ctrl.filter_data = function (bucket) {
if (account.match(/^Income/)) { bucket.data = [{ key: bucket.categories, values: [] }];
return -10; if (_(bucket.accounts_selected).isEmpty() && bucket.score_threshold === 0) {
} bucket.data[0].values = bucket.raw_data;
else if (account.match(/^Expenses:(courses|Hang)$/)) {
return 1;
}
else if (account.match(/^Expenses:Home/)) {
return 1;
}
else if (account.match(/^Expenses:Health/)) {
return 1;
}
else if (account.match(/^Expenses:Car/)) {
return 4;
}
else if (account.match(/^Expenses:(Food|Transport)/)) {
return 5;
}
else if (account.match(/^Expenses:(Shopping|Leisure)/)) {
return 9;
}
else if (account.match(/^Expenses:Gadgets/)) {
return 10;
}
else if (account.match(/^Liabilities/)) {
return 0;
}
else if (account.match(/^Assets/)) {
return -100;
} }
else { else {
return 0; _(bucket.accounts_selected).each(function (account_selected) {
bucket.data[0].values = bucket.data[0].values.concat($filter('filter')(bucket.raw_data, account_selected, true));
});
} }
}; bucket.total_detailed = _.chain(bucket.data[0].values)
ctrl.coloring_score = function (score) { .groupBy(function (account) {
var adjusted_score = score; return account.account.split(':')[0];
var color_scale = ['#99f', '#0f0', '#3f0', '#6f0', '#9f0', '#cf0', '#fc0', '#f90', '#f60', '#f30', '#f00']; })
if (score <= -100) { .each(function (category) {
adjusted_score = (score * -1) - 100; category.total = _(category).reduce(function (memo, account) {
color_scale = ['#f0f']; return memo + account.amount;
} }, 0);
else if (score <= -10) { })
adjusted_score = (score * -1) - 10; .value();
color_scale = ['#360']; bucket.total_detailed = _.chain(bucket.total_detailed)
} .keys()
return color_scale[adjusted_score]; .map(function (key) {
}; return {
ctrl.color = function () { account: key,
return function (d, i) { amount: bucket.total_detailed[key].total
return ctrl.coloring_score(score_account(d.data.account)); };
}; })
}; .value();
ctrl.filter_data = function () {
_(ctrl.balance.buckets).each(function (bucket) {
bucket.data = [{ key: 'accounts', values: [] }];
if (_(bucket.accounts_selected).isEmpty() && bucket.score_threshold === 0) {
bucket.data[0].values = bucket.raw_data;
}
else {
_(bucket.accounts_selected).each(function (account_selected) {
bucket.data[0].values = bucket.data[0].values.concat($filter('filter')(bucket.raw_data, account_selected, true));
});
}
bucket.total_detailed = _.chain(bucket.data[0].values)
.groupBy(function (account) {
return account.account.split(':')[0];
})
.each(function (category) {
category.total = _(category).reduce(function (memo, account) {
return memo + account.amount;
}, 0);
})
.value();
bucket.total_detailed = _.chain(bucket.total_detailed)
.keys()
.map(function (key) {
return {
account: key,
amount: bucket.total_detailed[key].total
};
})
.value();
});
}; };
var Bucket = function (categories, period) { var Bucket = function (categories, period) {
var _this = this; var _this = this;
@ -164,9 +102,24 @@ app.component('dashboard', {
}; };
}; };
ctrl.depth = 99; ctrl.depth = 99;
var merge_buckets = function (buckets) {
var first_bucket = ctrl.balance.buckets.shift();
ctrl.balance.buckets = [_(ctrl.balance.buckets).reduce(function (memo, bucket) {
memo.categories += " " + bucket.categories;
memo.graph_options.chart.height += bucket.graph_options.chart.height;
memo.raw_data = memo.raw_data.concat(bucket.raw_data);
memo.data.push(bucket.data[0]);
memo.total_detailed = memo.total_detailed.concat(bucket.total_detailed);
return memo;
}, first_bucket)];
console.log(ctrl.balance.buckets);
};
var retrieve_period_detailed_data = function () { var retrieve_period_detailed_data = function () {
ctrl.balance = { ctrl.balance = {
buckets: [new Bucket('Expenses Liabilities Equity Income', ctrl.period)], buckets: [new Bucket('Expenses', ctrl.period),
new Bucket('Liabilities', ctrl.period),
new Bucket('Equity', ctrl.period),
new Bucket('Income', ctrl.period)],
details: {} details: {}
}; };
return $q.all(_(ctrl.balance.buckets).map(function (bucket) { return $q.all(_(ctrl.balance.buckets).map(function (bucket) {
@ -177,10 +130,6 @@ app.component('dashboard', {
}) })
.then(function (response) { .then(function (response) {
bucket.raw_data = _.chain(response.data) bucket.raw_data = _.chain(response.data)
.map(function (account) {
account.score = score_account(account.account);
return account;
})
.sortBy(function (account) { .sortBy(function (account) {
return 1 / account.amount; return 1 / account.amount;
}) })
@ -193,9 +142,13 @@ app.component('dashboard', {
return memo + account.amount; return memo + account.amount;
}, 0); }, 0);
bucket.accounts_selected = bucket.raw_data; bucket.accounts_selected = bucket.raw_data;
ctrl.filter_data(); ctrl.filter_data(bucket);
bucket.graph_options.chart.height = 60 + (15 * bucket.data[0].values.length);
}); });
})); }))
.then(function () {
ctrl.buckets = merge_buckets(ctrl.buckets);
});
}; };
var retrieve_accounts = function () { var retrieve_accounts = function () {
return $q.when(API.accounts() return $q.when(API.accounts()

File diff suppressed because one or more lines are too long

View file

@ -4,108 +4,36 @@ app.component('dashboard',
function($filter, $q, API) { function($filter, $q, API) {
let ctrl = this; let ctrl = this;
ctrl.xFunction = function() { ctrl.filter_data = function(bucket) {
return function(d) { bucket.data = [{ key: bucket.categories, values: [] }];
return d.account;
};
};
ctrl.yFunction = function() {
return function(d) {
return d.amount;
};
};
ctrl.toolTipContentFunction = function() {
return function(key, x, y, e, graph) {
let details = ctrl.balance.details[key];
return '<md-content><h3>' + key + '</h3>' + '<table>' + _(details).map(function(transaction) {
return '<tr><td>' + transaction.date + '</td><td>' + transaction.payee + '</td><td style="text-align: right">' + $filter('number')(transaction.amount, 2) + ' ' + transaction.currency + '</td></tr>';
}).join('') + '<tr><th></th><th>Total :</th><th>' + x + ' €</th></tr>' + '</table></md-content>';
};
};
// compute an account's score: from 1 (good) to 10 (bad), 0 is neutral/undecided if (_(bucket.accounts_selected).isEmpty() && bucket.score_threshold === 0) {
let score_account = function(account) { bucket.data[0].values = bucket.raw_data;
if (account.match(/^Income/)) {
return -10;
} else if (account.match(/^Expenses:(courses|Hang)$/)) {
return 1;
} else if (account.match(/^Expenses:Home/)) {
return 1;
} else if (account.match(/^Expenses:Health/)) {
return 1;
} else if (account.match(/^Expenses:Car/)) {
return 4;
} else if (account.match(/^Expenses:(Food|Transport)/)) {
return 5;
} else if (account.match(/^Expenses:(Shopping|Leisure)/)) {
return 9;
} else if (account.match(/^Expenses:Gadgets/)) {
return 10;
} else if (account.match(/^Liabilities/)) {
return 0;
} else if (account.match(/^Assets/)) {
return -100;
} else { } else {
return 0; _(bucket.accounts_selected).each(function(account_selected) {
} bucket.data[0].values = bucket.data[0].values.concat($filter('filter')(bucket.raw_data, account_selected, true));
}; });
ctrl.coloring_score = function(score) {
let adjusted_score = score;
let color_scale = ['#99f', '#0f0', '#3f0', '#6f0', '#9f0', '#cf0', '#fc0', '#f90', '#f60', '#f30', '#f00'];
if (score <= -100) {
// Assets
adjusted_score = (score * -1) - 100;
color_scale = ['#f0f'];
} else if (score <= -10) {
// Income
adjusted_score = (score * -1) - 10;
color_scale = ['#360'];
} }
return color_scale[adjusted_score]; bucket.total_detailed = _.chain(bucket.data[0].values)
}; .groupBy(function(account) {
return account.account.split(':')[0];
ctrl.color = function() { })
return function(d, i) { .each(function(category) {
return ctrl.coloring_score(score_account(d.data.account)); category.total = _(category).reduce(function(memo, account) {
}; return memo + account.amount;
}; }, 0);
})
ctrl.filter_data = function() { .value();
_(ctrl.balance.buckets).each(function(bucket) { bucket.total_detailed = _.chain(bucket.total_detailed)
bucket.data = [{ key: 'accounts', values: [] }]; .keys()
.map(function(key) {
if (_(bucket.accounts_selected).isEmpty() && bucket.score_threshold === 0) { return {
bucket.data[0].values = bucket.raw_data; account: key,
} else { amount: bucket.total_detailed[key].total
_(bucket.accounts_selected).each(function(account_selected) { };
bucket.data[0].values = bucket.data[0].values.concat($filter('filter')(bucket.raw_data, account_selected, true)); })
}); .value();
}
bucket.total_detailed = _.chain(bucket.data[0].values)
.groupBy(function(account) {
return account.account.split(':')[0];
})
.each(function(category) {
category.total = _(category).reduce(function(memo, account) {
return memo + account.amount;
}, 0);
})
.value();
bucket.total_detailed = _.chain(bucket.total_detailed)
.keys()
.map(function(key) {
return {
account: key,
amount: bucket.total_detailed[key].total
};
})
.value();
});
}; };
let Bucket = function(categories, period) { let Bucket = function(categories, period) {
@ -125,7 +53,6 @@ app.component('dashboard',
this.graph_options = { this.graph_options = {
chart: { chart: {
//type: 'discreteBarChart',
type: 'multiBarHorizontalChart', type: 'multiBarHorizontalChart',
height: 600, height: 600,
margin: { margin: {
@ -151,10 +78,26 @@ app.component('dashboard',
ctrl.depth = 99; ctrl.depth = 99;
let merge_buckets = function(buckets) {
let first_bucket = ctrl.balance.buckets.shift();
ctrl.balance.buckets = [_(ctrl.balance.buckets).reduce(function(memo, bucket) {
memo.categories += ` ${bucket.categories}`;
memo.graph_options.chart.height += bucket.graph_options.chart.height;
memo.raw_data = memo.raw_data.concat(bucket.raw_data);
memo.data.push(bucket.data[0]);
memo.total_detailed = memo.total_detailed.concat(bucket.total_detailed);
return memo;
}, first_bucket)];
console.log(ctrl.balance.buckets)
};
let retrieve_period_detailed_data = function() { let retrieve_period_detailed_data = function() {
ctrl.balance = { ctrl.balance = {
buckets: [new Bucket('Expenses Liabilities Equity Income', ctrl.period)],// , buckets: [new Bucket('Expenses', ctrl.period),
// new Bucket('Assets', null)], new Bucket('Liabilities', ctrl.period),
new Bucket('Equity', ctrl.period),
new Bucket('Income', ctrl.period)],
details: {} details: {}
}; };
@ -166,10 +109,6 @@ app.component('dashboard',
}) })
.then(function(response) { .then(function(response) {
bucket.raw_data = _.chain(response.data) bucket.raw_data = _.chain(response.data)
.map(function(account) {
account.score = score_account(account.account);
return account;
})
.sortBy(function(account) { .sortBy(function(account) {
return 1 / account.amount; return 1 / account.amount;
}) })
@ -183,9 +122,14 @@ app.component('dashboard',
}, 0); }, 0);
bucket.accounts_selected = bucket.raw_data; bucket.accounts_selected = bucket.raw_data;
ctrl.filter_data(); ctrl.filter_data(bucket);
bucket.graph_options.chart.height = 60 + (15 * bucket.data[0].values.length);
}); });
})); }))
.then(function() {
ctrl.buckets = merge_buckets(ctrl.buckets);
});
}; };
let retrieve_accounts = function() { let retrieve_accounts = function() {
@ -294,16 +238,17 @@ app.component('dashboard',
}); });
} }
], ],
template: `
<md-content flex="100" layout="column"> template: `
<md-card flex="100" layout="row"> <md-content flex="100" layout="column">
<md-card flex="20"> <md-card flex="100" layout="row">
<select style="height: 100%;" multiple ng:model="$ctrl.graphed_accounts"> <md-card flex="20">
<option ng:repeat="account in $ctrl.accounts">{{account}}</option> <select style="height: 100%;" multiple ng:model="$ctrl.graphed_accounts">
</select> <option ng:repeat="account in $ctrl.accounts">{{account}}</option>
</md-card> </select>
<md-card flex="81"> </md-card>
<nvd3 data="$ctrl.graphiques.monthly_values.data" <md-card flex="81">
<nvd3 data="$ctrl.graphiques.monthly_values.data"
options="$ctrl.graphiques.monthly_values.options"></nvd3> options="$ctrl.graphiques.monthly_values.options"></nvd3>
</md-card> </md-card>
</md-card> </md-card>