2015-03-02 13:05:28 -06:00
|
|
|
<?php namespace FireflyIII\Handlers\Events;
|
|
|
|
|
|
|
|
use Auth;
|
2016-01-12 14:38:05 -06:00
|
|
|
use FireflyIII\Events\TransactionJournalStored;
|
2015-03-02 13:05:28 -06:00
|
|
|
use FireflyIII\Models\PiggyBank;
|
|
|
|
use FireflyIII\Models\PiggyBankEvent;
|
|
|
|
use FireflyIII\Models\TransactionJournal;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Class ConnectJournalToPiggyBank
|
|
|
|
*
|
|
|
|
* @package FireflyIII\Handlers\Events
|
|
|
|
*/
|
|
|
|
class ConnectJournalToPiggyBank
|
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create the event handler.
|
2015-05-24 04:41:52 -05:00
|
|
|
*
|
2015-05-23 14:41:04 -05:00
|
|
|
* @codeCoverageIgnore
|
2015-03-02 13:05:28 -06:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
public function __construct()
|
|
|
|
{
|
|
|
|
//
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2016-01-12 14:38:05 -06:00
|
|
|
* Connect a new transaction journal to any related piggy banks.
|
2015-03-02 13:05:28 -06:00
|
|
|
*
|
2016-01-12 14:38:05 -06:00
|
|
|
* @param TransactionJournalStored $event
|
2015-03-02 13:05:28 -06:00
|
|
|
*
|
2015-05-11 14:45:31 -05:00
|
|
|
* @return boolean
|
2015-03-02 13:05:28 -06:00
|
|
|
*/
|
2016-01-12 14:38:05 -06:00
|
|
|
public function handle(TransactionJournalStored $event)
|
2015-03-02 13:05:28 -06:00
|
|
|
{
|
|
|
|
/** @var TransactionJournal $journal */
|
|
|
|
$journal = $event->journal;
|
|
|
|
$piggyBankId = $event->piggyBankId;
|
|
|
|
|
|
|
|
/** @var PiggyBank $piggyBank */
|
|
|
|
$piggyBank = Auth::user()->piggybanks()->where('piggy_banks.id', $piggyBankId)->first(['piggy_banks.*']);
|
|
|
|
|
2015-05-17 03:30:18 -05:00
|
|
|
if (is_null($piggyBank)) {
|
2016-01-13 00:16:29 -06:00
|
|
|
return true;
|
2015-03-02 13:05:28 -06:00
|
|
|
}
|
|
|
|
// update piggy bank rep for date of transaction journal.
|
|
|
|
$repetition = $piggyBank->piggyBankRepetitions()->relevantOnDate($journal->date)->first();
|
|
|
|
if (is_null($repetition)) {
|
2016-01-13 00:16:29 -06:00
|
|
|
return true;
|
2015-03-02 13:05:28 -06:00
|
|
|
}
|
2015-06-02 15:22:47 -05:00
|
|
|
bcscale(2);
|
2015-06-24 14:02:34 -05:00
|
|
|
|
2015-09-25 13:40:24 -05:00
|
|
|
$amount = $journal->amount_positive;
|
2015-06-24 14:02:34 -05:00
|
|
|
// if piggy account matches source account, the amount is positive
|
|
|
|
if ($piggyBank->account_id == $journal->source_account->id) {
|
|
|
|
$amount = $amount * -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-06-02 15:22:47 -05:00
|
|
|
$repetition->currentamount = bcadd($repetition->currentamount, $amount);
|
2015-03-02 13:05:28 -06:00
|
|
|
$repetition->save();
|
|
|
|
|
2015-05-17 03:30:18 -05:00
|
|
|
PiggyBankEvent::create(['piggy_bank_id' => $piggyBank->id, 'transaction_journal_id' => $journal->id, 'date' => $journal->date, 'amount' => $amount]);
|
2015-05-14 02:51:54 -05:00
|
|
|
|
2015-05-11 14:45:31 -05:00
|
|
|
return true;
|
2015-03-02 13:05:28 -06:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|