Add UTC support.

This commit is contained in:
James Cole 2024-11-22 06:03:29 +01:00
parent 07b55bd71f
commit 1bf61f57f5
No known key found for this signature in database
GPG Key ID: B49A324B7EAD6D80
3 changed files with 17 additions and 3 deletions

View File

@ -36,6 +36,7 @@ use FireflyIII\Models\PiggyBankRepetition;
use FireflyIII\Models\Recurrence; use FireflyIII\Models\Recurrence;
use FireflyIII\Models\Tag; use FireflyIII\Models\Tag;
use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournal;
use FireflyIII\Support\Facades\FireflyConfig;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use Illuminate\Database\QueryException; use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
@ -81,6 +82,8 @@ class AddTimezonesToDates extends Command
foreach (self::$models as $model => $fields) { foreach (self::$models as $model => $fields) {
$this->addTimezoneToModel($model, $fields); $this->addTimezoneToModel($model, $fields);
} }
// not yet in UTC mode
FireflyConfig::set('utc', false);
} }
private function addTimezoneToModel(string $model, array $fields): void private function addTimezoneToModel(string $model, array $fields): void

View File

@ -25,6 +25,7 @@ namespace FireflyIII\Console\Commands\Integrity;
use Carbon\Carbon; use Carbon\Carbon;
use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Console\Commands\ShowsFriendlyMessages;
use FireflyIII\Support\Facades\FireflyConfig;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use Illuminate\Database\QueryException; use Illuminate\Database\QueryException;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
@ -39,7 +40,7 @@ class ConvertDatesToUTC extends Command
* *
* @var string * @var string
*/ */
protected $signature = 'firefly-iii:convert-dates-to-utc'; protected $signature = 'firefly-iii:migrate-to-utc';
/** /**
* The console command description. * The console command description.
@ -60,6 +61,8 @@ class ConvertDatesToUTC extends Command
foreach (AddTimezonesToDates::$models as $model => $fields) { foreach (AddTimezonesToDates::$models as $model => $fields) {
$this->ConvertModeltoUTC($model, $fields); $this->ConvertModeltoUTC($model, $fields);
} }
// tell the system we are now in UTC mode.
FireflyConfig::set('utc', true);
return Command::SUCCESS; return Command::SUCCESS;
} }

View File

@ -25,6 +25,7 @@ declare(strict_types=1);
namespace FireflyIII\Factory; namespace FireflyIII\Factory;
use Carbon\Carbon; use Carbon\Carbon;
use FireflyIII\Enums\TransactionTypeEnum;
use FireflyIII\Exceptions\DuplicateTransactionException; use FireflyIII\Exceptions\DuplicateTransactionException;
use FireflyIII\Exceptions\FireflyException; use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
@ -43,6 +44,7 @@ use FireflyIII\Repositories\TransactionType\TransactionTypeRepositoryInterface;
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
use FireflyIII\Services\Internal\Destroy\JournalDestroyService; use FireflyIII\Services\Internal\Destroy\JournalDestroyService;
use FireflyIII\Services\Internal\Support\JournalServiceTrait; use FireflyIII\Services\Internal\Support\JournalServiceTrait;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\NullArrayObject; use FireflyIII\Support\NullArrayObject;
use FireflyIII\User; use FireflyIII\User;
use FireflyIII\Validation\AccountValidator; use FireflyIII\Validation\AccountValidator;
@ -157,7 +159,7 @@ class TransactionJournalFactory
$this->errorIfDuplicate($row['import_hash_v2']); $this->errorIfDuplicate($row['import_hash_v2']);
/** Some basic fields */ // Some basic fields
$type = $this->typeRepository->findTransactionType(null, $row['type']); $type = $this->typeRepository->findTransactionType(null, $row['type']);
$carbon = $row['date'] ?? today(config('app.timezone')); $carbon = $row['date'] ?? today(config('app.timezone'));
$order = $row['order'] ?? 0; $order = $row['order'] ?? 0;
@ -170,6 +172,12 @@ class TransactionJournalFactory
// Manipulate basic fields // Manipulate basic fields
$carbon->setTimezone(config('app.timezone')); $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 { try {
// validate source and destination using a new Validator. // validate source and destination using a new Validator.
$this->validateAccounts($row); $this->validateAccounts($row);
@ -205,7 +213,7 @@ class TransactionJournalFactory
app('log')->debug('Done with getAccount(2x)'); app('log')->debug('Done with getAccount(2x)');
// this is the moment for a reconciliation sanity check (again). // 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); [$sourceAccount, $destinationAccount] = $this->reconciliationSanityCheck($sourceAccount, $destinationAccount);
} }