. */ declare(strict_types=1); namespace FireflyIII\Transformers; use FireflyIII\Models\PiggyBankEvent; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; /** * Class PiggyBankEventTransformer */ class PiggyBankEventTransformer extends AbstractTransformer { private CurrencyRepositoryInterface $currencyRepos; private PiggyBankRepositoryInterface $piggyRepos; private AccountRepositoryInterface $repository; /** * PiggyBankEventTransformer constructor. * * @codeCoverageIgnore */ public function __construct() { $this->repository = app(AccountRepositoryInterface::class); $this->currencyRepos = app(CurrencyRepositoryInterface::class); $this->piggyRepos = app(PiggyBankRepositoryInterface::class); } /** * Convert piggy bank event. * * @param PiggyBankEvent $event * * @return array */ public function transform(PiggyBankEvent $event): array { // get account linked to piggy bank $account = $event->piggyBank->account; // set up repositories. $this->repository->setUser($account->user); $this->currencyRepos->setUser($account->user); $this->piggyRepos->setUser($account->user); // get associated currency or fall back to the default: $currency = $this->repository->getAccountCurrency($account) ?? app('amount')->getDefaultCurrencyByUser($account->user); // get associated journal and transaction, if any: $journalId = $event->transaction_journal_id; $groupId = null; if (0 !== (int)$journalId) { $groupId = (int)$event->transactionJournal->transaction_group_id; $journalId = (int)$journalId; } return [ 'id' => (string)$event->id, 'created_at' => $event->created_at->toAtomString(), 'updated_at' => $event->updated_at->toAtomString(), 'amount' => number_format((float)$event->amount, $currency->decimal_places, '.', ''), 'currency_id' => (string)$currency->id, 'currency_code' => $currency->code, 'currency_symbol' => $currency->symbol, 'currency_decimal_places' => (int)$currency->decimal_places, 'transaction_journal_id' => $journalId ? (string)$journalId : null, 'transaction_group_id' => $groupId ? (string)$groupId : null, 'links' => [ [ 'rel' => 'self', 'uri' => '/piggy_bank_events/' . $event->id, ], ], ]; } }