mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2026-03-06 15:29:37 +00:00
Compare commits
2 commits
a6be786d5d
...
0717239296
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0717239296 | ||
|
|
d3e3c4e3f8 |
5 changed files with 387 additions and 309 deletions
|
|
@ -25,8 +25,7 @@
|
||||||
"doctrine/doctrine-migrations-bundle": "^3.0",
|
"doctrine/doctrine-migrations-bundle": "^3.0",
|
||||||
"doctrine/orm": "^3.2.0",
|
"doctrine/orm": "^3.2.0",
|
||||||
"dompdf/dompdf": "^v3.0.0",
|
"dompdf/dompdf": "^v3.0.0",
|
||||||
"florianv/swap": "^4.0",
|
"part-db/swap-bundle": "^6.0.0",
|
||||||
"florianv/swap-bundle": "dev-master",
|
|
||||||
"gregwar/captcha-bundle": "^2.1.0",
|
"gregwar/captcha-bundle": "^2.1.0",
|
||||||
"hshn/base64-encoded-file": "^5.0",
|
"hshn/base64-encoded-file": "^5.0",
|
||||||
"jbtronics/2fa-webauthn": "^3.0.0",
|
"jbtronics/2fa-webauthn": "^3.0.0",
|
||||||
|
|
|
||||||
650
composer.lock
generated
650
composer.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -5,6 +5,9 @@ florianv_swap:
|
||||||
|
|
||||||
providers:
|
providers:
|
||||||
european_central_bank: ~ # European Central Bank (only works for EUR base currency)
|
european_central_bank: ~ # European Central Bank (only works for EUR base currency)
|
||||||
fixer: # Fixer.io (needs an API key)
|
central_bank_of_czech_republic: ~
|
||||||
access_key: "%env(string:default:settings:exchange_rate:fixerApiKey:INVALID)%"
|
central_bank_of_republic_turkey: ~
|
||||||
#exchange_rates_api: ~
|
national_bank_of_romania: ~
|
||||||
|
|
||||||
|
fixer: # Fixer.io (needs an API key)
|
||||||
|
access_key: "%env(string:settings:exchange_rate:fixerApiKey)%"
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,8 @@ use App\Entity\PriceInformations\Currency;
|
||||||
use App\Settings\SystemSettings\LocalizationSettings;
|
use App\Settings\SystemSettings\LocalizationSettings;
|
||||||
use Brick\Math\BigDecimal;
|
use Brick\Math\BigDecimal;
|
||||||
use Brick\Math\RoundingMode;
|
use Brick\Math\RoundingMode;
|
||||||
|
use Exchanger\Exception\UnsupportedCurrencyPairException;
|
||||||
|
use Exchanger\Exception\UnsupportedExchangeQueryException;
|
||||||
use Swap\Swap;
|
use Swap\Swap;
|
||||||
|
|
||||||
class ExchangeRateUpdater
|
class ExchangeRateUpdater
|
||||||
|
|
@ -39,15 +41,21 @@ class ExchangeRateUpdater
|
||||||
*/
|
*/
|
||||||
public function update(Currency $currency): Currency
|
public function update(Currency $currency): Currency
|
||||||
{
|
{
|
||||||
//Currency pairs are always in the format "BASE/QUOTE"
|
try {
|
||||||
$rate = $this->swap->latest($this->localizationSettings->baseCurrency.'/'.$currency->getIsoCode());
|
//Try it in the direction QUOTE/BASE first, as most providers provide rates in this direction
|
||||||
//The rate says how many quote units are worth one base unit
|
$rate = $this->swap->latest($currency->getIsoCode().'/'.$this->localizationSettings->baseCurrency);
|
||||||
//So we need to invert it to get the exchange rate
|
$effective_rate = BigDecimal::of($rate->getValue());
|
||||||
|
} catch (UnsupportedCurrencyPairException|UnsupportedExchangeQueryException $exception) {
|
||||||
|
//Otherwise try to get it inverse and calculate it ourselfes, from the format "BASE/QUOTE"
|
||||||
|
$rate = $this->swap->latest($this->localizationSettings->baseCurrency.'/'.$currency->getIsoCode());
|
||||||
|
//The rate says how many quote units are worth one base unit
|
||||||
|
//So we need to invert it to get the exchange rate
|
||||||
|
|
||||||
$rate_bd = BigDecimal::of($rate->getValue());
|
$rate_bd = BigDecimal::of($rate->getValue());
|
||||||
$rate_inverted = BigDecimal::one()->dividedBy($rate_bd, Currency::PRICE_SCALE, RoundingMode::HALF_UP);
|
$effective_rate = BigDecimal::one()->dividedBy($rate_bd, Currency::PRICE_SCALE, RoundingMode::HALF_UP);
|
||||||
|
}
|
||||||
|
|
||||||
$currency->setExchangeRate($rate_inverted);
|
$currency->setExchangeRate($effective_rate);
|
||||||
|
|
||||||
return $currency;
|
return $currency;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
12
symfony.lock
12
symfony.lock
|
|
@ -133,15 +133,6 @@
|
||||||
"ekino/phpstan-banned-code": {
|
"ekino/phpstan-banned-code": {
|
||||||
"version": "v0.3.1"
|
"version": "v0.3.1"
|
||||||
},
|
},
|
||||||
"florianv/exchanger": {
|
|
||||||
"version": "1.4.1"
|
|
||||||
},
|
|
||||||
"florianv/swap": {
|
|
||||||
"version": "3.5.0"
|
|
||||||
},
|
|
||||||
"florianv/swap-bundle": {
|
|
||||||
"version": "5.0.x-dev"
|
|
||||||
},
|
|
||||||
"gregwar/captcha": {
|
"gregwar/captcha": {
|
||||||
"version": "v1.1.7"
|
"version": "v1.1.7"
|
||||||
},
|
},
|
||||||
|
|
@ -254,6 +245,9 @@
|
||||||
"./config/packages/datatables.yaml"
|
"./config/packages/datatables.yaml"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"part-db/swap-bundle": {
|
||||||
|
"version": "v6.0.0"
|
||||||
|
},
|
||||||
"php-http/discovery": {
|
"php-http/discovery": {
|
||||||
"version": "1.18",
|
"version": "1.18",
|
||||||
"recipe": {
|
"recipe": {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue