| 
									
										
										
										
											2019-03-24 14:48:12 +01:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2024-11-25 04:18:55 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-24 14:48:12 +01:00
										 |  |  | /** | 
					
						
							|  |  |  |  * TransactionGroupTransformer.php | 
					
						
							| 
									
										
										
										
											2020-02-16 13:57:18 +01:00
										 |  |  |  * Copyright (c) 2019 james@firefly-iii.org | 
					
						
							| 
									
										
										
										
											2019-03-24 14:48:12 +01:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2019-10-02 06:37:26 +02:00
										 |  |  |  * This file is part of Firefly III (https://github.com/firefly-iii). | 
					
						
							| 
									
										
										
										
											2019-03-24 14:48:12 +01:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2019-10-02 06:37:26 +02:00
										 |  |  |  * This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU Affero General Public License as | 
					
						
							|  |  |  |  * published by the Free Software Foundation, either version 3 of the | 
					
						
							|  |  |  |  * License, or (at your option) any later version. | 
					
						
							| 
									
										
										
										
											2019-03-24 14:48:12 +01:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2019-10-02 06:37:26 +02:00
										 |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							| 
									
										
										
										
											2019-03-24 14:48:12 +01:00
										 |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							| 
									
										
										
										
											2019-10-02 06:37:26 +02:00
										 |  |  |  * GNU Affero General Public License for more details. | 
					
						
							| 
									
										
										
										
											2019-03-24 14:48:12 +01:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2019-10-02 06:37:26 +02:00
										 |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  |  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | 
					
						
							| 
									
										
										
										
											2019-03-24 14:48:12 +01:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | declare(strict_types=1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace FireflyIII\Transformers; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-03 09:05:19 +01:00
										 |  |  | use FireflyIII\Enums\TransactionTypeEnum; | 
					
						
							| 
									
										
										
										
											2020-03-12 05:11:19 +01:00
										 |  |  | use FireflyIII\Exceptions\FireflyException; | 
					
						
							| 
									
										
										
										
											2020-03-15 09:54:44 +01:00
										 |  |  | use FireflyIII\Models\Bill; | 
					
						
							| 
									
										
										
										
											2019-04-16 16:20:46 +02:00
										 |  |  | use FireflyIII\Models\Budget; | 
					
						
							|  |  |  | use FireflyIII\Models\Category; | 
					
						
							| 
									
										
										
										
											2021-02-16 10:19:20 +01:00
										 |  |  | use FireflyIII\Models\Location; | 
					
						
							| 
									
										
										
										
											2019-04-16 16:20:46 +02:00
										 |  |  | use FireflyIII\Models\Transaction; | 
					
						
							| 
									
										
										
										
											2020-03-15 09:54:44 +01:00
										 |  |  | use FireflyIII\Models\TransactionCurrency; | 
					
						
							| 
									
										
										
										
											2019-04-16 16:20:46 +02:00
										 |  |  | use FireflyIII\Models\TransactionGroup; | 
					
						
							|  |  |  | use FireflyIII\Models\TransactionJournal; | 
					
						
							| 
									
										
										
										
											2019-03-25 15:14:09 +01:00
										 |  |  | use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface; | 
					
						
							|  |  |  | use FireflyIII\Support\NullArrayObject; | 
					
						
							| 
									
										
										
										
											2019-04-16 16:20:46 +02:00
										 |  |  | use Illuminate\Support\Collection; | 
					
						
							| 
									
										
										
										
											2025-02-15 14:10:54 +01:00
										 |  |  | use Illuminate\Support\Facades\Log; | 
					
						
							| 
									
										
										
										
											2019-03-25 15:14:09 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-24 14:48:12 +01:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Class TransactionGroupTransformer | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | class TransactionGroupTransformer extends AbstractTransformer | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2020-10-18 17:44:30 +02:00
										 |  |  |     private TransactionGroupRepositoryInterface $groupRepos; | 
					
						
							|  |  |  |     private array                               $metaDateFields; | 
					
						
							|  |  |  |     private array                               $metaFields; | 
					
						
							| 
									
										
										
										
											2019-03-25 15:14:09 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-24 14:48:12 +01:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Constructor. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function __construct() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2025-02-15 14:10:54 +01:00
										 |  |  |         Log::debug('TransactionGroupTransformer constructor.'); | 
					
						
							| 
									
										
										
										
											2019-03-25 15:14:09 +01:00
										 |  |  |         $this->groupRepos     = app(TransactionGroupRepositoryInterface::class); | 
					
						
							|  |  |  |         $this->metaFields     = [ | 
					
						
							| 
									
										
										
										
											2022-12-29 19:42:40 +01:00
										 |  |  |             'sepa_cc', | 
					
						
							|  |  |  |             'sepa_ct_op', | 
					
						
							|  |  |  |             'sepa_ct_id', | 
					
						
							|  |  |  |             'sepa_db', | 
					
						
							|  |  |  |             'sepa_country', | 
					
						
							|  |  |  |             'sepa_ep', | 
					
						
							|  |  |  |             'sepa_ci', | 
					
						
							|  |  |  |             'sepa_batch_id', | 
					
						
							|  |  |  |             'internal_reference', | 
					
						
							|  |  |  |             'bunq_payment_id', | 
					
						
							|  |  |  |             'import_hash_v2', | 
					
						
							|  |  |  |             'recurrence_id', | 
					
						
							|  |  |  |             'external_id', | 
					
						
							|  |  |  |             'original_source', | 
					
						
							|  |  |  |             'external_url', | 
					
						
							|  |  |  |             'recurrence_count', | 
					
						
							|  |  |  |             'recurrence_total', | 
					
						
							| 
									
										
										
										
											2019-03-25 15:14:09 +01:00
										 |  |  |         ]; | 
					
						
							|  |  |  |         $this->metaDateFields = ['interest_date', 'book_date', 'process_date', 'due_date', 'payment_date', 'invoice_date']; | 
					
						
							| 
									
										
										
										
											2019-03-24 14:48:12 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function transform(array $group): array | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2021-02-16 10:19:20 +01:00
										 |  |  |         $data  = new NullArrayObject($group); | 
					
						
							|  |  |  |         $first = new NullArrayObject(reset($group['transactions'])); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-23 19:11:25 +02:00
										 |  |  |         return [ | 
					
						
							| 
									
										
										
										
											2025-02-17 04:11:50 +01:00
										 |  |  |             'id'                 => (int) $first['transaction_group_id'], | 
					
						
							|  |  |  |             'created_at'         => $first['created_at']->toAtomString(), | 
					
						
							|  |  |  |             'updated_at'         => $first['updated_at']->toAtomString(), | 
					
						
							|  |  |  |             'user'               => (string) $data['user_id'], | 
					
						
							| 
									
										
										
										
											2025-02-15 14:10:54 +01:00
										 |  |  |             'user_group'         => (string) $data['user_group_id'], | 
					
						
							| 
									
										
										
										
											2025-02-17 04:11:50 +01:00
										 |  |  |             'group_title'        => $data['title'], | 
					
						
							|  |  |  |             'transactions'       => $this->transformTransactions($data), | 
					
						
							|  |  |  |             'links'              => [ | 
					
						
							| 
									
										
										
										
											2019-03-24 14:48:12 +01:00
										 |  |  |                 [ | 
					
						
							|  |  |  |                     'rel' => 'self', | 
					
						
							| 
									
										
										
										
											2023-12-20 19:35:52 +01:00
										 |  |  |                     'uri' => '/transactions/'.$first['transaction_group_id'], | 
					
						
							| 
									
										
										
										
											2019-03-24 14:48:12 +01:00
										 |  |  |                 ], | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |         ]; | 
					
						
							| 
									
										
										
										
											2019-03-25 15:14:09 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |     private function transformTransactions(NullArrayObject $data): array | 
					
						
							| 
									
										
										
										
											2019-04-16 16:20:46 +02:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         $result       = []; | 
					
						
							|  |  |  |         $transactions = $data['transactions'] ?? []; | 
					
						
							|  |  |  |         foreach ($transactions as $transaction) { | 
					
						
							|  |  |  |             $result[] = $this->transformTransaction($transaction); | 
					
						
							| 
									
										
										
										
											2020-03-12 05:11:19 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-03-15 09:54:44 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-16 16:20:46 +02:00
										 |  |  |         return $result; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-22 17:28:42 +01:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2025-01-03 15:53:10 +01:00
										 |  |  |      * @SuppressWarnings("PHPMD.ExcessiveMethodLength") | 
					
						
							| 
									
										
										
										
											2023-12-22 17:28:42 +01:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |     private function transformTransaction(array $transaction): array | 
					
						
							| 
									
										
										
										
											2020-03-15 09:54:44 +01:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         // amount:
 | 
					
						
							| 
									
										
										
										
											2025-02-17 04:11:50 +01:00
										 |  |  |         $amount          = app('steam')->positive((string) ($transaction['amount'] ?? '0')); | 
					
						
							|  |  |  |         $foreignAmount   = null; | 
					
						
							| 
									
										
										
										
											2025-02-15 14:10:54 +01:00
										 |  |  |         if (null !== $transaction['foreign_amount'] && '' !== $transaction['foreign_amount'] && 0 !== bccomp('0', $transaction['foreign_amount'])) { | 
					
						
							|  |  |  |             $foreignAmount = app('steam')->positive($transaction['foreign_amount']); | 
					
						
							| 
									
										
										
										
											2020-03-15 09:54:44 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-02-17 04:11:50 +01:00
										 |  |  |         $type            = $this->stringFromArray($transaction, 'transaction_type_type', TransactionTypeEnum::WITHDRAWAL->value); | 
					
						
							| 
									
										
										
										
											2020-03-15 09:54:44 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-15 14:10:54 +01:00
										 |  |  |         // must be 0 (int) or NULL
 | 
					
						
							|  |  |  |         $recurrenceTotal = $transaction['meta']['recurrence_total'] ?? null; | 
					
						
							|  |  |  |         $recurrenceTotal = null !== $recurrenceTotal ? (int) $recurrenceTotal : null; | 
					
						
							|  |  |  |         $recurrenceCount = $transaction['meta']['recurrence_count'] ?? null; | 
					
						
							|  |  |  |         $recurrenceCount = null !== $recurrenceCount ? (int) $recurrenceCount : null; | 
					
						
							| 
									
										
										
										
											2020-03-15 09:54:44 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         return [ | 
					
						
							| 
									
										
										
										
											2025-02-15 14:10:54 +01:00
										 |  |  |             'user'                            => (string) $transaction['user_id'], | 
					
						
							| 
									
										
										
										
											2025-02-20 07:30:30 +01:00
										 |  |  |             'transaction_journal_id'          => (string) $transaction['transaction_journal_id'], | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  |             'type'                            => strtolower($type), | 
					
						
							| 
									
										
										
										
											2025-02-15 14:10:54 +01:00
										 |  |  |             'date'                            => $transaction['date']->toAtomString(), | 
					
						
							|  |  |  |             'order'                           => $transaction['order'], | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-15 14:10:54 +01:00
										 |  |  |             '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'], | 
					
						
							| 
									
										
										
										
											2021-03-21 09:15:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |             'foreign_currency_id'             => $this->stringFromArray($transaction, 'foreign_currency_id', null), | 
					
						
							| 
									
										
										
										
											2025-02-15 14:10:54 +01:00
										 |  |  |             'foreign_currency_code'           => $transaction['foreign_currency_code'], | 
					
						
							|  |  |  |             'foreign_currency_symbol'         => $transaction['foreign_currency_symbol'], | 
					
						
							|  |  |  |             'foreign_currency_decimal_places' => $transaction['foreign_currency_decimal_places'], | 
					
						
							| 
									
										
										
										
											2021-03-21 09:15:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  |             'amount'                          => $amount, | 
					
						
							|  |  |  |             'foreign_amount'                  => $foreignAmount, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-15 14:10:54 +01:00
										 |  |  |             'description'                     => $transaction['description'], | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-15 14:10:54 +01:00
										 |  |  |             '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'], | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-15 14:10:54 +01:00
										 |  |  |             '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'], | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |             'budget_id'                       => $this->stringFromArray($transaction, 'budget_id', null), | 
					
						
							| 
									
										
										
										
											2025-02-15 14:10:54 +01:00
										 |  |  |             'budget_name'                     => $transaction['budget_name'], | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |             'category_id'                     => $this->stringFromArray($transaction, 'category_id', null), | 
					
						
							| 
									
										
										
										
											2025-02-15 14:10:54 +01:00
										 |  |  |             'category_name'                   => $transaction['category_name'], | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |             'bill_id'                         => $this->stringFromArray($transaction, 'bill_id', null), | 
					
						
							| 
									
										
										
										
											2025-02-15 14:10:54 +01:00
										 |  |  |             'bill_name'                       => $transaction['bill_name'], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             'reconciled'                      => $transaction['reconciled'], | 
					
						
							|  |  |  |             'notes'                           => $transaction['notes'], | 
					
						
							|  |  |  |             'tags'                            => $transaction['tags'], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             '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, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             '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'                   => $transaction['meta_date']['interest_date'] ?? null, | 
					
						
							|  |  |  |             'book_date'                       => $transaction['meta_date']['book_date'] ?? null, | 
					
						
							|  |  |  |             'process_date'                    => $transaction['meta_date']['process_date'] ?? null, | 
					
						
							|  |  |  |             'due_date'                        => $transaction['meta_date']['due_date'] ?? null, | 
					
						
							|  |  |  |             'payment_date'                    => $transaction['meta_date']['payment_date'] ?? null, | 
					
						
							|  |  |  |             'invoice_date'                    => $transaction['meta_date']['invoice_date'] ?? null, | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |             // location data
 | 
					
						
							| 
									
										
										
										
											2025-02-15 14:10:54 +01:00
										 |  |  |             'longitude'                       => $transaction['location']['longitude'], | 
					
						
							|  |  |  |             'latitude'                        => $transaction['location']['latitude'], | 
					
						
							|  |  |  |             'zoom_level'                      => $transaction['location']['zoom_level'], | 
					
						
							|  |  |  |             'has_attachments'                 => $transaction['attachment_count'] > 0, | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         ]; | 
					
						
							| 
									
										
										
										
											2023-05-29 13:56:55 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |     private function stringFromArray(array $array, string $key, ?string $default): ?string | 
					
						
							| 
									
										
										
										
											2023-05-29 13:56:55 +02:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         if (array_key_exists($key, $array) && null === $array[$key]) { | 
					
						
							|  |  |  |             return null; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (array_key_exists($key, $array) && null !== $array[$key]) { | 
					
						
							|  |  |  |             if (0 === $array[$key]) { | 
					
						
							|  |  |  |                 return $default; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             if ('0' === $array[$key]) { | 
					
						
							|  |  |  |                 return $default; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2023-12-20 19:35:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-22 08:43:12 +01:00
										 |  |  |             return (string) $array[$key]; | 
					
						
							| 
									
										
										
										
											2021-03-21 09:15:40 +01:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         if (null !== $default) { | 
					
						
							| 
									
										
										
										
											2023-11-04 19:20:07 +01:00
										 |  |  |             return $default; | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return null; | 
					
						
							| 
									
										
										
										
											2020-03-15 09:54:44 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-29 19:42:40 +01:00
										 |  |  |     private function getLocation(TransactionJournal $journal): ?Location | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2025-01-04 07:39:16 +01:00
										 |  |  |         /** @var null|Location */ | 
					
						
							| 
									
										
										
										
											2022-12-29 19:42:40 +01:00
										 |  |  |         return $journal->locations()->first(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-22 20:11:09 +01:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * @throws FireflyException | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function transformObject(TransactionGroup $group): array | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         try { | 
					
						
							|  |  |  |             $result = [ | 
					
						
							|  |  |  |                 'id'           => $group->id, | 
					
						
							|  |  |  |                 'created_at'   => $group->created_at->toAtomString(), | 
					
						
							|  |  |  |                 'updated_at'   => $group->updated_at->toAtomString(), | 
					
						
							|  |  |  |                 'user'         => $group->user_id, | 
					
						
							|  |  |  |                 'group_title'  => $group->title, | 
					
						
							|  |  |  |                 'transactions' => $this->transformJournals($group->transactionJournals), | 
					
						
							|  |  |  |                 'links'        => [ | 
					
						
							|  |  |  |                     [ | 
					
						
							|  |  |  |                         'rel' => 'self', | 
					
						
							|  |  |  |                         'uri' => '/transactions/'.$group->id, | 
					
						
							|  |  |  |                     ], | 
					
						
							|  |  |  |                 ], | 
					
						
							|  |  |  |             ]; | 
					
						
							|  |  |  |         } catch (FireflyException $e) { | 
					
						
							|  |  |  |             app('log')->error($e->getMessage()); | 
					
						
							|  |  |  |             app('log')->error($e->getTraceAsString()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             throw new FireflyException(sprintf('Transaction group #%d is broken. Please check out your log files.', $group->id), 0, $e); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // do something else.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $result; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-15 09:54:44 +01:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |      * @throws FireflyException | 
					
						
							| 
									
										
										
										
											2019-04-16 16:20:46 +02:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |     private function transformJournals(Collection $transactionJournals): array | 
					
						
							| 
									
										
										
										
											2019-04-16 16:20:46 +02:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         $result = []; | 
					
						
							| 
									
										
										
										
											2023-12-20 19:35:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         /** @var TransactionJournal $journal */ | 
					
						
							|  |  |  |         foreach ($transactionJournals as $journal) { | 
					
						
							|  |  |  |             $result[] = $this->transformJournal($journal); | 
					
						
							| 
									
										
										
										
											2023-05-29 13:56:55 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         return $result; | 
					
						
							| 
									
										
										
										
											2019-04-16 16:20:46 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-15 09:54:44 +01:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * @throws FireflyException | 
					
						
							| 
									
										
										
										
											2023-12-22 17:28:42 +01:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2025-01-03 15:53:10 +01:00
										 |  |  |      * @SuppressWarnings("PHPMD.ExcessiveMethodLength") | 
					
						
							| 
									
										
										
										
											2020-03-15 09:54:44 +01:00
										 |  |  |      */ | 
					
						
							|  |  |  |     private function transformJournal(TransactionJournal $journal): array | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $source          = $this->getSourceTransaction($journal); | 
					
						
							|  |  |  |         $destination     = $this->getDestinationTransaction($journal); | 
					
						
							|  |  |  |         $type            = $journal->transactionType->type; | 
					
						
							| 
									
										
										
										
											2023-05-18 05:38:17 +02:00
										 |  |  |         $currency        = $source->transactionCurrency; | 
					
						
							| 
									
										
										
										
											2023-11-30 17:28:44 +01:00
										 |  |  |         $amount          = app('steam')->bcround($this->getAmount($source->amount), $currency->decimal_places ?? 0); | 
					
						
							|  |  |  |         $foreignAmount   = $this->getForeignAmount(null === $source->foreign_amount ? null : $source->foreign_amount); | 
					
						
							| 
									
										
										
										
											2020-03-15 09:54:44 +01:00
										 |  |  |         $metaFieldData   = $this->groupRepos->getMetaFields($journal->id, $this->metaFields); | 
					
						
							|  |  |  |         $metaDates       = $this->getDates($this->groupRepos->getMetaDateFields($journal->id, $this->metaDateFields)); | 
					
						
							|  |  |  |         $foreignCurrency = $this->getForeignCurrency($source->foreignCurrency); | 
					
						
							|  |  |  |         $budget          = $this->getBudget($journal->budgets->first()); | 
					
						
							|  |  |  |         $category        = $this->getCategory($journal->categories->first()); | 
					
						
							|  |  |  |         $bill            = $this->getBill($journal->bill); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-18 05:38:17 +02:00
										 |  |  |         if (null !== $foreignAmount && null !== $source->foreignCurrency) { | 
					
						
							| 
									
										
										
										
											2022-12-27 21:13:18 +01:00
										 |  |  |             $foreignAmount = app('steam')->bcround($foreignAmount, $foreignCurrency['decimal_places'] ?? 0); | 
					
						
							| 
									
										
										
										
											2021-02-16 10:19:20 +01:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  |         $longitude       = null; | 
					
						
							|  |  |  |         $latitude        = null; | 
					
						
							|  |  |  |         $zoomLevel       = null; | 
					
						
							|  |  |  |         $location        = $this->getLocation($journal); | 
					
						
							| 
									
										
										
										
											2021-02-16 10:19:20 +01:00
										 |  |  |         if (null !== $location) { | 
					
						
							|  |  |  |             $longitude = $location->longitude; | 
					
						
							|  |  |  |             $latitude  = $location->latitude; | 
					
						
							|  |  |  |             $zoomLevel = $location->zoom_level; | 
					
						
							| 
									
										
										
										
											2020-07-12 17:32:48 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-15 09:54:44 +01:00
										 |  |  |         return [ | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  |             'user'                            => $journal->user_id, | 
					
						
							| 
									
										
										
										
											2025-02-20 07:30:30 +01:00
										 |  |  |             'transaction_journal_id'          => (string) $journal->id, | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  |             'type'                            => strtolower($type), | 
					
						
							|  |  |  |             'date'                            => $journal->date->toAtomString(), | 
					
						
							|  |  |  |             'order'                           => $journal->order, | 
					
						
							| 
									
										
										
										
											2020-10-18 17:44:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-20 07:30:30 +01:00
										 |  |  |             'currency_id'                     => (string) $currency->id, | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  |             'currency_code'                   => $currency->code, | 
					
						
							|  |  |  |             'currency_symbol'                 => $currency->symbol, | 
					
						
							|  |  |  |             'currency_decimal_places'         => $currency->decimal_places, | 
					
						
							| 
									
										
										
										
											2020-10-18 17:44:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-20 07:30:30 +01:00
										 |  |  |             'foreign_currency_id'             => (string) $foreignCurrency['id'], | 
					
						
							| 
									
										
										
										
											2021-03-21 09:15:40 +01:00
										 |  |  |             'foreign_currency_code'           => $foreignCurrency['code'], | 
					
						
							|  |  |  |             'foreign_currency_symbol'         => $foreignCurrency['symbol'], | 
					
						
							|  |  |  |             'foreign_currency_decimal_places' => $foreignCurrency['decimal_places'], | 
					
						
							| 
									
										
										
										
											2020-10-18 17:44:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  |             'amount'                          => app('steam')->bcround($amount, $currency->decimal_places), | 
					
						
							|  |  |  |             'foreign_amount'                  => $foreignAmount, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             'description'                     => $journal->description, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-20 07:30:30 +01:00
										 |  |  |             'source_id'                       => (string) $source->account_id, | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  |             'source_name'                     => $source->account->name, | 
					
						
							|  |  |  |             'source_iban'                     => $source->account->iban, | 
					
						
							|  |  |  |             'source_type'                     => $source->account->accountType->type, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-20 07:30:30 +01:00
										 |  |  |             'destination_id'                  => (string) $destination->account_id, | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  |             'destination_name'                => $destination->account->name, | 
					
						
							|  |  |  |             'destination_iban'                => $destination->account->iban, | 
					
						
							|  |  |  |             'destination_type'                => $destination->account->accountType->type, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-20 07:30:30 +01:00
										 |  |  |             'budget_id'                       => (string) $budget['id'], | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  |             'budget_name'                     => $budget['name'], | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-20 07:30:30 +01:00
										 |  |  |             'category_id'                     => (string) $category['id'], | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  |             'category_name'                   => $category['name'], | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-20 07:30:30 +01:00
										 |  |  |             'bill_id'                         => (string) $bill['id'], | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  |             'bill_name'                       => $bill['name'], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             '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'], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             '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'], | 
					
						
							| 
									
										
										
										
											2021-02-16 10:19:20 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |             // location data
 | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  |             'longitude'                       => $longitude, | 
					
						
							|  |  |  |             'latitude'                        => $latitude, | 
					
						
							|  |  |  |             'zoom_level'                      => $zoomLevel, | 
					
						
							| 
									
										
										
										
											2020-10-18 17:44:30 +02:00
										 |  |  |         ]; | 
					
						
							| 
									
										
										
										
											2019-03-24 14:48:12 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2020-10-18 17:44:30 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							| 
									
										
										
										
											2021-03-21 09:15:40 +01:00
										 |  |  |      * @throws FireflyException | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |     private function getSourceTransaction(TransactionJournal $journal): Transaction | 
					
						
							| 
									
										
										
										
											2021-03-21 09:15:40 +01:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         $result = $journal->transactions->first( | 
					
						
							|  |  |  |             static function (Transaction $transaction) { | 
					
						
							| 
									
										
										
										
											2024-12-22 08:43:12 +01:00
										 |  |  |                 return (float) $transaction->amount < 0; // lame but it works.
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |             } | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |         if (null === $result) { | 
					
						
							|  |  |  |             throw new FireflyException(sprintf('Journal #%d unexpectedly has no source transaction.', $journal->id)); | 
					
						
							| 
									
										
										
										
											2021-03-21 09:15:40 +01:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $result; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |      * @throws FireflyException | 
					
						
							| 
									
										
										
										
											2021-03-21 09:15:40 +01:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |     private function getDestinationTransaction(TransactionJournal $journal): Transaction | 
					
						
							| 
									
										
										
										
											2021-03-21 09:15:40 +01:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         $result = $journal->transactions->first( | 
					
						
							|  |  |  |             static function (Transaction $transaction) { | 
					
						
							| 
									
										
										
										
											2024-12-22 08:43:12 +01:00
										 |  |  |                 return (float) $transaction->amount > 0; // lame but it works
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |             } | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |         if (null === $result) { | 
					
						
							|  |  |  |             throw new FireflyException(sprintf('Journal #%d unexpectedly has no destination transaction.', $journal->id)); | 
					
						
							| 
									
										
										
										
											2021-03-21 09:15:40 +01:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         return $result; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-03-21 09:15:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-30 17:28:44 +01:00
										 |  |  |     private function getAmount(string $amount): string | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |     { | 
					
						
							|  |  |  |         return app('steam')->positive($amount); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-03-21 09:15:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-30 17:28:44 +01:00
										 |  |  |     private function getForeignAmount(?string $foreignAmount): ?string | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |     { | 
					
						
							|  |  |  |         $result = null; | 
					
						
							| 
									
										
										
										
											2023-12-20 19:35:52 +01:00
										 |  |  |         if (null !== $foreignAmount && '' !== $foreignAmount && 0 !== bccomp('0', $foreignAmount)) { | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |             $result = app('steam')->positive($foreignAmount); | 
					
						
							| 
									
										
										
										
											2021-03-13 06:25:25 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-03-21 09:15:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         return $result; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-05-29 13:56:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |     private function getDates(NullArrayObject $dates): array | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $fields = [ | 
					
						
							|  |  |  |             'interest_date', | 
					
						
							|  |  |  |             'book_date', | 
					
						
							|  |  |  |             'process_date', | 
					
						
							|  |  |  |             'due_date', | 
					
						
							|  |  |  |             'payment_date', | 
					
						
							|  |  |  |             'invoice_date', | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  |         $return = []; | 
					
						
							|  |  |  |         foreach ($fields as $field) { | 
					
						
							|  |  |  |             $return[$field] = null; | 
					
						
							|  |  |  |             if (null !== $dates[$field]) { | 
					
						
							|  |  |  |                 $return[$field] = $dates[$field]->toAtomString(); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2023-05-29 13:56:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         return $return; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-05-29 13:56:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |     private function getForeignCurrency(?TransactionCurrency $currency): array | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  |         $array                   = [ | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |             'id'             => null, | 
					
						
							|  |  |  |             'code'           => null, | 
					
						
							|  |  |  |             'symbol'         => null, | 
					
						
							|  |  |  |             'decimal_places' => null, | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  |         if (null === $currency) { | 
					
						
							|  |  |  |             return $array; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2023-11-05 19:41:37 +01:00
										 |  |  |         $array['id']             = $currency->id; | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         $array['code']           = $currency->code; | 
					
						
							|  |  |  |         $array['symbol']         = $currency->symbol; | 
					
						
							| 
									
										
										
										
											2023-11-26 12:10:42 +01:00
										 |  |  |         $array['decimal_places'] = $currency->decimal_places; | 
					
						
							| 
									
										
										
										
											2023-05-29 13:56:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         return $array; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-05-29 13:56:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |     private function getBudget(?Budget $budget): array | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  |         $array         = [ | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |             'id'   => null, | 
					
						
							|  |  |  |             'name' => null, | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  |         if (null === $budget) { | 
					
						
							|  |  |  |             return $array; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2023-11-05 19:41:37 +01:00
										 |  |  |         $array['id']   = $budget->id; | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         $array['name'] = $budget->name; | 
					
						
							| 
									
										
										
										
											2023-05-29 13:56:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         return $array; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-05-29 13:56:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |     private function getCategory(?Category $category): array | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  |         $array         = [ | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |             'id'   => null, | 
					
						
							|  |  |  |             'name' => null, | 
					
						
							| 
									
										
										
										
											2023-05-29 13:56:55 +02:00
										 |  |  |         ]; | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         if (null === $category) { | 
					
						
							|  |  |  |             return $array; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2023-11-05 19:41:37 +01:00
										 |  |  |         $array['id']   = $category->id; | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         $array['name'] = $category->name; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $array; | 
					
						
							| 
									
										
										
										
											2020-10-18 17:44:30 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-02-16 10:19:20 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |     private function getBill(?Bill $bill): array | 
					
						
							| 
									
										
										
										
											2021-02-16 10:19:20 +01:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2024-01-01 14:43:56 +01:00
										 |  |  |         $array         = [ | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |             'id'   => null, | 
					
						
							|  |  |  |             'name' => null, | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  |         if (null === $bill) { | 
					
						
							|  |  |  |             return $array; | 
					
						
							| 
									
										
										
										
											2021-03-21 09:15:40 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2024-12-22 08:43:12 +01:00
										 |  |  |         $array['id']   = (string) $bill->id; | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         $array['name'] = $bill->name; | 
					
						
							| 
									
										
										
										
											2021-03-21 09:15:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 12:34:58 +02:00
										 |  |  |         return $array; | 
					
						
							| 
									
										
										
										
											2021-02-16 10:19:20 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2019-08-17 12:09:03 +02:00
										 |  |  | } |