mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-11-18 15:39:50 +00:00
New report
This commit is contained in:
@@ -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'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user