All kinds of code cleanup, mostly to get some mess detection fixed.

This commit is contained in:
James Cole 2014-12-19 20:47:33 +01:00
parent 8ab294e90b
commit 30ac62ffb7
15 changed files with 131 additions and 297 deletions

View File

@ -175,7 +175,7 @@ class BudgetController extends BaseController
Session::flash('successes', $messages['successes']);
Session::flash('errors', $messages['errors']);
if ($messages['errors']->count() > 0) {
Session::flash('error', 'Could not store budget: ' . $messages['errors']->first());
Session::flash('error', 'Could not validate budget: ' . $messages['errors']->first());
}
// return to create screen:

View File

@ -299,64 +299,6 @@ class GoogleChartController extends BaseController
}
/**
* @param $year
*
* @return \Illuminate\Http\JsonResponse
*/
public function budgetsReportChart($year)
{
try {
$start = new Carbon('01-01-' . $year);
} catch (Exception $e) {
App::abort(500);
}
/** @var \Grumpydictator\Gchart\GChart $chart */
$chart = App::make('gchart');
/** @var \FireflyIII\Database\Budget\Budget $bdt */
$bdt = App::make('FireflyIII\Database\Budget\Budget');
$budgets = $bdt->get();
$chart->addColumn('Month', 'date');
/** @var \Budget $budget */
foreach ($budgets as $budget) {
$chart->addColumn($budget->name, 'number');
}
$chart->addColumn('No budget', 'number');
/*
* Loop budgets this year.
*/
$end = clone $start;
$end->endOfYear();
while ($start <= $end) {
$row = [clone $start];
foreach ($budgets as $budget) {
$row[] = $bdt->spentInMonth($budget, $start);
}
/*
* Without a budget:
*/
$endOfMonth = clone $start;
$endOfMonth->endOfMonth();
$set = $bdt->transactionsWithoutBudgetInDateRange($start, $endOfMonth);
$row[] = floatval($set->sum('amount')) * -1;
$chart->addRowArray($row);
$start->addMonth();
}
$chart->generate();
return Response::json($chart->getData());
}
/**
* @param Category $component
* @param $year

View File

@ -80,22 +80,6 @@ class HomeController extends BaseController
return Redirect::back();
}
public function repair()
{
BudgetLimit::get()->each(
function (BudgetLimit $bl) {
$component = Component::find($bl->component_id);
if ($component) {
$budget = Budget::whereName($component->name)->whereUserId($component->user_id)->first();
if ($budget) {
$bl->budget_id = $budget->id;
$bl->save();
}
}
}
);
}
/**
* @return \Illuminate\Http\RedirectResponse
*/

View File

@ -1,21 +1,25 @@
<?php
use Carbon\Carbon;
use FireflyIII\Database\PiggyBank\RepeatedExpense as Repository;
use FireflyIII\Exception\FireflyException;
use Illuminate\Support\MessageBag;
/**
* Class RepeatedExpenseController
*/
class RepeatedExpenseController extends BaseController
{
/** @var Repository */
protected $_repository;
/**
*
* @param Repository $repository
*/
public function __construct()
public function __construct(Repository $repository)
{
View::share('title', 'Repeated expenses');
View::share('mainTitleIcon', 'fa-rotate-left');
$this->_repository = $repository;
}
/**
@ -86,50 +90,36 @@ class RepeatedExpenseController extends BaseController
*/
public function store()
{
$data = Input::all();
$data = Input::except('_token');
$data['repeats'] = 1;
/** @var \FireflyIII\Database\PiggyBank\RepeatedExpense $repository */
$repository = App::make('FireflyIII\Database\PiggyBank\RepeatedExpense');
switch ($data['post_submit_action']) {
default:
throw new FireflyException('Cannot handle post_submit_action "' . e($data['post_submit_action']) . '"');
break;
case 'create_another':
case 'store':
$messages = $repository->validate($data);
/** @var MessageBag $messages ['errors'] */
if ($messages['errors']->count() > 0) {
Session::flash('warnings', $messages['warnings']);
Session::flash('successes', $messages['successes']);
Session::flash('error', 'Could not save repeated expense: ' . $messages['errors']->first());
// always validate:
$messages = $this->_repository->validate($data);
return Redirect::route('repeated.create')->withInput()->withErrors($messages['errors']);
}
// store!
$repeated = $repository->store($data);
/*
* Create the relevant repetition per Event.
*/
Event::fire('piggybank.store', [$repeated]); // new and used.
Session::flash('success', 'New repeated expense stored!');
if ($data['post_submit_action'] == 'create_another') {
return Redirect::route('repeated.create')->withInput();
} else {
return Redirect::route('repeated.index');
}
break;
case 'validate_only':
$messageBags = $repository->validate($data);
Session::flash('warnings', $messageBags['warnings']);
Session::flash('successes', $messageBags['successes']);
Session::flash('errors', $messageBags['errors']);
return Redirect::route('repeated.create')->withInput();
break;
// flash messages:
Session::flash('warnings', $messages['warnings']);
Session::flash('successes', $messages['successes']);
Session::flash('errors', $messages['errors']);
if ($messages['errors']->count() > 0) {
Session::flash('error', 'Could not validate repeated expense: ' . $messages['errors']->first());
}
// return to create screen:
if ($data['post_submit_action'] == 'validate_only' || $messages['errors']->count() > 0) {
return Redirect::route('repeated.create')->withInput();
}
// store:
$this->_repository->store($data);
Session::flash('success', 'Budget "' . e($data['name']) . '" stored.');
if ($data['post_submit_action'] == 'store') {
return Redirect::route('repeated.index');
}
// create another.
if ($data['post_submit_action'] == 'create_another') {
return Redirect::route('repeated.create')->withInput();
}
return Redirect::route('repeated.index');
}
}

View File

@ -55,8 +55,8 @@ class ChangesForV321 extends Migration
$this->moveCategoriesBack(); // 2.
$this->updateComponentInBudgetLimits(); // 3.
$this->dropBudgetIdColumnInBudgetLimits(); // 4.
$createJournalComponents = new CreateComponentTransactionJournalTable; // 5.
$createJournalComponents->up();
$createComponents = new CreateComponentTransactionJournalTable; // 5.
$createComponents->up();
$this->moveBackEntriesForBudgetsInJoinedTable(); // 6.
$this->moveBackEntriesForCategoriesInJoinedTable(); // 7.
$this->dropBudgetJournalTable(); // 8.

View File

@ -49,7 +49,7 @@ class TestContentSeeder extends Seeder
Component::create(['user_id' => $user->id, 'name' => 'Some Component 7', 'class' => 'Category']);
// create some expense accounts.
$ah = Account::create(['user_id' => $user->id, 'account_type_id' => $expenseType->id, 'name' => 'Albert Heijn', 'active' => 1]);
$albert = Account::create(['user_id' => $user->id, 'account_type_id' => $expenseType->id, 'name' => 'Albert Heijn', 'active' => 1]);
$plus = Account::create(['user_id' => $user->id, 'account_type_id' => $expenseType->id, 'name' => 'PLUS', 'active' => 1]);
$vitens = Account::create(['user_id' => $user->id, 'account_type_id' => $expenseType->id, 'name' => 'Vitens', 'active' => 1]);
$greenchoice = Account::create(['user_id' => $user->id, 'account_type_id' => $expenseType->id, 'name' => 'Greenchoice', 'active' => 1]);
@ -59,7 +59,7 @@ class TestContentSeeder extends Seeder
// create three revenue accounts.
$employer = Account::create(['user_id' => $user->id, 'account_type_id' => $revenueType->id, 'name' => 'Employer', 'active' => 1]);
$taxes = Account::create(['user_id' => $user->id, 'account_type_id' => $revenueType->id, 'name' => 'IRS', 'active' => 1]);
$job = Account::create(['user_id' => $user->id, 'account_type_id' => $revenueType->id, 'name' => 'Job', 'active' => 1]);
Account::create(['user_id' => $user->id, 'account_type_id' => $revenueType->id, 'name' => 'Job', 'active' => 1]);
// put money in the two accounts (initial balance)
$ibChecking = Account::create(
@ -98,7 +98,7 @@ class TestContentSeeder extends Seeder
$groceriesStart->addDay();
if (intval($groceriesStart->format('d')) % 2 == 0) {
$this->createTransaction(
$checking, $ah, $amt, $withdrawal, 'Groceries', $groceriesStart->format('Y-m-d'), $groceriesBudget, $dailyGroceries
$checking, $albert, $amt, $withdrawal, 'Groceries', $groceriesStart->format('Y-m-d'), $groceriesBudget, $dailyGroceries
);
}
$groceriesStart->addDay();

View File

@ -235,11 +235,10 @@ class Budget implements CUD, CommonDatabaseCalls, BudgetInterface
public function repetitionOnStartingOnDate(\Budget $budget, Carbon $date)
{
return \LimitRepetition::
leftJoin('budget_limits', 'limit_repetitions.budget_limit_id', '=', 'budget_limits.id')->leftJoin(
'budgets', 'budget_limits.budget_id', '=', 'budgets.id'
)->where('limit_repetitions.startdate', $date->format('Y-m-d'))->where(
'budgets.id', $budget->id
)->first(['limit_repetitions.*']);
leftJoin('budget_limits', 'limit_repetitions.budget_limit_id', '=', 'budget_limits.id')
->where('limit_repetitions.startdate', $date->format('Y-m-d'))
->where('budget_limits.budget_id', $budget->id)
->first(['limit_repetitions.*']);
}
/**
@ -251,15 +250,22 @@ class Budget implements CUD, CommonDatabaseCalls, BudgetInterface
public function transactionsWithoutBudgetInDateRange(Carbon $start, Carbon $end)
{
// Add expenses that have no budget:
return $this->getUser()->transactionjournals()->whereNotIn(
'transaction_journals.id', function ($query) use ($start, $end) {
$query->select('transaction_journals.id')->from('transaction_journals')->leftJoin(
'budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id'
)->leftJoin('budgets', 'budgets.id', '=', 'budget_transaction_journal.budget_id')->where(
'transaction_journals.date', '>=', $start->format('Y-m-d')
)->where('transaction_journals.date', '<=', $end->format('Y-m-d'));
return $this->getUser()
->transactionjournals()
->whereNotIn('transaction_journals.id', function ($query) use ($start, $end) {
$query
->select('transaction_journals.id')
->from('transaction_journals')
->leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id')
->where('transaction_journals.date', '>=', $start->format('Y-m-d'))
->where('transaction_journals.date', '<=', $end->format('Y-m-d'));
}
)->before($end)->after($start)->lessThan(0)->transactionTypes(['Withdrawal'])->get();
)
->before($end)
->after($start)
->lessThan(0)
->transactionTypes(['Withdrawal'])
->get();
}
/**

View File

@ -232,6 +232,7 @@ class PiggyBank implements CUD, CommonDatabaseCalls, PiggyBankInterface
*/
public function findRepetitionByDate(\Piggybank $piggybank, Carbon $date)
{
/** @var Collection $reps */
$reps = $piggybank->piggybankrepetitions()->get();
if ($reps->count() == 1) {
return $reps->first();
@ -239,7 +240,19 @@ class PiggyBank implements CUD, CommonDatabaseCalls, PiggyBankInterface
if ($reps->count() == 0) {
throw new FireflyException('Should always find a piggy bank repetition.');
}
throw new NotImplementedException;
// should filter the one we need:
$repetitions = $reps->filter(
function (\PiggybankRepetition $rep) use ($date) {
if ($date >= $rep->startdate && $date <= $rep->targetdate) {
return $rep;
}
}
);
if ($repetitions->count() == 0) {
return null;
}
return $repetitions->first();
}
/**

View File

@ -117,12 +117,10 @@ class RepeatedExpense implements CUD, CommonDatabaseCalls, PiggyBankInterface
public function store(array $data)
{
$data['rep_every'] = isset($data['rep_every']) ? $data['rep_every'] : 0;
$data['reminder_skip'] = isset($data['reminder_skip']) ? $data['reminder_skip'] : 0;
$data['order'] = isset($data['order']) ? $data['order'] : 0;
$data['remind_me'] = isset($data['remind_me']) ? intval($data['remind_me']) : 0;
$data['startdate'] = isset($data['startdate']) ? $data['startdate'] : Carbon::now()->format('Y-m-d');
$data['targetdate'] = isset($data['targetdate']) && $data['targetdate'] != '' ? $data['targetdate'] : null;
$data['rep_every'] = intval($data['rep_every']);
$data['reminder_skip'] = intval($data['reminder_skip']);
$data['order'] = intval($data['order']);
$data['remind_me'] = intval($data['remind_me']);
$data['account_id'] = intval($data['account_id']);
@ -130,12 +128,7 @@ class RepeatedExpense implements CUD, CommonDatabaseCalls, PiggyBankInterface
$data['reminder'] = null;
}
$repeated = new \Piggybank($data);
if (!$repeated->isValid()) {
var_dump($repeated->getErrors()->all());
exit;
}
$repeated->save();
return $repeated;

View File

@ -92,78 +92,20 @@ class TransactionJournal implements TransactionJournalInterface, CUD, CommonData
*/
public function update(\Eloquent $model, array $data)
{
/** @var \FireflyIII\Database\TransactionType\TransactionType $typeRepository */
$typeRepository = \App::make('FireflyIII\Database\TransactionType\TransactionType');
/** @var \FireflyIII\Database\Account\Account $accountRepository */
$accountRepository = \App::make('FireflyIII\Database\Account\Account');
/** @var \FireflyIII\Database\TransactionCurrency\TransactionCurrency $currencyRepository */
$currencyRepository = \App::make('FireflyIII\Database\TransactionCurrency\TransactionCurrency');
$journalType = $typeRepository->findByWhat($data['what']);
$currency = $currencyRepository->findByCode($data['currency']);
$journalType = $this->getJournalType($data['what']);
$currency = $this->getJournalCurrency($data['currency']);
$model->description = $data['description'];
$model->date = $data['date'];
$model->transactionType()->associate($journalType);
$model->transactionCurrency()->associate($currency);
$model->user()->associate($this->getUser());
$model->description = $data['description'];
$model->date = $data['date'];
/*
* This must be enough to store the journal:
*/
if (!$model->isValid()) {
\Log::error($model->getErrors()->all());
throw new FireflyException('store() transaction journal failed, but it should not!');
}
$model->save();
/*
* Still need to find the accounts related to the transactions.
* This depends on the type of transaction.
*/
switch ($data['what']) {
case 'withdrawal':
$data['from'] = $accountRepository->find($data['account_id']);
$data['to'] = $accountRepository->firstExpenseAccountOrCreate($data['expense_account']);
break;
case 'opening':
break;
case 'deposit':
$data['to'] = $accountRepository->find($data['account_id']);
$data['from'] = $accountRepository->firstRevenueAccountOrCreate($data['revenue_account']);
break;
case 'transfer':
$data['from'] = $accountRepository->find($data['account_from_id']);
$data['to'] = $accountRepository->find($data['account_to_id']);
break;
list($fromAccount, $toAccount) = $this->storeAccounts($data);
default:
throw new FireflyException('Cannot save transaction journal with accounts based on $what "' . $data['what'] . '".');
break;
}
/*
* Update the budget and the category.
*/
if (isset($data['budget_id']) && intval($data['budget_id']) > 0) {
/** @var \FireflyIII\Database\Budget\Budget $budgetRepository */
$budgetRepository = \App::make('FireflyIII\Database\Budget\Budget');
$budget = $budgetRepository->find(intval($data['budget_id']));
if ($budget) {
$model->budgets()->sync([$budget->id]);
}
}
if (strlen($data['category']) > 0) {
/** @var \FireflyIII\Database\Category\Category $categoryRepository */
$categoryRepository = \App::make('FireflyIII\Database\Category\Category');
$category = $categoryRepository->firstOrCreate($data['category']);
if ($category) {
$model->categories()->sync([$category->id]);
}
}
$this->storeBudget($data, $model);
$this->storeCategory($data, $model);
/*
* TODO move to transaction thing.
@ -174,10 +116,10 @@ class TransactionJournal implements TransactionJournalInterface, CUD, CommonData
foreach ($model->transactions()->get() as $transaction) {
if (floatval($transaction->amount) > 0) {
// the TO transaction.
$transaction->account()->associate($data['to']);
$transaction->account()->associate($toAccount);
$transaction->amount = $amount;
} else {
$transaction->account()->associate($data['from']);
$transaction->account()->associate($fromAccount);
$transaction->amount = $amount * -1;
}
if (!$transaction->isValid()) {
@ -443,8 +385,8 @@ class TransactionJournal implements TransactionJournalInterface, CUD, CommonData
}
/**
* @param array $data
* @param \TransactionJournal $journal
* @param array $data
* @param \TransactionJournal|\Eloquent $journal
*/
public function storeBudget($data, \TransactionJournal $journal)
{
@ -453,14 +395,14 @@ class TransactionJournal implements TransactionJournalInterface, CUD, CommonData
$budgetRepository = \App::make('FireflyIII\Database\Budget\Budget');
$budget = $budgetRepository->find(intval($data['budget_id']));
if ($budget) {
$journal->budgets()->save($budget);
$journal->budgets()->sync([$budget->id]);
}
}
}
/**
* @param array $data
* @param \TransactionJournal $journal
* @param array $data
* @param \TransactionJournal|\Eloquent $journal
*/
public function storeCategory(array $data, \TransactionJournal $journal)
{

View File

@ -87,10 +87,6 @@ class Piggybank
$event->piggybank()->associate($piggybank);
$event->amount = floatval($amount);
$event->date = new Carbon;
if (!$event->isValid()) {
var_dump($event->getErrors());
exit();
}
$event->save();
}
}
@ -120,7 +116,7 @@ class Piggybank
*/
public function storeTransfer(\TransactionJournal $journal, $piggybankId = 0)
{
if ($piggybankId == 0 || is_null($piggybankId)) {
if (intval($piggybankId) == 0) {
return;
}
/** @var \FireflyIII\Database\PiggyBank\PiggyBank $repository */
@ -129,58 +125,32 @@ class Piggybank
/** @var \Piggybank $piggyBank */
$piggyBank = $repository->find($piggybankId);
/** @var \PiggybankRepetition $repetition */
$repetition = $repository->findRepetitionByDate($piggyBank, $journal->date);
\Log::debug(
'Connecting transfer "' . $journal->description . '" (#' . $journal->id . ') to piggy bank "' . $piggyBank->name . '" (#' . $piggyBank->id . ').'
);
// some variables to double check the connection.
$start = $piggyBank->startdate;
$end = $piggyBank->targetdate;
$amount = floatval($piggyBank->targetamount);
$leftToSave = $amount - floatval($repetition->currentamount);
$relevantTransaction = null;
/** @var \Transaction $transaction */
foreach ($journal->transactions as $transaction) {
if ($transaction->account_id == $piggyBank->account_id) {
$relevantTransaction = $transaction;
}
}
if (is_null($relevantTransaction)) {
if ($journal->transactions()->where('account_id', $piggyBank->account_id)->count() == 0) {
return;
}
\Log::debug('Relevant transaction is #' . $relevantTransaction->id . ' with amount ' . $relevantTransaction->amount);
// if FF3 should save this connection depends on some variables:
if ($start && $end && $journal->date >= $start && $journal->date <= $end) {
if ($relevantTransaction->amount < 0) { // amount removed from account, so removed from piggy bank.
\Log::debug('Remove from piggy bank.');
$continue = ($relevantTransaction->amount * -1 <= floatval($repetition->currentamount));
\Log::debug(
'relevantTransaction.amount *-1 = ' . ($relevantTransaction->amount * -1) . ' >= current = ' . floatval($repetition->currentamount)
);
} else { // amount added
\Log::debug('Add from piggy bank.');
$continue = $relevantTransaction->amount <= $leftToSave;
}
if ($continue) {
\Log::debug('Update repetition.');
$repetition->currentamount += floatval($relevantTransaction->amount);
$repetition->save();
$event = new \PiggyBankEvent;
$event->piggybank()->associate($piggyBank);
$event->transactionjournal()->associate($journal);
$event->amount = floatval($relevantTransaction->amount);
$event->date = new Carbon;
if (!$event->isValid()) {
var_dump($event->getErrors());
exit();
}
$event->save();
}
/** @var \PiggybankRepetition $repetition */
$repetition = $repository->findRepetitionByDate($piggyBank, $journal->date);
$amount = floatval($piggyBank->targetamount);
$leftToSave = $amount - floatval($repetition->currentamount);
$transaction = $journal->transactions()->where('account_id', $piggyBank->account_id)->first();
// must be in range of journal. Continue determines if we can move it.
if (floatval($transaction->amount < 0)) {
// amount removed from account, so removed from piggy bank.
$continue = ($transaction->amount * -1 <= floatval($repetition->currentamount));
} else {
// amount added
$continue = $transaction->amount <= $leftToSave;
}
if ($continue) {
\Log::debug('Update repetition.');
$repetition->currentamount += floatval($transaction->amount);
$repetition->save();
$event = new \PiggyBankEvent;
$event->piggybank()->associate($piggyBank);
$event->transactionjournal()->associate($journal);
$event->amount = floatval($transaction->amount);
$event->date = new Carbon;
$event->save();
}
}

View File

@ -71,15 +71,9 @@ class Reminders
$today = Carbon::now();
//$today = new Carbon('14-12-2014');
/** @var \Piggybank $piggybank */
foreach ($set as $piggyBank) {
/*
* Try to find a reminder that is valid in the current [period]
* aka between [start of period] and [end of period] as denoted
* by the piggy's repeat_freq.
*/
/** @var \PiggybankRepetition $repetition */
$repetition = $piggyBank->currentRelevantRep();
$start = \DateKit::startOfPeriod($today, $piggyBank->reminder);

View File

@ -51,15 +51,16 @@ class LimitRepetition extends Eloquent
*/
public function spentInRepetition()
{
$sum = \DB::table('transactions')->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')->leftJoin(
'component_transaction_journal', 'component_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id'
)->leftJoin('components', 'components.id', '=', 'component_transaction_journal.component_id')->leftJoin(
'budget_limits', 'budget_limits.component_id', '=', 'components.id'
)->leftJoin('limit_repetitions', 'limit_repetitions.budget_limit_id', '=', 'budget_limits.id')->where(
'transaction_journals.date', '>=', $this->startdate->format('Y-m-d')
)->where('transaction_journals.date', '<=', $this->enddate->format('Y-m-d'))->where('transactions.amount', '>', 0)->where(
'limit_repetitions.id', '=', $this->id
)->sum('transactions.amount');
$sum = \DB::table('transactions')
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
->leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id')
->leftJoin('budget_limits', 'budget_limits.budget_id', '=', 'budget_transaction_journal.budget_id')
->leftJoin('limit_repetitions', 'limit_repetitions.budget_limit_id', '=', 'budget_limits.id')
->where('transaction_journals.date', '>=', $this->startdate->format('Y-m-d'))
->where('transaction_journals.date', '<=', $this->enddate->format('Y-m-d'))
->where('transactions.amount', '>', 0)
->where('limit_repetitions.id', '=', $this->id)
->sum('transactions.amount');
return floatval($sum);
}

View File

@ -98,10 +98,11 @@ Route::bind(
Route::bind(
'limitrepetition', function ($value, $route) {
if (Auth::check()) {
return LimitRepetition::
where('limit_repetitions.id', $value)->leftjoin('budget_limits', 'budget_limits.id', '=', 'limit_repetitions.budget_limit_id')->leftJoin(
'budgets', 'budgets.id', '=', 'budget_limits.budget_id'
)->where('budgets.user_id', Auth::user()->id)->first(['limit_repetitions.*']);
return LimitRepetition::where('limit_repetitions.id', $value)
->leftjoin('budget_limits', 'budget_limits.id', '=', 'limit_repetitions.budget_limit_id')
->leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id')
->where('budgets.user_id', Auth::user()->id)
->first(['limit_repetitions.*']);
}
return null;
@ -180,7 +181,6 @@ 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/recurring/{recurring}', ['uses' => 'GoogleChartController@recurringOverview']);
Route::get('/chart/reports/budgets/{year}', ['uses' => 'GoogleChartController@budgetsReportChart']);
Route::get('/chart/budget/{budget}/{limitrepetition}', ['uses' => 'GoogleChartController@budgetLimitSpending']);
Route::get('/chart/piggyhistory/{piggybank}', ['uses' => 'GoogleChartController@piggyBankHistory']);

View File

@ -3,6 +3,5 @@ if (typeof(google) != 'undefined') {
function drawChart() {
googleColumnChart('chart/reports/income-expenses/' + year, 'income-expenses-chart');
googleColumnChart('chart/reports/income-expenses-sum/' + year, 'income-expenses-sum-chart')
googleStackedColumnChart('chart/reports/budgets/' + year, 'budgets');
}
}