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

63 lines
1.7 KiB
PHP
Raw Normal View History

2016-02-05 12:08:25 +01:00
<?php
declare(strict_types = 1);
namespace FireflyIII\Handlers\Events;
2015-03-02 20:05:28 +01:00
use Auth;
2016-01-12 21:38:05 +01:00
use FireflyIII\Events\TransactionJournalStored;
2015-03-02 20:05:28 +01:00
use FireflyIII\Models\PiggyBank;
use FireflyIII\Models\PiggyBankEvent;
use FireflyIII\Models\TransactionJournal;
/**
* Class ConnectJournalToPiggyBank
*
* @package FireflyIII\Handlers\Events
*/
class ConnectJournalToPiggyBank
{
/**
2016-01-12 21:38:05 +01:00
* Connect a new transaction journal to any related piggy banks.
2015-03-02 20:05:28 +01:00
*
2016-01-12 21:38:05 +01:00
* @param TransactionJournalStored $event
2015-03-02 20:05:28 +01:00
*
2016-02-18 07:21:48 +01:00
* @return bool
2015-03-02 20:05:28 +01:00
*/
2016-02-18 07:21:48 +01:00
public function handle(TransactionJournalStored $event): bool
2015-03-02 20:05:28 +01: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 10:30:18 +02:00
if (is_null($piggyBank)) {
2016-01-13 07:16:29 +01:00
return true;
2015-03-02 20:05:28 +01:00
}
// update piggy bank rep for date of transaction journal.
$repetition = $piggyBank->piggyBankRepetitions()->relevantOnDate($journal->date)->first();
if (is_null($repetition)) {
2016-01-13 07:16:29 +01:00
return true;
2015-03-02 20:05:28 +01:00
}
$amount = TransactionJournal::amountPositive($journal);
// if piggy account matches source account, the amount is positive
if ($piggyBank->account_id == TransactionJournal::sourceAccount($journal)->id) {
2016-02-05 15:41:40 +01:00
$amount = bcmul($amount, '-1');
}
2015-06-02 22:22:47 +02:00
$repetition->currentamount = bcadd($repetition->currentamount, $amount);
2015-03-02 20:05:28 +01:00
$repetition->save();
2015-05-17 10:30:18 +02:00
PiggyBankEvent::create(['piggy_bank_id' => $piggyBank->id, 'transaction_journal_id' => $journal->id, 'date' => $journal->date, 'amount' => $amount]);
2015-05-14 09:51:54 +02:00
2015-05-11 21:45:31 +02:00
return true;
2015-03-02 20:05:28 +01:00
}
}