['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 => ['startdate', 'targetdate'], PiggyBank::class => ['startdate', 'targetdate'], // done Recurrence::class => ['first_date', 'repeat_until', 'latest_date'], Tag::class => ['date'], TransactionJournal::class => ['date'], ]; foreach ($models as $model => $fields) { $this->addTimezoneToModel($model, $fields); } } 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); $items = new Collection(); try { $items = $model::whereNull($timezoneField)->get(); } catch (QueryException $e) { $this->friendlyError(sprintf('Cannot add timezone to field "%s" of model "%s". Field does not exist.', $field, $shortModel)); Log::error($e->getMessage()); } if (0 === $items->count()) { $this->friendlyPositive(sprintf('Timezone is present in field "%s" of model "%s".', $field, $shortModel)); return; } $this->friendlyInfo(sprintf('Adding timezone to field "%s" of model "%s".', $field, $shortModel)); foreach ($items as $item) { $item->{$timezoneField} = config('app.timezone'); $item->saveQuietly(); } } }