New report

This commit is contained in:
James Cole
2014-11-28 14:41:58 +01:00
parent f6afb46f6f
commit 3299188edf
2 changed files with 60 additions and 61 deletions

View File

@@ -157,7 +157,14 @@ class ReportController extends BaseController
/** @var \FireflyIII\Database\TransactionJournal $journalRepository */ /** @var \FireflyIII\Database\TransactionJournal $journalRepository */
$journalRepository = App::make('FireflyIII\Database\TransactionJournal'); $journalRepository = App::make('FireflyIII\Database\TransactionJournal');
$journals = $journalRepository->getInDateRange($start, $end); /*
* Get all journals from this month:
*/
$journals = $journalRepository->getInDateRange($start, $end);
/*
* Filter withdrawals:
*/
$withdrawals = $journals->filter( $withdrawals = $journals->filter(
function (TransactionJournal $journal) { function (TransactionJournal $journal) {
if ($journal->transactionType->type == 'Withdrawal' && count($journal->budgets) == 0) { if ($journal->transactionType->type == 'Withdrawal' && count($journal->budgets) == 0) {
@@ -165,8 +172,19 @@ class ReportController extends BaseController
} }
} }
); );
/*
// filter again for transfers * Filter deposits.
*/
$deposits = $journals->filter(
function (TransactionJournal $journal) {
if ($journal->transactionType->type == 'Withdrawal' && count($journal->budgets) == 0) {
return $journal;
}
}
);
/*
* Filter transfers:
*/
$transfers = $journals->filter( $transfers = $journals->filter(
function (TransactionJournal $journal) { function (TransactionJournal $journal) {
if ($journal->transactionType->type == 'Transfer') { if ($journal->transactionType->type == 'Transfer') {
@@ -175,54 +193,51 @@ class ReportController extends BaseController
} }
); );
$withdrawals->each( /*
* Filter withdrawals without a counter-transfer (into this account)
*/
$withdrawals = $withdrawals->filter(
function (TransactionJournal $journal) { function (TransactionJournal $journal) {
$collection = new Collection;
/** @var Transaction $transaction */
foreach ($journal->transactions as $transaction) { foreach ($journal->transactions as $transaction) {
if (floatval($transaction->amount) < 0) { if (floatval($transaction->amount) < 0) {
$account = $transaction->account; $account = $transaction->account;
// find counter transfer: // find counter transfer:
$counters = $account->transactions()->where('amount', floatval($transaction->amount) * -1) $counters = $account->transactions()->where('amount', floatval($transaction->amount) * -1)
->where('account_id', '=', $transaction->account_id)
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
->where('transaction_journals.description', 'LIKE', '%' . e($journal->description) . '%') ->where('transaction_journals.description', 'LIKE', '%' . e($journal->description) . '%')
->get(['transactions.*']); ->count();
/** @var Transaction $ct */ if($counters == 0) {
foreach ($counters as $ct) { return $journal;
$collection->push($ct->transactionjournal);
} }
} }
} }
$journal->counters = $collection;
} }
); );
// same for transfers but the other way around! Yay! /*
$transfers->each( * Filter deposits without a counter-transfer (away from this account)
*/
$deposits = $deposits->filter(
function (TransactionJournal $journal) { function (TransactionJournal $journal) {
$collection = new Collection;
/** @var Transaction $transaction */
foreach ($journal->transactions as $transaction) { foreach ($journal->transactions as $transaction) {
if (floatval($transaction->amount) < 0) { if (floatval($transaction->amount) < 0) {
$account = $transaction->account; $account = $transaction->account;
// TODO this has to be the most lame way of filtering ever.
$descr = trim(str_replace('Geld voor','',$journal->description));
// find counter transfer: // find counter transfer:
$counters = $account->transactions()->where('amount', floatval($transaction->amount)) $counters = $account->transactions()->where('amount', floatval($transaction->amount))
->where('account_id', '=', $transaction->account_id)
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
->where('transaction_journals.description', 'LIKE', '%' . $descr . '%') ->where('transaction_journals.description', 'LIKE', '%' . e($journal->description) . '%')
->get(['transactions.*']); ->count();
/** @var Transaction $ct */ if($counters == 0) {
foreach ($counters as $ct) { return $journal;
$collection->push($ct->transactionjournal);
} }
} }
} }
$journal->counters = $collection;
} }
); );
return View::make('reports.unbalanced', compact('start','transfers', 'end', 'title', 'subTitle', 'subTitleIcon', 'mainTitleIcon', 'withdrawals')); return View::make('reports.unbalanced', compact('start', 'end', 'title', 'subTitle', 'subTitleIcon', 'mainTitleIcon', 'withdrawals','deposits'));
} }
/** /**

View File

@@ -1,74 +1,58 @@
@extends('layouts.default') @extends('layouts.default')
@section('content') @section('content')
@if(count($withdrawals) == 0 && count($deposits) == 0)
<div class="row"> <div class="row">
<div class="col-lg-4 col-md-4 col-sm-6"> <div class="col-lg-4 col-md-4 col-sm-6">
<h3>Transactions</h3> <p class="text-success">Everything accounted for.</p>
</div>
</div>
@endif
@if(count($withdrawals) > 0)
<div class="row">
<div class="col-lg-4 col-md-4 col-sm-6">
<h3>Withdrawals</h3>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
@foreach($withdrawals as $journal) @foreach($withdrawals as $journal)
<div class="col-lg-4 col-md-4 col-sm-6"> <div class="col-lg-4 col-md-4 col-sm-6">
<div class="panel <div class="panel panel-danger">
@if($journal->counters->count() > 0)
panel-default
@else
panel-danger
@endif
">
<div class="panel-heading"> <div class="panel-heading">
<a href="{{route('transactions.show',$journal->id)}}">{{{$journal->description}}}</a> <a href="{{route('transactions.show',$journal->id)}}">{{{$journal->description}}}</a>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<p>Spent {{mf($journal->getAmount())}}</p> <p>Spent {{mf($journal->getAmount())}}</p>
@if($journal->counters->count() > 0) <p class="text-danger">No counter transaction!</p>
</div> </div>
<table class="table">
@foreach($journal->counters as $counter)
<tr>
<td><i class="fa fa-fw fa-arrows-h"></i></td>
<td><a href="{{route('transactions.show',$counter->id)}}">{{$counter->description}}</a></td>
<td>{{mf($counter->getAmount())}}</td>
</tr>
<!-- {{$counter}} -->
@endforeach
</table>
@else
<p class="text-danger">No counter transaction!</p>
</div>
@endif
</div> </div>
</div> </div>
@endforeach @endforeach
</div> </div>
@endif
@if(count($deposits) > 0)
<div class="row"> <div class="row">
<div class="col-lg-4 col-md-4 col-sm-6"> <div class="col-lg-4 col-md-4 col-sm-6">
<h3>Transfers</h3> <h3>Deposits</h3>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
@foreach($transfers as $journal) @foreach($deposits as $journal)
<div class="col-lg-4 col-md-4 col-sm-6"> <div class="col-lg-4 col-md-4 col-sm-6">
<div class="panel <div class="panel panel-danger">
@if($journal->counters->count() > 0)
panel-default
@else
panel-danger
@endif
">
<div class="panel-heading"> <div class="panel-heading">
{{{$journal->description}}} <a href="{{route('transactions.show',$journal->id)}}">{{{$journal->description}}}</a>
</div> </div>
<div class="panel-body"> <div class="panel-body">
Bla bla? <p>Received {{mf($journal->getAmount())}}</p>
<p class="text-danger">No counter transaction!</p>
</div> </div>
</div> </div>
</div> </div>
@endforeach @endforeach
</div> </div>
@endif