diff --git a/app/Helpers/Collector/GroupCollector.php b/app/Helpers/Collector/GroupCollector.php index 5daa03922e..3bbb4e3c7c 100644 --- a/app/Helpers/Collector/GroupCollector.php +++ b/app/Helpers/Collector/GroupCollector.php @@ -86,7 +86,7 @@ class GroupCollector implements GroupCollectorInterface $this->hasJoinedAttTables = false; $this->expandGroupSearch = false; $this->hasJoinedMetaTables = false; - $this->booleanFields = ['balance_dirty']; + $this->booleanFields = ['source_balance_dirty','destination_balance_dirty']; $this->integerFields = [ 'transaction_group_id', 'user_id', @@ -137,7 +137,7 @@ class GroupCollector implements GroupCollectorInterface // currency info: 'source.amount as amount', 'source.balance_after as source_balance_after', - 'source.balance_dirty as balance_dirty', + 'source.balance_dirty as source_balance_dirty', 'source.native_amount as native_amount', 'source.transaction_currency_id as currency_id', 'currency.code as currency_code', @@ -157,6 +157,7 @@ class GroupCollector implements GroupCollectorInterface // destination account info (always present) 'destination.account_id as destination_account_id', 'destination.balance_after as destination_balance_after', + 'destination.balance_dirty as destination_balance_dirty', ]; } diff --git a/app/Support/JsonApi/Enrichments/TransactionGroupEnrichment.php b/app/Support/JsonApi/Enrichments/TransactionGroupEnrichment.php index 9bac754a7c..c3a28f1144 100644 --- a/app/Support/JsonApi/Enrichments/TransactionGroupEnrichment.php +++ b/app/Support/JsonApi/Enrichments/TransactionGroupEnrichment.php @@ -30,10 +30,12 @@ use FireflyIII\Models\Attachment; use FireflyIII\Models\Location; use FireflyIII\Models\Note; use FireflyIII\Models\Tag; +use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournalMeta; use FireflyIII\Models\UserGroup; +use FireflyIII\Support\Facades\Amount; use FireflyIII\User; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Collection; @@ -52,6 +54,7 @@ class TransactionGroupEnrichment implements EnrichmentInterface private array $notes; // @phpstan-ignore-line private array $tags; private User $user; + private TransactionCurrency $nativeCurrency; private UserGroup $userGroup; public function __construct() @@ -63,6 +66,7 @@ class TransactionGroupEnrichment implements EnrichmentInterface $this->locations = []; $this->attachmentCount = []; $this->dateFields = ['interest_date', 'book_date', 'process_date', 'due_date', 'payment_date', 'invoice_date']; + $this->nativeCurrency = Amount::getNativeCurrency(); } #[Override] @@ -192,8 +196,9 @@ class TransactionGroupEnrichment implements EnrichmentInterface $metaData = $this->metaData; $locations = $this->locations; $attachmentCount = $this->attachmentCount; + $nativeCurrency = $this->nativeCurrency; - $this->collection = $this->collection->map(function (array $item) use ($notes, $tags, $metaData, $locations, $attachmentCount) { + $this->collection = $this->collection->map(function (array $item) use ($nativeCurrency, $notes, $tags, $metaData, $locations, $attachmentCount) { foreach ($item['transactions'] as $index => $transaction) { $journalId = (int) $transaction['transaction_journal_id']; @@ -213,6 +218,15 @@ class TransactionGroupEnrichment implements EnrichmentInterface 'zoom_level' => null, ]; + // native currency + $item['transactions'][$index]['native_currency'] = [ + 'id' => (string) $nativeCurrency->id, + 'code' => $nativeCurrency->code, + 'name' => $nativeCurrency->name, + 'symbol' => $nativeCurrency->symbol, + 'decimal_places' => $nativeCurrency->decimal_places, + ]; + // append meta data $item['transactions'][$index]['meta'] = []; $item['transactions'][$index]['meta_date'] = []; diff --git a/app/Transformers/TransactionGroupTransformer.php b/app/Transformers/TransactionGroupTransformer.php index ef5f8213c8..c9868bba83 100644 --- a/app/Transformers/TransactionGroupTransformer.php +++ b/app/Transformers/TransactionGroupTransformer.php @@ -144,12 +144,38 @@ class TransactionGroupTransformer extends AbstractTransformer 'foreign_currency_id' => $this->stringFromArray($transaction, 'foreign_currency_id', null), 'foreign_currency_code' => $transaction['foreign_currency_code'], + 'foreign_currency_name' => $transaction['foreign_currency_name'], 'foreign_currency_symbol' => $transaction['foreign_currency_symbol'], 'foreign_currency_decimal_places' => $transaction['foreign_currency_decimal_places'], 'amount' => $amount, 'foreign_amount' => $foreignAmount, + // native amount, defaults to NULL when convertToNative is false. + 'native_amount' => $transaction['native_amount'] ?? null, + + // native currency, always present. + 'native_currency_id' => $transaction['native_currency']['id'] ?? null, + 'native_currency_code' => $transaction['native_currency']['code'] ?? null, + 'native_currency_name' => $transaction['native_currency']['name'] ?? null, + 'native_currency_symbol' => $transaction['native_currency']['symbol'] ?? null, + 'native_currency_decimal_places' => $transaction['native_currency']['decimal_places'] ?? null, + + // source balance after + 'source_balance_after' => $transaction['source_balance_after'] ?? null, + 'source_balance_dirty' => $transaction['source_balance_dirty'], + + // destination balance after + 'destination_balance_after' => $transaction['destination_balance_after'] ?? null, + 'destination_balance_dirty' => $transaction['destination_balance_dirty'], + + // balance before and after, if not dirty. + //'running_balance_dirty' => $transaction['balance_dirty'] ?? false, + //'running_balance_before' => $transaction['balance_before'] ?? null, + //'running_balance_after' => $transaction['balance_after'] ?? null, + + + 'description' => $transaction['description'], 'source_id' => (string) $transaction['source_account_id'],