예제 #1
0
	function Update($ID, $arFields, $arOptions = array())
	{
		global $DB;

		$ID = intval($ID);

		if ($ID <= 0 || !CSaleDelivery::CheckFields("UPDATE", $arFields))
			return false;

		if (array_key_exists("LOGOTIP", $arFields) && is_array($arFields["LOGOTIP"]))
			$arFields["LOGOTIP"]["MODULE_ID"] = "sale";

		CFile::SaveForDB($arFields, "LOGOTIP", "sale/delivery/logotip");

		$strUpdate = $DB->PrepareUpdate("b_sale_delivery", $arFields);

		$strSql = "UPDATE b_sale_delivery SET ".$strUpdate." WHERE ID = ".$ID."";
		$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);

		if (is_set($arFields, "LOCATIONS"))
		{
			if(CSaleLocation::isLocationProMigrated())
			{
				Helper::resetLocationsForEntity($ID, $arFields['LOCATIONS'], self::CONN_ENTITY_NAME, !!$arOptions['EXPECT_LOCATION_CODES']);
			}
			else
			{
				$DB->Query("DELETE FROM b_sale_delivery2location WHERE DELIVERY_ID = ".$ID."");

				$countarFieldLoc = count($arFields["LOCATIONS"]);
				for ($i = 0; $i < $countarFieldLoc; $i++)
				{
					// change location id to location code
					$arFields["LOCATIONS"][$i]['LOCATION_CODE'] = $arFields["LOCATIONS"][$i]['LOCATION_ID'];
					unset($arFields["LOCATIONS"][$i]['LOCATION_ID']);
					
					$arInsert = $DB->PrepareInsert("b_sale_delivery2location", $arFields["LOCATIONS"][$i]);

					$strSql =
						"INSERT INTO b_sale_delivery2location(DELIVERY_ID, ".$arInsert[0].") ".
						"VALUES(".$ID.", ".$arInsert[1].")";
					$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
				}
			}
		}

		if (is_set($arFields, "PAY_SYSTEM"))
		{
			CSaleDelivery::UpdateDeliveryPay($ID, $arFields["PAY_SYSTEM"]);
		}

		return $ID;
	}
예제 #2
0
 /**
  * @param $arFields
  * @param array $arOptions
  * @return bool|int
  * @throws Exception
  * @deprecated
  */
 static function Add($arFields, $arOptions = array())
 {
     $fields = array_intersect_key($arFields, Bitrix\Sale\Delivery\Services\Table::getMap());
     if (array_key_exists("LOGOTIP", $arFields) && is_array($arFields["LOGOTIP"])) {
         $arFields["LOGOTIP"]["MODULE_ID"] = "sale";
         CFile::SaveForDB($arFields, "LOGOTIP", "sale/delivery/logotip");
         $fields["LOGOTIP"] = $arFields["LOGOTIP"];
     }
     $fields["CODE"] = isset($arFields["CODE"]) ? $arFields["CODE"] : strval(mktime());
     $fields["PARENT_ID"] = 0;
     $fields["CLASS_NAME"] = '\\Bitrix\\Sale\\Delivery\\Services\\Configurable';
     $fields["CONFIG"] = array("MAIN" => array("PRICE" => $arFields["PRICE"], "PERIOD" => array("FROM" => $arFields["PERIOD_FROM"], "TO" => $arFields["PERIOD_TO"], "TYPE" => $arFields["PERIOD_TYPE"])));
     $res = \Bitrix\Sale\Delivery\Services\Table::add($fields);
     if (!$res->isSuccess()) {
         return false;
     }
     $newId = $res->getId();
     $res = \Bitrix\Sale\Delivery\Restrictions\Table::add(array("DELIVERY_ID" => $newId, "CLASS_NAME" => '\\Bitrix\\Sale\\Delivery\\Restrictions\\BySite', "PARAMS" => array("SITE_ID" => array($arFields["LID"]))));
     if (intval($arFields["WEIGHT_FROM"]) > 0 || intval($arFields["WEIGHT_TO"]) > 0) {
         $res = \Bitrix\Sale\Delivery\Restrictions\Table::add(array("DELIVERY_ID" => $newId, "CLASS_NAME" => '\\Bitrix\\Sale\\Delivery\\Restrictions\\ByWeight', "PARAMS" => array("MIN_WEIGHT" => $arFields["WEIGHT_FROM"], "MAX_WEIGHT" => $arFields["WEIGHT_TO"])));
     }
     if (intval($arFields["ORDER_PRICE_FROM"]) > 0 || intval($arFields["ORDER_PRICE_TO"]) > 0) {
         $res = \Bitrix\Sale\Delivery\Restrictions\Table::add(array("DELIVERY_ID" => $newId, "CLASS_NAME" => '\\Bitrix\\Sale\\Delivery\\Restrictions\\ByPrice', "PARAMS" => array("MIN_PRICE" => $arFields["ORDER_PRICE_FROM"], "MAX_PRICE" => $arFields["ORDER_PRICE_TO"], "CURRENCY" => $arFields["ORDER_CURRENCY"])));
     }
     if (isset($arFields["LOCATIONS"]) && is_array($arFields["LOCATIONS"])) {
         Helper::resetLocationsForEntity($newId, $arFields['LOCATIONS'], self::CONN_ENTITY_NAME, !!$arOptions['EXPECT_LOCATION_CODES']);
     }
     if (isset($arFields["PAY_SYSTEM"])) {
         CSaleDelivery::UpdateDeliveryPay($newId, $arFields["PAY_SYSTEM"]);
     }
     if (isset($arFields["STORE"])) {
         $stores = unserialize($arFields["STORE"]);
         if ($stores) {
             \Bitrix\Sale\Delivery\ExtraServices\Manager::saveStores($newId, $stores);
         }
     }
     return $newId;
 }
예제 #3
0
	/**
	 * <p>Функция добавляет новый способ (службу) доставки с параметрами из массива arFields.</p>
	 *
	 *
	 *
	 *
	 * @param array $arFields  Ассоциативный массив параметров доставки, ключами в котором
	 * являются названия параметров доставки, а значениями - значения
	 * параметров. <br><br> Допустимые ключи: <br><ul> <li> <b>NAME</b> - название
	 * доставки (обязательное, задается на языке сайта, к которому
	 * привязана эта доставка);</li> <li> <b>LID</b> - код сайта, к которому
	 * привязана эта доставка;</li> <li> <b>PERIOD_FROM</b> - минимальный срок
	 * доставки;</li> <li> <b>PERIOD_TO</b> - максимальный срок доставки;</li> <li>
	 * <b>PERIOD_TYPE</b> - единица измерения срока: D - дни, H - часы, M - месяцы;</li> <li>
	 * <b>WEIGHT_FROM</b> - минимальный вес заказа, для которого возможна эта
	 * доставка (единица измерения должна быть едина на сайте);</li> <li>
	 * <b>WEIGHT_TO</b> - максимальный вес заказа, для которого возможна эта
	 * доставка (единица измерения должна быть едина на сайте);</li> <li>
	 * <b>ORDER_PRICE_FROM</b> - минимальная стоимость заказа, для которой возможна
	 * эта доставка;</li> <li> <b>ORDER_PRICE_TO</b> - максимальная стоимость заказа,
	 * для которой возможна эта доставка;</li> <li> <b>ORDER_CURRENCY</b> - валюта
	 * ограничений по стоимости;</li> <li> <b>ACTIVE</b> - флаг (Y/N) активности
	 * доставки;</li> <li> <b>PRICE</b> - стоимость доставки;</li> <li> <b>CURRENCY</b> - валюта
	 * стоимости доставки;</li> <li> <b>SORT</b> - индекс сортировки;</li> <li>
	 * <b>DESCRIPTION</b> - описание доставки;</li> <li> <b>LOCATIONS</b> - массив массивов
	 * вида: <pre class="syntax">array("LOCATION_ID" =&gt; "код местоположения или <br> группы
	 * местоположений",<br> "LOCATION_TYPE"=&gt;"L - для местоположения, <br> G - для
	 * группы")</pre> содержащий местоположения и группы местоположений,
	 * для которых работает эта доставка</li> </ul>
	 *
	 *
	 *
	 * @return int <p>Возвращает код добавленной записи или <i>false</i> в случае
	 * ошибки.</p><a name="examples"></a>
	 *
	 *
	 * <h4>Example</h4> 
	 * <pre>
	 * &lt;?<br>$arFields = array(<br>   "NAME" =&gt; "Доставка курьером",<br>   "LID" =&gt; "ru",<br>   "PERIOD_FROM" =&gt; 1,<br>   "PERIOD_TO" =&gt; 3,<br>   "PERIOD_TYPE" =&gt; "D",<br>   "WEIGHT_FROM" =&gt; 0,<br>   "WEIGHT_TO" =&gt; 2500,<br>   "ORDER_PRICE_FROM" =&gt; 0,<br>   "ORDER_PRICE_TO" =&gt; 10000,<br>   "ORDER_CURRENCY" =&gt; "RUB",<br>   "ACTIVE" =&gt; "Y",<br>   "PRICE" =&gt; 58,<br>   "CURRENCY" =&gt; "RUB",<br>   "SORT" =&gt; 100,<br>   "DESCRIPTION" =&gt; "Заказ будет доставлен Вам в течение 3 - 10 рабочих дней после передачи его в курьерскую службу.",<br>   "LOCATIONS" =&gt; array(<br>      array("LOCATION_ID"=&gt;1, "LOCATION_TYPE"=&gt;"L"),<br>      array("LOCATION_ID"=&gt;3, "LOCATION_TYPE"=&gt;"G")<br>      )<br>);<br><br>$ID = CSaleDelivery::Add($arFields);<br>if ($ID&lt;=0)<br>   echo "Ошибка добавления доставки";<br>?&gt;<br>
	 * </pre>
	 *
	 *
	 * @static
	 * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csaledelivery/csaledelivery__add.564001a4.php
	 * @author Bitrix
	 */
	public static function Add($arFields)
	{
		global $DB;

		if (!CSaleDelivery::CheckFields("ADD", $arFields))
			return false;

		if (array_key_exists("LOGOTIP", $arFields) && is_array($arFields["LOGOTIP"]))
			$arFields["LOGOTIP"]["MODULE_ID"] = "sale";

		CFile::SaveForDB($arFields, "LOGOTIP", "sale/delivery/logotip");

		$arInsert = $DB->PrepareInsert("b_sale_delivery", $arFields);

		$strSql =
			"INSERT INTO b_sale_delivery(".$arInsert[0].") ".
			"VALUES(".$arInsert[1].")";
		$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);

		$ID = IntVal($DB->LastID());

		foreach($arFields["LOCATIONS"] as $location)
		{
			$arInsert = $DB->PrepareInsert("b_sale_delivery2location", $location);

			$strSql =
				"INSERT INTO b_sale_delivery2location(DELIVERY_ID, ".$arInsert[0].") ".
				"VALUES(".$ID.", ".$arInsert[1].")";
			$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
		}

		if (is_set($arFields, "PAY_SYSTEM"))
		{
			CSaleDelivery::UpdateDeliveryPay($ID, $arFields["PAY_SYSTEM"]);
		}
		
		return $ID;
	}
예제 #4
0
	/**
	 * <p>Функция изменяет параметры доставки с кодом ID на новые значения из массива arFields</p>
	 *
	 *
	 *
	 *
	 * @param int $ID  Код доставки.
	 *
	 *
	 *
	 * @param array $arFields  Ассоциативный массив новых параметров доставки, ключами в
	 * котором являются названия параметров доставки, а значениями -
	 * значения параметров. <br> Допустимые ключи: <br><ul> <li> <b>NAME</b> -
	 * название доставки (обязательное, задается на языке сайта, к
	 * которому привязана эта доставка);</li> <li> <b>LID</b> - код сайта, к
	 * которому привязана эта доставка;</li> <li> <b>PERIOD_FROM</b> - минимальный
	 * срок доставки;</li> <li> <b>PERIOD_TO</b> - максимальный срок доставки;</li> <li>
	 * <b>PERIOD_TYPE</b> - единица измерения срока: D - дни, H - часы, M - месяцы;</li> <li>
	 * <b>WEIGHT_FROM</b> - минимальный вес заказа, для которого возможна эта
	 * доставка (единица измерения должна быть едина на сайте);</li> <li>
	 * <b>WEIGHT_TO</b> - максимальный вес заказа, для которого возможна эта
	 * доставка (единица измерения должна быть едина на сайте);</li> <li>
	 * <b>ORDER_PRICE_FROM</b> - минимальная стоимость заказа, для которой возможна
	 * эта доставка;</li> <li> <b>ORDER_PRICE_TO</b> - максимальная стоимость заказа,
	 * для которой возможна эта доставка;</li> <li> <b>ORDER_CURRENCY</b> - валюта
	 * ограничений по стоимости;</li> <li> <b>ACTIVE</b> - флаг (Y/N) активности
	 * доставки;</li> <li> <b>PRICE</b> - стоимость доставки;</li> <li> <b>CURRENCY</b> - валюта
	 * стоимости доставки;</li> <li> <b>SORT</b> - индекс сортировки;</li> <li>
	 * <b>DESCRIPTION</b> - описание доставки;</li> <li> <b>LOCATIONS</b> - массив массивов
	 * вида: <pre class="syntax">array("LOCATION_ID" =&gt; "код местоположения или <br> группы
	 * местоположений",<br> "LOCATION_TYPE"=&gt;"L - для местоположения, <br> G - для
	 * группы")</pre> содержащий местоположения и группы местоположений,
	 * для которых работает эта доставка</li> </ul>
	 *
	 *
	 *
	 * @return int <p>Возвращает код изменяемой записи или <i>false</i> в случае ошибки.</p><a
	 * name="examples"></a>
	 *
	 *
	 * <h4>Example</h4> 
	 * <pre>
	 * &lt;?<br>$arFields = array(<br>   "NAME" =&gt; "Доставка курьером",<br>   "LID" =&gt; "ru",<br>   "PERIOD_FROM" =&gt; 1,<br>   "PERIOD_TO" =&gt; 3,<br>   "PERIOD_TYPE" =&gt; "D",<br>   "WEIGHT_FROM" =&gt; 0,<br>   "WEIGHT_TO" =&gt; 2500,<br>   "ORDER_PRICE_FROM" =&gt; 0,<br>   "ORDER_PRICE_TO" =&gt; 10000,<br>   "ORDER_CURRENCY" =&gt; "RUB",<br>   "ACTIVE" =&gt; "Y",<br>   "PRICE" =&gt; 58,<br>   "CURRENCY" =&gt; "RUB",<br>   "SORT" =&gt; 100,<br>   "DESCRIPTION" =&gt; "Заказ будет доставлен Вам в течение 3 - 10 рабочих дней после передачи его в курьерскую службу.",<br>   "LOCATIONS" =&gt; array(<br>      array("LOCATION_ID"=&gt;1, "LOCATION_TYPE"=&gt;"L"),<br>      array("LOCATION_ID"=&gt;3, "LOCATION_TYPE"=&gt;"G")<br>      )<br>);<br><br>if (!CSaleDelivery::Update($ID, $arFields))<br>   echo "Ошибка изменения доставки";<br>?&gt;
	 * </pre>
	 *
	 *
	 * @static
	 * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csaledelivery/csaledelivery__update.dcec3766.php
	 * @author Bitrix
	 */
	public static function Update($ID, $arFields)
	{
		global $DB;

		$ID = intval($ID);
		
		if ($ID <= 0 || !CSaleDelivery::CheckFields("UPDATE", $arFields)) 
			return false;

		if (array_key_exists("LOGOTIP", $arFields) && is_array($arFields["LOGOTIP"]))
			$arFields["LOGOTIP"]["MODULE_ID"] = "sale";

		CFile::SaveForDB($arFields, "LOGOTIP", "sale/delivery/logotip");

		$strUpdate = $DB->PrepareUpdate("b_sale_delivery", $arFields);

		$strSql = "UPDATE b_sale_delivery SET ".$strUpdate." WHERE ID = ".$ID."";
		$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);

		if (is_set($arFields, "LOCATIONS"))
		{
			$DB->Query("DELETE FROM b_sale_delivery2location WHERE DELIVERY_ID = ".$ID."");

			$countarFieldLoc = count($arFields["LOCATIONS"]);
			for ($i = 0; $i < $countarFieldLoc; $i++)
			{
				$arInsert = $DB->PrepareInsert("b_sale_delivery2location", $arFields["LOCATIONS"][$i]);

				$strSql =
					"INSERT INTO b_sale_delivery2location(DELIVERY_ID, ".$arInsert[0].") ".
					"VALUES(".$ID.", ".$arInsert[1].")";
				$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
			}
		}

		if (is_set($arFields, "PAY_SYSTEM"))
		{
			CSaleDelivery::UpdateDeliveryPay($ID, $arFields["PAY_SYSTEM"]);
		}

		return $ID;
	}
        //add logotip
        $arPicture = array();
        if (array_key_exists("LOGOTIP", $_FILES) && $_FILES["LOGOTIP"]["error"] == 0) {
            $arPicture = $_FILES["LOGOTIP"];
        }
        $arPicture["del"] = trim($_POST["LOGOTIP_del"]);
        $arHandlersData["ALL"]["LOGOTIP"] = $arPicture;
        foreach ($arHandlersData as $SITE_ID => $arHandlerData) {
            CSaleDeliveryHandler::Set($SID, $arHandlerData, $SITE_ID == "ALL" ? false : $SITE_ID);
            if ($ex = $APPLICATION->GetException()) {
                $arErrorsList[] = $ex->GetString();
            }
        }
        //pay system for delivery
        if (is_set($_POST["PAY_SYSTEM"]) && is_array($_POST["PAY_SYSTEM"])) {
            CSaleDelivery::UpdateDeliveryPay($SID, $_POST["PAY_SYSTEM"]);
        }
        if (!is_array($arErrorsList) || count($arErrorsList) <= 0) {
            if (strlen($_REQUEST["apply"]) > 0) {
                LocalRedirect($APPLICATION->GetCurPage() . "?lang=" . LANG . "&SID=" . urlencode($SID));
            } else {
                LocalRedirect('/bitrix/admin/sale_delivery_handlers.php?lang=' . LANG);
            }
            die;
        }
    } else {
        $arErrorsList[] = GetMessage('SALE_DH_ERROR_UNRECOGNIZED');
    }
}
$rsDeliveryInfo = CSaleDeliveryHandler::GetBySID($SID);
if ($rsDeliveryInfo->SelectedRowsCount() <= 0) {
예제 #6
0
 function Add($arFields, $arOptions = array())
 {
     global $DB;
     if (!CSaleDelivery::CheckFields("ADD", $arFields)) {
         return false;
     }
     if (array_key_exists("LOGOTIP", $arFields) && is_array($arFields["LOGOTIP"])) {
         $arFields["LOGOTIP"]["MODULE_ID"] = "sale";
     }
     CFile::SaveForDB($arFields, "LOGOTIP", "sale/delivery/logotip");
     $arInsert = $DB->PrepareInsert("b_sale_delivery", $arFields);
     $strSql = "INSERT INTO b_sale_delivery(" . $arInsert[0] . ") " . "VALUES(" . $arInsert[1] . ")";
     $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     $ID = IntVal($DB->LastID());
     if (CSaleLocation::isLocationProMigrated()) {
         Helper::resetLocationsForEntity($ID, $arFields['LOCATIONS'], self::CONN_ENTITY_NAME, !!$arOptions['EXPECT_LOCATION_CODES']);
     } else {
         foreach ($arFields["LOCATIONS"] as $location) {
             // change location id to location code
             $location['LOCATION_CODE'] = $location['LOCATION_ID'];
             unset($location['LOCATION_ID']);
             $arInsert = $DB->PrepareInsert("b_sale_delivery2location", $location);
             $strSql = "INSERT INTO b_sale_delivery2location(DELIVERY_ID, " . $arInsert[0] . ") " . "VALUES(" . $ID . ", " . $arInsert[1] . ")";
             $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         }
     }
     if (is_set($arFields, "PAY_SYSTEM")) {
         CSaleDelivery::UpdateDeliveryPay($ID, $arFields["PAY_SYSTEM"]);
     }
     return $ID;
 }