Beispiel #1
0
 /**
  * <p>Функция обновляет параметры записи в таблице курсов валют на значения из массива <i>arFields</i>. Перед обновлением выполняется проверка, нет ли курса этой валюты на эту дату с другим ID. Если есть - то произойдет ошибка.</p> <p>В случае успешного обновления сбрасываются кеш <b>currency_rate</b> и тэгированный кеш <b>currency_id_КОД_ВАЛЮТЫ</b>.</p>
  *
  *
  *
  *
  * @param int $ID  Код записи.
  *
  *
  *
  * @param array $arFields  <p>Ассоциативный массив новых параметров курса валюты, ключами
  * которого являются названия параметров, а значениями - значения
  * параметров.</p> <p>Допустимые ключи:</p> <ul> <li>CURRENCY - код валюты
  * (обязательный);</li> <li>DATE_RATE - дата БЕЗ ВРЕМЕНИ, за которую
  * устанавливается курс (обязательный);</li> <li>RATE_CNT - количество
  * единиц валюты, которое участвует в задании курса валюты
  * (например, если 10 Датских крон стоят 48.7 рублей, то 10 - это
  * количество единиц);</li> <li>RATE - курс валюты.</li> </ul>
  *
  *
  *
  * @return bool <p>В случае успеха возвращает ID изменённого курса, иначе <i>false</i>.
  * Текст ошибки выводится через <code>$APPLICATION-&gt;GetException()</code>.</p> <br><br>
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/currency/developer/ccurrencyrates/ccurrencyrates__update.1f36666f.php
  * @author Bitrix
  */
 public static function Update($ID, $arFields)
 {
     global $DB;
     global $APPLICATION;
     global $stackCacheManager;
     $ID = (int) $ID;
     if ($ID <= 0) {
         return false;
     }
     $arMsg = array();
     foreach (GetModuleEvents("currency", "OnBeforeCurrencyRateUpdate", true) as $arEvent) {
         if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) {
             return false;
         }
     }
     if (!CCurrencyRates::CheckFields("UPDATE", $arFields, $ID)) {
         return false;
     }
     $db_result = $DB->Query("SELECT 'x' FROM b_catalog_currency_rate WHERE CURRENCY = '" . $DB->ForSql($arFields["CURRENCY"]) . "' " . "\tAND DATE_RATE = " . $DB->CharToDateFunction($DB->ForSql($arFields["DATE_RATE"]), "SHORT") . " AND ID<>" . $ID . " ");
     if ($db_result->Fetch()) {
         $arMsg[] = array("id" => "DATE_RATE", "text" => GetMessage("ERROR_ADD_REC2"));
         $e = new CAdminException($arMsg);
         $APPLICATION->ThrowException($e);
         return false;
     } else {
         $strUpdate = $DB->PrepareUpdate("b_catalog_currency_rate", $arFields);
         if (!empty($strUpdate)) {
             $strSql = "UPDATE b_catalog_currency_rate SET " . $strUpdate . " WHERE ID = " . $ID;
             $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             $stackCacheManager->Clear("currency_rate");
             CCurrency::updateCurrencyBaseRate($arFields['CURRENCY']);
             CCurrency::clearTagCache($arFields['CURRENCY']);
         }
         foreach (GetModuleEvents("currency", "OnCurrencyRateUpdate", true) as $arEvent) {
             ExecuteModuleEventEx($arEvent, array($ID, $arFields));
         }
     }
     return true;
 }
Beispiel #2
0
	/**
	 * <p>Функция обновляет параметры записи в таблице курсов валют на значения из массива <i>arFields</i>. Перед обновлением выполняется проверка, нет ли курса этой валюты на эту дату с другим ID. Если есть - то произойдет ошибка.</p> <p>В случае успешного обновления сбрасываются кеш <b>currency_rate</b> и тэгированный кеш <b>currency_id_КОД_ВАЛЮТЫ</b>.</p>
	 *
	 *
	 *
	 *
	 * @param int $ID  Код записи.
	 *
	 *
	 *
	 * @param array $arFields  <p>Ассоциативный массив новых параметров курса валюты, ключами
	 * которого являются названия параметров, а значениями - значения
	 * параметров.</p> <p>Допустимые ключи:</p> <ul> <li>CURRENCY - код валюты
	 * (обязательный);</li> <li>DATE_RATE - дата БЕЗ ВРЕМЕНИ, за которую
	 * устанавливается курс (обязательный);</li> <li>RATE_CNT - количество
	 * единиц валюты, которое участвует в задании курса валюты
	 * (например, если 10 Датских крон стоят 48.7 рублей, то 10 - это
	 * количество единиц);</li> <li>RATE - курс валюты.</li> </ul>
	 *
	 *
	 *
	 * @return bool <p>В случае успеха возвращает ID изменённого курса, иначе <i>false</i>.
	 * Текст ошибки выводится через <code>$APPLICATION-&gt;GetException()</code>.</p><br><br>
	 *
	 * @static
	 * @link http://dev.1c-bitrix.ru/api_help/currency/developer/ccurrencyrates/ccurrencyrates__update.1f36666f.php
	 * @author Bitrix
	 */
	public static function Update($ID, $arFields)
	{
		global $DB;
		global $CACHE_MANAGER;
		global $APPLICATION;
		global $stackCacheManager;

		$ID = intval($ID);
		$arMsg = array();

		if (!CCurrencyRates::CheckFields("UPDATE", $arFields, $ID))
			return false;

		$db_result = $DB->Query("SELECT 'x' ".
			"FROM b_catalog_currency_rate ".
			"WHERE CURRENCY = '".$DB->ForSql($arFields["CURRENCY"])."' ".
			"	AND DATE_RATE = ".$DB->CharToDateFunction($DB->ForSql($arFields["DATE_RATE"]), "SHORT")." ".
			"	AND ID<>".$ID." ");
		if ($db_result->Fetch())
		{
			$arMsg[] = array("id"=>"DATE_RATE", "text"=> GetMessage("ERROR_ADD_REC2"));
			$e = new CAdminException($arMsg);
			$APPLICATION->ThrowException($e);
			return false;
		}
		else
		{
			$strUpdate = $DB->PrepareUpdate("b_catalog_currency_rate", $arFields);
			if (!empty($strUpdate))
			{
				$strSql = "UPDATE b_catalog_currency_rate SET ".$strUpdate." WHERE ID = ".$ID;
				$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);

				$stackCacheManager->Clear("currency_rate");

				if (defined("BX_COMP_MANAGED_CACHE"))
					$CACHE_MANAGER->ClearByTag("currency_id_".$arFields["CURRENCY"]);
			}
		}
		return true;
	}