. */ declare(strict_types=1); namespace FireflyIII\Support\Twig\Extension; use Carbon\Carbon; use FireflyIII\Models\Transaction as TransactionModel; use FireflyIII\Models\TransactionJournal as JournalModel; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use Twig_Extension; /** * Class TransactionJournal */ class TransactionJournal extends Twig_Extension { /** * @param JournalModel $journal * @param string $field * * @return null|Carbon */ public function getMetaDate(JournalModel $journal, string $field): ?Carbon { /** @var JournalRepositoryInterface $repository */ $repository = app(JournalRepositoryInterface::class); return $repository->getMetaDate($journal, $field); } /** * @param JournalModel $journal * @param string $field * * @return string */ public function getMetaField(JournalModel $journal, string $field): string { /** @var JournalRepositoryInterface $repository */ $repository = app(JournalRepositoryInterface::class); $result = $repository->getMetaField($journal, $field); if (null === $result) { return ''; } return $result; } /** * Return if journal HAS field. * * @param JournalModel $journal * @param string $field * * @return bool */ public function hasMetaField(JournalModel $journal, string $field): bool { // HIER BEN JE /** @var JournalRepositoryInterface $repository */ $repository = app(JournalRepositoryInterface::class); $result = $repository->getMetaField($journal, $field); if (null === $result) { return false; } if (\strlen((string)$result) === 0) { return false; } return true; } /** * @param JournalModel $journal * * @return string */ public function totalAmount(JournalModel $journal): string { $transactions = $journal->transactions()->where('amount', '>', 0)->get(); $totals = []; $type = $journal->transactionType->type; /** @var TransactionModel $transaction */ foreach ($transactions as $transaction) { $currencyId = $transaction->transaction_currency_id; $currency = $transaction->transactionCurrency; if (!isset($totals[$currencyId])) { $totals[$currencyId] = [ 'amount' => '0', 'currency' => $currency, ]; } $totals[$currencyId]['amount'] = bcadd($transaction->amount, $totals[$currencyId]['amount']); if (null !== $transaction->foreign_currency_id) { $foreignId = $transaction->foreign_currency_id; $foreign = $transaction->foreignCurrency; if (!isset($totals[$foreignId])) { $totals[$foreignId] = [ 'amount' => '0', 'currency' => $foreign, ]; } $totals[$foreignId]['amount'] = bcadd( $transaction->foreign_amount, $totals[$foreignId]['amount'] ); } } $array = []; foreach ($totals as $total) { if (TransactionType::WITHDRAWAL === $type) { $total['amount'] = bcmul($total['amount'], '-1'); } $array[] = app('amount')->formatAnything($total['currency'], $total['amount']); } return implode(' / ', $array); } }