/**
  * 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();
 }