Expand piggy banks

This commit is contained in:
James Cole
2014-11-16 22:55:34 +01:00
parent 651101912c
commit 82c9a75578
6 changed files with 173 additions and 126 deletions

View File

@@ -276,7 +276,13 @@ class PiggybankController extends BaseController
return Redirect::route('piggybanks.create')->withInput()->withErrors($messages['errors']); return Redirect::route('piggybanks.create')->withInput()->withErrors($messages['errors']);
} }
// store! // store!
$repos->store($data); $piggyBank = $repos->store($data);
/*
* Create the relevant repetition per Event.
*/
Event::fire('piggybank.storePiggybank',[$piggyBank]);
Session::flash('success', 'New piggy bank stored!'); Session::flash('success', 'New piggy bank stored!');
if ($data['post_submit_action'] == 'create_another') { if ($data['post_submit_action'] == 'create_another') {

View File

@@ -320,7 +320,7 @@ class TransactionController extends BaseController
* piggy bank and store an event. * piggy bank and store an event.
*/ */
if (!is_null(Input::get('piggybank_id')) && intval(Input::get('piggybank_id')) > 0) { if (!is_null(Input::get('piggybank_id')) && intval(Input::get('piggybank_id')) > 0) {
Event::fire('piggybank.createTransfer', [$journal, intval(Input::get('piggybank_id'))]); Event::fire('piggybank.storeTransfer', [$journal, intval(Input::get('piggybank_id'))]);
} }
if ($data['post_submit_action'] == 'create_another') { if ($data['post_submit_action'] == 'create_another') {

View File

@@ -59,8 +59,7 @@ class Piggybank implements CUD, CommonDatabaseCalls, PiggybankInterface
exit; exit;
} }
$piggybank->save(); $piggybank->save();
\Event::fire('piggybanks.store', [$piggybank]); return $piggybank;
$piggybank->save();
} }
/** /**

View File

@@ -28,11 +28,75 @@ class Piggybank
} }
} }
public function destroyTransfer(\TransactionJournal $journal)
{
if ($journal->piggybankevents()->count() > 0) {
/** @var \FireflyIII\Database\Piggybank $repository */
$repository = \App::make('FireflyIII\Database\Piggybank');
/** @var \Piggybank $piggyBank */
$piggyBank = $journal->piggybankevents()->first()->piggybank()->first();
/** @var \PiggybankRepetition $repetition */
$repetition = $repository->findRepetitionByDate($piggyBank, $journal->date);
$relevantTransaction = null;
/** @var \Transaction $transaction */
foreach ($journal->transactions as $transaction) {
if ($transaction->account_id == $piggyBank->account_id) {
$relevantTransaction = $transaction;
}
}
if (is_null($relevantTransaction)) {
return;
}
$repetition->currentamount += floatval($relevantTransaction->amount * -1);
$repetition->save();
$event = new \PiggybankEvent;
$event->piggybank()->associate($piggyBank);
$event->amount = floatval($relevantTransaction->amount * -1);
$event->date = new Carbon;
if (!$event->validate()) {
var_dump($event->errors());
exit();
}
$event->save();
}
}
/**
* @param \Piggybank $piggybank
* @param float $amount
*/
public function removeMoney(\Piggybank $piggybank, $amount = 0.0)
{
$amount = $amount * -1;
if ($amount < 0) {
$event = new \PiggybankEvent;
$event->piggybank()->associate($piggybank);
$event->amount = floatval($amount);
$event->date = new Carbon;
if (!$event->validate()) {
var_dump($event->errors());
exit();
}
$event->save();
}
}
/*
*
*/
/** /**
* @param \TransactionJournal $journal * @param \TransactionJournal $journal
* @param int $piggybankId * @param int $piggybankId
*/ */
public function createTransfer(\TransactionJournal $journal, $piggybankId = 0) public function storeTransfer(\TransactionJournal $journal, $piggybankId = 0)
{ {
/** @var \FireflyIII\Database\Piggybank $repository */ /** @var \FireflyIII\Database\Piggybank $repository */
$repository = \App::make('FireflyIII\Database\Piggybank'); $repository = \App::make('FireflyIII\Database\Piggybank');
@@ -95,67 +159,14 @@ class Piggybank
} }
} }
public function destroyTransfer(\TransactionJournal $journal) public function storePiggybank(\Piggybank $piggybank) {
{ if(intval($piggybank->repeats) == 0) {
if ($journal->piggybankevents()->count() > 0) { $repetition = new \PiggybankRepetition;
$repetition->piggybank()->associate($piggybank);
/** @var \FireflyIII\Database\Piggybank $repository */ $repetition->startdate = $piggybank->startdate;
$repository = \App::make('FireflyIII\Database\Piggybank'); $repetition->targetdate = $piggybank->targetdate;
$repetition->currentamount = 0;
/** @var \Piggybank $piggyBank */
$piggyBank = $journal->piggybankevents()->first()->piggybank()->first();
/** @var \PiggybankRepetition $repetition */
$repetition = $repository->findRepetitionByDate($piggyBank, $journal->date);
$relevantTransaction = null;
/** @var \Transaction $transaction */
foreach ($journal->transactions as $transaction) {
if ($transaction->account_id == $piggyBank->account_id) {
$relevantTransaction = $transaction;
}
}
if (is_null($relevantTransaction)) {
return;
}
$repetition->currentamount += floatval($relevantTransaction->amount * -1);
$repetition->save(); $repetition->save();
$event = new \PiggybankEvent;
$event->piggybank()->associate($piggyBank);
$event->amount = floatval($relevantTransaction->amount * -1);
$event->date = new Carbon;
if (!$event->validate()) {
var_dump($event->errors());
exit();
}
$event->save();
}
}
/*
*
*/
/**
* @param \Piggybank $piggybank
* @param float $amount
*/
public function removeMoney(\Piggybank $piggybank, $amount = 0.0)
{
$amount = $amount * -1;
if ($amount < 0) {
$event = new \PiggybankEvent;
$event->piggybank()->associate($piggybank);
$event->amount = floatval($amount);
$event->date = new Carbon;
if (!$event->validate()) {
var_dump($event->errors());
exit();
}
$event->save();
} }
} }
@@ -166,7 +177,8 @@ class Piggybank
{ {
$events->listen('piggybank.addMoney', 'FireflyIII\Event\Piggybank@addMoney'); $events->listen('piggybank.addMoney', 'FireflyIII\Event\Piggybank@addMoney');
$events->listen('piggybank.removeMoney', 'FireflyIII\Event\Piggybank@removeMoney'); $events->listen('piggybank.removeMoney', 'FireflyIII\Event\Piggybank@removeMoney');
$events->listen('piggybank.createTransfer', 'FireflyIII\Event\Piggybank@createTransfer'); $events->listen('piggybank.storeTransfer', 'FireflyIII\Event\Piggybank@storeTransfer');
$events->listen('piggybank.storePiggybank', 'FireflyIII\Event\Piggybank@storePiggybank');
$events->listen('piggybank.destroyTransfer', 'FireflyIII\Event\Piggybank@destroyTransfer'); $events->listen('piggybank.destroyTransfer', 'FireflyIII\Event\Piggybank@destroyTransfer');
$events->listen('piggybank.updateTransfer', 'FireflyIII\Event\Piggybank@updateTransfer'); $events->listen('piggybank.updateTransfer', 'FireflyIII\Event\Piggybank@updateTransfer');
} }
@@ -176,7 +188,7 @@ class Piggybank
if ($journal->piggybankevents()->count() > 0) { if ($journal->piggybankevents()->count() > 0) {
$event = $journal->piggybankevents()->orderBy('date', 'DESC')->orderBy('id', 'DESC')->first(); $event = $journal->piggybankevents()->orderBy('date', 'DESC')->orderBy('id', 'DESC')->first();
$eventSum = floatval($journal->piggybankevents()->orderBy('date', 'DESC')->orderBy('id', 'DESC')->sum('amount')); $eventSum = floatval($journal->piggybankevents()->orderBy('date', 'DESC')->orderBy('id', 'DESC')->sum('amount'));
/** @var \FireflyIII\Database\Piggybank $repository */ /** @var \FireflyIII\Database\Piggybank $repository */

View File

@@ -1,10 +1,18 @@
<table class="table table-bordered table-striped"> <table class="table table-bordered table-striped">
<tr> <tr>
@if(isset($showPiggybank) && $showPiggybank === true)
<th>Piggy bank</th>
@endif
<th>Date</th> <th>Date</th>
<th>Amount</th> <th>Amount</th>
</tr> </tr>
@foreach($events as $event) @foreach($events as $event)
<tr> <tr>
@if(isset($showPiggybank) && $showPiggybank === true)
<td>
<a href="{{route('piggybanks.show',$event->piggybank_id)}}">{{{$event->piggybank->name}}}</a>
</td>
@endif
<td> <td>
@if(!is_null($event->transaction_journal_id)) @if(!is_null($event->transaction_journal_id))
<a href="{{route('transactions.show',$event->transaction_journal_id)}}" title="{{{$event->transactionJournal->description}}}">{{$event->date->format('j F Y')}}</a> <a href="{{route('transactions.show',$event->transaction_journal_id)}}" title="{{{$event->transactionJournal->description}}}">{{$event->date->format('j F Y')}}</a>

View File

@@ -2,71 +2,93 @@
@section('content') @section('content')
<div class="row"> <div class="row">
<div class="col-lg-6 col-md-6 col-sm-12"> <div class="col-lg-6 col-md-6 col-sm-12">
<h3>Metadata</h3> <div class="panel panel-default">
<table class="table table-striped table-bordered"> <div class="panel-heading">
<tr> Metadata
<td>Date</td> </div>
<td>{{{$journal->date->format('jS F Y')}}}</td> <div class="panel-body">
</tr> <table class="table table-striped table-bordered">
<tr> <tr>
<td>Currency</td> <td>Date</td>
<td>{{{$journal->transactioncurrency->code}}}</td> <td>{{{$journal->date->format('jS F Y')}}}</td>
</tr> </tr>
<tr> <tr>
<td>Type</td> <td>Currency</td>
<td>{{{$journal->transactiontype->type}}}</td> <td>{{{$journal->transactioncurrency->code}}}</td>
</tr> </tr>
<tr> <tr>
<td>Completed</td> <td>Type</td>
<td> <td>{{{$journal->transactiontype->type}}}</td>
@if($journal->completed == 1) </tr>
<span class="text-success">Yes</span> <tr>
@else <td>Completed</td>
<span class="text-danger">No</span> <td>
@endif @if($journal->completed == 1)
</td> <span class="text-success">Yes</span>
</tr> @else
@foreach($journal->budgets()->get() as $budget) <span class="text-danger">No</span>
<tr> @endif
<td>{{$budget->class}}</td> </td>
<td><a href="{{route('budgets.show',$budget->id)}}">{{{$budget->name}}}</a></td> </tr>
</tr> @foreach($journal->budgets()->get() as $budget)
@endforeach <tr>
@foreach($journal->categories()->get() as $category) <td>{{$budget->class}}</td>
<tr> <td><a href="{{route('budgets.show',$budget->id)}}">{{{$budget->name}}}</a></td>
<td>{{$category->class}}</td> </tr>
<td><a href="{{route('categories.show',$category->id)}}">{{{$category->name}}}</a></td> @endforeach
</tr> @foreach($journal->categories()->get() as $category)
@endforeach <tr>
<td>{{$category->class}}</td>
<td><a href="{{route('categories.show',$category->id)}}">{{{$category->name}}}</a></td>
</tr>
@endforeach
</table> </table>
<!-- TODO show related piggy bank --> </div>
</div>
<!-- events, if present -->
@if(count($journal->piggybankevents) > 0)
<div class="panel panel-default">
<div class="panel-heading">
Piggy banks
</div>
<div class="panel-body">
@include('list.piggybank-events',['events' => $journal->piggybankevents,'showPiggybank' => true])
</div>
</div>
@endif
</div> </div>
<div class="col-lg-6 col-md-6 col-sm-12"> <div class="col-lg-6 col-md-6 col-sm-12">
<h3>Transactions</h3>
@foreach($journal->transactions as $t)
<h4><a href="{{route('accounts.show',$t->account->id)}}">{{{$t->account->name}}}</a><br /><small>{{{$t->account->accounttype->description}}}</small></h4>
<table class="table table-striped table-bordered">
<tr>
<td>Amount</td>
<td>{{mf($t->amount)}}</td>
</tr>
<tr>
<td>New balance</td>
<td>{{mf($t->account->balanceBeforeJournal($journal))}} &rarr; {{mf($t->account->balanceBeforeJournal($journal) + $t->amount)}}</td>
</tr>
@if(!is_null($t->description))
<tr>
<td>Description</td>
<td>{{{$t->description}}}</td>
</tr>
@endif
</table>
@endforeach
@foreach($journal->transactions as $t)
<div class="panel panel-default">
<div class="panel-heading">
<a href="{{route('accounts.show',$t->account->id)}}">{{{$t->account->name}}}</a><br /><small>{{{$t->account->accounttype->description}}}</small>
</div>
<div class="panel-body">
<table class="table table-striped table-bordered">
<tr>
<td>Amount</td>
<td>{{mf($t->amount)}}</td>
</tr>
<tr>
<td>New balance</td>
<td>{{mf($t->account->balanceBeforeJournal($journal))}} &rarr; {{mf($t->account->balanceBeforeJournal($journal) + $t->amount)}}</td>
</tr>
@if(!is_null($t->description))
<tr>
<td>Description</td>
<td>{{{$t->description}}}</td>
</tr>
@endif
</table>
</div>
</div>
@endforeach
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-lg-6 col-md-6 col-sm-12"> <div class="col-lg-6 col-md-6 col-sm-12">
<div class="btn-group"> <div class="btn-group">