From f35e361915b737e31a8bfd9959faa5c10b865c0c Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 2 Aug 2025 14:21:22 +0200 Subject: [PATCH] Match fields for 6.3.0 --- .../TransactionGroupTransformer.php | 303 +++++++++--------- app/Transformers/UserGroupTransformer.php | 2 +- 2 files changed, 153 insertions(+), 152 deletions(-) diff --git a/app/Transformers/TransactionGroupTransformer.php b/app/Transformers/TransactionGroupTransformer.php index f5ee41f1e9..d8380359c3 100644 --- a/app/Transformers/TransactionGroupTransformer.php +++ b/app/Transformers/TransactionGroupTransformer.php @@ -35,6 +35,7 @@ use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface; +use FireflyIII\Support\Facades\Steam; use FireflyIII\Support\NullArrayObject; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; @@ -93,7 +94,7 @@ class TransactionGroupTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/transactions/'.$first['transaction_group_id'], + 'uri' => '/transactions/' . $first['transaction_group_id'], ], ], ]; @@ -116,10 +117,10 @@ class TransactionGroupTransformer extends AbstractTransformer private function transformTransaction(array $transaction): array { // amount: - $amount = app('steam')->positive((string) ($transaction['amount'] ?? '0')); - $foreignAmount = null; + $amount = Steam::positive((string) ($transaction['amount'] ?? '0')); + $foreignAmount = null; if (null !== $transaction['foreign_amount'] && '' !== $transaction['foreign_amount'] && 0 !== bccomp('0', (string) $transaction['foreign_amount'])) { - $foreignAmount = app('steam')->positive($transaction['foreign_amount']); + $foreignAmount = Steam::positive($transaction['foreign_amount']); } // set primary amount to the normal amount if the currency matches. @@ -128,9 +129,9 @@ class TransactionGroupTransformer extends AbstractTransformer } if (array_key_exists('pc_amount', $transaction) && null !== $transaction['pc_amount']) { - $transaction['pc_amount'] = app('steam')->positive($transaction['pc_amount']); + $transaction['pc_amount'] = Steam::positive($transaction['pc_amount']); } - $type = $this->stringFromArray($transaction, 'transaction_type_type', TransactionTypeEnum::WITHDRAWAL->value); + $type = $this->stringFromArray($transaction, 'transaction_type_type', TransactionTypeEnum::WITHDRAWAL->value); // must be 0 (int) or NULL $recurrenceTotal = $transaction['meta']['recurrence_total'] ?? null; @@ -139,107 +140,107 @@ class TransactionGroupTransformer extends AbstractTransformer $recurrenceCount = null !== $recurrenceCount ? (int) $recurrenceCount : null; return [ - 'user' => (string) $transaction['user_id'], - 'transaction_journal_id' => (string) $transaction['transaction_journal_id'], - 'type' => strtolower((string) $type), - 'date' => $transaction['date']->toAtomString(), - 'order' => $transaction['order'], + 'user' => (string) $transaction['user_id'], + 'transaction_journal_id' => (string) $transaction['transaction_journal_id'], + 'type' => strtolower((string) $type), + 'date' => $transaction['date']->toAtomString(), + 'order' => $transaction['order'], - 'currency_id' => (string) $transaction['currency_id'], - 'currency_code' => $transaction['currency_code'], - 'currency_name' => $transaction['currency_name'], - 'currency_symbol' => $transaction['currency_symbol'], - 'currency_decimal_places' => (int) $transaction['currency_decimal_places'], + // currency information, structured for 6.3.0. + 'object_has_currency_setting' => true, - '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'], + 'currency_id' => (string) $transaction['currency_id'], + 'currency_code' => $transaction['currency_code'], + 'currency_name' => $transaction['currency_name'], + 'currency_symbol' => $transaction['currency_symbol'], + 'currency_decimal_places' => (int) $transaction['currency_decimal_places'], - 'amount' => $amount, - 'foreign_amount' => $foreignAmount, + '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'], - // primary currency amount, defaults to NULL when convertToPrimary is false. - 'pc_amount' => $transaction['pc_amount'] ?? null, + 'primary_currency_id' => $transaction['primary_currency']['id'] ?? null, + 'primary_currency_code' => $transaction['primary_currency']['code'] ?? null, + 'primary_currency_name' => $transaction['primary_currency']['name'] ?? null, + 'primary_currency_symbol' => $transaction['primary_currency']['symbol'] ?? null, + 'primary_currency_decimal_places' => $transaction['primary_currency']['decimal_places'] ?? null, - // primary currency, always present. - 'primary_currency_id' => $transaction['primary_currency']['id'] ?? null, - 'primary_currency_code' => $transaction['primary_currency']['code'] ?? null, - 'primary_currency_name' => $transaction['primary_currency']['name'] ?? null, - 'primary_currency_symbol' => $transaction['primary_currency']['symbol'] ?? null, - 'primary_currency_decimal_places' => $transaction['primary_currency']['decimal_places'] ?? null, + // amounts, structured for 6.3.0. + 'amount' => $amount, + 'pc_amount' => $transaction['pc_amount'] ?? null, - // source balance after - 'source_balance_after' => $transaction['source_balance_after'] ?? null, - 'source_balance_dirty' => $transaction['source_balance_dirty'], + 'foreign_amount' => $foreignAmount, + 'pc_foreign_amount' => null, + + 'source_balance_after' => $transaction['source_balance_after'] ?? null, + 'pc_source_balance_after' => null, // destination balance after - 'destination_balance_after' => $transaction['destination_balance_after'] ?? null, - 'destination_balance_dirty' => $transaction['destination_balance_dirty'], + 'destination_balance_after' => $transaction['destination_balance_after'] ?? null, + 'pc_destination_balance_after' => null, - // 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, + 'source_balance_dirty' => $transaction['source_balance_dirty'], + 'destination_balance_dirty' => $transaction['destination_balance_dirty'], + 'description' => $transaction['description'], + 'source_id' => (string) $transaction['source_account_id'], + 'source_name' => $transaction['source_account_name'], + 'source_iban' => $transaction['source_account_iban'], + 'source_type' => $transaction['source_account_type'], - 'description' => $transaction['description'], + 'destination_id' => (string) $transaction['destination_account_id'], + 'destination_name' => $transaction['destination_account_name'], + 'destination_iban' => $transaction['destination_account_iban'], + 'destination_type' => $transaction['destination_account_type'], - 'source_id' => (string) $transaction['source_account_id'], - 'source_name' => $transaction['source_account_name'], - 'source_iban' => $transaction['source_account_iban'], - 'source_type' => $transaction['source_account_type'], + 'budget_id' => $this->stringFromArray($transaction, 'budget_id', null), + 'budget_name' => $transaction['budget_name'], - 'destination_id' => (string) $transaction['destination_account_id'], - 'destination_name' => $transaction['destination_account_name'], - 'destination_iban' => $transaction['destination_account_iban'], - 'destination_type' => $transaction['destination_account_type'], + 'category_id' => $this->stringFromArray($transaction, 'category_id', null), + 'category_name' => $transaction['category_name'], - 'budget_id' => $this->stringFromArray($transaction, 'budget_id', null), - 'budget_name' => $transaction['budget_name'], + 'bill_id' => $this->stringFromArray($transaction, 'bill_id', null), + 'bill_name' => $transaction['bill_name'], + 'subscription_id' => $this->stringFromArray($transaction, 'bill_id', null), + 'subscription_name' => $transaction['bill_name'], - 'category_id' => $this->stringFromArray($transaction, 'category_id', null), - 'category_name' => $transaction['category_name'], + 'reconciled' => $transaction['reconciled'], + 'notes' => $transaction['notes'], + 'tags' => $transaction['tags'], - 'bill_id' => $this->stringFromArray($transaction, 'bill_id', null), - 'bill_name' => $transaction['bill_name'], + 'internal_reference' => $transaction['meta']['internal_reference'] ?? null, + 'external_id' => $transaction['meta']['external_id'] ?? null, + 'original_source' => $transaction['meta']['original_source'] ?? null, + 'recurrence_id' => $transaction['meta']['recurrence_id'] ?? null, + 'recurrence_total' => $recurrenceTotal, + 'recurrence_count' => $recurrenceCount, + 'external_url' => $transaction['meta']['external_url'] ?? null, + 'import_hash_v2' => $transaction['meta']['import_hash_v2'] ?? null, - 'reconciled' => $transaction['reconciled'], - 'notes' => $transaction['notes'], - 'tags' => $transaction['tags'], + 'sepa_cc' => $transaction['meta']['sepa_cc'] ?? null, + 'sepa_ct_op' => $transaction['meta']['sepa_ct_op'] ?? null, + 'sepa_ct_id' => $transaction['meta']['sepa_ct_id'] ?? null, + 'sepa_db' => $transaction['meta']['sepa_db'] ?? null, + 'sepa_country' => $transaction['meta']['sepa_country'] ?? null, + 'sepa_ep' => $transaction['meta']['sepa_ep'] ?? null, + 'sepa_ci' => $transaction['meta']['sepa_ci'] ?? null, + 'sepa_batch_id' => $transaction['meta']['sepa_batch_id'] ?? null, - 'internal_reference' => $transaction['meta']['internal_reference'] ?? null, - 'external_id' => $transaction['meta']['external_id'] ?? null, - 'original_source' => $transaction['meta']['original_source'] ?? null, - 'recurrence_id' => $transaction['meta']['recurrence_id'] ?? null, - 'recurrence_total' => $recurrenceTotal, - 'recurrence_count' => $recurrenceCount, - 'bunq_payment_id' => $transaction['meta']['bunq_payment_id'] ?? null, - 'external_url' => $transaction['meta']['external_url'] ?? null, - 'import_hash_v2' => $transaction['meta']['import_hash_v2'] ?? null, + 'interest_date' => array_key_exists('interest_date', $transaction['meta_date']) ? $transaction['meta_date']['interest_date']->toW3CString() : null, + 'book_date' => array_key_exists('book_date', $transaction['meta_date']) ? $transaction['meta_date']['book_date']->toW3CString() : null, + 'process_date' => array_key_exists('process_date', $transaction['meta_date']) ? $transaction['meta_date']['process_date']->toW3CString() : null, + 'due_date' => array_key_exists('due_date', $transaction['meta_date']) ? $transaction['meta_date']['due_date']->toW3CString() : null, + 'payment_date' => array_key_exists('payment_date', $transaction['meta_date']) ? $transaction['meta_date']['payment_date']->toW3CString() : null, + 'invoice_date' => array_key_exists('invoice_date', $transaction['meta_date']) ? $transaction['meta_date']['invoice_date']->toW3CString() : null, - 'sepa_cc' => $transaction['meta']['sepa_cc'] ?? null, - 'sepa_ct_op' => $transaction['meta']['sepa_ct_op'] ?? null, - 'sepa_ct_id' => $transaction['meta']['sepa_ct_id'] ?? null, - 'sepa_db' => $transaction['meta']['sepa_db'] ?? null, - 'sepa_country' => $transaction['meta']['sepa_country'] ?? null, - 'sepa_ep' => $transaction['meta']['sepa_ep'] ?? null, - 'sepa_ci' => $transaction['meta']['sepa_ci'] ?? null, - 'sepa_batch_id' => $transaction['meta']['sepa_batch_id'] ?? null, - - 'interest_date' => array_key_exists('interest_date', $transaction['meta_date']) ? $transaction['meta_date']['interest_date']->toW3CString() : null, - 'book_date' => array_key_exists('book_date', $transaction['meta_date']) ? $transaction['meta_date']['book_date']->toW3CString() : null, - 'process_date' => array_key_exists('process_date', $transaction['meta_date']) ? $transaction['meta_date']['process_date']->toW3CString() : null, - 'due_date' => array_key_exists('due_date', $transaction['meta_date']) ? $transaction['meta_date']['due_date']->toW3CString() : null, - 'payment_date' => array_key_exists('payment_date', $transaction['meta_date']) ? $transaction['meta_date']['payment_date']->toW3CString() : null, - 'invoice_date' => array_key_exists('invoice_date', $transaction['meta_date']) ? $transaction['meta_date']['invoice_date']->toW3CString() : null, // location data - 'longitude' => $transaction['location']['longitude'], - 'latitude' => $transaction['location']['latitude'], - 'zoom_level' => $transaction['location']['zoom_level'], - 'has_attachments' => $transaction['attachment_count'] > 0, + 'longitude' => $transaction['location']['longitude'], + 'latitude' => $transaction['location']['latitude'], + 'zoom_level' => $transaction['location']['zoom_level'], + 'has_attachments' => $transaction['attachment_count'] > 0, ]; } @@ -282,7 +283,7 @@ class TransactionGroupTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/transactions/'.$group->id, + 'uri' => '/transactions/' . $group->id, ], ], ]; @@ -324,7 +325,7 @@ class TransactionGroupTransformer extends AbstractTransformer $destination = $this->getDestinationTransaction($journal); $type = $journal->transactionType->type; $currency = $source->transactionCurrency; - $amount = app('steam')->bcround($this->getAmount($source->amount), $currency->decimal_places ?? 0); + $amount = Steam::bcround($this->getAmount($source->amount), $currency->decimal_places ?? 0); $foreignAmount = $this->getForeignAmount($source->foreign_amount ?? null); $metaFieldData = $this->groupRepos->getMetaFields($journal->id, $this->metaFields); $metaDates = $this->getDates($this->groupRepos->getMetaDateFields($journal->id, $this->metaDateFields)); @@ -334,13 +335,13 @@ class TransactionGroupTransformer extends AbstractTransformer $bill = $this->getBill($journal->bill); if (null !== $foreignAmount && null !== $source->foreignCurrency) { - $foreignAmount = app('steam')->bcround($foreignAmount, $foreignCurrency['decimal_places'] ?? 0); + $foreignAmount = Steam::bcround($foreignAmount, $foreignCurrency['decimal_places'] ?? 0); } - $longitude = null; - $latitude = null; - $zoomLevel = null; - $location = $this->getLocation($journal); + $longitude = null; + $latitude = null; + $zoomLevel = null; + $location = $this->getLocation($journal); if ($location instanceof Location) { $longitude = $location->longitude; $latitude = $location->latitude; @@ -348,77 +349,77 @@ class TransactionGroupTransformer extends AbstractTransformer } return [ - 'user' => $journal->user_id, - 'transaction_journal_id' => (string) $journal->id, - 'type' => strtolower((string) $type), - 'date' => $journal->date->toAtomString(), - 'order' => $journal->order, + 'user' => $journal->user_id, + 'transaction_journal_id' => (string) $journal->id, + 'type' => strtolower((string) $type), + 'date' => $journal->date->toAtomString(), + 'order' => $journal->order, - 'currency_id' => (string) $currency->id, - 'currency_code' => $currency->code, - 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => $currency->decimal_places, + 'currency_id' => (string) $currency->id, + 'currency_code' => $currency->code, + 'currency_symbol' => $currency->symbol, + 'currency_decimal_places' => $currency->decimal_places, 'foreign_currency_id' => (string) $foreignCurrency['id'], 'foreign_currency_code' => $foreignCurrency['code'], 'foreign_currency_symbol' => $foreignCurrency['symbol'], 'foreign_currency_decimal_places' => $foreignCurrency['decimal_places'], - 'amount' => app('steam')->bcround($amount, $currency->decimal_places), - 'foreign_amount' => $foreignAmount, + 'amount' => Steam::bcround($amount, $currency->decimal_places), + 'foreign_amount' => $foreignAmount, - 'description' => $journal->description, + 'description' => $journal->description, - 'source_id' => (string) $source->account_id, - 'source_name' => $source->account->name, - 'source_iban' => $source->account->iban, - 'source_type' => $source->account->accountType->type, + 'source_id' => (string) $source->account_id, + 'source_name' => $source->account->name, + 'source_iban' => $source->account->iban, + 'source_type' => $source->account->accountType->type, - 'destination_id' => (string) $destination->account_id, - 'destination_name' => $destination->account->name, - 'destination_iban' => $destination->account->iban, - 'destination_type' => $destination->account->accountType->type, + 'destination_id' => (string) $destination->account_id, + 'destination_name' => $destination->account->name, + 'destination_iban' => $destination->account->iban, + 'destination_type' => $destination->account->accountType->type, - 'budget_id' => (string) $budget['id'], - 'budget_name' => $budget['name'], + 'budget_id' => (string) $budget['id'], + 'budget_name' => $budget['name'], - 'category_id' => (string) $category['id'], - 'category_name' => $category['name'], + 'category_id' => (string) $category['id'], + 'category_name' => $category['name'], - 'bill_id' => (string) $bill['id'], - 'bill_name' => $bill['name'], + 'bill_id' => (string) $bill['id'], + 'bill_name' => $bill['name'], - 'reconciled' => $source->reconciled, - 'notes' => $this->groupRepos->getNoteText($journal->id), - 'tags' => $this->groupRepos->getTags($journal->id), + 'reconciled' => $source->reconciled, + 'notes' => $this->groupRepos->getNoteText($journal->id), + 'tags' => $this->groupRepos->getTags($journal->id), - 'internal_reference' => $metaFieldData['internal_reference'], - 'external_id' => $metaFieldData['external_id'], - 'original_source' => $metaFieldData['original_source'], - 'recurrence_id' => $metaFieldData['recurrence_id'], - 'bunq_payment_id' => $metaFieldData['bunq_payment_id'], - 'import_hash_v2' => $metaFieldData['import_hash_v2'], + 'internal_reference' => $metaFieldData['internal_reference'], + 'external_id' => $metaFieldData['external_id'], + 'original_source' => $metaFieldData['original_source'], + 'recurrence_id' => $metaFieldData['recurrence_id'], + 'bunq_payment_id' => $metaFieldData['bunq_payment_id'], + 'import_hash_v2' => $metaFieldData['import_hash_v2'], - 'sepa_cc' => $metaFieldData['sepa_cc'], - 'sepa_ct_op' => $metaFieldData['sepa_ct_op'], - 'sepa_ct_id' => $metaFieldData['sepa_ct_id'], - 'sepa_db' => $metaFieldData['sepa_db'], - 'sepa_country' => $metaFieldData['sepa_country'], - 'sepa_ep' => $metaFieldData['sepa_ep'], - 'sepa_ci' => $metaFieldData['sepa_ci'], - 'sepa_batch_id' => $metaFieldData['sepa_batch_id'], + 'sepa_cc' => $metaFieldData['sepa_cc'], + 'sepa_ct_op' => $metaFieldData['sepa_ct_op'], + 'sepa_ct_id' => $metaFieldData['sepa_ct_id'], + 'sepa_db' => $metaFieldData['sepa_db'], + 'sepa_country' => $metaFieldData['sepa_country'], + 'sepa_ep' => $metaFieldData['sepa_ep'], + 'sepa_ci' => $metaFieldData['sepa_ci'], + 'sepa_batch_id' => $metaFieldData['sepa_batch_id'], - 'interest_date' => $metaDates['interest_date'], - 'book_date' => $metaDates['book_date'], - 'process_date' => $metaDates['process_date'], - 'due_date' => $metaDates['due_date'], - 'payment_date' => $metaDates['payment_date'], - 'invoice_date' => $metaDates['invoice_date'], + 'interest_date' => $metaDates['interest_date'], + 'book_date' => $metaDates['book_date'], + 'process_date' => $metaDates['process_date'], + 'due_date' => $metaDates['due_date'], + 'payment_date' => $metaDates['payment_date'], + 'invoice_date' => $metaDates['invoice_date'], // location data - 'longitude' => $longitude, - 'latitude' => $latitude, - 'zoom_level' => $zoomLevel, + 'longitude' => $longitude, + 'latitude' => $latitude, + 'zoom_level' => $zoomLevel, ]; } @@ -458,13 +459,13 @@ class TransactionGroupTransformer extends AbstractTransformer private function getAmount(string $amount): string { - return app('steam')->positive($amount); + return Steam::positive($amount); } private function getForeignAmount(?string $foreignAmount): ?string { if (null !== $foreignAmount && '' !== $foreignAmount && 0 !== bccomp('0', $foreignAmount)) { - return app('steam')->positive($foreignAmount); + return Steam::positive($foreignAmount); } return null; @@ -493,7 +494,7 @@ class TransactionGroupTransformer extends AbstractTransformer private function getForeignCurrency(?TransactionCurrency $currency): array { - $array = [ + $array = [ 'id' => null, 'code' => null, 'symbol' => null, @@ -512,7 +513,7 @@ class TransactionGroupTransformer extends AbstractTransformer private function getBudget(?Budget $budget): array { - $array = [ + $array = [ 'id' => null, 'name' => null, ]; @@ -527,7 +528,7 @@ class TransactionGroupTransformer extends AbstractTransformer private function getCategory(?Category $category): array { - $array = [ + $array = [ 'id' => null, 'name' => null, ]; @@ -542,7 +543,7 @@ class TransactionGroupTransformer extends AbstractTransformer private function getBill(?Bill $bill): array { - $array = [ + $array = [ 'id' => null, 'name' => null, ]; diff --git a/app/Transformers/UserGroupTransformer.php b/app/Transformers/UserGroupTransformer.php index ea822589b7..486db21253 100644 --- a/app/Transformers/UserGroupTransformer.php +++ b/app/Transformers/UserGroupTransformer.php @@ -89,7 +89,7 @@ class UserGroupTransformer extends AbstractTransformer foreach ($members as $member) { $mail = $member['user_email']; $new[$groupId][$mail] ??= [ - 'user_id' => $member['user_id'], + 'user_id' => (string) $member['user_id'], 'user_email' => $member['user_email'], 'you' => $member['you'], 'roles' => [],