private function getCurrencyForDate($date) { $soap = new \SoapClient('http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL'); $result = new \SimpleXMLElement($soap->GetCursOnDate(['On_date' => $date])->GetCursOnDateResult->any); foreach ($result->ValuteData->ValuteCursOnDate as $valute) { if ($valute->VchCode == self::USD) { return floatval($valute->Vcurs); } } }
/** * This method creates a connection to webservice of Central Bank of Russia * and obtains exchange rates, parse it and fills $rates property * * @param string $date The date on which exchange rates will be obtained */ public function __construct($date = null) { if (!isset($date)) { $date = date("Y-m-d"); } $client = new SoapClient("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL"); $curs = $client->GetCursOnDate(array("On_date" => $date)); $rates = new SimpleXMLElement($curs->GetCursOnDateResult->any); foreach ($rates->ValuteData->ValuteCursOnDate as $rate) { $r = (double) $rate->Vcurs / (int) $rate->Vnom; $this->rates['byChCode'][(string) $rate->VchCode] = $r; $this->rates['byCode'][(int) $rate->Vcode] = $r; } // Adding an exchange rate of Russian Ruble $this->rates['byChCode']['RUB'] = 1; $this->rates['byCode'][643] = 1; }
/** * Load rates by date * * @param ICurrency[] $currencies * @param \DateTime $date * @return ICurrencyRate[] */ public function getRates($currencies, \DateTime $date = null) { if ($date === null) { $date = new \DateTime('now'); } $client = new \SoapClient("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL"); $curs = $client->GetCursOnDate(array("On_date" => $date->format('Y-m-d'))); $ratesXml = new \SimpleXMLElement($curs->GetCursOnDateResult->any); $result = array(); foreach ($currencies as $currency) { $rateCbr = $ratesXml->xpath('ValuteData/ValuteCursOnDate/VchCode[.="' . $currency->getCode() . '"]/parent::*'); if (empty($rateCbr)) { continue; } $rate = $this->currencyRateManager->getNewInstance($this->currencyManager->getCurrency($currency->getCode()), $this, $date, (double) $rateCbr[0]->Vcurs, (int) $rateCbr[0]->Vnom); $result[$currency->getCode()] = $rate; } return $result; }
protected function execute(InputInterface $input, OutputInterface $output) { $em = $this->getContainer()->get('doctrine')->getEntityManager(); $client = new \SoapClient("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL"); if (!isset($date)) { $date = date("Y-m-d"); } $curs = $client->GetCursOnDate(array("On_date" => $date)); $this->rates = new \SimpleXMLElement($curs->GetCursOnDateResult->any); $currencies = $em->getRepository('ChewbaccaExchangeRatesBundle:Currency')->createQueryBuilder('c')->getQuery()->getResult(); foreach ($currencies as $cur) { $rate = $this->GetRate($cur->getMnemo()); $cur->setRate($rate); $output->write($cur->getMnemo() . ' rate is: ' . $cur->getRate(), true); $em->persist($cur); } $em->flush(); $output->write('all rates updated', true); return 0; }
public function init() { parent::init(); if (!isset($date)) { $date = date("Y-m-d"); } $this->soapUrl = Yii::$app->params['cbrfSOAPURL']; $client = new \SoapClient($this->soapUrl); $curs = $client->GetCursOnDate(array("On_date" => $date)); $rates = new \SimpleXMLElement($curs->GetCursOnDateResult->any); foreach ($rates->ValuteData->ValuteCursOnDate as $rate) { $rateArray = []; $rateArray['name'] = (string) $rate->Vname; $rateArray['code'] = (int) $rate->Vcode; $rateArray['chCode'] = (string) $rate->VchCode; $this->currency[] = $rateArray; $r = (double) $rate->Vcurs / (int) $rate->Vnom; $this->rates['byChCode'][(string) $rate->VchCode] = ['rate' => $r, 'curs' => (double) $rate->Vcurs, 'nom' => (int) $rate->Vnom]; $this->rates['byCode'][(int) $rate->Vcode] = ['rate' => $r, 'curs' => (double) $rate->Vcurs, 'nom' => (int) $rate->Vnom]; } // Adding an exchange rate of Russian Ruble $this->rates['byChCode']['RUB'] = 1; $this->rates['byCode'][643] = 1; }
public function getRates($otherCurrencyCode, $dateParam, $cron = false) { $db = PearDatabase::getInstance(); $moduleModel = Settings_CurrencyUpdate_Module_Model::getCleanInstance(); $selectedBank = $moduleModel->getActiveBankId(); $yesterday = date('Y-m-d', strtotime('-1 day')); // check if data is correct, currency rates can be retrieved only for working days $lastWorkingDay = Vtiger_Functions::getLastWorkingDay($yesterday); $today = date('Y-m-d'); $mainCurrency = Vtiger_Functions::getDefaultCurrencyInfo()['currency_code']; $dateCur = $dateParam; $source = $this->getSource(); $client = new \SoapClient($source[0]); $curs = $client->GetCursOnDate(array('On_date' => $dateCur)); $ratesXml = new \SimpleXMLElement($curs->GetCursOnDateResult->any); $datePublicationOfFile = $dateCur; $exchangeRate = 1.0; // if currency is diffrent than RUB we need to calculate rate for converting other currencies to this one from RUB if ($mainCurrency != $this->getMainCurrencyCode()) { foreach ($ratesXml->ValuteData[0] as $currencyRate) { if ($currencyRate->VchCode == $mainCurrency) { echo $currencyRate->VchCode . ' == ' . $mainCurrency . ' = ' . $currencyRate->Vcurs; $exchangeRate = $currencyRate->Vcurs; } } } foreach ($ratesXml->ValuteData[0] as $currencyRate) { $currency = (string) $currencyRate->VchCode; foreach ($otherCurrencyCode as $key => $currId) { if ($key == $currency && $currency != $mainCurrency) { $curs = (string) $currencyRate->Vcurs; $nom = (string) $currencyRate->Vnom; $exchange = $curs / $nom; $exchangeVtiger = $exchangeRate / $exchange; $exchange = $exchange / $exchangeRate; if ($cron == true || (strtotime($dateParam) == strtotime($today) || strtotime($dateParam) == strtotime($lastWorkingDay))) { $moduleModel->setCRMConversionRate($currency, $exchangeVtiger); } $existingId = $moduleModel->getCurrencyRateId($currId, $datePublicationOfFile, $selectedBank); if ($existingId > 0) { $moduleModel->updateCurrencyRate($existingId, $exchange); } else { $moduleModel->addCurrencyRate($currId, $datePublicationOfFile, $exchange, $selectedBank); } } } } // currency diffrent than RUB, we need to add manually RUB rates if ($mainCurrency != $this->getMainCurrencyCode()) { $exchange = 1.0 / $exchangeRate; $mainCurrencyId = false; foreach ($otherCurrencyCode as $code => $id) { if ($code == $this->getMainCurrencyCode()) { $mainCurrencyId = $id; } } if ($mainCurrencyId) { if ($cron == true || (strtotime($dateParam) == strtotime($today) || strtotime($dateParam) == strtotime($lastWorkingDay))) { $moduleModel->setCRMConversionRate($this->getMainCurrencyCode(), $exchangeRate); } $existingId = $moduleModel->getCurrencyRateId($mainCurrencyId, $datePublicationOfFile, $selectedBank); if ($existingId > 0) { $moduleModel->updateCurrencyRate($existingId, $exchange); } else { $moduleModel->addCurrencyRate($mainCurrencyId, $datePublicationOfFile, $exchange, $selectedBank); } } } }