. */ 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); $repetition = $piggyRepos->getRepetition($piggyBank); if (null === $repetition) { app('log')->error(sprintf('No piggy bank repetition on %s!', $journal->date->format('Y-m-d'))); return; } app('log')->debug('Found repetition'); $amount = $piggyRepos->getExactAmount($piggyBank, $repetition, $journal); if (0 === bccomp($amount, '0')) { app('log')->debug('Amount is zero, will not create event.'); return; } // amount can be negative here $piggyRepos->addAmountToRepetition($repetition, $amount, $journal); } }