. */ declare(strict_types=1); namespace FireflyIII\Factory; use FireflyIII\Models\PiggyBank; use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; /** * Create piggy bank events. * * Class PiggyBankEventFactory */ class PiggyBankEventFactory { public function create(TransactionJournal $journal, ?PiggyBank $piggyBank): void { app('log')->debug(sprintf('Now in PiggyBankEventCreate for a %s', $journal->transactionType->type)); if (null === $piggyBank) { app('log')->debug('Piggy bank is null'); return; } /** @var PiggyBankRepositoryInterface $piggyRepos */ $piggyRepos = app(PiggyBankRepositoryInterface::class); $piggyRepos->setUser($journal->user); $amount = $piggyRepos->getExactAmount($piggyBank, $journal); if (0 === bccomp($amount, '0')) { app('log')->debug('Amount is zero, will not create event.'); return; } // amount can be negative here $piggyRepos->addAmountToPiggyBank($piggyBank, $amount, $journal); } }