diff --git a/app/controllers/AccountController.php b/app/controllers/AccountController.php index 0b938206c0..00f8491e29 100644 --- a/app/controllers/AccountController.php +++ b/app/controllers/AccountController.php @@ -336,7 +336,8 @@ class AccountController extends BaseController /** * @param Account $account * - * @return $this|\Illuminate\Http\RedirectResponse + * @return $this + * @throws FireflyException */ public function update(Account $account) { @@ -345,13 +346,16 @@ class AccountController extends BaseController $acct = App::make('FireflyIII\Database\Account'); $data = Input::except('_token'); - switch($account->accountType->type) { + switch ($account->accountType->type) { default: throw new FireflyException('Cannot handle account type "' . e($account->accountType->type) . '"'); break; case 'Default account': $data['what'] = 'asset'; break; + case 'Beneficiary account': + $data['what'] = 'expense'; + break; } switch (Input::get('post_submit_action')) { diff --git a/app/controllers/GoogleChartController.php b/app/controllers/GoogleChartController.php index ede430a25b..57f1a49812 100644 --- a/app/controllers/GoogleChartController.php +++ b/app/controllers/GoogleChartController.php @@ -44,9 +44,9 @@ class GoogleChartController extends BaseController foreach ($accounts as $account) { //if ($current > Carbon::now()) { - // $row[] = 0; + // $row[] = 0; //} else { - $row[] = $account->balance($current); + $row[] = $account->balance($current); //} } @@ -60,6 +60,86 @@ class GoogleChartController extends BaseController } + /** + * @param $year + * + * @return \Illuminate\Http\JsonResponse + */ + public function yearInExp($year) + { + try { + $start = new Carbon('01-01-' . $year); + } catch (Exception $e) { + App::abort(500); + } + /** @var \Grumpydictator\Gchart\GChart $chart */ + $chart = App::make('gchart'); + $chart->addColumn('Month', 'date'); + $chart->addColumn('Income', 'number'); + $chart->addColumn('Expenses', 'number'); + + /** @var \FireflyIII\Database\TransactionJournal $tj */ + $tj = App::make('FireflyIII\Database\TransactionJournal'); + + $end = clone $start; + $end->endOfYear(); + while ($start < $end) { + + // total income: + $income = $tj->getSumOfIncomesByMonth($start); + $expense = $tj->getSumOfExpensesByMonth($start); + + $chart->addRow(clone $start, $income, $expense); + $start->addMonth(); + } + + + $chart->generate(); + return Response::json($chart->getData()); + + } + /** + * @param $year + * + * @return \Illuminate\Http\JsonResponse + */ + public function yearInExpSum($year) + { + try { + $start = new Carbon('01-01-' . $year); + } catch (Exception $e) { + App::abort(500); + } + /** @var \Grumpydictator\Gchart\GChart $chart */ + $chart = App::make('gchart'); + $chart->addColumn('Month', 'string'); + $chart->addColumn('Income', 'number'); + $chart->addColumn('Expenses', 'number'); + + /** @var \FireflyIII\Database\TransactionJournal $tj */ + $tj = App::make('FireflyIII\Database\TransactionJournal'); + + $end = clone $start; + $end->endOfYear(); + $income = 0; + $expense = 0; + while ($start < $end) { + + // total income: + $income += $tj->getSumOfIncomesByMonth($start); + $expense += $tj->getSumOfExpensesByMonth($start); + + $start->addMonth(); + } + $chart->addRow('Sum', $income, $expense); + + + + $chart->generate(); + return Response::json($chart->getData()); + + } + /** * @return \Illuminate\Http\JsonResponse */ diff --git a/app/controllers/ReportController.php b/app/controllers/ReportController.php index a313d89564..baab2c53a0 100644 --- a/app/controllers/ReportController.php +++ b/app/controllers/ReportController.php @@ -1,4 +1,5 @@ with('title','Reports')->with('mainTitleIcon','fa-line-chart'); + /** @var \FireflyIII\Database\TransactionJournal $journals */ + $journals = App::make('FireflyIII\Database\TransactionJournal'); + $journal = $journals->first(); + + $date = $journal->date; + $years = []; + while ($date <= Carbon::now()) { + $years[] = $date->format('Y'); + $date->addYear(); + } + + + return View::make('reports.index', compact('years'))->with('title', 'Reports')->with('mainTitleIcon', 'fa-line-chart'); + } + + /** + * @param $year + */ + public function year($year) + { + try { + $date = new Carbon('01-01-' . $year); + } catch (Exception $e) { + App::abort(500); + } + + /** @var \FireflyIII\Database\TransactionJournal $tj */ + $tj = App::make('FireflyIII\Database\TransactionJournal'); + + // get some sums going + $summary = []; + + + $end = clone $date; + $end->endOfYear(); + while ($date < $end) { + $summary[] = [ + 'month' => $date->format('F'), + 'income' => $tj->getSumOfIncomesByMonth($date), + 'expense' => $tj->getSumOfExpensesByMonth($date), + ]; + $date->addMonth(); + } + + + // draw some charts etc. + return View::make('reports.year', compact('summary'))->with('title', 'Reports')->with('mainTitleIcon', 'fa-line-chart')->with('subTitle', $year)->with( + 'subTitleIcon', 'fa-bar-chart' + )->with('year', $year); } } \ No newline at end of file diff --git a/app/lib/FireflyIII/Database/Ifaces/TransactionJournalInterface.php b/app/lib/FireflyIII/Database/Ifaces/TransactionJournalInterface.php index 8aebf540a0..e5085c7f19 100644 --- a/app/lib/FireflyIII/Database/Ifaces/TransactionJournalInterface.php +++ b/app/lib/FireflyIII/Database/Ifaces/TransactionJournalInterface.php @@ -19,4 +19,24 @@ interface TransactionJournalInterface */ public function getInDateRange(Carbon $start, Carbon $end); + /** + * Get the very first transaction journal. + * @return mixed + */ + public function first(); + + /** + * @param Carbon $date + * + * @return float + */ + public function getSumOfIncomesByMonth(Carbon $date); + + /** + * @param Carbon $date + * + * @return float + */ + public function getSumOfExpensesByMonth(Carbon $date); + } \ No newline at end of file diff --git a/app/lib/FireflyIII/Database/TransactionJournal.php b/app/lib/FireflyIII/Database/TransactionJournal.php index e6d0d5a12f..5b37d5c2ae 100644 --- a/app/lib/FireflyIII/Database/TransactionJournal.php +++ b/app/lib/FireflyIII/Database/TransactionJournal.php @@ -12,6 +12,7 @@ use LaravelBook\Ardent\Ardent; use FireflyIII\Database\Ifaces\CommonDatabaseCalls; use FireflyIII\Database\Ifaces\CUD; use FireflyIII\Database\Ifaces\TransactionJournalInterface; + /** * Class TransactionJournal * @@ -29,6 +30,43 @@ class TransactionJournal implements TransactionJournalInterface, CUD, CommonData $this->setUser(\Auth::user()); } + /** + * @param Carbon $date + * + * @return float + */ + public function getSumOfIncomesByMonth(Carbon $date) + { + $end = clone $date; + $date->startOfMonth(); + $end->endOfMonth(); + $list = $this->getUser()->transactionjournals()->transactionTypes(['Deposit'])->before($end)->after($date)->get(['transaction_journals.*']); + $sum = 0; + /** @var \TransactionJournal $entry */ + foreach ($list as $entry) { + $sum += $entry->getAmount(); + } + return $sum; + } + + /** + * @param Carbon $date + * + * @return float + */ + public function getSumOfExpensesByMonth(Carbon $date) { + $end = clone $date; + $date->startOfMonth(); + $end->endOfMonth(); + $list = $this->getUser()->transactionjournals()->transactionTypes(['Withdrawal'])->before($end)->after($date)->get(['transaction_journals.*']); + $sum = 0; + /** @var \TransactionJournal $entry */ + foreach ($list as $entry) { + $sum += $entry->getAmount(); + } + return $sum; + } + /** * @param Carbon $start * @param Carbon $end @@ -40,6 +78,14 @@ class TransactionJournal implements TransactionJournalInterface, CUD, CommonData return $this->getuser()->transactionjournals()->withRelevantData()->before($end)->after($start)->get(); } + /** + * @return TransactionJournal + */ + public function first() + { + return $this->getUser()->transactionjournals()->orderBy('date', 'ASC')->first(); + } + /** * @param Ardent $model diff --git a/app/models/TransactionJournal.php b/app/models/TransactionJournal.php index 41c8f79805..08808110e4 100644 --- a/app/models/TransactionJournal.php +++ b/app/models/TransactionJournal.php @@ -4,242 +4,6 @@ use Carbon\Carbon; use LaravelBook\Ardent\Ardent; use LaravelBook\Ardent\Builder; -/** - * TransactionJournal - * - * @property integer $id - * @property \Carbon\Carbon $created_at - * @property \Carbon\Carbon $updated_at - * @property integer $user_id - * @property integer $transaction_type_id - * @property integer $transaction_currency_id - * @property string $description - * @property boolean $completed - * @property \Carbon\Carbon $date - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\Component[] $components - * @property-read \TransactionCurrency $transactionCurrency - * @property-read \TransactionType $transactionType - * @property-read \Illuminate\Database\Eloquent\Collection|\Transaction[] $transactions - * @property-read \User $user - * @method static \Illuminate\Database\Query\Builder|\TransactionJournal whereId($value) - * @method static \Illuminate\Database\Query\Builder|\TransactionJournal whereCreatedAt($value) - * @method static \Illuminate\Database\Query\Builder|\TransactionJournal whereUpdatedAt($value) - * @method static \Illuminate\Database\Query\Builder|\TransactionJournal whereUserId($value) - * @method static \Illuminate\Database\Query\Builder|\TransactionJournal whereTransactionTypeId($value) - * @method static \Illuminate\Database\Query\Builder|\TransactionJournal whereTransactionCurrencyId($value) - * @method static \Illuminate\Database\Query\Builder|\TransactionJournal whereDescription($value) - * @method static \Illuminate\Database\Query\Builder|\TransactionJournal whereCompleted($value) - * @method static \Illuminate\Database\Query\Builder|\TransactionJournal whereDate($value) - * @method static \TransactionJournal account($account) - * @method static \TransactionJournal after($date) - * @method static \TransactionJournal before($date) - * @method static \TransactionJournal defaultSorting() - * @method static \TransactionJournal moreThan($amount) - * @method static \TransactionJournal lessThan($amount) - * @method static \TransactionJournal onDate($date) - * @method static \TransactionJournal transactionTypes($types) - * @method static \TransactionJournal withRelevantData() - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property integer $recurring_transaction_id - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \RecurringTransaction $recurringTransaction - * @method static \Illuminate\Database\Query\Builder|\TransactionJournal whereRecurringTransactionId($value) - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @method static \TransactionJournal accountIs($account) - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|\ - * 'Category[] $categories - */ class TransactionJournal extends Ardent { @@ -259,7 +23,7 @@ class TransactionJournal extends Ardent public function budgets() { return $this->belongsToMany( - 'Budget', 'component_transaction_journal', 'transaction_journal_id', 'component_id' + 'Budget', 'component_transaction_journal', 'transaction_journal_id', 'component_id' ); } @@ -269,7 +33,7 @@ class TransactionJournal extends Ardent public function categories() { return $this->belongsToMany( - 'Category', 'component_transaction_journal', 'transaction_journal_id', 'component_id' + 'Category', 'component_transaction_journal', 'transaction_journal_id', 'component_id' ); } @@ -281,6 +45,18 @@ class TransactionJournal extends Ardent return $this->belongsToMany('Component'); } + /** + * @return float + */ + public function getAmount() + { + foreach ($this->transactions as $t) { + if (floatval($t->amount) > 0) { + return floatval($t->amount); + } + } + } + /** * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ @@ -312,7 +88,7 @@ class TransactionJournal extends Ardent /** * @param $query - * @param Carbon $date + * @param Carbon $date * * @return mixed */ @@ -323,7 +99,7 @@ class TransactionJournal extends Ardent /** * @param $query - * @param Carbon $date + * @param Carbon $date * * @return mixed */ @@ -340,8 +116,10 @@ class TransactionJournal extends Ardent public function scopeMoreThan(Builder $query, $amount) { if (is_null($this->joinedTransactions)) { - $query->leftJoin('transactions', 'transactions.transaction_journal_id', '=', - 'transaction_journals.id'); + $query->leftJoin( + 'transactions', 'transactions.transaction_journal_id', '=', + 'transaction_journals.id' + ); $this->joinedTransactions = true; } @@ -351,8 +129,10 @@ class TransactionJournal extends Ardent public function scopeLessThan(Builder $query, $amount) { if (is_null($this->joinedTransactions)) { - $query->leftJoin('transactions', 'transactions.transaction_journal_id', '=', - 'transaction_journals.id'); + $query->leftJoin( + 'transactions', 'transactions.transaction_journal_id', '=', + 'transaction_journals.id' + ); $this->joinedTransactions = true; } @@ -373,8 +153,10 @@ class TransactionJournal extends Ardent public function scopeTransactionTypes(Builder $query, array $types) { if (is_null($this->joinedTransactionTypes)) { - $query->leftJoin('transaction_types', 'transaction_types.id', '=', - 'transaction_journals.transaction_type_id'); + $query->leftJoin( + 'transaction_types', 'transaction_types.id', '=', + 'transaction_journals.transaction_type_id' + ); $this->joinedTransactionTypes = true; } $query->whereIn('transaction_types.type', $types); @@ -389,11 +171,11 @@ class TransactionJournal extends Ardent public function scopeWithRelevantData(Builder $query) { $query->with( - ['transactions' => function ($q) { - $q->orderBy('amount', 'ASC'); - }, 'transactiontype', 'components' => function ($q) { - $q->orderBy('class'); - }, 'transactions.account.accounttype','recurringTransaction'] + ['transactions' => function ($q) { + $q->orderBy('amount', 'ASC'); + }, 'transactiontype', 'components' => function ($q) { + $q->orderBy('class'); + }, 'transactions.account.accounttype', 'recurringTransaction'] ); } diff --git a/app/routes.php b/app/routes.php index 329edfa3d1..f9e515d144 100644 --- a/app/routes.php +++ b/app/routes.php @@ -163,6 +163,8 @@ Route::group( Route::get('/chart/account/{account}', ['uses' => 'GoogleChartController@accountBalanceChart']); Route::get('/chart/sankey/{account}/out', ['uses' => 'GoogleChartController@accountSankeyOutChart']); Route::get('/chart/sankey/{account}/in', ['uses' => 'GoogleChartController@accountSankeyInChart']); + Route::get('/chart/reports/income-expenses/{year}', ['uses' => 'GoogleChartController@yearInExp']); + Route::get('/chart/reports/income-expenses-sum/{year}', ['uses' => 'GoogleChartController@yearInExpSum']); // google table controller Route::get('/table/account/{account}/transactions', ['uses' => 'GoogleTableController@transactionsByAccount']); @@ -232,6 +234,7 @@ Route::group( // report controller: Route::get('/reports', ['uses' => 'ReportController@index', 'as' => 'reports.index']); + Route::get('/reports/{year}', ['uses' => 'ReportController@year', 'as' => 'reports.year']); // search controller: Route::get('/search', ['uses' => 'SearchController@index', 'as' => 'search']); diff --git a/app/views/reports/index.blade.php b/app/views/reports/index.blade.php index 888107e0e8..4511ce7b3c 100644 --- a/app/views/reports/index.blade.php +++ b/app/views/reports/index.blade.php @@ -1,10 +1,19 @@ @extends('layouts.default') @section('content')
-
-

- Here be content. -

+
+
+
+ Yearly reports +
+
+
    + @foreach($years as $year) +
  • {{$year}}
  • + @endforeach +
+
+
@stop \ No newline at end of file diff --git a/app/views/reports/year.blade.php b/app/views/reports/year.blade.php new file mode 100644 index 0000000000..9ab2207b83 --- /dev/null +++ b/app/views/reports/year.blade.php @@ -0,0 +1,84 @@ +@extends('layouts.default') +@section('content') +
+
+
+
+ Income vs. expenses +
+
+
+
+
+
+
+
+
+ Income vs. expenses +
+
+
+
+
+
+
+ +
+
+
+
+ Summary +
+
+ + + + @foreach($summary as $entry) + + @endforeach + + + + + + @foreach($summary as $entry) + + + @endforeach + + + + + @foreach($summary as $entry) + + + @endforeach + + + + @foreach($summary as $entry) + + @endforeach + + +
{{$entry['month']}}Sum
In{{mf($entry['income'])}}{{mf($inSum)}}
Out{{mf($entry['expense']*-1)}}{{mf($outSum)}}
Difference{{mf($entry['income']- $entry['expense'])}}{{mf($inSum + $outSum)}}
+
+
+
+
+ +@stop +@section('scripts') + + +{{HTML::script('assets/javascript/firefly/gcharts.options.js')}} +{{HTML::script('assets/javascript/firefly/gcharts.js')}} + + + +{{HTML::script('assets/javascript/firefly/reports.js')}} + +@stop \ No newline at end of file diff --git a/public/assets/javascript/firefly/index.js b/public/assets/javascript/firefly/index.js index edd171aec6..1b2831aafe 100644 --- a/public/assets/javascript/firefly/index.js +++ b/public/assets/javascript/firefly/index.js @@ -13,31 +13,31 @@ function drawChart() { $(function () { - //googleLineChart(); - /** - * get data from controller for home charts: - */ - $.getJSON('chart/home/account').success(function (data) { - //$('#accounts-chart').highcharts(options); - }); - - /** - * Get chart data for categories chart: - */ - $.getJSON('chart/home/categories').success(function (data) { - //$('#categories-chart'); - }); - - /** - * Get chart data for budget charts. - */ - $.getJSON('chart/home/budgets').success(function (data) { - //$('#budgets-chart'); - - }); - - $.getJSON('chart/home/recurring').success(function (data) { - //$('#recurring-chart'); - }); + ////googleLineChart(); + ///** + // * get data from controller for home charts: + // */ + //$.getJSON('chart/home/account').success(function (data) { + // //$('#accounts-chart').highcharts(options); + //}); + // + ///** + // * Get chart data for categories chart: + // */ + //$.getJSON('chart/home/categories').success(function (data) { + // //$('#categories-chart'); + //}); + // + ///** + // * Get chart data for budget charts. + // */ + //$.getJSON('chart/home/budgets').success(function (data) { + // //$('#budgets-chart'); + // + //}); + // + //$.getJSON('chart/home/recurring').success(function (data) { + // //$('#recurring-chart'); + //}); }); \ No newline at end of file diff --git a/public/assets/javascript/firefly/reports.js b/public/assets/javascript/firefly/reports.js new file mode 100644 index 0000000000..445304a04c --- /dev/null +++ b/public/assets/javascript/firefly/reports.js @@ -0,0 +1,7 @@ +google.setOnLoadCallback(drawChart); + + +function drawChart() { + googleColumnChart('chart/reports/income-expenses/' + year, 'income-expenses-chart'); + googleColumnChart('chart/reports/income-expenses-sum/' + year, 'income-expenses-sum-chart') +} \ No newline at end of file