| 
									
										
										
										
											2024-05-10 06:43:18 +02:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2024-11-25 04:18:55 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-10 06:43:18 +02:00
										 |  |  | /* | 
					
						
							|  |  |  |  * AccountEnricher.php | 
					
						
							|  |  |  |  * Copyright (c) 2024 james@firefly-iii.org. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This file is part of Firefly III (https://github.com/firefly-iii). | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 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. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU Affero General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 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/. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | declare(strict_types=1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace FireflyIII\Support\JsonApi\Enrichments; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use Carbon\Carbon; | 
					
						
							| 
									
										
										
										
											2024-05-10 09:17:09 +02:00
										 |  |  | use FireflyIII\Models\Account; | 
					
						
							|  |  |  | use FireflyIII\Models\AccountType; | 
					
						
							| 
									
										
										
										
											2024-08-01 20:45:42 +02:00
										 |  |  | use FireflyIII\Models\ObjectGroup; | 
					
						
							| 
									
										
										
										
											2024-07-31 20:19:17 +02:00
										 |  |  | use FireflyIII\Models\TransactionCurrency; | 
					
						
							| 
									
										
										
										
											2024-05-10 06:43:18 +02:00
										 |  |  | use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface; | 
					
						
							| 
									
										
										
										
											2024-05-10 09:17:09 +02:00
										 |  |  | use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; | 
					
						
							| 
									
										
										
										
											2024-07-31 20:19:17 +02:00
										 |  |  | use FireflyIII\Support\Facades\Balance; | 
					
						
							|  |  |  | use FireflyIII\Support\Http\Api\ExchangeRateConverter; | 
					
						
							| 
									
										
										
										
											2024-07-28 12:23:45 +02:00
										 |  |  | use Illuminate\Database\Eloquent\Model; | 
					
						
							| 
									
										
										
										
											2024-05-10 06:43:18 +02:00
										 |  |  | use Illuminate\Support\Collection; | 
					
						
							|  |  |  | use Illuminate\Support\Facades\Log; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-26 18:50:41 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Class AccountEnrichment | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This class "enriches" accounts and adds data from other tables and models to each account model.
 | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2024-05-10 06:43:18 +02:00
										 |  |  | class AccountEnrichment implements EnrichmentInterface | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2024-12-22 20:32:58 +01:00
										 |  |  |     private array                       $balances; | 
					
						
							|  |  |  |     private Collection                  $collection; | 
					
						
							|  |  |  |     private array                       $currencies; | 
					
						
							| 
									
										
										
										
											2024-12-22 08:43:12 +01:00
										 |  |  |     private CurrencyRepositoryInterface $currencyRepository; | 
					
						
							| 
									
										
										
										
											2024-12-22 20:32:58 +01:00
										 |  |  |     private TransactionCurrency         $default; | 
					
						
							|  |  |  |     private ?Carbon                     $end; | 
					
						
							|  |  |  |     private array                       $grouped; | 
					
						
							|  |  |  |     private array                       $objectGroups; | 
					
						
							| 
									
										
										
										
											2024-07-28 07:47:54 +02:00
										 |  |  |     private AccountRepositoryInterface  $repository; | 
					
						
							| 
									
										
										
										
											2024-12-22 20:32:58 +01:00
										 |  |  |     private ?Carbon                     $start; | 
					
						
							| 
									
										
										
										
											2024-07-28 07:47:54 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     public function __construct() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->repository         = app(AccountRepositoryInterface::class); | 
					
						
							|  |  |  |         $this->currencyRepository = app(CurrencyRepositoryInterface::class); | 
					
						
							| 
									
										
										
										
											2024-07-31 20:19:17 +02:00
										 |  |  |         $this->start              = null; | 
					
						
							|  |  |  |         $this->end                = null; | 
					
						
							| 
									
										
										
										
											2024-07-28 07:47:54 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-22 20:37:54 +01:00
										 |  |  |     #[\Override]
 | 
					
						
							| 
									
										
										
										
											2024-12-22 08:43:12 +01:00
										 |  |  |     public function enrichSingle(Model $model): Account | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         Log::debug(__METHOD__); | 
					
						
							|  |  |  |         $collection = new Collection([$model]); | 
					
						
							|  |  |  |         $collection = $this->enrich($collection); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $collection->first(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-22 20:37:54 +01:00
										 |  |  |     #[\Override]
 | 
					
						
							| 
									
										
										
										
											2024-07-26 18:50:41 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Do the actual enrichment. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2024-05-13 05:10:16 +02:00
										 |  |  |     public function enrich(Collection $collection): Collection | 
					
						
							| 
									
										
										
										
											2024-05-10 06:43:18 +02:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2024-07-26 18:50:41 +02:00
										 |  |  |         Log::debug(sprintf('Now doing account enrichment for %d account(s)', $collection->count())); | 
					
						
							|  |  |  |         // prep local fields
 | 
					
						
							| 
									
										
										
										
											2024-08-01 20:45:42 +02:00
										 |  |  |         $this->collection   = $collection; | 
					
						
							|  |  |  |         $this->default      = app('amount')->getDefaultCurrency(); | 
					
						
							|  |  |  |         $this->currencies   = []; | 
					
						
							|  |  |  |         $this->balances     = []; | 
					
						
							|  |  |  |         $this->objectGroups = []; | 
					
						
							|  |  |  |         $this->grouped      = []; | 
					
						
							| 
									
										
										
										
											2024-07-26 18:50:41 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-10 06:43:18 +02:00
										 |  |  |         // do everything here:
 | 
					
						
							|  |  |  |         $this->getLastActivity(); | 
					
						
							| 
									
										
										
										
											2024-05-10 09:17:09 +02:00
										 |  |  |         $this->collectAccountTypes(); | 
					
						
							|  |  |  |         $this->collectMetaData(); | 
					
						
							| 
									
										
										
										
											2024-07-31 20:19:17 +02:00
										 |  |  |         $this->getMetaBalances(); | 
					
						
							| 
									
										
										
										
											2024-08-01 20:45:42 +02:00
										 |  |  |         $this->getObjectGroups(); | 
					
						
							| 
									
										
										
										
											2024-05-10 09:17:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-29 05:06:54 +02:00
										 |  |  |         //        $this->collection->transform(function (Account $account) {
 | 
					
						
							|  |  |  |         //            $account->user_array = ['id' => 1, 'bla bla' => 'bla'];
 | 
					
						
							|  |  |  |         //            $account->balances   = collect([
 | 
					
						
							|  |  |  |         //                ['balance_id' => 1, 'balance' => 5],
 | 
					
						
							|  |  |  |         //                ['balance_id' => 2, 'balance' => 5],
 | 
					
						
							|  |  |  |         //                ['balance_id' => 3, 'balance' => 5],
 | 
					
						
							|  |  |  |         //            ]);
 | 
					
						
							|  |  |  |         //
 | 
					
						
							|  |  |  |         //            return $account;
 | 
					
						
							|  |  |  |         //        });
 | 
					
						
							| 
									
										
										
										
											2024-05-10 06:43:18 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return $this->collection; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * TODO this method refers to a single-use method inside Steam that could be moved here. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     private function getLastActivity(): void | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2024-07-28 07:47:54 +02:00
										 |  |  |         $lastActivity = $this->repository->getLastActivity($this->collection); | 
					
						
							| 
									
										
										
										
											2024-05-10 06:43:18 +02:00
										 |  |  |         foreach ($lastActivity as $row) { | 
					
						
							|  |  |  |             $this->collection->where('id', $row['account_id'])->first()->last_activity = Carbon::parse($row['date_max'], config('app.timezone')); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-22 08:43:12 +01:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * TODO this method refers to a single-use method inside Steam that could be moved here. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     private function collectAccountTypes(): void | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $accountTypes = $this->repository->getAccountTypes($this->collection); | 
					
						
							|  |  |  |         $types        = []; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         /** @var AccountType $row */ | 
					
						
							|  |  |  |         foreach ($accountTypes as $row) { | 
					
						
							|  |  |  |             $types[$row->id] = $row->type; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $this->collection->transform(function (Account $account) use ($types) { | 
					
						
							|  |  |  |             $account->account_type_string = $types[$account->id]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return $account; | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     private function collectMetaData(): void | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $metaFields  = $this->repository->getMetaValues($this->collection, ['is_multi_currency', 'currency_id', 'account_role', 'account_number', 'liability_direction', 'interest', 'interest_period', 'current_debt']); | 
					
						
							|  |  |  |         $currencyIds = $metaFields->where('name', 'currency_id')->pluck('data')->toArray(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-22 20:37:54 +01:00
										 |  |  |         $currencies  = []; | 
					
						
							| 
									
										
										
										
											2024-12-22 08:43:12 +01:00
										 |  |  |         foreach ($this->currencyRepository->getByIds($currencyIds) as $currency) { | 
					
						
							|  |  |  |             $id              = $currency->id; | 
					
						
							|  |  |  |             $currencies[$id] = $currency; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->collection->transform(function (Account $account) use ($metaFields, $currencies) { | 
					
						
							|  |  |  |             $set = $metaFields->where('account_id', $account->id); | 
					
						
							|  |  |  |             foreach ($set as $entry) { | 
					
						
							|  |  |  |                 $account->{$entry->name} = $entry->data; | 
					
						
							|  |  |  |                 if ('currency_id' === $entry->name) { | 
					
						
							|  |  |  |                     $id                               = (int) $entry->data; | 
					
						
							|  |  |  |                     $account->currency_name           = $currencies[$id]?->name; | 
					
						
							|  |  |  |                     $account->currency_code           = $currencies[$id]?->code; | 
					
						
							|  |  |  |                     $account->currency_symbol         = $currencies[$id]?->symbol; | 
					
						
							|  |  |  |                     $account->currency_decimal_places = $currencies[$id]?->decimal_places; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return $account; | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-10 06:43:18 +02:00
										 |  |  |     private function getMetaBalances(): void | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2024-07-31 20:19:17 +02:00
										 |  |  |         $this->balances = Balance::getAccountBalances($this->collection, today()); | 
					
						
							|  |  |  |         $balances       = $this->balances; | 
					
						
							|  |  |  |         $default        = $this->default; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // get start and end, so the balance difference can be generated.
 | 
					
						
							| 
									
										
										
										
											2024-12-22 20:37:54 +01:00
										 |  |  |         $start          = null; | 
					
						
							|  |  |  |         $end            = null; | 
					
						
							| 
									
										
										
										
											2024-08-01 20:45:42 +02:00
										 |  |  |         if (null !== $this->start) { | 
					
						
							| 
									
										
										
										
											2024-07-31 20:19:17 +02:00
										 |  |  |             $start = Balance::getAccountBalances($this->collection, $this->start); | 
					
						
							| 
									
										
										
										
											2024-05-10 06:43:18 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2024-08-01 20:45:42 +02:00
										 |  |  |         if (null !== $this->end) { | 
					
						
							| 
									
										
										
										
											2024-07-31 20:19:17 +02:00
										 |  |  |             $end = Balance::getAccountBalances($this->collection, $this->end); | 
					
						
							| 
									
										
										
										
											2024-05-10 06:43:18 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2024-07-31 20:19:17 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-01 20:45:42 +02:00
										 |  |  |         $this->collection->transform(function (Account $account) use ($balances, $default, $start, $end) { | 
					
						
							| 
									
										
										
										
											2024-07-31 20:19:17 +02:00
										 |  |  |             $converter = new ExchangeRateConverter(); | 
					
						
							|  |  |  |             $native    = [ | 
					
						
							|  |  |  |                 'currency_id'             => $this->default->id, | 
					
						
							|  |  |  |                 'currency_name'           => $this->default->name, | 
					
						
							|  |  |  |                 'currency_code'           => $this->default->code, | 
					
						
							|  |  |  |                 'currency_symbol'         => $this->default->symbol, | 
					
						
							|  |  |  |                 'currency_decimal_places' => $this->default->decimal_places, | 
					
						
							|  |  |  |                 'balance'                 => '0', | 
					
						
							| 
									
										
										
										
											2024-08-01 20:45:42 +02:00
										 |  |  |                 'period_start_balance'    => null, | 
					
						
							|  |  |  |                 'period_end_balance'      => null, | 
					
						
							|  |  |  |                 'balance_difference'      => null, | 
					
						
							| 
									
										
										
										
											2024-07-31 20:19:17 +02:00
										 |  |  |             ]; | 
					
						
							|  |  |  |             if (array_key_exists($account->id, $balances)) { | 
					
						
							| 
									
										
										
										
											2024-12-22 20:37:54 +01:00
										 |  |  |                 $set              = []; | 
					
						
							| 
									
										
										
										
											2024-08-01 20:45:42 +02:00
										 |  |  |                 foreach ($balances[$account->id] as $currencyId => $entry) { | 
					
						
							|  |  |  |                     $left  = $start[$account->id][$currencyId]['balance'] ?? null; | 
					
						
							|  |  |  |                     $right = $end[$account->id][$currencyId]['balance'] ?? null; | 
					
						
							|  |  |  |                     $diff  = null; | 
					
						
							|  |  |  |                     if (null !== $left && null !== $right) { | 
					
						
							|  |  |  |                         $diff = bcsub($right, $left); | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     $item  = [ | 
					
						
							| 
									
										
										
										
											2024-07-31 20:19:17 +02:00
										 |  |  |                         'currency_id'             => $entry['currency']->id, | 
					
						
							|  |  |  |                         'currency_name'           => $entry['currency']->name, | 
					
						
							|  |  |  |                         'currency_code'           => $entry['currency']->code, | 
					
						
							|  |  |  |                         'currency_symbol'         => $entry['currency']->symbol, | 
					
						
							|  |  |  |                         'currency_decimal_places' => $entry['currency']->decimal_places, | 
					
						
							|  |  |  |                         'balance'                 => $entry['balance'], | 
					
						
							| 
									
										
										
										
											2024-08-01 20:45:42 +02:00
										 |  |  |                         'period_start_balance'    => $left, | 
					
						
							|  |  |  |                         'period_end_balance'      => $right, | 
					
						
							|  |  |  |                         'balance_difference'      => $diff, | 
					
						
							| 
									
										
										
										
											2024-07-31 20:19:17 +02:00
										 |  |  |                     ]; | 
					
						
							| 
									
										
										
										
											2024-08-01 20:45:42 +02:00
										 |  |  |                     $set[] = $item; | 
					
						
							|  |  |  |                     if ($converter->enabled()) { | 
					
						
							|  |  |  |                         $native['balance'] = bcadd($native['balance'], $converter->convert($entry['currency'], $default, today(), $entry['balance'])); | 
					
						
							|  |  |  |                         if (null !== $diff) { | 
					
						
							|  |  |  |                             $native['period_start_balance'] = $converter->convert($entry['currency'], $default, today(), $item['period_start_balance']); | 
					
						
							|  |  |  |                             $native['period_end_balance']   = $converter->convert($entry['currency'], $default, today(), $item['period_end_balance']); | 
					
						
							|  |  |  |                             $native['balance_difference']   = bcsub($native['period_end_balance'], $native['period_start_balance']); | 
					
						
							|  |  |  |                         } | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 $account->balance = $set; | 
					
						
							|  |  |  |                 if ($converter->enabled()) { | 
					
						
							|  |  |  |                     $account->native_balance = $native; | 
					
						
							| 
									
										
										
										
											2024-07-31 20:19:17 +02:00
										 |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return $account; | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2024-05-10 06:43:18 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2024-05-10 09:17:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-01 20:45:42 +02:00
										 |  |  |     private function getObjectGroups(): void | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2024-12-22 20:37:54 +01:00
										 |  |  |         $set      = \DB::table('object_groupables') | 
					
						
							|  |  |  |             ->where('object_groupable_type', Account::class) | 
					
						
							|  |  |  |             ->whereIn('object_groupable_id', $this->collection->pluck('id')->toArray()) | 
					
						
							|  |  |  |             ->distinct() | 
					
						
							|  |  |  |             ->get(['object_groupables.object_groupable_id', 'object_groupables.object_group_id']) | 
					
						
							|  |  |  |         ; | 
					
						
							| 
									
										
										
										
											2024-08-01 20:45:42 +02:00
										 |  |  |         // get the groups:
 | 
					
						
							|  |  |  |         $groupIds = $set->pluck('object_group_id')->toArray(); | 
					
						
							|  |  |  |         $groups   = ObjectGroup::whereIn('id', $groupIds)->get(); | 
					
						
							| 
									
										
										
										
											2024-08-05 05:06:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-01 20:45:42 +02:00
										 |  |  |         /** @var ObjectGroup $group */ | 
					
						
							|  |  |  |         foreach ($groups as $group) { | 
					
						
							|  |  |  |             $this->objectGroups[$group->id] = $group; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2024-08-05 05:06:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-22 20:37:54 +01:00
										 |  |  |         /** @var \stdClass $entry */ | 
					
						
							| 
									
										
										
										
											2024-08-01 20:45:42 +02:00
										 |  |  |         foreach ($set as $entry) { | 
					
						
							|  |  |  |             $this->grouped[(int) $entry->object_groupable_id] = (int) $entry->object_group_id; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2024-08-05 05:06:53 +02:00
										 |  |  |         $this->collection->transform(function (Account $account) { | 
					
						
							| 
									
										
										
										
											2024-08-01 20:45:42 +02:00
										 |  |  |             $account->object_group_id = $this->grouped[$account->id] ?? null; | 
					
						
							| 
									
										
										
										
											2024-08-05 05:06:53 +02:00
										 |  |  |             if (null !== $account->object_group_id) { | 
					
						
							| 
									
										
										
										
											2024-08-01 20:45:42 +02:00
										 |  |  |                 $account->object_group_title = $this->objectGroups[$account->object_group_id]->title; | 
					
						
							|  |  |  |                 $account->object_group_order = $this->objectGroups[$account->object_group_id]->order; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2024-08-05 05:06:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-01 20:45:42 +02:00
										 |  |  |             return $account; | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2024-12-22 08:43:12 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     public function setEnd(?Carbon $end): void | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->end = $end; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function setStart(?Carbon $start): void | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->start = $start; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2024-05-10 06:43:18 +02:00
										 |  |  | } |