diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php index 61a4c63d22..12a8db0d50 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php @@ -31,6 +31,7 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\AccountFilter; use FireflyIII\Support\Http\Api\TransactionFilter; use FireflyIII\Transformers\CurrencyTransformer; +use FireflyIII\User; use Illuminate\Http\JsonResponse; use JsonException; use League\Fractal\Resource\Item; @@ -79,12 +80,14 @@ class StoreController extends Controller { $currency = $this->repository->store($request->getAll()); if (true === $request->boolean('default')) { - app('preferences')->set('currencyPreference', $currency->code); + $this->repository->makeDefault($currency); app('preferences')->mark(); } $manager = $this->getManager(); - $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); - $this->parameters->set('defaultCurrency', $defaultCurrency); + + /** @var User $user */ + $user = auth()->user(); + $currency->refreshForUser($user); /** @var CurrencyTransformer $transformer */ $transformer = app(CurrencyTransformer::class); diff --git a/app/Http/Controllers/JavascriptController.php b/app/Http/Controllers/JavascriptController.php index bdb002df78..66ec5e7242 100644 --- a/app/Http/Controllers/JavascriptController.php +++ b/app/Http/Controllers/JavascriptController.php @@ -56,13 +56,11 @@ class JavascriptController extends Controller */ public function accounts(AccountRepositoryInterface $repository, CurrencyRepositoryInterface $currencyRepository): Response { - $accounts = $repository->getAccountsByType( + $accounts = $repository->getAccountsByType( [AccountType::DEFAULT, AccountType::ASSET, AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::CREDITCARD] ); - $preference = app('preferences')->get('currencyPreference', config('firefly.default_currency', 'EUR')); - $default = $currencyRepository->findByCodeNull((string)$preference->data); - - $data = ['accounts' => []]; + $default = app('amount')->getDefaultCurrency(); + $data = ['accounts' => []]; /** @var Account $account */ foreach ($accounts as $account) { diff --git a/app/Http/Controllers/NewUserController.php b/app/Http/Controllers/NewUserController.php index 5ba5d4fd12..5f85744279 100644 --- a/app/Http/Controllers/NewUserController.php +++ b/app/Http/Controllers/NewUserController.php @@ -114,7 +114,7 @@ class NewUserController extends Controller $this->createCashWalletAccount($currency, $language); // create cash wallet account // store currency preference: - app('preferences')->set('currencyPreference', $currency->code); + $currencyRepository->makeDefault($currency); // store frontpage preferences: $accounts = $this->repository->getAccountsByType([AccountType::ASSET])->pluck('id')->toArray(); diff --git a/app/Repositories/TransactionGroup/TransactionGroupRepository.php b/app/Repositories/TransactionGroup/TransactionGroupRepository.php index 860d03187d..aeb9411303 100644 --- a/app/Repositories/TransactionGroup/TransactionGroupRepository.php +++ b/app/Repositories/TransactionGroup/TransactionGroupRepository.php @@ -418,10 +418,6 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface if (null !== $currencyPreference) { $currency = TransactionCurrency::where('id', $currencyPreference->data)->first(); } - if (null === $currencyPreference) { - $currencyCode = app('preferences')->getForUser($this->user, 'currencyPreference', 'EUR')->data; - $currency = TransactionCurrency::where('code', $currencyCode)->first(); - } $journalId = (int)$row->transaction_journal_id; $return[$journalId] = $return[$journalId] ?? []; diff --git a/app/Support/Amount.php b/app/Support/Amount.php index fdad00c33d..54541bad07 100644 --- a/app/Support/Amount.php +++ b/app/Support/Amount.php @@ -108,35 +108,10 @@ class Amount */ public function getCurrencies(): Collection { + throw new FireflyException(sprintf('Method "%s" needs a refactor', __METHOD__)); return TransactionCurrency::where('enabled', true)->orderBy('code', 'ASC')->get(); } - /** - * @return string - * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ - public function getCurrencyCode(): string - { - $cache = new CacheProperties(); - $cache->addProperty('getCurrencyCode'); - if ($cache->has()) { - return $cache->get(); - } - $currencyPreference = app('preferences')->get('currencyPreference', config('firefly.default_currency', 'EUR')); - - $currency = TransactionCurrency::where('code', $currencyPreference->data)->first(); - if ($currency) { - $cache->store($currency->code); - - return $currency->code; - } - $cache->store(config('firefly.default_currency', 'EUR')); - - return (string)config('firefly.default_currency', 'EUR'); - } - /** * @return TransactionCurrency * @throws FireflyException @@ -163,22 +138,14 @@ class Amount if ($cache->has()) { return $cache->get(); } - $currencyPreference = app('preferences')->getForUser($user, 'currencyPreference', config('firefly.default_currency', 'EUR')); - $currencyPrefStr = $currencyPreference ? $currencyPreference->data : 'EUR'; - - // at this point the currency preference could be encrypted, if coming from an old version. - $currencyCode = $this->tryDecrypt((string)$currencyPrefStr); - - // could still be json encoded: - /** @var TransactionCurrency|null $currency */ - $currency = TransactionCurrency::where('code', $currencyCode)->first(); - if (null === $currency) { - // get EUR - $currency = TransactionCurrency::where('code', 'EUR')->first(); + $default = $user->currencies()->where('user_default', true)->first(); + if(null === $default) { + $default = $this->getSystemCurrency(); + $user->currencies()->sync([$default->id => ['user_default' => true]]); } - $cache->store($currency); + $cache->store($default); - return $currency; + return $default; } /** diff --git a/app/Support/Preferences.php b/app/Support/Preferences.php index c519a992ee..46a1a91d28 100644 --- a/app/Support/Preferences.php +++ b/app/Support/Preferences.php @@ -60,6 +60,9 @@ class Preferences */ public function get(string $name, $default = null): ?Preference { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } /** @var User|null $user */ $user = auth()->user(); if (null === $user) { @@ -82,6 +85,9 @@ class Preferences */ public function getForUser(User $user, string $name, $default = null): ?Preference { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } $preference = Preference::where('user_id', $user->id)->where('name', $name)->first(['id', 'user_id', 'name', 'data', 'updated_at', 'created_at']); if (null !== $preference && null === $preference->data) { $preference->delete(); @@ -108,6 +114,9 @@ class Preferences */ public function delete(string $name): bool { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } $fullName = sprintf('preference%s%s', auth()->user()->id, $name); if (Cache::has($fullName)) { Cache::forget($fullName); @@ -123,6 +132,9 @@ class Preferences */ public function forget(User $user, string $name): void { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } $key = sprintf('preference%s%s', $user->id, $name); Cache::forget($key); Cache::put($key, '', 5); @@ -138,6 +150,9 @@ class Preferences */ public function setForUser(User $user, string $name, $value): Preference { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } $fullName = sprintf('preference%s%s', $user->id, $name); Cache::forget($fullName); /** @var Preference|null $pref */ @@ -185,6 +200,9 @@ class Preferences */ public function findByName(string $name): Collection { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } return Preference::where('name', $name)->get(); } @@ -220,6 +238,9 @@ class Preferences */ public function getFresh(string $name, $default = null): ?Preference { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } /** @var User|null $user */ $user = auth()->user(); if (null === $user) { @@ -243,6 +264,9 @@ class Preferences */ public function getFreshForUser(User $user, string $name, $default = null): ?Preference { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } return $this->getForUser($user, $name, $default); } @@ -283,6 +307,9 @@ class Preferences */ public function set(string $name, $value): Preference { + if('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } $user = auth()->user(); if (null === $user) { // make new preference, return it: diff --git a/app/Transformers/CurrencyTransformer.php b/app/Transformers/CurrencyTransformer.php index 2c363f19eb..0449db14b3 100644 --- a/app/Transformers/CurrencyTransformer.php +++ b/app/Transformers/CurrencyTransformer.php @@ -34,23 +34,16 @@ class CurrencyTransformer extends AbstractTransformer * Transform the currency. * * @param TransactionCurrency $currency - * * @return array */ public function transform(TransactionCurrency $currency): array { - $isDefault = false; - $defaultCurrency = $this->parameters->get('defaultCurrency'); - if (null !== $defaultCurrency) { - $isDefault = (int)$defaultCurrency->id === (int)$currency->id; - } - return [ 'id' => (int)$currency->id, 'created_at' => $currency->created_at->toAtomString(), 'updated_at' => $currency->updated_at->toAtomString(), - 'default' => $isDefault, - 'enabled' => $currency->enabled, + 'default' => $currency->userDefault, + 'enabled' => $currency->userEnabled, 'name' => $currency->name, 'code' => $currency->code, 'symbol' => $currency->symbol,