From f3eafebbed3e559b03f6a6abedc1c3938e023b14 Mon Sep 17 00:00:00 2001 From: Gwenhael Le Moine Date: Thu, 23 Nov 2017 10:41:25 +0100 Subject: [PATCH] cleaning --- public/app/js/app.js | 105 ++++++++--------- public/app/js/app.min.js | 17 ++- public/app/ts/components/dashboard.ts | 160 ++++++++++---------------- 3 files changed, 119 insertions(+), 163 deletions(-) diff --git a/public/app/js/app.js b/public/app/js/app.js index 7a1a5334..d33f5990 100644 --- a/public/app/js/app.js +++ b/public/app/js/app.js @@ -21,15 +21,45 @@ app.component('dashboard', { controller: ['$filter', '$q', 'API', function ($filter, $q, API) { var ctrl = this; - ctrl.xFunction = function () { return function (d) { return d.account; }; }; - ctrl.yFunction = function () { return function (d) { return d.amount; }; }; - ctrl.toolTipContentFunction = function () { - return function (key, x, y, e, graph) { - var details = ctrl.balance.details[key]; - console.log(details); - return "

" + key + "

" + _(details).map(function (transaction) { - return ""; - }).join('') + "
" + transaction.date + "" + transaction.payee + "" + $filter('number')(transaction.amount, 2) + " " + transaction.currency + "
Total :" + x + " \u20AC
'"; + ctrl.depth = 99; + ctrl.graphed_accounts = ['Expenses', 'Income']; + var Bucket = function (categories, period) { + var _this = this; + this.categories = categories; + this.period = period; + this.score_threshold = 0; + this.orderBy = 'amount'; + this.orderDesc = false; + this.order_by = function (field) { + if (_this.orderBy == field) { + _this.orderDesc = !_this.orderDesc; + } + else { + _this.orderBy = field; + } + }; + this.graph_options = { + chart: { + type: 'multiBarHorizontalChart', + height: 600, + margin: { + top: 20, + right: 20, + bottom: 20, + left: 200 + }, + x: function (d) { return d.account; }, + y: function (d) { return d.amount; }, + valueFormat: function (d) { return d + " \u20AC"; }, + showYAxis: false, + showValues: true, + showLegend: false, + showTooltipPercent: true, + duration: 500, + labelThreshold: 0.01, + labelSunbeamLayout: true, + labelsOutside: true + } }; }; ctrl.filter_data = function (bucket) { @@ -62,46 +92,6 @@ app.component('dashboard', { }) .value(); }; - var Bucket = function (categories, period) { - var _this = this; - this.categories = categories; - this.period = period; - this.score_threshold = 0; - this.orderBy = 'amount'; - this.orderDesc = false; - this.order_by = function (field) { - if (_this.orderBy == field) { - _this.orderDesc = !_this.orderDesc; - } - else { - _this.orderBy = field; - } - }; - this.graph_options = { - chart: { - type: 'multiBarHorizontalChart', - height: 600, - margin: { - "top": 20, - "right": 20, - "bottom": 20, - "left": 200 - }, - x: function (d) { return d.account; }, - y: function (d) { return d.amount; }, - valueFormat: function (d) { return d + " \u20AC"; }, - showYAxis: false, - showValues: true, - showLegend: false, - showTooltipPercent: true, - duration: 500, - labelThreshold: 0.01, - labelSunbeamLayout: true, - labelsOutside: true - } - }; - }; - 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) { @@ -153,7 +143,9 @@ app.component('dashboard', { var retrieve_accounts = function () { return $q.when(API.accounts() .then(function (response) { - ctrl.accounts = response.data.map(function (account_ary) { + ctrl.raw_accounts = response.data; + console.log(ctrl.raw_accounts); + ctrl.accounts = ctrl.raw_accounts.map(function (account_ary) { return account_ary.join(':'); }); })); @@ -237,18 +229,19 @@ app.component('dashboard', { ctrl.period = _(ctrl.periods).first(); })); }; - ctrl.graphed_accounts = ['Expenses', 'Income']; - retrieve_accounts().then(function (response) { - retrieve_graph_values({ + retrieve_accounts() + .then(function (response) { + return retrieve_graph_values({ period: '', categories: ctrl.graphed_accounts.join(' ') - }).then(function (response) { - retrieve_period_detailed_data(); }); + }) + .then(function (response) { + retrieve_period_detailed_data(); }); } ], - template: "\n\n\n\n\n\n\n\n \n \n

{{$ctrl.period | amDateFormat:'MMMM YYYY'}}

\n \n \n {{account.account}} = {{account.amount | number:2}} \u20AC\n \n \n \n \n \n \n \n \n \n \n
\n" + template: "\n\n\n\n\n\n\n\n\n\n

{{$ctrl.period | amDateFormat:'MMMM YYYY'}}

\n\n\n{{account.account}} = {{account.amount | number:2}} \u20AC\n\n\n\n\n\n\n\n\n\n\n
\n" }); app.service('API', ['$http', function ($http) { diff --git a/public/app/js/app.min.js b/public/app/js/app.min.js index fc560333..02a4ed6c 100644 --- a/public/app/js/app.min.js +++ b/public/app/js/app.min.js @@ -5,14 +5,13 @@ $jscomp.iteratorPrototype=function(a){$jscomp.initSymbolIterator();a={next:a};a[ $jscomp.polyfill=function(a,c,d,b){if(c){d=$jscomp.global;a=a.split(".");for(b=0;ba.length?b:a},[]);_.chain(c).pluck("date").each(function(b){_(a.data).each(function(a){var c=_(a).find({date:b});_(c).isUndefined()&&a.push({date:b,amount:0, -currency:_(a).first().currency})})});_(a.data).each(function(a){a=_(a).sortBy(function(a){return a.date})});b.graphiques={monthly_values:{options:{chart:{type:"multiBarChart",height:300,showControls:!1,showLegend:!0,showLabels:!0,stacked:!1,duration:500,reduceXTicks:!1,rotateLabels:-67,labelSunbeamLayout:!0,useInteractiveGuideline:!1,multibar:{dispatch:{elementClick:function(a){b.period=a.data.x;h()}}}}},data:_.chain(a.data).keys().reverse().map(function(c){var d="Income"==c?-1:1;return{key:c,values:_.chain(a.data[c]).map(function(a){var e= -new Date(a.date);e=e.getFullYear()+"-"+(9>e.getMonth()?"0":"")+(e.getMonth()+1);b.periods.push(e);return{key:c,x:e,y:parseInt(a.amount)*d}}).sortBy(function(a){return a.x}).value()}}).value()}};b.periods=_.chain(b.periods).uniq().sort().reverse().value();b.period=_(b.periods).first()}))};b.graphed_accounts=["Expenses","Income"];(function(){return c.when(d.accounts().then(function(a){b.accounts=a.data.map(function(a){return a.join(":")})}))})().then(function(a){l({period:"",categories:b.graphed_accounts.join(" ")}).then(function(a){h()})})}], -template:'\n\x3cmd-content flex\x3d"100" layout\x3d"column"\x3e\n\x3cmd-card flex\x3d"100" layout\x3d"row"\x3e\n\x3cmd-card flex\x3d"20"\x3e\n\x3cselect style\x3d"height: 100%;" multiple ng:model\x3d"$ctrl.graphed_accounts"\x3e\n\x3coption ng:repeat\x3d"account in $ctrl.accounts"\x3e{{account}}\x3c/option\x3e\n\x3c/select\x3e\n\x3c/md-card\x3e\n\x3cmd-card flex\x3d"81"\x3e\n\x3cnvd3 data\x3d"$ctrl.graphiques.monthly_values.data"\n options\x3d"$ctrl.graphiques.monthly_values.options"\x3e\x3c/nvd3\x3e\n \x3c/md-card\x3e\n \x3c/md-card\x3e\n \x3ch1 style\x3d"text-align: center;"\x3e{{$ctrl.period | amDateFormat:\'MMMM YYYY\'}}\x3c/h1\x3e\n \x3cmd-card flex\x3d"100" layout\x3d"column"\n ng:repeat\x3d"bucket in $ctrl.balance.buckets"\x3e\n \x3cmd-toolbar\x3e\n \x3cspan ng:repeat\x3d"account in bucket.total_detailed"\x3e{{account.account}} \x3d {{account.amount | number:2}} \u20ac\x3c/span\x3e\n \x3c/md-toolbar\x3e\n \x3cmd-content layout\x3d"row"\x3e\n \x3c!--\n \x3cmd-card flex\x3d"20"\x3e\n \x3cselect style\x3d"height: 100%;" multiple\n ng:model\x3d"bucket.accounts_selected"\n ng:options\x3d"account.account for account in bucket.raw_data | orderBy:\'account\'"\n ng:change\x3d"filter_data()"\x3e\n \x3coption value\x3d\'\'\x3e...\x3c/option\x3e\n \x3c/select\x3e\n \x3c/md-card\x3e\n --\x3e\n \x3cmd-card flex\x3d"78"\x3e\n \x3cnvd3 data\x3d"bucket.data"\n options\x3d"bucket.graph_options" \x3e\n \x3c/nvd3\x3e\n \x3c/md-card\x3e\n \x3c!--\n \x3cmd-card flex\x3d"56"\x3e\n \x3ctable class\x3d"table"\x3e\n \x3cthead\x3e\n \x3ctr\x3e\n \x3cth\x3e\x3cmd-buton ng:click\x3d"bucket.order_by( \'account\' )"\x3eaccount\x3c/md-buton\x3e\x3c/th\x3e\n \x3cth\x3e\x3cmd-buton ng:click\x3d"bucket.order_by( \'amount\' )"\x3eamount\x3c/md-buton\x3e\x3c/th\x3e\n \x3cth\x3e\x3cmd-buton ng:click\x3d"bucket.order_by( \'score\' )"\x3escore\x3c/md-buton\x3e\x3c/th\x3e\n \x3c/tr\x3e\n \x3c/thead\x3e\n \x3ctbody\x3e\n \x3ctr ng:repeat\x3d"account in bucket.data | orderBy:bucket.orderBy:bucket.orderDesc"\n ng:class\x3d"{\'even\': $even, \'odd\': $odd}"\n style\x3d"border-left:10px solid {{coloring_score( account.score )}};border-right:10px solid {{coloring_score( account.score )}}"\x3e\n \x3ctd style\x3d"border-bottom:1px solid {{coloring_score( account.score )}}"\x3e\n {{account.account}}\n \x3c/td\x3e\n \x3ctd style\x3d"text-align:right;border-bottom:1px solid {{coloring_score( account.score )}}"\x3e\n {{account.amount | number:2}} \u20ac\n \x3c/td\x3e\n \x3ctd style\x3d"text-align:right;border-bottom:1px solid {{coloring_score( account.score )}}"\x3e\n {{account.score}}\n \x3c/td\x3e\n \x3c/tr\x3e\n \x3c/tbody\x3e\n \x3c/table\x3e\n \x3c/md-card\x3e\n --\x3e\n \x3c/md-content\x3e\n \x3c/md-card\x3e\n \x3c/md-content\x3e\n'}); +app.component("dashboard",{controller:["$filter","$q","API",function(a,c,d){var b=this;b.depth=99;b.graphed_accounts=["Expenses","Income"];var e=function(a,b){var c=this;this.categories=a;this.period=b;this.score_threshold=0;this.orderBy="amount";this.orderDesc=!1;this.order_by=function(a){c.orderBy==a?c.orderDesc=!c.orderDesc:c.orderBy=a};this.graph_options={chart:{type:"multiBarHorizontalChart",height:600,margin:{top:20,right:20,bottom:20,left:200},x:function(a){return a.account},y:function(a){return a.amount}, +valueFormat:function(a){return a+" \u20ac"},showYAxis:!1,showValues:!0,showLegend:!1,showTooltipPercent:!0,duration:500,labelThreshold:.01,labelSunbeamLayout:!0,labelsOutside:!0}}};b.filter_data=function(b){b.data=[{key:b.categories,values:[]}];_(b.accounts_selected).isEmpty()&&0===b.score_threshold?b.data[0].values=b.raw_data:_(b.accounts_selected).each(function(c){b.data[0].values=b.data[0].values.concat(a("filter")(b.raw_data,c,!0))});b.total_detailed=_.chain(b.data[0].values).groupBy(function(a){return a.account.split(":")[0]}).each(function(a){a.total= +_(a).reduce(function(a,b){return a+b.amount},0)}).value();b.total_detailed=_.chain(b.total_detailed).keys().map(function(a){return{account:a,amount:b.total_detailed[a].total}}).value()};var f=function(a){a=b.balance.buckets.shift();b.balance.buckets=[_(b.balance.buckets).reduce(function(a,b){a.categories+=" "+b.categories;a.graph_options.chart.height+=b.graph_options.chart.height;a.raw_data=a.raw_data.concat(b.raw_data);a.data.push(b.data[0]);a.total_detailed=a.total_detailed.concat(b.total_detailed); +return a},a)];console.log(b.balance.buckets)},g=function(){b.balance={buckets:[new e("Expenses",b.period),new e("Liabilities",b.period),new e("Equity",b.period),new e("Income",b.period)],details:{}};return c.all(_(b.balance.buckets).map(function(a){return d.balance({period:a.period,categories:a.categories,depth:b.depth}).then(function(c){a.raw_data=_.chain(c.data).sortBy(function(a){return 1/a.amount}).sortBy(function(a){return a.account.split(":")[0]}).value().reverse();a.raw_total=_(c.data).reduce(function(a, +b){return a+b.amount},0);a.accounts_selected=a.raw_data;b.filter_data(a);a.graph_options.chart.height=60+15*a.data[0].values.length})})).then(function(){b.buckets=f(b.buckets)})},h=function(a){return c.when(d.graph_values(a).then(function(a){b.periods=[];var c=_(a.data).reduce(function(a,b){return b.length>a.length?b:a},[]);_.chain(c).pluck("date").each(function(b){_(a.data).each(function(a){var c=_(a).find({date:b});_(c).isUndefined()&&a.push({date:b,amount:0,currency:_(a).first().currency})})}); +_(a.data).each(function(a){a=_(a).sortBy(function(a){return a.date})});b.graphiques={monthly_values:{options:{chart:{type:"multiBarChart",height:300,showControls:!1,showLegend:!0,showLabels:!0,stacked:!1,duration:500,reduceXTicks:!1,rotateLabels:-67,labelSunbeamLayout:!0,useInteractiveGuideline:!1,multibar:{dispatch:{elementClick:function(a){b.period=a.data.x;g()}}}}},data:_.chain(a.data).keys().reverse().map(function(c){var d="Income"==c?-1:1;return{key:c,values:_.chain(a.data[c]).map(function(a){var e= +new Date(a.date);e=e.getFullYear()+"-"+(9>e.getMonth()?"0":"")+(e.getMonth()+1);b.periods.push(e);return{key:c,x:e,y:parseInt(a.amount)*d}}).sortBy(function(a){return a.x}).value()}}).value()}};b.periods=_.chain(b.periods).uniq().sort().reverse().value();b.period=_(b.periods).first()}))};(function(){return c.when(d.accounts().then(function(a){b.raw_accounts=a.data;console.log(b.raw_accounts);b.accounts=b.raw_accounts.map(function(a){return a.join(":")})}))})().then(function(a){return h({period:"", +categories:b.graphed_accounts.join(" ")})}).then(function(a){g()})}],template:'\n\x3cmd-content flex\x3d"100" layout\x3d"column"\x3e\n\x3cmd-card flex\x3d"100" layout\x3d"row"\x3e\n\x3cmd-card flex\x3d"20"\x3e\n\x3cselect style\x3d"height: 100%;" multiple ng:model\x3d"$ctrl.graphed_accounts"\x3e\n\x3coption ng:repeat\x3d"account in $ctrl.accounts"\x3e{{account}}\x3c/option\x3e\n\x3c/select\x3e\n\x3c/md-card\x3e\n\x3cmd-card flex\x3d"81"\x3e\n\x3cnvd3 data\x3d"$ctrl.graphiques.monthly_values.data"\noptions\x3d"$ctrl.graphiques.monthly_values.options"\x3e\x3c/nvd3\x3e\n\x3c/md-card\x3e\n\x3c/md-card\x3e\n\x3ch1 style\x3d"text-align: center;"\x3e{{$ctrl.period | amDateFormat:\'MMMM YYYY\'}}\x3c/h1\x3e\n\x3cmd-card flex\x3d"100" layout\x3d"column"\nng:repeat\x3d"bucket in $ctrl.balance.buckets"\x3e\n\x3cmd-toolbar\x3e\n\x3cspan ng:repeat\x3d"account in bucket.total_detailed"\x3e{{account.account}} \x3d {{account.amount | number:2}} \u20ac\x3c/span\x3e\n\x3c/md-toolbar\x3e\n\x3cmd-content layout\x3d"row"\x3e\n\x3c!--\n\x3cmd-card flex\x3d"20"\x3e\n\x3cselect style\x3d"height: 100%;" multiple\nng:model\x3d"bucket.accounts_selected"\nng:options\x3d"account.account for account in bucket.raw_data | orderBy:\'account\'"\nng:change\x3d"filter_data()"\x3e\n\x3coption value\x3d\'\'\x3e...\x3c/option\x3e\n\x3c/select\x3e\n\x3c/md-card\x3e\n--\x3e\n\x3cmd-card flex\x3d"78"\x3e\n\x3cnvd3 data\x3d"bucket.data"\noptions\x3d"bucket.graph_options" \x3e\n\x3c/nvd3\x3e\n\x3c/md-card\x3e\n\x3c!--\n\x3cmd-card flex\x3d"56"\x3e\n\x3ctable class\x3d"table"\x3e\n\x3cthead\x3e\n\x3ctr\x3e\n\x3cth\x3e\x3cmd-buton ng:click\x3d"bucket.order_by( \'account\' )"\x3eaccount\x3c/md-buton\x3e\x3c/th\x3e\n\x3cth\x3e\x3cmd-buton ng:click\x3d"bucket.order_by( \'amount\' )"\x3eamount\x3c/md-buton\x3e\x3c/th\x3e\n\x3cth\x3e\x3cmd-buton ng:click\x3d"bucket.order_by( \'score\' )"\x3escore\x3c/md-buton\x3e\x3c/th\x3e\n\x3c/tr\x3e\n\x3c/thead\x3e\n\x3ctbody\x3e\n\x3ctr ng:repeat\x3d"account in bucket.data | orderBy:bucket.orderBy:bucket.orderDesc"\nng:class\x3d"{\'even\': $even, \'odd\': $odd}"\nstyle\x3d"border-left:10px solid {{coloring_score( account.score )}};border-right:10px solid {{coloring_score( account.score )}}"\x3e\n\x3ctd style\x3d"border-bottom:1px solid {{coloring_score( account.score )}}"\x3e\n{{account.account}}\n\x3c/td\x3e\n\x3ctd style\x3d"text-align:right;border-bottom:1px solid {{coloring_score( account.score )}}"\x3e\n{{account.amount | number:2}} \u20ac\n\x3c/td\x3e\n\x3ctd style\x3d"text-align:right;border-bottom:1px solid {{coloring_score( account.score )}}"\x3e\n{{account.score}}\n\x3c/td\x3e\n\x3c/tr\x3e\n\x3c/tbody\x3e\n\x3c/table\x3e\n\x3c/md-card\x3e\n--\x3e\n\x3c/md-content\x3e\n\x3c/md-card\x3e\n\x3c/md-content\x3e\n'}); app.service("API",["$http",function(a){this.balance=function(c){return a.get("/api/ledger/balance",{params:{period:c.period,categories:c.categories,depth:c.depth}})};this.register=function(c){return a.get("/api/ledger/register",{params:{period:c.period,categories:c.categories}})};this.graph_values=function(c){return a.get("/api/ledger/graph_values",{params:{period:c.period,categories:c.categories}})};this.budget=function(c){return a.get("/api/ledger/budget",{params:{period:c.period,categories:c.categories}})}; this.dates_salaries=function(){return a.get("/api/ledger/dates_salaries")};this.accounts=function(){return a.get("/api/ledger/accounts")};this.cleared=function(){return a.get("/api/ledger/cleared")}}]); diff --git a/public/app/ts/components/dashboard.ts b/public/app/ts/components/dashboard.ts index 5c252178..e887a1e3 100644 --- a/public/app/ts/components/dashboard.ts +++ b/public/app/ts/components/dashboard.ts @@ -3,6 +3,48 @@ app.component('dashboard', controller: ['$filter', '$q', 'API', function($filter, $q, API) { let ctrl = this; + ctrl.depth = 99; + ctrl.graphed_accounts = ['Expenses', 'Income']; + + let Bucket = function(categories, period) { + let _this = this; + this.categories = categories; + this.period = period; + this.score_threshold = 0; + this.orderBy = 'amount'; + this.orderDesc = false; + this.order_by = function(field) { + if (_this.orderBy == field) { + _this.orderDesc = !_this.orderDesc; + } else { + _this.orderBy = field; + } + }; + + this.graph_options = { + chart: { + type: 'multiBarHorizontalChart', + height: 600, + margin: { + top: 20, + right: 20, + bottom: 20, + left: 200 + }, + x: function(d) { return d.account; }, + y: function(d) { return d.amount; }, + valueFormat: function(d) { return `${d} €`; }, + showYAxis: false, + showValues: true, + showLegend: false, + showTooltipPercent: true, + duration: 500, + labelThreshold: 0.01, + labelSunbeamLayout: true, + labelsOutside: true + } + }; + }; ctrl.filter_data = function(bucket) { bucket.data = [{ key: bucket.categories, values: [] }]; @@ -36,48 +78,6 @@ app.component('dashboard', .value(); }; - let Bucket = function(categories, period) { - let _this = this; - this.categories = categories; - this.period = period; - this.score_threshold = 0; - this.orderBy = 'amount'; - this.orderDesc = false; - this.order_by = function(field) { - if (_this.orderBy == field) { - _this.orderDesc = !_this.orderDesc; - } else { - _this.orderBy = field; - } - }; - - this.graph_options = { - chart: { - type: 'multiBarHorizontalChart', - height: 600, - margin: { - "top": 20, - "right": 20, - "bottom": 20, - "left": 200 - }, - x: function(d) { return d.account; }, - y: function(d) { return d.amount; }, - valueFormat: function(d) { return `${d} €`; }, - showYAxis: false, - showValues: true, - showLegend: false, - showTooltipPercent: true, - duration: 500, - labelThreshold: 0.01, - labelSunbeamLayout: true, - labelsOutside: true - } - }; - }; - - 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) { @@ -135,7 +135,8 @@ app.component('dashboard', let retrieve_accounts = function() { return $q.when(API.accounts() .then(function(response) { - ctrl.accounts = response.data.map(function(account_ary) { + ctrl.raw_accounts = response.data; + ctrl.accounts = ctrl.raw_accounts.map(function(account_ary) { return account_ary.join(':'); }); })); @@ -225,21 +226,20 @@ app.component('dashboard', })); }; - ctrl.graphed_accounts = ['Expenses', 'Income']; - - retrieve_accounts().then(function(response) { - retrieve_graph_values({ - period: '', - categories: ctrl.graphed_accounts.join(' ') - }).then(function(response) { + retrieve_accounts() + .then(function(response) { + return retrieve_graph_values({ + period: '', + categories: ctrl.graphed_accounts.join(' ') + }); + }) + .then(function(response) { retrieve_period_detailed_data(); - }); - }); } ], - template: ` + template: ` @@ -252,56 +252,20 @@ app.component('dashboard', options="$ctrl.graphiques.monthly_values.options"> -

{{$ctrl.period | amDateFormat:'MMMM YYYY'}}

- {{$ctrl.period | amDateFormat:'MMMM YYYY'}} + + {{account.account}} = {{account.amount | number:2}} € - - - - - - + + + +