/** * Populates the exchange rates * * @param OutputInterface $output The output interface * * @return int|null|void */ public function populate(OutputInterface $output) { $currencies = $this->currencyRepository->findBy(['enabled' => true]); //extract target currency codes $currenciesCodes = array(); foreach ($currencies as $activeCurrency) { if ($activeCurrency->getIso() != $this->defaultCurrency) { $currenciesCodes[] = $activeCurrency->getIso(); } } //get rates for all of the enabled and active currencies $rates = $this->currencyExchangeRatesProvider->getExchangeRates($this->defaultCurrency, $currenciesCodes); foreach ($rates as $code => $rate) { /** * @var CurrencyInterface $sourceCurrency */ $sourceCurrency = $this->currencyRepository->findOneBy(['iso' => $this->defaultCurrency]); /** * @var CurrencyInterface $targetCurrency */ $targetCurrency = $this->currencyRepository->findOneBy(['iso' => $code]); //check if this is a new exchange rate, or if we have to create a new one $exchangeRate = $this->currencyExchangeRateRepository->findOneBy(['sourceCurrency' => $sourceCurrency, 'targetCurrency' => $targetCurrency]); if (!$exchangeRate instanceof CurrencyExchangeRateInterface) { $exchangeRate = $this->currencyExchangeRateFactory->create(); } $exchangeRate->setExchangeRate($rate); $exchangeRate->setSourceCurrency($sourceCurrency); $exchangeRate->setTargetCurrency($targetCurrency); if (!$exchangeRate->getId()) { $this->currencyExchangeRateObjectManager->persist($exchangeRate); } } $this->currencyExchangeRateObjectManager->flush(); }
/** * Given a the currency base, returns a list of all exchange rates. * * @return array Exchange rate list */ public function getExchangeRateList() { if (!empty($this->exchangeRateList)) { return $this->exchangeRateList; } $this->exchangeRateList = []; $currencyBase = $this->currencyRepository->findOneBy(['iso' => $this->exchangeCurrencyIso]); $availableExchangeRates = $this->currencyExchangeRateRepository->findBy(['sourceCurrency' => $currencyBase]); /** * @var CurrencyExchangeRate $exchangeRate */ foreach ($availableExchangeRates as $exchangeRate) { $targetCurrency = $exchangeRate->getTargetCurrency(); $targetCurrencyIso = $targetCurrency->getIso(); $this->exchangeRateList[$targetCurrencyIso] = ['rate' => $exchangeRate->getExchangeRate(), 'currency' => $targetCurrency]; } return $this->exchangeRateList; }