From 1bf61f57f574e1ff68127673bbbc67c26826699b Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 22 Nov 2024 06:03:29 +0100 Subject: [PATCH] Add UTC support. --- .../Commands/Integrity/AddTimezonesToDates.php | 3 +++ app/Console/Commands/Integrity/ConvertDatesToUTC.php | 5 ++++- app/Factory/TransactionJournalFactory.php | 12 ++++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/Console/Commands/Integrity/AddTimezonesToDates.php b/app/Console/Commands/Integrity/AddTimezonesToDates.php index d3565e6886..7dafa505c4 100644 --- a/app/Console/Commands/Integrity/AddTimezonesToDates.php +++ b/app/Console/Commands/Integrity/AddTimezonesToDates.php @@ -36,6 +36,7 @@ use FireflyIII\Models\PiggyBankRepetition; use FireflyIII\Models\Recurrence; use FireflyIII\Models\Tag; use FireflyIII\Models\TransactionJournal; +use FireflyIII\Support\Facades\FireflyConfig; use Illuminate\Console\Command; use Illuminate\Database\QueryException; use Illuminate\Support\Facades\Log; @@ -81,6 +82,8 @@ class AddTimezonesToDates extends Command 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 diff --git a/app/Console/Commands/Integrity/ConvertDatesToUTC.php b/app/Console/Commands/Integrity/ConvertDatesToUTC.php index fb74d0b821..6ca496f8b3 100644 --- a/app/Console/Commands/Integrity/ConvertDatesToUTC.php +++ b/app/Console/Commands/Integrity/ConvertDatesToUTC.php @@ -25,6 +25,7 @@ namespace FireflyIII\Console\Commands\Integrity; use Carbon\Carbon; use FireflyIII\Console\Commands\ShowsFriendlyMessages; +use FireflyIII\Support\Facades\FireflyConfig; use Illuminate\Console\Command; use Illuminate\Database\QueryException; use Illuminate\Support\Collection; @@ -39,7 +40,7 @@ class ConvertDatesToUTC extends Command * * @var string */ - protected $signature = 'firefly-iii:convert-dates-to-utc'; + protected $signature = 'firefly-iii:migrate-to-utc'; /** * The console command description. @@ -60,6 +61,8 @@ class ConvertDatesToUTC extends Command foreach (AddTimezonesToDates::$models as $model => $fields) { $this->ConvertModeltoUTC($model, $fields); } + // tell the system we are now in UTC mode. + FireflyConfig::set('utc', true); return Command::SUCCESS; } diff --git a/app/Factory/TransactionJournalFactory.php b/app/Factory/TransactionJournalFactory.php index 4ced60828c..747ca4bdb5 100644 --- a/app/Factory/TransactionJournalFactory.php +++ b/app/Factory/TransactionJournalFactory.php @@ -25,6 +25,7 @@ declare(strict_types=1); namespace FireflyIII\Factory; use Carbon\Carbon; +use FireflyIII\Enums\TransactionTypeEnum; use FireflyIII\Exceptions\DuplicateTransactionException; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Account; @@ -43,6 +44,7 @@ use FireflyIII\Repositories\TransactionType\TransactionTypeRepositoryInterface; use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Services\Internal\Destroy\JournalDestroyService; use FireflyIII\Services\Internal\Support\JournalServiceTrait; +use FireflyIII\Support\Facades\FireflyConfig; use FireflyIII\Support\NullArrayObject; use FireflyIII\User; use FireflyIII\Validation\AccountValidator; @@ -157,7 +159,7 @@ class TransactionJournalFactory $this->errorIfDuplicate($row['import_hash_v2']); - /** Some basic fields */ + // Some basic fields $type = $this->typeRepository->findTransactionType(null, $row['type']); $carbon = $row['date'] ?? today(config('app.timezone')); $order = $row['order'] ?? 0; @@ -170,6 +172,12 @@ class TransactionJournalFactory // Manipulate basic fields $carbon->setTimezone(config('app.timezone')); + // 2024-11-19, overrule timezone with UTC and store it as UTC. + if(FireflyConfig::get('utc', false)) { + $carbon->setTimezone('UTC'); + } + // $carbon->setTimezone('UTC'); + try { // validate source and destination using a new Validator. $this->validateAccounts($row); @@ -205,7 +213,7 @@ class TransactionJournalFactory app('log')->debug('Done with getAccount(2x)'); // this is the moment for a reconciliation sanity check (again). - if (TransactionType::RECONCILIATION === $type->type) { + if (TransactionTypeEnum::RECONCILIATION->value === $type->type) { [$sourceAccount, $destinationAccount] = $this->reconciliationSanityCheck($sourceAccount, $destinationAccount); }