['date'], // done AvailableBudget::class => ['start_date', 'end_date'], // done Bill::class => ['date', 'end_date', 'extension_date'], // done BudgetLimit::class => ['start_date', 'end_date'], // done CurrencyExchangeRate::class => ['date'], // done InvitedUser::class => ['expires'], PiggyBankEvent::class => ['date'], PiggyBankRepetition::class => ['start_date', 'target_date'], PiggyBank::class => ['start_date', 'target_date'], // done Recurrence::class => ['first_date', 'repeat_until', 'latest_date'], Tag::class => ['date'], TransactionJournal::class => ['date'], ]; /** * Execute the console command. */ public function handle(): void { foreach (self::$models as $model => $fields) { $this->addTimezoneToModel($model, $fields); } // not yet in UTC mode FireflyConfig::set('utc', false); } private function addTimezoneToModel(string $model, array $fields): void { foreach ($fields as $field) { $this->addTimezoneToModelField($model, $field); } } private function addTimezoneToModelField(string $model, string $field): void { $shortModel = str_replace('FireflyIII\Models\\', '', $model); $timezoneField = sprintf('%s_tz', $field); $count = 0; try { $count = $model::whereNull($timezoneField)->count(); } catch (QueryException $e) { $this->friendlyError(sprintf('Cannot add timezone information to field "%s" of model "%s". Field does not exist.', $field, $shortModel)); Log::error($e->getMessage()); } if (0 === $count) { $this->friendlyPositive(sprintf('Timezone information is present in field "%s" of model "%s".', $field, $shortModel)); return; } $this->friendlyInfo(sprintf('Adding timezone information to field "%s" of model "%s".', $field, $shortModel)); $model::whereNull($timezoneField)->update([$timezoneField => config('app.timezone')]); } }