diff --git a/app/Http/Controllers/TransactionController.php b/app/Http/Controllers/TransactionController.php index 8263a1f16f..7e042fbe7e 100644 --- a/app/Http/Controllers/TransactionController.php +++ b/app/Http/Controllers/TransactionController.php @@ -17,6 +17,7 @@ use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Collector\JournalCollectorInterface; use FireflyIII\Helpers\Filter\InternalTransferFilter; +use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Repositories\Journal\JournalTaskerInterface; @@ -28,7 +29,6 @@ use Log; use Navigation; use Preferences; use Response; -use Steam; use View; /** @@ -168,7 +168,7 @@ class TransactionController extends Controller $what = strtolower($journal->transaction_type_type ?? $journal->transactionType->type); $subTitle = trans('firefly.' . $what) . ' "' . e($journal->description) . '"'; - return view('transactions.show', compact('journal', 'events', 'subTitle', 'what', 'transactions', 'linkTypes','links')); + return view('transactions.show', compact('journal', 'events', 'subTitle', 'what', 'transactions', 'linkTypes', 'links')); } @@ -198,7 +198,7 @@ class TransactionController extends Controller $cache->addProperty('transaction-list-entries'); if ($cache->has()) { - return $cache->get(); // @codeCoverageIgnore + // return $cache->get(); // @codeCoverageIgnore } Log::debug(sprintf('Going to get period expenses and incomes between %s and %s.', $start->format('Y-m-d'), $end->format('Y-m-d'))); @@ -212,35 +212,24 @@ class TransactionController extends Controller $collector = app(JournalCollectorInterface::class); $collector->setAllAssetAccounts()->setRange($end, $currentEnd)->withOpposingAccount()->setTypes($types); $collector->removeFilter(InternalTransferFilter::class); - $set = $collector->getJournals(); - $sum = $set->sum('transaction_amount'); - $journals = $set->count(); + $journals = $collector->getJournals(); + $sum = $journals->sum('transaction_amount'); + + // count per currency: + $sums = $this->sumPerCurrency($journals); $dateStr = $end->format('Y-m-d'); $dateName = Navigation::periodShow($end, $range); $array = [ - 'string' => $dateStr, - 'name' => $dateName, - 'count' => $journals, - 'spent' => 0, - 'earned' => 0, - 'transferred' => 0, - 'date' => clone $end, + 'string' => $dateStr, + 'name' => $dateName, + 'sum' => $sum, + 'sums' => $sums, + 'date' => clone $end, ]; Log::debug(sprintf('What is %s', $what)); - switch ($what) { - case 'withdrawal': - $array['spent'] = $sum; - break; - case 'deposit': - $array['earned'] = $sum; - break; - case 'transfers': - case 'transfer': - $array['transferred'] = Steam::positive($sum); - break; - + if ($journals->count() > 0) { + $entries->push($array); } - $entries->push($array); $end = Navigation::subtractPeriod($end, $range, 1); } Log::debug('End of loop'); @@ -249,4 +238,41 @@ class TransactionController extends Controller return $entries; } + /** + * @param Collection $collection + * + * @return array + */ + private function sumPerCurrency(Collection $collection): array + { + $return = []; + /** @var Transaction $transaction */ + foreach ($collection as $transaction) { + $currencyId = $transaction->transaction_currency_id; + + // save currency information: + if (!isset($return[$currencyId])) { + $currencySymbol = $transaction->transaction_currency_symbol; + $decimalPlaces = $transaction->transaction_currency_dp; + $currencyCode = $transaction->transaction_currency_code; + $return[$currencyId] = [ + 'currency' => [ + 'id' => $currencyId, + 'code' => $currencyCode, + 'symbol' => $currencySymbol, + 'dp' => $decimalPlaces, + ], + 'sum' => '0', + 'count' => 0, + ]; + } + // save amount: + $return[$currencyId]['sum'] = bcadd($return[$currencyId]['sum'], $transaction->transaction_amount); + $return[$currencyId]['count']++; + } + asort($return); + + return $return; + } + } diff --git a/app/Models/Transaction.php b/app/Models/Transaction.php index 1437532083..cb3938ddde 100644 --- a/app/Models/Transaction.php +++ b/app/Models/Transaction.php @@ -22,43 +22,47 @@ use Watson\Validating\ValidatingTrait; /** * Class Transaction * - * @property-read int $journal_id + * @property-read int $journal_id * @property-read Carbon $date * @property-read string $transaction_description * @property-read string $transaction_amount * @property-read string $transaction_foreign_amount * @property-read string $transaction_type_type * - * @property-read int $account_id + * @property-read int $account_id * @property-read string $account_name - * @property string $account_iban - * @property string $account_number - * @property string $account_bic - * @property string $account_currency_code + * @property string $account_iban + * @property string $account_number + * @property string $account_bic + * @property string $account_currency_code * - * @property-read int $opposing_account_id - * @property string $opposing_account_name - * @property string $opposing_account_iban - * @property string $opposing_account_number - * @property string $opposing_account_bic - * @property string $opposing_currency_code + * @property-read int $opposing_account_id + * @property string $opposing_account_name + * @property string $opposing_account_iban + * @property string $opposing_account_number + * @property string $opposing_account_bic + * @property string $opposing_currency_code * * - * @property-read int $transaction_budget_id + * @property-read int $transaction_budget_id * @property-read string $transaction_budget_name - * @property-read int $transaction_journal_budget_id + * @property-read int $transaction_journal_budget_id * @property-read string $transaction_journal_budget_name * - * @property-read int $transaction_category_id + * @property-read int $transaction_category_id * @property-read string $transaction_category_name - * @property-read int $transaction_journal_category_id + * @property-read int $transaction_journal_category_id * @property-read string $transaction_journal_category_name * - * @property-read int $bill_id - * @property string $bill_name + * @property-read int $bill_id + * @property string $bill_name * - * @property string $notes - * @property string $tags + * @property string $notes + * @property string $tags + * + * @property string $transaction_currency_symbol + * @property int $transaction_currency_dp + * @property string $transaction_currency_code * * @package FireflyIII\Models */ diff --git a/config/twigbridge.php b/config/twigbridge.php index d438e9146a..3a64abd8c6 100644 --- a/config/twigbridge.php +++ b/config/twigbridge.php @@ -158,6 +158,7 @@ return [ 'Lang', 'Preferences', 'URL', + 'Steam', 'Config', 'Request', 'ExpandedForm' => [ diff --git a/resources/views/transactions/index.twig b/resources/views/transactions/index.twig index e7de57948f..5c3ffcb511 100644 --- a/resources/views/transactions/index.twig +++ b/resources/views/transactions/index.twig @@ -15,6 +15,7 @@ {% endif %} + {# list with journals #}
@@ -22,7 +23,10 @@

{{ subTitle }}

+ {# actual list #} {% include 'list.journals' with {'journals': journals} %} + + {# links for other views #} {% if periods.count > 0 %}

@@ -38,10 +42,13 @@

+ {# boxes with info #} {% if periods.count > 0 %}
{% for period in periods %} - {% if period.count > 0 %} + + {% if period.sum != 0 %} +

{{ period.name }} @@ -49,29 +56,34 @@

- - - - - {% if what == 'withdrawal' %} + + {% for sum in period.sums %} - - + + - {% endif %} - {% if what == 'deposit' %} - - - - - {% endif %} - {% if what == 'transfers' or what == 'transfer' %} - - - - - {% endif %} + {% endfor %} +
{{ 'transactions'|_ }}{{ period.count }}
{{ 'spent'|_ }}{{ period.spent|formatAmount }} + {% if what == 'withdrawal' %} + {{ 'spent'|_ }} + {% endif %} + {% if what == 'deposit' %} + {{ 'earned'|_ }} + {% endif %} + {% if what == 'transfers' or what == 'transfer' %} + {{ 'transferred'|_ }} + {% endif %} + + {% if what == 'transfers' or what == 'transfer' %} + + {{ formatAmountBySymbol(Steam.positive(sum.sum), sum.currency.symbol, sum.currency.dp, false) }} + + {% else %} + {{ formatAmountBySymbol(sum.sum, sum.currency.symbol, sum.currency.dp) }} + {% endif %} +
{{ 'earned'|_ }}{{ period.earned|formatAmount }}
{{ 'transferred'|_ }}{{ period.transferred|formatAmountPlain }}
+
{% endif %}