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 @@
@@ -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