diff --git a/app/controllers/BudgetController.php b/app/controllers/BudgetController.php index 6156d76c2d..faacb44535 100644 --- a/app/controllers/BudgetController.php +++ b/app/controllers/BudgetController.php @@ -84,7 +84,7 @@ class BudgetController extends BaseController $budgets = $repos->get(); // get the limits for the current month. - $date = \Session::get('start'); + $date = \Session::get('start'); $spent = 0; /** @var \Budget $budget */ foreach ($budgets as $budget) { @@ -114,9 +114,9 @@ class BudgetController extends BaseController } $budgetAmount = $preferences->get('budgetIncomeTotal' . $date->format('FY'), 1000); - $amount = floatval($budgetAmount->data); - $overspent = $spent > $amount; - if($overspent) { + $amount = floatval($budgetAmount->data); + $overspent = $spent > $amount; + if ($overspent) { // overspent on total amount $spentPCT = ceil($amount / $spent * 100); } else { @@ -124,7 +124,7 @@ class BudgetController extends BaseController $spentPCT = ceil($spent / $amount * 100); } - return View::make('budgets.index', compact('budgets','spent','spentPCT','overspent'))->with('budgetAmount', $budgetAmount); + return View::make('budgets.index', compact('budgets', 'spent', 'spentPCT', 'overspent'))->with('budgetAmount', $budgetAmount); } /** diff --git a/app/controllers/CategoryController.php b/app/controllers/CategoryController.php index 55a6e629d3..2a8fe2f472 100644 --- a/app/controllers/CategoryController.php +++ b/app/controllers/CategoryController.php @@ -75,15 +75,7 @@ class CategoryController extends BaseController */ public function show(Category $category) { - $start = \Session::get('start'); - $end = \Session::get('end'); - - - $journals = $this->_category->journalsInRange($category, $start, $end); - - return View::make('categories.show')->with('category', $category)->with('journals', $journals)->with( - 'highlight', Input::get('highlight') - )->with('subTitle', 'Overview for category "' . $category->name . '"'); + return View::make('categories.show', compact('category')); } /** diff --git a/app/controllers/GoogleChartController.php b/app/controllers/GoogleChartController.php index daeedcfddd..cc0aafb7d3 100644 --- a/app/controllers/GoogleChartController.php +++ b/app/controllers/GoogleChartController.php @@ -200,15 +200,26 @@ class GoogleChartController extends BaseController return Response::json($chart->getData()); } - public function budgetsAndSpending(Budget $budget, $year) { + /** + * @param Component $component + * @param $year + * + * @return \Illuminate\Http\JsonResponse + */ + public function componentsAndSpending(Component $component, $year) { try { $start = new Carbon('01-01-' . $year); } catch (Exception $e) { App::abort(500); } - /** @var \FireflyIII\Database\Budget $bdt */ - $bdt = App::make('FireflyIII\Database\Budget'); + if($component->class == 'Budget') { + /** @var \FireflyIII\Database\Budget $repos */ + $repos = App::make('FireflyIII\Database\Budget'); + } else { + /** @var \FireflyIII\Database\Category $repos */ + $repos = App::make('FireflyIII\Database\Category'); + } /** @var \Grumpydictator\Gchart\GChart $chart */ $chart = App::make('gchart'); @@ -220,12 +231,12 @@ class GoogleChartController extends BaseController $end->endOfYear(); while($start <= $end) { - $spent = $bdt->spentInMonth($budget, $start); - $repetition = $bdt->repetitionOnStartingOnDate($budget, $start); + $spent = $repos->spentInMonth($component, $start); + $repetition = $repos->repetitionOnStartingOnDate($component, $start); if($repetition) { $budgeted = floatval($repetition->amount); } else { - $budgeted = 0; + $budgeted = null; } $chart->addRow(clone $start, $budgeted, $spent); diff --git a/app/controllers/GoogleTableController.php b/app/controllers/GoogleTableController.php index 80b652fe4b..2d1b091f49 100644 --- a/app/controllers/GoogleTableController.php +++ b/app/controllers/GoogleTableController.php @@ -90,10 +90,10 @@ class GoogleTableController extends BaseController } /** - * @param Budget $budget + * @param Component $component * @param LimitRepetition $repetition */ - public function transactionsByBudget(Budget $budget, LimitRepetition $repetition = null) + public function transactionsByComponent(Component $component, LimitRepetition $repetition = null) { /** @var \Grumpydictator\Gchart\GChart $chart */ $chart = App::make('gchart'); @@ -114,10 +114,13 @@ class GoogleTableController extends BaseController $chart->addColumn('Category', 'string'); if (is_null($repetition)) { - $journals = $budget->transactionjournals()->with(['budgets', 'categories', 'transactions', 'transactions.account'])->orderBy('date', 'DESC')->get(); + $journals = $component->transactionjournals()->with(['budgets', 'categories', 'transactions', 'transactions.account'])->orderBy('date', 'DESC') + ->get(); } else { - $journals = $budget->transactionjournals()->with(['budgets', 'categories', 'transactions', 'transactions.account'])->after($repetition->startdate) - ->before($repetition->enddate)->orderBy('date', 'DESC')->get(); + $journals = $component->transactionjournals()->with(['budgets', 'categories', 'transactions', 'transactions.account'])->after( + $repetition->startdate + ) + ->before($repetition->enddate)->orderBy('date', 'DESC')->get(); } /** @var TransactionJournal $transaction */ foreach ($journals as $journal) { @@ -138,10 +141,10 @@ class GoogleTableController extends BaseController } if (isset($journal->budgets[0])) { $budgetURL = route('budgets.show', $journal->budgets[0]->id); - $budget = $journal->budgets[0]->name; + $component = $journal->budgets[0]->name; } else { $budgetURL = ''; - $budget = ''; + $component = ''; } if (isset($journal->categories[0])) { @@ -157,7 +160,7 @@ class GoogleTableController extends BaseController $edit = route('transactions.edit', $journal->id); $delete = route('transactions.delete', $journal->id); $chart->addRow( - $id, $edit, $delete, $date, $descriptionURL, $description, $amount, $fromURL, $from, $toURL, $to, $budgetURL, $budget, $categoryURL, + $id, $edit, $delete, $date, $descriptionURL, $description, $amount, $fromURL, $from, $toURL, $to, $budgetURL, $component, $categoryURL, $category ); } diff --git a/app/lib/FireflyIII/Database/Category.php b/app/lib/FireflyIII/Database/Category.php index 9e9ec6c93b..7599acfe57 100644 --- a/app/lib/FireflyIII/Database/Category.php +++ b/app/lib/FireflyIII/Database/Category.php @@ -148,6 +148,32 @@ class Category implements CUD, CommonDatabaseCalls, CategoryInterface // TODO: Implement findByWhat() method. } + /** + * @param \Category $budget + * @param Carbon $date + * + * @return null + */ + public function repetitionOnStartingOnDate(\Category $category, Carbon $date) + { + return null; + } + + /** + * @param \Category $category + * @param Carbon $date + * + * @return float + */ + public function spentInMonth(\Category $category, Carbon $date) + { + $end = clone $date; + $date->startOfMonth(); + $end->endOfMonth(); + $sum = floatval($category->transactionjournals()->before($end)->after($date)->lessThan(0)->sum('amount')) * -1; + return $sum; + } + /** * @param Ardent $model * @param array $data diff --git a/app/routes.php b/app/routes.php index 8b804a5d77..d0c193ba21 100644 --- a/app/routes.php +++ b/app/routes.php @@ -50,6 +50,16 @@ Route::bind( } ); +Route::bind( + 'component', function ($value, $route) { + if (Auth::check()) { + return Component:: + where('id', $value)->where('user_id', Auth::user()->id)->first(); + } + return null; + } +); + Route::bind( 'reminder', function ($value, $route) { if (Auth::check()) { @@ -169,13 +179,18 @@ Route::group( Route::get('/chart/reports/income-expenses/{year}', ['uses' => 'GoogleChartController@yearInExp']); Route::get('/chart/reports/income-expenses-sum/{year}', ['uses' => 'GoogleChartController@yearInExpSum']); Route::get('/chart/reports/budgets/{year}', ['uses' => 'GoogleChartController@budgetsReportChart']); - Route::get('/chart/budgets/{budget}/spending/{year}', ['uses' => 'GoogleChartController@budgetsAndSpending']); + + // google chart (categories + budgets) + Route::get('/chart/component/{component}/spending/{year}', ['uses' => 'GoogleChartController@componentsAndSpending']); // google table controller Route::get('/table/account/{account}/transactions', ['uses' => 'GoogleTableController@transactionsByAccount']); Route::get('/table/accounts/{what}', ['uses' => 'GoogleTableController@accountList']); Route::get('/table/categories', ['uses' => 'GoogleTableController@categoryList']); - Route::get('/table/budget/{budget}/{limitrepetition?}/transactions', ['uses' => 'GoogleTableController@transactionsByBudget']); + + // google table (categories + budgets) + + Route::get('/table/component/{component}/{limitrepetition}/transactions', ['uses' => 'GoogleTableController@transactionsByComponent']); Route::get('/chart/home/info/{accountnameA}/{day}/{month}/{year}', ['uses' => 'ChartController@homeAccountInfo', 'as' => 'chart.info']); diff --git a/app/views/budgets/show.blade.php b/app/views/budgets/show.blade.php index 2cdc0f3e14..dbf08c7f45 100644 --- a/app/views/budgets/show.blade.php +++ b/app/views/budgets/show.blade.php @@ -5,10 +5,10 @@
- Some stuff? + Overview
-
+
@@ -73,7 +73,7 @@ @stop @section('scripts') + + + +{{HTML::script('assets/javascript/firefly/gcharts.options.js')}} +{{HTML::script('assets/javascript/firefly/gcharts.js')}} {{HTML::script('assets/javascript/firefly/categories.js')}} + @stop \ No newline at end of file diff --git a/public/assets/javascript/firefly/budgets.js b/public/assets/javascript/firefly/budgets.js index a6de8b79cc..6efcabf7b7 100644 --- a/public/assets/javascript/firefly/budgets.js +++ b/public/assets/javascript/firefly/budgets.js @@ -8,12 +8,15 @@ $(function () { if (typeof(googleTable) == 'function') { - if (typeof budgetID != 'undefined' && typeof repetitionID == 'undefined') { - googleTable('table/budget/' + budgetID + '/0/transactions', 'transactions'); - googleColumnChart('chart/budgets/'+budgetID+'/spending/2014','budgetOverview'); + console.log('A'); + if (typeof componentID != 'undefined' && typeof repetitionID == 'undefined') { + console.log('B'); + googleTable('table/component/' + componentID + '/0/transactions', 'transactions'); + googleColumnChart('chart/component/' + componentID + '/spending/' + year, 'componentOverview'); - } else if (typeof budgetID != 'undefined' && typeof repetitionID != 'undefined') { - googleTable('table/budget/' + budgetID + '/' + repetitionID + '/transactions', 'transactions'); + } else if (typeof componentID != 'undefined' && typeof repetitionID != 'undefined') { + console.log('C'); + googleTable('table/component/' + componentID + '/' + repetitionID + '/transactions', 'transactions'); } } @@ -162,7 +165,6 @@ function updateRanges() { // we gaan er X overheen, var pct = totalAmount / sum * 100; - console.log(pct) var danger = 100 - pct; var err = 100 - danger; $('#progress-bar-default').css('width', 0); diff --git a/public/assets/javascript/firefly/categories.js b/public/assets/javascript/firefly/categories.js index 4b959ed181..502dfd7366 100644 --- a/public/assets/javascript/firefly/categories.js +++ b/public/assets/javascript/firefly/categories.js @@ -2,93 +2,17 @@ $(function () { if (typeof googleTable == 'function') { googleTable('table/categories', 'category-list'); + if (typeof(componentID) != 'undefined') { + googleTable('table/component/' + componentID + '/0/transactions','transactions'); + + if (typeof googleColumnChart == 'function') { + googleColumnChart('chart/component/' + componentID + '/spending/' + year, 'componentOverview'); + } + + } } - if ($('#chart').length == 1) { - /** - * get data from controller for home charts: - */ - $.getJSON('chart/categories/show/' + categoryID).success(function (data) { - var options = { - chart: { - renderTo: 'chart', - type: 'column' - }, - series: [data.series], - title: { - text: data.chart_title - }, - yAxis: { - formatter: function () { - return '$' + Highcharts.numberFormat(this.y, 0); - } - }, - subtitle: { - text: data.subtitle, - useHTML: true - }, - xAxis: { - floor: 0, - type: 'category', - title: { - text: 'Period' - } - }, - tooltip: { - shared: true, - crosshairs: false, - formatter: function () { - var str = '' + Highcharts.dateFormat("%A, %e %B", this.x) + '
'; - for (x in this.points) { - var point = this.points[x]; - var colour = point.point.pointAttr[''].fill; - str += '' + point.series.name + ': \u20AC ' + Highcharts.numberFormat(point.y, 2) + '
'; - } - //console.log(); - return str; - return '' + this.series.name + ' on ' + Highcharts.dateFormat("%e %B", this.x) + ':
\u20AC ' + Highcharts.numberFormat(this.y, 2); - } - }, - plotOptions: { - line: { - shadow: true - }, - series: { - cursor: 'pointer', - negativeColor: '#FF0000', - threshold: 0, - lineWidth: 1, - marker: { - radius: 2 - }, - point: { - events: { - click: function (e) { - hs.htmlExpand(null, { - src: 'chart/home/info/' + this.series.name + '/' + Highcharts.dateFormat("%d/%m/%Y", this.x), - pageOrigin: { - x: e.pageX, - y: e.pageY - }, - objectType: 'ajax', - headingText: '' + this.series.name + '', - width: 250 - } - ) - ; - } - } - } - } - }, - credits: { - enabled: false - } - }; - $('#chart').highcharts(options); - }); - } }); \ No newline at end of file diff --git a/public/assets/javascript/firefly/gcharts.js b/public/assets/javascript/firefly/gcharts.js index b17ab935e1..387b4a6afd 100644 --- a/public/assets/javascript/firefly/gcharts.js +++ b/public/assets/javascript/firefly/gcharts.js @@ -1,263 +1,315 @@ google.load('visualization', '1.1', {'packages': ['corechart', 'bar', 'sankey', 'table']}); function googleLineChart(URL, container) { - $.getJSON(URL).success(function (data) { - /* - Get the data from the JSON - */ - gdata = new google.visualization.DataTable(data); - - /* - Format as money - */ - var money = new google.visualization.NumberFormat({decimalSymbol: ',', groupingSymbol: '.', prefix: '\u20AC '}); - for (i = 1; i < gdata.getNumberOfColumns(); i++) { - money.format(gdata, i); - } - - /* - Create a new google charts object. - */ - var chart = new google.visualization.LineChart(document.getElementById(container)); - - /* - Draw it: - */ - chart.draw(gdata, defaultLineChartOptions); - - }).fail(function () { - $('#' + container).addClass('google-chart-error'); - }); -} - -function googleBarChart(URL, container) { - $.getJSON(URL).success(function (data) { - /* - Get the data from the JSON - */ - gdata = new google.visualization.DataTable(data); - - /* - Format as money - */ - var money = new google.visualization.NumberFormat({decimalSymbol: ',', groupingSymbol: '.', prefix: '\u20AC '}); - for (i = 1; i < gdata.getNumberOfColumns(); i++) { - money.format(gdata, i); - } - - /* - Create a new google charts object. - */ - var chart = new google.charts.Bar(document.getElementById(container)); - - /* - Draw it: - */ - chart.draw(gdata, defaultBarChartOptions); - - }).fail(function () { - $('#' + container).addClass('google-chart-error'); - }); -} - -function googleColumnChart(URL, container) { - $.getJSON(URL).success(function (data) { - /* - Get the data from the JSON - */ - gdata = new google.visualization.DataTable(data); - - /* - Format as money - */ - var money = new google.visualization.NumberFormat({decimalSymbol: ',', groupingSymbol: '.', prefix: '\u20AC '}); - for (i = 1; i < gdata.getNumberOfColumns(); i++) { - money.format(gdata, i); - } - - /* - Create a new google charts object. - */ - var chart = new google.charts.Bar(document.getElementById(container)); - /* - Draw it: - */ - chart.draw(gdata, defaultColumnChartOptions); - - }).fail(function () { - $('#' + container).addClass('google-chart-error'); - }); -} - -function googleStackedColumnChart(URL, container) { - $.getJSON(URL).success(function (data) { - /* - Get the data from the JSON - */ - gdata = new google.visualization.DataTable(data); - - /* - Format as money - */ - var money = new google.visualization.NumberFormat({decimalSymbol: ',', groupingSymbol: '.', prefix: '\u20AC '}); - for (i = 1; i < gdata.getNumberOfColumns(); i++) { - money.format(gdata, i); - } - - /* - Create a new google charts object. - */ - var chart = new google.visualization.ColumnChart(document.getElementById(container)); - /* - Draw it: - */ - chart.draw(gdata, defaultStackedColumnChartOptions); - - }).fail(function () { - $('#' + container).addClass('google-chart-error'); - }); -} - -function googlePieChart(URL, container) { - $.getJSON(URL).success(function (data) { - /* - Get the data from the JSON - */ - gdata = new google.visualization.DataTable(data); - - /* - Format as money - */ - var money = new google.visualization.NumberFormat({decimalSymbol: ',', groupingSymbol: '.', prefix: '\u20AC '}); - for (i = 1; i < gdata.getNumberOfColumns(); i++) { - money.format(gdata, i); - } - - /* - Create a new google charts object. - */ - var chart = new google.visualization.PieChart(document.getElementById(container)); - - /* - Draw it: - */ - chart.draw(gdata, defaultPieChartOptions); - - }).fail(function () { - $('#' + container).addClass('google-chart-error'); - }); -} - -function googleSankeyChart(URL, container) { - $.getJSON(URL).success(function (data) { - /* - Get the data from the JSON - */ - gdata = new google.visualization.DataTable(data); - - /* - Format as money - */ - - console.log(gdata.getNumberOfRows()) - if (gdata.getNumberOfRows() < 1) { - console.log('remove'); - $('#' + container).parent().parent().remove(); - return; - } else if (gdata.getNumberOfRows() < 6) { - defaultSankeyChartOptions.height = 100 - } else { - defaultSankeyChartOptions.height = 400 - } - - - /* - Create a new google charts object. - */ - var chart = new google.visualization.Sankey(document.getElementById(container)); - - /* - Draw it: - */ - chart.draw(gdata, defaultSankeyChartOptions); - - }).fail(function () { - $('#' + container).addClass('google-chart-error'); - }); -} - -function googleTable(URL, container) { - $.getJSON(URL).success(function (data) { - /* - Get the data from the JSON - */ - var gdata = new google.visualization.DataTable(data); - - /* - Create a new google charts object. - */ - var chart = new google.visualization.Table(document.getElementById(container)); - - /* - Do something with formatters: - */ - var x = gdata.getNumberOfColumns(); - var columnsToHide = new Array; - var URLFormatter = new google.visualization.PatternFormat('{1}'); - - var EditButtonFormatter = new google.visualization.PatternFormat('
'); - - var money = new google.visualization.NumberFormat({decimalSymbol: ',', groupingSymbol: '.', prefix: '\u20AC '}); - - - for (var i = 0; i < x; i++) { - var label = gdata.getColumnLabel(i); - console.log('Column ' + i + ':' + label); + if ($('#' + container).length == 1) { + $.getJSON(URL).success(function (data) { /* - Format a string using the previous column as URL. + Get the data from the JSON */ - if (label == 'Description' || label == 'From' || label == 'Name' || label == 'To' || label == 'Budget' || label == 'Category') { - URLFormatter.format(gdata, [i - 1, i], i); - columnsToHide.push(i - 1); - } - if (label == 'ID') { - EditButtonFormatter.format(gdata, [i + 1, i + 2], i); - columnsToHide.push(i + 1, i + 2); - } - - /* - Format with buttons: - */ - + gdata = new google.visualization.DataTable(data); /* Format as money */ - if (label == 'Amount' || label == 'Balance') { + var money = new google.visualization.NumberFormat({ + decimalSymbol: ',', + groupingSymbol: '.', + prefix: '\u20AC ' + }); + for (i = 1; i < gdata.getNumberOfColumns(); i++) { money.format(gdata, i); } - } + /* + Create a new google charts object. + */ + var chart = new google.visualization.LineChart(document.getElementById(container)); + + /* + Draw it: + */ + chart.draw(gdata, defaultLineChartOptions); + + }).fail(function () { + $('#' + container).addClass('google-chart-error'); + }); + } else { + console.log('No container found called "' + container + '"'); + } +} + +function googleBarChart(URL, container) { + if ($('#' + container).length == 1) { + $.getJSON(URL).success(function (data) { + /* + Get the data from the JSON + */ + gdata = new google.visualization.DataTable(data); + + /* + Format as money + */ + var money = new google.visualization.NumberFormat({ + decimalSymbol: ',', + groupingSymbol: '.', + prefix: '\u20AC ' + }); + for (i = 1; i < gdata.getNumberOfColumns(); i++) { + money.format(gdata, i); + } + + /* + Create a new google charts object. + */ + var chart = new google.charts.Bar(document.getElementById(container)); + + /* + Draw it: + */ + chart.draw(gdata, defaultBarChartOptions); + + }).fail(function () { + $('#' + container).addClass('google-chart-error'); + }); + } else { + console.log('No container found called "' + container + '"'); + } +} + +function googleColumnChart(URL, container) { + if ($('#' + container).length == 1) { + $.getJSON(URL).success(function (data) { + /* + Get the data from the JSON + */ + gdata = new google.visualization.DataTable(data); + + /* + Format as money + */ + var money = new google.visualization.NumberFormat({ + decimalSymbol: ',', + groupingSymbol: '.', + prefix: '\u20AC ' + }); + for (i = 1; i < gdata.getNumberOfColumns(); i++) { + money.format(gdata, i); + } + + /* + Create a new google charts object. + */ + var chart = new google.charts.Bar(document.getElementById(container)); + /* + Draw it: + */ + chart.draw(gdata, defaultColumnChartOptions); + + }).fail(function () { + $('#' + container).addClass('google-chart-error'); + }); + } else { + console.log('No container found called "' + container + '"'); + } +} + +function googleStackedColumnChart(URL, container) { + if ($('#' + container).length == 1) { + $.getJSON(URL).success(function (data) { + /* + Get the data from the JSON + */ + gdata = new google.visualization.DataTable(data); + + /* + Format as money + */ + var money = new google.visualization.NumberFormat({ + decimalSymbol: ',', + groupingSymbol: '.', + prefix: '\u20AC ' + }); + for (i = 1; i < gdata.getNumberOfColumns(); i++) { + money.format(gdata, i); + } + + /* + Create a new google charts object. + */ + var chart = new google.visualization.ColumnChart(document.getElementById(container)); + /* + Draw it: + */ + chart.draw(gdata, defaultStackedColumnChartOptions); + + }).fail(function () { + $('#' + container).addClass('google-chart-error'); + }); + } else { + console.log('No container found called "' + container + '"'); + } +} + +function googlePieChart(URL, container) { + if ($('#' + container).length == 1) { + $.getJSON(URL).success(function (data) { + /* + Get the data from the JSON + */ + gdata = new google.visualization.DataTable(data); + + /* + Format as money + */ + var money = new google.visualization.NumberFormat({ + decimalSymbol: ',', + groupingSymbol: '.', + prefix: '\u20AC ' + }); + for (i = 1; i < gdata.getNumberOfColumns(); i++) { + money.format(gdata, i); + } + + /* + Create a new google charts object. + */ + var chart = new google.visualization.PieChart(document.getElementById(container)); + + /* + Draw it: + */ + chart.draw(gdata, defaultPieChartOptions); + + }).fail(function () { + $('#' + container).addClass('google-chart-error'); + }); + } else { + console.log('No container found called "' + container + '"'); + } +} + +function googleSankeyChart(URL, container) { + if ($('#' + container).length == 1) { + $.getJSON(URL).success(function (data) { + /* + Get the data from the JSON + */ + gdata = new google.visualization.DataTable(data); + + /* + Format as money + */ + + console.log(gdata.getNumberOfRows()) + if (gdata.getNumberOfRows() < 1) { + console.log('remove'); + $('#' + container).parent().parent().remove(); + return; + } else if (gdata.getNumberOfRows() < 6) { + defaultSankeyChartOptions.height = 100 + } else { + defaultSankeyChartOptions.height = 400 + } - //var formatter = new google.visualization.PatternFormat('{1}'); + /* + Create a new google charts object. + */ + var chart = new google.visualization.Sankey(document.getElementById(container)); - //formatter.format(gdata, [5, 6], 6); - //formatter.format(gdata, [7, 8], 8); + /* + Draw it: + */ + chart.draw(gdata, defaultSankeyChartOptions); + + }).fail(function () { + $('#' + container).addClass('google-chart-error'); + }); + } else { + console.log('No container found called "' + container + '"'); + } +} + +function googleTable(URL, container) { + if ($('#' + container).length == 1) { + $.getJSON(URL).success(function (data) { + /* + Get the data from the JSON + */ + var gdata = new google.visualization.DataTable(data); + + /* + Create a new google charts object. + */ + var chart = new google.visualization.Table(document.getElementById(container)); + + /* + Do something with formatters: + */ + var x = gdata.getNumberOfColumns(); + var columnsToHide = new Array; + var URLFormatter = new google.visualization.PatternFormat('{1}'); + + var EditButtonFormatter = new google.visualization.PatternFormat('
'); + + var money = new google.visualization.NumberFormat({ + decimalSymbol: ',', + groupingSymbol: '.', + prefix: '\u20AC ' + }); - var view = new google.visualization.DataView(gdata); - // hide certain columns: + for (var i = 0; i < x; i++) { + var label = gdata.getColumnLabel(i); + console.log('Column ' + i + ':' + label); + /* + Format a string using the previous column as URL. + */ + if (label == 'Description' || label == 'From' || label == 'Name' || label == 'To' || label == 'Budget' || label == 'Category') { + URLFormatter.format(gdata, [i - 1, i], i); + columnsToHide.push(i - 1); + } + if (label == 'ID') { + EditButtonFormatter.format(gdata, [i + 1, i + 2], i); + columnsToHide.push(i + 1, i + 2); + } - view.hideColumns(columnsToHide); + /* + Format with buttons: + */ - /* - Draw it: - */ - chart.draw(view, defaultTableOptions); + /* + Format as money + */ + if (label == 'Amount' || label == 'Balance') { + money.format(gdata, i); + } - }).fail(function () { - $('#' + container).addClass('google-chart-error'); - }); + } + + + //var formatter = new google.visualization.PatternFormat('{1}'); + + //formatter.format(gdata, [5, 6], 6); + //formatter.format(gdata, [7, 8], 8); + + + var view = new google.visualization.DataView(gdata); + // hide certain columns: + + view.hideColumns(columnsToHide); + + + /* + Draw it: + */ + chart.draw(view, defaultTableOptions); + + }).fail(function () { + $('#' + container).addClass('google-chart-error'); + }); + } else { + console.log('No container found called "' + container + '"'); + } } \ No newline at end of file