mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2024-12-27 17:31:09 -06:00
Some work on the chart controller. [skip ci]
This commit is contained in:
parent
225cfc590c
commit
9054b20700
@ -10,9 +10,9 @@ if($('#chart').length == 1) {
|
|||||||
type: 'line'
|
type: 'line'
|
||||||
},
|
},
|
||||||
|
|
||||||
series: data,
|
series: data.series,
|
||||||
title: {
|
title: {
|
||||||
text: 'BETTER TITLE HERE'
|
text: data.chart_title
|
||||||
},
|
},
|
||||||
yAxis: {
|
yAxis: {
|
||||||
formatter: function () {
|
formatter: function () {
|
||||||
@ -20,7 +20,7 @@ if($('#chart').length == 1) {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
subtitle: {
|
subtitle: {
|
||||||
text: '<a href="#">View more</a>',
|
text: data.subtitle,
|
||||||
useHTML: true
|
useHTML: true
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -11,9 +11,9 @@ $(function () {
|
|||||||
type: 'line'
|
type: 'line'
|
||||||
},
|
},
|
||||||
|
|
||||||
series: data,
|
series: data.series,
|
||||||
title: {
|
title: {
|
||||||
text: 'All accounts'
|
text: data.chart_title
|
||||||
},
|
},
|
||||||
yAxis: {
|
yAxis: {
|
||||||
formatter: function () {
|
formatter: function () {
|
||||||
@ -21,7 +21,7 @@ $(function () {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
subtitle: {
|
subtitle: {
|
||||||
text: '<a href="#">View more</a>',
|
text: data.subtitle,
|
||||||
useHTML: true
|
useHTML: true
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -1,11 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Firefly\Exception\FireflyException;
|
use Firefly\Helper\Controllers\ChartInterface;
|
||||||
use Firefly\Helper\Preferences\PreferencesHelperInterface as PHI;
|
|
||||||
use Firefly\Helper\Toolkit\ToolkitInterface as tk;
|
|
||||||
use Firefly\Storage\Account\AccountRepositoryInterface as ARI;
|
|
||||||
use Firefly\Storage\Budget\BudgetRepositoryInterface as BRI;
|
|
||||||
use Firefly\Storage\TransactionJournal\TransactionJournalRepositoryInterface as TJRI;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class ChartController
|
* Class ChartController
|
||||||
@ -13,80 +8,31 @@ use Firefly\Storage\TransactionJournal\TransactionJournalRepositoryInterface as
|
|||||||
class ChartController extends BaseController
|
class ChartController extends BaseController
|
||||||
{
|
{
|
||||||
|
|
||||||
protected $_accounts;
|
protected $_chart;
|
||||||
protected $_journals;
|
|
||||||
protected $_tk;
|
|
||||||
protected $_preferences;
|
|
||||||
protected $_budgets;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param ARI $accounts
|
* @param ChartInterface $chart
|
||||||
* @param TJRI $journals
|
|
||||||
* @param PHI $preferences
|
|
||||||
* @param tk $toolkit
|
|
||||||
* @param BRI $budgets
|
|
||||||
*/
|
*/
|
||||||
public function __construct(ARI $accounts, TJRI $journals, PHI $preferences, tk $toolkit, BRI $budgets)
|
public function __construct(ChartInterface $chart)
|
||||||
{
|
{
|
||||||
$this->_accounts = $accounts;
|
$this->_chart = $chart;
|
||||||
$this->_journals = $journals;
|
|
||||||
$this->_preferences = $preferences;
|
|
||||||
$this->_tk = $toolkit;
|
|
||||||
$this->_budgets = $budgets;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param null $accountId
|
* @param Account $account
|
||||||
*
|
* @return mixed
|
||||||
* @return \Illuminate\Http\JsonResponse
|
|
||||||
*/
|
*/
|
||||||
public function homeAccount($accountId = null)
|
public function homeAccount(Account $account = null)
|
||||||
{
|
{
|
||||||
list($start, $end) = $this->_tk->getDateRangeDates();
|
|
||||||
$current = clone $start;
|
|
||||||
$return = [];
|
|
||||||
|
|
||||||
$account = !is_null($accountId) ? $this->_accounts->find($accountId) : null;
|
|
||||||
$today = new Carbon\Carbon;
|
|
||||||
|
|
||||||
if (is_null($account)) {
|
if (!is_null($account)) {
|
||||||
|
$data = $this->_chart->account($account);
|
||||||
$pref = $this->_preferences->get('frontpageAccounts', []);
|
|
||||||
if ($pref->data == []) {
|
|
||||||
$accounts = $this->_accounts->getActiveDefault();
|
|
||||||
} else {
|
|
||||||
$accounts = $this->_accounts->getByIds($pref->data);
|
|
||||||
}
|
|
||||||
foreach ($accounts as $account) {
|
|
||||||
$return[] = ['name' => $account->name, 'id' => 'acc-' . $account->id, 'data' => []];
|
|
||||||
|
|
||||||
}
|
|
||||||
while ($current <= $end) {
|
|
||||||
// loop accounts:
|
|
||||||
foreach ($accounts as $index => $account) {
|
|
||||||
if ($current > $today) {
|
|
||||||
$return[$index]['data'][] = [$current->timestamp * 1000, $account->predict(clone $current)];
|
|
||||||
} else {
|
|
||||||
$return[$index]['data'][] = [$current->timestamp * 1000, $account->balance(clone $current)];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$current->addDay();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
$return[0] = ['name' => $account->name, 'id' => $account->id, 'data' => []];
|
$data = $this->_chart->accounts();
|
||||||
while ($current <= $end) {
|
|
||||||
if ($current > $today) {
|
|
||||||
$return[0]['data'][] = [$current->timestamp * 1000, $account->predict(clone $current)];
|
|
||||||
} else {
|
|
||||||
$return[0]['data'][] = [$current->timestamp * 1000, $account->balance(clone $current)];
|
|
||||||
}
|
|
||||||
|
|
||||||
$current->addDay();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return Response::json($data);
|
||||||
return Response::json($return);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
71
app/lib/Firefly/Helper/Controllers/Chart.php
Normal file
71
app/lib/Firefly/Helper/Controllers/Chart.php
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: User
|
||||||
|
* Date: 29-7-14
|
||||||
|
* Time: 10:41
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Firefly\Helper\Controllers;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
|
||||||
|
class Chart implements ChartInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
public function account(\Account $account)
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'chart_title' => $account->name,
|
||||||
|
'subtitle' => '<a href="' . route('accounts.show', [$account->id]) . '">View more</a>',
|
||||||
|
'series' => [$this->_account($account)]
|
||||||
|
];
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function accounts()
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'chart_title' => 'All accounts',
|
||||||
|
'subtitle' => '<a href="' . route('accounts.index') . '">View more</a>',
|
||||||
|
'series' => []
|
||||||
|
];
|
||||||
|
/** @var \Firefly\Helper\Preferences\PreferencesHelperInterface $prefs */
|
||||||
|
$prefs = \App::make('Firefly\Helper\Preferences\PreferencesHelperInterface');
|
||||||
|
$pref = $prefs->get('frontpageAccounts', []);
|
||||||
|
|
||||||
|
/** @var \Firefly\Storage\Account\AccountRepositoryInterface $acct */
|
||||||
|
$acct = \App::make('Firefly\Storage\Account\AccountRepositoryInterface');
|
||||||
|
|
||||||
|
if ($pref->data == []) {
|
||||||
|
$accounts = $acct->getActiveDefault();
|
||||||
|
} else {
|
||||||
|
$accounts = $acct->getByIds($pref->data);
|
||||||
|
}
|
||||||
|
foreach($accounts as $account) {
|
||||||
|
$data['series'][] = $this->_account($account);
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function _account(\Account $account)
|
||||||
|
{
|
||||||
|
$start = \Session::get('start');
|
||||||
|
$end = \Session::get('end');
|
||||||
|
$current = clone $start;
|
||||||
|
$today = new Carbon;
|
||||||
|
$return = ['name' => $account->name, 'id' => $account->id, 'data' => []];
|
||||||
|
while ($current <= $end) {
|
||||||
|
if ($current > $today) {
|
||||||
|
$return['data'][] = [$current->timestamp * 1000, $account->predict(clone $current)];
|
||||||
|
} else {
|
||||||
|
$return['data'][] = [$current->timestamp * 1000, $account->balance(clone $current)];
|
||||||
|
}
|
||||||
|
|
||||||
|
$current->addDay();
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
17
app/lib/Firefly/Helper/Controllers/ChartInterface.php
Normal file
17
app/lib/Firefly/Helper/Controllers/ChartInterface.php
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: User
|
||||||
|
* Date: 29-7-14
|
||||||
|
* Time: 10:42
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Firefly\Helper\Controllers;
|
||||||
|
|
||||||
|
|
||||||
|
interface ChartInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
public function account(\Account $account);
|
||||||
|
public function accounts();
|
||||||
|
}
|
@ -22,6 +22,10 @@ class HelperServiceProvider extends ServiceProvider
|
|||||||
'Firefly\Helper\Controllers\AccountInterface',
|
'Firefly\Helper\Controllers\AccountInterface',
|
||||||
'Firefly\Helper\Controllers\Account'
|
'Firefly\Helper\Controllers\Account'
|
||||||
);
|
);
|
||||||
|
$this->app->bind(
|
||||||
|
'Firefly\Helper\Controllers\ChartInterface',
|
||||||
|
'Firefly\Helper\Controllers\Chart'
|
||||||
|
);
|
||||||
|
|
||||||
$this->app->bind(
|
$this->app->bind(
|
||||||
'Firefly\Helper\Controllers\BudgetInterface',
|
'Firefly\Helper\Controllers\BudgetInterface',
|
||||||
|
@ -30,7 +30,7 @@ Route::group(['before' => 'auth'], function () {
|
|||||||
Route::get('/flush', ['uses' => 'HomeController@flush', 'as' => 'flush']);
|
Route::get('/flush', ['uses' => 'HomeController@flush', 'as' => 'flush']);
|
||||||
|
|
||||||
// chart controller
|
// chart controller
|
||||||
Route::get('/chart/home/account/{accountname?}', ['uses' => 'ChartController@homeAccount', 'as' => 'chart.home']);
|
Route::get('/chart/home/account/{account?}', ['uses' => 'ChartController@homeAccount', 'as' => 'chart.home']);
|
||||||
Route::get('/chart/home/categories', ['uses' => 'ChartController@homeCategories', 'as' => 'chart.categories']);
|
Route::get('/chart/home/categories', ['uses' => 'ChartController@homeCategories', 'as' => 'chart.categories']);
|
||||||
Route::get('/chart/home/budgets', ['uses' => 'ChartController@homeBudgets', 'as' => 'chart.budgets']);
|
Route::get('/chart/home/budgets', ['uses' => 'ChartController@homeBudgets', 'as' => 'chart.budgets']);
|
||||||
Route::get('/chart/home/info/{accountname}/{day}/{month}/{year}', ['uses' => 'ChartController@homeAccountInfo', 'as' => 'chart.info']);
|
Route::get('/chart/home/info/{accountname}/{day}/{month}/{year}', ['uses' => 'ChartController@homeAccountInfo', 'as' => 'chart.info']);
|
||||||
|
Loading…
Reference in New Issue
Block a user