/**
  * 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();
 }
示例#2
0
 /**
  * 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;
 }