firefly-iii/app/Handlers/Events/ConnectJournalToPiggyBank.php

101 lines
2.8 KiB
PHP
Raw Normal View History

2015-03-02 13:05:28 -06:00
<?php namespace FireflyIII\Handlers\Events;
use Auth;
use FireflyIII\Events\JournalCreated;
use FireflyIII\Models\PiggyBank;
use FireflyIII\Models\PiggyBankEvent;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal;
use Log;
/**
* Class ConnectJournalToPiggyBank
*
* @package FireflyIII\Handlers\Events
*/
class ConnectJournalToPiggyBank
{
/**
* Create the event handler.
*
*/
public function __construct()
{
//
}
/**
* Handle the event when journal is saved.
*
* @param JournalCreated $event
*
2015-05-11 14:45:31 -05:00
* @return boolean
2015-03-02 13:05:28 -06:00
*/
public function handle(JournalCreated $event)
{
/** @var TransactionJournal $journal */
$journal = $event->journal;
$piggyBankId = $event->piggyBankId;
2015-03-29 14:27:51 -05:00
if (intval($piggyBankId) < 1) {
2015-05-11 14:45:31 -05:00
return false;
2015-03-25 11:44:06 -05:00
}
2015-03-02 13:05:28 -06:00
Log::debug('JournalCreated event: ' . $journal->id . ', ' . $piggyBankId);
/** @var PiggyBank $piggyBank */
$piggyBank = Auth::user()->piggybanks()->where('piggy_banks.id', $piggyBankId)->first(['piggy_banks.*']);
if (is_null($piggyBank) || $journal->transactionType->type != 'Transfer') {
2015-05-11 14:45:31 -05:00
return false;
2015-03-02 13:05:28 -06:00
}
Log::debug('Found a piggy bank');
$amount = $journal->amount;
2015-03-02 13:05:28 -06:00
Log::debug('Amount: ' . $amount);
if ($amount == 0) {
2015-05-11 14:45:31 -05:00
return false;
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)) {
2015-03-29 14:27:51 -05:00
Log::debug('Found no repetition for piggy bank for date ' . $journal->date->format('Y M d'));
2015-05-11 14:45:31 -05:00
return false;
2015-03-02 13:05:28 -06:00
}
Log::debug('Found rep! ' . $repetition->id);
/*
* Add amount when
*/
/** @var Transaction $transaction */
foreach ($journal->transactions()->get() as $transaction) {
if ($transaction->account_id == $piggyBank->account_id) {
if ($transaction->amount < 0) {
$amount = $amount * -1;
Log::debug('Transaction is away from piggy, so amount becomes ' . $amount);
} else {
Log::debug('Transaction is to from piggy, so amount stays ' . $amount);
}
}
}
2015-03-02 13:05:28 -06:00
$repetition->currentamount += $amount;
$repetition->save();
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
}
}