コード例 #1
0
ファイル: component.php プロジェクト: ASDAFF/entask.ru
								$bErrorField = True;
						}
					}

					if ($bErrorField)
						$arResult["ERROR"][] = GetMessage("SOA_ERROR_REQUIRE")." \"".$arOrderProps["NAME"]."\"";

				//}//end isset
			}//end while

			if(IntVal($arUserResult["DELIVERY_LOCATION"]) > 0)
			{
				if (strlen($arUserResult["DELIVERY_ID"]) > 0 && strpos($arUserResult["DELIVERY_ID"], ":") !== false)
				{
					$delivery = explode(":", $arUserResult["DELIVERY_ID"]);
					$obDeliveryHandler = CSaleDeliveryHandler::GetBySID($delivery[0]);
					$arResult["DELIVERY_SUM"] = $obDeliveryHandler->Fetch();
					$arResult["DELIVERY_PROFILE_SUM"] = $delivery[1];

					$arOrderTmpDel = array(
						"PRICE" => $arResult["ORDER_PRICE"],
						"WEIGHT" => $arResult["ORDER_WEIGHT"],
						"LOCATION_FROM" => COption::GetOptionInt('sale', 'location'),
						"LOCATION_TO" => $arUserResult["DELIVERY_LOCATION"],
						"LOCATION_ZIP" => $arUserResult["DELIVERY_LOCATION_ZIP"],

					);

					$arDeliveryPrice = CSaleDeliveryHandler::CalculateFull($delivery[0], $delivery[1], $arOrderTmpDel, $arResult["BASE_LANG_CURRENCY"]);

					if ($arDeliveryPrice["RESULT"] == "ERROR")
コード例 #2
0
ファイル: component.php プロジェクト: mrdeadmouse/u136006
if (is_set($arParams["START_VALUE"])) {
    $arParams["START_VALUE"] = doubleval($arParams["START_VALUE"]);
}
if ($arParams["AJAX_CALL"] == "Y") {
    if ($arParams['NO_AJAX'] == 'Y') {
        $result = CSaleDeliveryHandler::CalculateFull($arParams["DELIVERY"], $arParams["PROFILE"], array("PRICE" => $arParams["ORDER_PRICE"], "WEIGHT" => $arParams["ORDER_WEIGHT"], "LOCATION_FROM" => $arParams["LOCATION_FROM"], "LOCATION_TO" => $arParams["LOCATION_TO"], "LOCATION_ZIP" => $arParams['LOCATION_ZIP'], "ITEMS" => $arParams["ITEMS"], "EXTRA_PARAMS" => $arParams["EXTRA_PARAMS"]), $arParams["CURRENCY"]);
        if (is_array($result)) {
            if ($result["RESULT"] == "OK" && CModule::IncludeModule('currency')) {
                $result["VALUE_FORMATTED"] = CurrencyFormat($result["VALUE"], $arParams["CURRENCY"]);
            } elseif ($result["RESULT"] == "NEXT_STEP" && strlen($result["TEMP"]) > 0) {
                $result["TEMP"] = CUtil::JSEscape($result["TEMP"]);
            }
            $arResult["RESULT"] = $result;
        }
    } else {
        $dbHandler = CSaleDeliveryHandler::GetBySID($arParams["DELIVERY"]);
        if ($arHandler = $dbHandler->Fetch()) {
            foreach ($arHandler["PROFILES"] as $profile_id => $arProfile) {
                if ($profile_id != $arParams["PROFILE"]) {
                    unset($arHandler["PROFILES"][$profile_id]);
                }
            }
            $result = CSaleDeliveryHandler::Calculate($arParams["STEP"], $arParams["DELIVERY"], $arParams["PROFILE"], array("PRICE" => $arParams["ORDER_PRICE"], "WEIGHT" => $arParams["ORDER_WEIGHT"], "LOCATION_FROM" => $arParams["LOCATION_FROM"], "LOCATION_TO" => $arParams["LOCATION_TO"], "LOCATION_ZIP" => $arParams['LOCATION_ZIP'], "ITEMS" => $arParams["ITEMS"], "EXTRA_PARAMS" => $arParams["EXTRA_PARAMS"]), $arParams["CURRENCY"], $arParams["~TEMP"]);
            if (is_array($result)) {
                if ($result["RESULT"] == "OK" && CModule::IncludeModule('currency')) {
                    $result["VALUE_FORMATTED"] = CurrencyFormat($result["VALUE"], $arParams["CURRENCY"]);
                } elseif ($result["RESULT"] == "NEXT_STEP" && strlen($result["TEMP"]) > 0) {
                    $result["TEMP"] = CUtil::JSEscape($result["TEMP"]);
                }
                $arResult["RESULT"] = $result;
            }
コード例 #3
0
ファイル: order.php プロジェクト: ASDAFF/entask.ru
	function CheckFields($ACTION, &$arFields, $ID = 0)
	{
		global $USER_FIELD_MANAGER, $DB;

		if (is_set($arFields, "SITE_ID") && strlen($arFields["SITE_ID"]) > 0)
			$arFields["LID"] = $arFields["SITE_ID"];

		if ((is_set($arFields, "LID") || $ACTION=="ADD") && strlen($arFields["LID"])<=0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGO_EMPTY_SITE"), "EMPTY_SITE_ID");
			return false;
		}
		if ((is_set($arFields, "PERSON_TYPE_ID") || $ACTION=="ADD") && IntVal($arFields["PERSON_TYPE_ID"])<=0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGO_EMPTY_PERS_TYPE"), "EMPTY_PERSON_TYPE_ID");
			return false;
		}
		if ((is_set($arFields, "USER_ID") || $ACTION=="ADD") && IntVal($arFields["USER_ID"])<=0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGO_EMPTY_USER_ID"), "EMPTY_USER_ID");
			return false;
		}

		if (is_set($arFields, "PAYED") && $arFields["PAYED"]!="Y")
			$arFields["PAYED"]="N";
		if (is_set($arFields, "CANCELED") && $arFields["CANCELED"]!="Y")
			$arFields["CANCELED"]="N";
		if (is_set($arFields, "STATUS_ID") && strlen($arFields["STATUS_ID"])<=0)
			$arFields["STATUS_ID"]="N";
		if (is_set($arFields, "ALLOW_DELIVERY") && $arFields["ALLOW_DELIVERY"]!="Y")
			$arFields["ALLOW_DELIVERY"]="N";
		if (is_set($arFields, "EXTERNAL_ORDER") && $arFields["EXTERNAL_ORDER"]!="Y")
			$arFields["EXTERNAL_ORDER"]="N";

		if (is_set($arFields, "PRICE") || $ACTION=="ADD")
		{
			$arFields["PRICE"] = str_replace(",", ".", $arFields["PRICE"]);
			$arFields["PRICE"] = DoubleVal($arFields["PRICE"]);
		}
		if (is_set($arFields, "PRICE_DELIVERY") || $ACTION=="ADD")
		{
			$arFields["PRICE_DELIVERY"] = str_replace(",", ".", $arFields["PRICE_DELIVERY"]);
			$arFields["PRICE_DELIVERY"] = DoubleVal($arFields["PRICE_DELIVERY"]);
		}
		if (is_set($arFields, "SUM_PAID") || $ACTION=="ADD")
		{
			$arFields["SUM_PAID"] = str_replace(",", ".", $arFields["SUM_PAID"]);
			$arFields["SUM_PAID"] = DoubleVal($arFields["SUM_PAID"]);
		}
		if (is_set($arFields, "DISCOUNT_VALUE") || $ACTION=="ADD")
		{
			$arFields["DISCOUNT_VALUE"] = str_replace(",", ".", $arFields["DISCOUNT_VALUE"]);
			$arFields["DISCOUNT_VALUE"] = DoubleVal($arFields["DISCOUNT_VALUE"]);
		}
		if (is_set($arFields, "TAX_VALUE") || $ACTION=="ADD")
		{
			$arFields["TAX_VALUE"] = str_replace(",", ".", $arFields["TAX_VALUE"]);
			$arFields["TAX_VALUE"] = DoubleVal($arFields["TAX_VALUE"]);
		}

		if(!is_set($arFields, "LOCKED_BY") && (!is_set($arFields, "UPDATED_1C") || (is_set($arFields, "UPDATED_1C") && $arFields["UPDATED_1C"] != "Y")))
		{
			$arFields["UPDATED_1C"] = "N";
			$arFields["~VERSION"] = "VERSION+0+1";
		}

		if ((is_set($arFields, "CURRENCY") || $ACTION=="ADD") && strlen($arFields["CURRENCY"])<=0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGO_EMPTY_CURRENCY"), "EMPTY_CURRENCY");
			return false;
		}

		if (is_set($arFields, "CURRENCY"))
		{
			if (!($arCurrency = CCurrency::GetByID($arFields["CURRENCY"])))
			{
				$GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["CURRENCY"], GetMessage("SKGO_WRONG_CURRENCY")), "ERROR_NO_CURRENCY");
				return false;
			}
		}

		if (is_set($arFields, "LID"))
		{
			$dbSite = CSite::GetByID($arFields["LID"]);
			if (!$dbSite->Fetch())
			{
				$GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["LID"], GetMessage("SKGO_WRONG_SITE")), "ERROR_NO_SITE");
				return false;
			}
		}

		if (is_set($arFields, "USER_ID"))
		{
			$dbUser = CUser::GetByID($arFields["USER_ID"]);
			if (!$dbUser->Fetch())
			{
				$GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["USER_ID"], GetMessage("SKGO_WRONG_USER")), "ERROR_NO_USER_ID");
				return false;
			}
		}

		if (is_set($arFields, "PERSON_TYPE_ID"))
		{
			if (!($arPersonType = CSalePersonType::GetByID($arFields["PERSON_TYPE_ID"])))
			{
				$GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["PERSON_TYPE_ID"], GetMessage("SKGO_WRONG_PERSON_TYPE")), "ERROR_NO_PERSON_TYPE");
				return false;
			}
		}

		if (is_set($arFields, "PAY_SYSTEM_ID") && IntVal($arFields["PAY_SYSTEM_ID"]) > 0)
		{
			if (!($arPaySystem = CSalePaySystem::GetByID(IntVal($arFields["PAY_SYSTEM_ID"]))))
			{
				$GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["PAY_SYSTEM_ID"], GetMessage("SKGO_WRONG_PS")), "ERROR_NO_PAY_SYSTEM");
				return false;
			}
		}

		if (is_set($arFields, "DELIVERY_ID") && (
				strpos($arFields["DELIVERY_ID"], ":") !== false
				||
				IntVal($arFields["DELIVERY_ID"]) > 0
			)
		)
		{
			if (strpos($arFields["DELIVERY_ID"], ":") !== false)
			{
				$arId = explode(":", $arFields["DELIVERY_ID"]);
				$obDelivery = new CSaleDeliveryHandler();
				if ($arDelivery = $obDelivery->GetBySID($arId[0]))
				{
					if ($arDelivery = $arDelivery->Fetch())
					{
						if (!is_set($arDelivery["PROFILES"], $arId[1]))
						{
							$GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["DELIVERY_ID"], GetMessage("SKGO_WRONG_DELIVERY")), "ERROR_NO_DELIVERY");
							return false;
						}
					}
				}
				else
				{
					$GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["DELIVERY_ID"], GetMessage("SKGO_WRONG_DELIVERY")), "ERROR_NO_DELIVERY");
					return false;
				}
			}
			else
			{
				if (!($arDelivery = CSaleDelivery::GetByID(IntVal($arFields["DELIVERY_ID"]))))
				{
					$GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["DELIVERY_ID"], GetMessage("SKGO_WRONG_DELIVERY")), "ERROR_NO_DELIVERY");
					return false;
				}
			}
		}

		if (is_set($arFields, "STATUS_ID"))
		{
			if (!($arStatus = CSaleStatus::GetByID($arFields["STATUS_ID"])))
			{
				$GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["STATUS_ID"], GetMessage("SKGO_WRONG_STATUS")), "ERROR_NO_STATUS_ID");
				return false;
			}
		}

		if (is_set($arFields, "ACCOUNT_NUMBER") && $ACTION=="UPDATE")
		{
			if (strlen($arFields["ACCOUNT_NUMBER"]) <= 0)
			{
				$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGO_EMPTY_ACCOUNT_NUMBER"), "EMPTY_ACCOUNT_NUMBER");
				return false;
			}
			else
			{
				$dbres = $DB->Query("SELECT ID, ACCOUNT_NUMBER FROM b_sale_order WHERE ACCOUNT_NUMBER = '".$DB->ForSql($arFields["ACCOUNT_NUMBER"])."'", true);
				if ($arRes = $dbres->GetNext())
				{
					if (is_array($arRes) && $arRes["ID"] != $ID)
					{
						$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGO_EXISTING_ACCOUNT_NUMBER"), "EXISTING_ACCOUNT_NUMBER");
						return false;
					}
				}
			}
		}

		if($ACTION == "ADD")
			$arFields["VERSION"] = 1;

		if (!$USER_FIELD_MANAGER->CheckFields("ORDER", $ID, $arFields))
		{
			return false;
		}

		return True;
	}
コード例 #4
0
ファイル: order.php プロジェクト: akniyev/arteva.ru
	$row->AddField("PAY_SYSTEM", $fieldValue);

	$fieldValue = "";
	if (in_array("DELIVERY", $arVisibleColumns))
	{
		if (strpos($arOrder["DELIVERY_ID"], ":") !== false)
		{
			if (!isset($obDelivery))
			{
				$obDelivery = new CSaleDeliveryHandler();
				$obDelivery->GetList(array("SITE_ID" => "ASC"), array("SITE_ID" => "ALL", "ACTIVE" => "ALL"));
			}

			$arId = explode(":", $arOrder["DELIVERY_ID"]);

			$rsDelivery = CSaleDeliveryHandler::GetBySID($arId[0]);
			$arDelivery = $rsDelivery->Fetch();

			$fieldValue .= "[";
			if ($saleModulePermissions >= "W")
				$fieldValue .= '<a href="/bitrix/admin/sale_delivery_handler_edit.php?SID='.$arId[0].'&lang='.LANGUAGE_ID.'">';
			$fieldValue .= $arOrder["DELIVERY_ID"];
			if ($saleModulePermissions >= "W")
				$fieldValue .= "</a>";

			$fieldValue .= "] ".htmlspecialcharsEx($arDelivery["NAME"]);
			$fieldValue .= " (".htmlspecialcharsEx($arDelivery["PROFILES"][$arId[1]]["TITLE"]).")";
		}
		elseif (IntVal($arOrder["DELIVERY_ID"]) > 0)
		{
			if (!isset($LOCAL_DELIVERY_CACHE[$arOrder["DELIVERY_ID"]])
コード例 #5
0
ファイル: index.php プロジェクト: ASDAFF/DDelivery
 public function DoInstall()
 {
     if ($GLOBALS['APPLICATION']->GetGroupRight('main') < 'W') {
         return;
     }
     if (is_array($this->NEED_MODULES) && !empty($this->NEED_MODULES)) {
         foreach ($this->NEED_MODULES as $module) {
             if (!IsModuleInstalled($module)) {
                 $this->ShowForm('ERROR', $this->GetMessage('DDELIVERY_NEED_MODULES', array('#MODULE#' => $module, '#NEED#' => $this->NEED_MODULES)));
                 return;
             }
             include $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $module . '/install/version.php';
             if (!CheckVersion($arModuleVersion['VERSION'], $this->NEED_MAIN_VERSION)) {
                 $this->ShowForm('ERROR', $this->GetMessage('DDELIVERY_NEED_MODULES', array('#MODULE#' => $module, '#NEED#' => $this->NEED_MAIN_VERSION)));
                 return;
             }
         }
     }
     if (!function_exists('curl_init')) {
         $this->ShowForm('ERROR', $this->GetMessage('DDELIVERY_NEED_MODULES_CURL', array('#MODULE#' => 'cURL')));
         return;
     }
     if (CheckVersion(SM_VERSION, $this->NEED_MAIN_VERSION)) {
         RegisterModuleDependences('sale', 'onSaleDeliveryHandlersBuildList', self::MODULE_ID, 'DDeliveryEvents', 'Init');
         RegisterModuleDependences('sale', 'OnOrderNewSendEmail', self::MODULE_ID, 'DDeliveryEvents', 'OnOrderNewSendEmail');
         RegisterModuleDependences('sale', 'OnSaleBeforeStatusOrder', self::MODULE_ID, 'DDeliveryEvents', 'OnSaleBeforeStatusOrder');
         if (!symlink(__DIR__ . "/components/ddelivery", $_SERVER["DOCUMENT_ROOT"] . "/bitrix/components/ddelivery")) {
             CopyDirFiles(__DIR__ . "/components", $_SERVER["DOCUMENT_ROOT"] . "/bitrix/components", true, true);
         }
         RegisterModule(self::MODULE_ID);
         CModule::IncludeModule("sale");
         $ddeliveryConfig = CSaleDeliveryHandler::GetBySID('ddelivery')->Fetch();
         $ddeliveryConfig['ACTIVE'] = 'N';
         CSaleDeliveryHandler::Set('ddelivery', $ddeliveryConfig, false);
         include_once __DIR__ . '/../include.php';
         include_once __DIR__ . '/../DDeliveryEvents.php';
         include_once __DIR__ . '/../DDeliveryShop.php';
         // Добавляем свойства в бд
         CSaleOrderProps::add(array('PERSON_TYPE_ID' => '1', 'NAME' => 'DDelivery LocalID', 'TYPE' => 'TEXT', 'REQUIED' => 'N', 'DEFAULT_VALUE' => '', 'SORT' => '10000', 'USER_PROPS' => 'N', 'IS_LOCATION' => 'N', 'PROPS_GROUP_ID' => '2', 'IS_EMAIL' => 'N', 'IS_PROFILE_NAME' => 'N', 'IS_PAYER' => 'N', 'IS_LOCATION4TAX' => 'N', 'IS_ZIP' => 'N', 'CODE' => 'DDELIVERY_ID', 'IS_FILTERED' => 'Y', 'ACTIVE' => 'Y', 'UTIL' => 'Y', 'INPUT_FIELD_LOCATION' => '0', 'MULTIPLE' => 'N'));
         $IntegratorShop = new DDeliveryShop($ddeliveryConfig['CONFIG']['CONFIG'], array(), array());
         $ddeliveryUI = new DDeliveryUI($IntegratorShop, true);
         $ddeliveryUI->createTables();
         $this->ShowForm('OK', GetMessage('MOD_INST_OK'), true);
     } else {
         $this->ShowForm('ERROR', $this->GetMessage('DDELIVERY_NEED_RIGHT_VER', array('#NEED#' => $this->NEED_MAIN_VERSION)));
     }
 }
コード例 #6
0
ファイル: order_change.php プロジェクト: rasuldev/torino
 public static function FormatOrderDeliverySystemChanged($arData)
 {
     $info = GetMessage("SOC_ORDER_DELIVERY_SYSTEM_CHANGED_INFO");
     foreach ($arData as $param => $value) {
         if ($param == "DELIVERY_ID") {
             if (strpos($value, ":") !== false) {
                 $arId = explode(":", $value);
                 $dbDelivery = CSaleDeliveryHandler::GetBySID($arId[0]);
                 $arDelivery = $dbDelivery->Fetch();
                 $value = "\"" . htmlspecialcharsEx($arDelivery["NAME"]) . "\"";
             } elseif (intval($value) > 0) {
                 $arDelivery = CSaleDelivery::GetByID($value);
                 $value = "\"" . $arDelivery["NAME"] . "\"";
             }
         }
         $info = str_replace("#" . $param . "#", $value, $info);
     }
     return array("NAME" => GetMessage("SOC_ORDER_DELIVERY_SYSTEM_CHANGED"), "INFO" => $info);
 }
コード例 #7
0
                CSaleDelivery2PaySystem::UpdateDelivery($SID, array("PAYSYSTEM_ID" => $arPSIds, "DELIVERY_PROFILE_ID" => $profileName));
            }
        }
        if (strlen($errorsList) <= 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 {
        $errorsList .= GetMessage('SALE_DH_ERROR_UNRECOGNIZED') . "<br />";
    }
}
$rsDeliveryInfo = CSaleDeliveryHandler::GetBySID($SID);
if ($rsDeliveryInfo->SelectedRowsCount() <= 0) {
    echo 'error';
    die;
}
while ($arHandler = $rsDeliveryInfo->Fetch()) {
    $bInstall = $arHandler["INSTALLED"] == "N";
    unset($arHandler["DBGETSETTINGS"]);
    unset($arHandler["DBSETSETTINGS"]);
    unset($arHandler["GETCONFIG"]);
    unset($arHandler["COMPABILITY"]);
    unset($arHandler["CALCULATOR"]);
    if (strlen($arHandler["LID"]) > 0) {
        $arDeliveryInfo[$arHandler["LID"]] = $arHandler;
    } else {
        $arDeliveryInfo = array("ALL" => $arHandler);
コード例 #8
0
ファイル: order_detail.php プロジェクト: akniyev/arteva.ru
			$tabControl->AddSection("order_delivery", GetMessage("P_ORDER_DELIVERY_TITLE"));

				$tabControl->BeginCustomField("ORDER_DELIVERY", GetMessage("P_ORDER_DELIVERY"));
					?>
					<tr>
						<td width="40%"><?echo $tabControl->GetCustomLabelHTML()?>:</td>
						<td>
							<span id="allow_delivery_name">
								<?
								$arDeliveryName = array();
								$arDeliveryData = array();
								if (strpos($arOrder["DELIVERY_ID"], ":") !== false)
								{
									$arDeliveryName = explode(":", $arOrder["DELIVERY_ID"]);

									$dbDelivery = CSaleDeliveryHandler::GetBySID($arDeliveryName[0]);
									$arDeliveryData = $dbDelivery->Fetch();

									echo "[".$arDeliveryData["SID"]."] ".htmlspecialcharsEx($arDeliveryData["NAME"])." (".$arOrder["LID"].")";
								}
								elseif (intval($arOrder["DELIVERY_ID"]) > 0)
								{
									$arDeliveryData = CSaleDelivery::GetByID($arOrder["DELIVERY_ID"]);
									echo htmlspecialcharsbx($arDeliveryData["NAME"]);
								}
								else
									echo GetMessage("SOD_NONE");
								?>
							</span>
						</td>
					</tr>
コード例 #9
0
ファイル: DDeliveryEvents.php プロジェクト: ASDAFF/DDelivery
 /**
  *
  * @param $orderId
  * @param $statusID
  * @return bool
  * @throws Bitrix\Main\DB\Exception
  */
 static function OnSaleBeforeStatusOrder($orderId, $statusID)
 {
     $orderDeliveryTableData = OrderDeliveryTable::getList(array('filter' => array('ORDER_ID' => $orderId)))->fetch();
     if (empty($orderDeliveryTableData)) {
         return true;
     }
     $property = unserialize($orderDeliveryTableData['PARAMS']);
     if (empty($property) || empty($property['DD_LOCAL_ID'])) {
         $property = CSaleOrderPropsValue::GetList(array(), array("ORDER_ID" => $orderId, 'CODE' => 'DDELIVERY_ID'))->Fetch();
         if (!$property) {
             return true;
         } else {
             $ddLocalId = $property['VALUE'];
         }
     } else {
         $ddLocalId = $property['DD_LOCAL_ID'];
     }
     global $APPLICATION;
     try {
         $DDConfig = CSaleDeliveryHandler::GetBySID('ddelivery')->Fetch();
         if ($statusID != $DDConfig['CONFIG']['CONFIG']['SEND_STATUS']['VALUE']) {
             return true;
         }
         $cmsOrder = CSaleOrder::GetByID($orderId);
         if ($cmsOrder['DELIVERY_ID'] != 'ddelivery:all') {
             return true;
         }
         $IntegratorShop = self::getShopObject($DDConfig['CONFIG']['CONFIG'], array(), array());
         $ddeliveryUI = new DdeliveryUI($IntegratorShop, true);
         $order = $ddeliveryUI->initOrder($ddLocalId);
         $bxOrder = CSaleBasket::GetList(array(), array('ORDER_ID' => $orderId), false, false, array('PRODUCT_ID', 'PRICE', 'QUANTITY', 'NAME'));
         $bxItems = array();
         while ($bxItem = $bxOrder->Fetch()) {
             $bxItems[] = $bxItem;
         }
         $order->setProducts($IntegratorShop->itemListToDDCart($bxItems));
         $point = $order->getPoint();
         $newPoint = false;
         if ($order->type == DDeliverySDK::TYPE_SELF) {
             $newPoint = $ddeliveryUI->calculateSelfPointPrice($order, $point['_id']);
             $newPoint = isset($newPoint[0]) ? $newPoint[0] : false;
         } else {
             if ($order->type == DDeliverySDK::TYPE_COURIER) {
                 $resultPoints = $ddeliveryUI->calculateCourierPrices($order);
                 foreach ($resultPoints as $resultPoint) {
                     if ($resultPoint['delivery_company'] == $point['delivery_company']) {
                         $newPoint = $resultPoint;
                     }
                 }
             }
         }
         if ($newPoint) {
             $order->setPoint($newPoint);
         } else {
             $APPLICATION->ThrowException(GetMessage('DDELIVERY_SAVE_STATUS_ERROR_ORDER_NOT_LOAD'));
             return false;
         }
         if (empty($order) || $order->ddeliveryID) {
             $APPLICATION->ThrowException(GetMessage('DDELIVERY_SAVE_STATUS_ERROR_ORDER_NOT_LOAD'));
             return false;
         }
         $order->localStatus = $statusID;
         /**
          * @var \DDelivery\Order\DDeliveryOrder $order
          */
         $order->shopRefnum = $orderId;
         $order->paymentVariant = $cmsOrder['PAY_SYSTEM_ID'];
         $ddeliveryOrderID = $ddeliveryUI->sendOrderToDD($order);
         $ddeliveryUI->saveFullOrder($order);
         if (!$ddeliveryOrderID) {
             $APPLICATION->ThrowException(GetMessage('DDELIVERY_SAVE_STATUS_ERROR_NOT_SAVE'));
             return false;
         }
         CSaleOrder::Update($orderId, array("TRACKING_NUMBER" => $ddeliveryOrderID));
         return true;
     } catch (\DDelivery\DDeliveryException $e) {
         $APPLICATION->ThrowException(GetMessage('DDELIVERY_SAVE_STATUS_ERROR_EXCEPTION', array('%1' => $APPLICATION->ConvertCharset($e->getMessage(), 'UTF-8', SITE_CHARSET))));
         return false;
     }
 }
コード例 #10
0
    function OnOrderNewSendEmailHandler($orderID, &$eventName, &$arFields)
    {
        // Поменять вид списка товаров
        if (!CModule::IncludeModule('sale') || !CModule::IncludeModule('catalog')) return;
        //global $pre_defined_variables, $DB;

        $arOrder = CSaleOrder::GetById($orderID);

        $dbBasketItems = CSaleBasket::GetList(array("NAME" => "ASC"), array("ORDER_ID" => $orderID), false, false, array("ID", "NAME", "QUANTITY", "PRICE", "CURRENCY", "DETAIL_PAGE_URL"));
        $strOrderList = "";
        $strOrderList .= '<table width="100%">';
        $strOrderList .= '<thead><tr>';
        foreach(array("Название","Количество","Цена","Сумма") as $th) $strOrderList .= '<th>'.$th.'</th>';
        $strOrderList .= '</tr></thead>';

        $strOrderList .= '<tbody>';

        $price_total = 0;
        $arBasketItems = array();
        while ($arBasketItem = $dbBasketItems->Fetch())
        {
            $dbProp = CSaleBasket::GetPropsList(Array("SORT" => "ASC", "NAME" => "ASC"), Array("BASKET_ID" => $arBasketItem["ID"], "!CODE" => array("CATALOG.XML_ID", "PRODUCT.XML_ID")));
            while($arProp = $dbProp -> GetNext())
                $arBasketItem["PROPS"][] = $arProp;
            $arBasketItems[] = $arBasketItem;

            $strOrderList .= '<tr>';
            $strOrderList .= '<td>';
            $strOrderList .= '<a href="http://www.zakrepi.ru'.$arBasketItem["DETAIL_PAGE_URL"].'" target="_blank">'.$arBasketItem["NAME"].'</a>';
            // Из свойств товара заказа показать лишь стандартные и название филиала
            foreach($arBasketItem['PROPS'] as &$arProp)
            {
                $strOrderList .= '<div style="font-size:80%">'.$arProp['NAME'].': '.$arProp['VALUE'].'</div>';
            }
            $strOrderList .= '</td>';
            $strOrderList .= '<td style="text-align: center;">'.$arBasketItem["QUANTITY"].'&nbsp;шт.</td>';
            $strOrderList .= '<td style="text-align: center;">'.SaleFormatCurrency($arBasketItem["PRICE"], $arBasketItem["CURRENCY"]).'</td>';
            $strOrderList .= '<td style="text-align: center;">'.SaleFormatCurrency($arBasketItem["PRICE"] * $arBasketItem["QUANTITY"], $arBasketItem["CURRENCY"]).'</td>';
            $strOrderList .= '</tr>';
            $price_total += $arBasketItem["PRICE"] * $arBasketItem["QUANTITY"];
            $price_currency = $arBasketItem["CURRENCY"];
        }
        $price_total_formatted = $price_currency? SaleFormatCurrency($price_total, $price_currency): '0';
        $strOrderList .= '<tr><td colspan="3" style="text-align:right;">Общая стоимость:&nbsp;</td><td style="text-align: center;">'.$price_total_formatted.'</td></tr>';


        //Получаем стоимость доставки цену и общую сумму вместе с ценой доставки

        // Указываем способ доставки
        // $arOrder['PRICE'] - Общая стоимость
        $arFields['DELIVERY'] = '';
        if (strlen($arOrder['DELIVERY_ID']))
        {

            if (is_string($arOrder['DELIVERY_ID']))
            {

                $sid = explode(":", $arOrder['DELIVERY_ID']);
                $dbDeliv = CSaleDeliveryHandler::GetBySID($sid[0]);
                $arDeliv = $dbDeliv->GetNext();
                $arFields['DELIVERY'] = '<p><b>Способ доставки:</b> '.$arDeliv['NAME'].'</p>';
                $price_total += $arOrder['PRICE_DELIVERY'];

                $strOrderList .= '<tr><td colspan="3" style="text-align:right;">Стоимость доставки:&nbsp;</td><td style="text-align: center;">'.SaleFormatCurrency($arOrder['PRICE_DELIVERY'], $price_currency).'</td></tr>';

                $strOrderList .= '<tr><td colspan="3" style="text-align:right;">Итого:&nbsp;</td><td style="text-align: center;">'.SaleFormatCurrency($price_total, $price_currency).'</td></tr>';

                $arFields['ALL_PRICE'] = '<p><b>Итого: </b>'.SaleFormatCurrency($price_total, $price_currency).'</p>';
            }
            else{
                $arDelivery = CSaleDelivery::GetById($arOrder['DELIVERY_ID']);
                if ($arDelivery)
                {
                    $value = $arDelivery['NAME'];
                    $value_name = $arDelivery['NAME'];
                    $value_price = '';
                    if ($arDelivery['PRICE']<=0)
                    {
                        $value .= ', Бесплатно';
                        $value_price = 'Бесплатно';
                    }
                    else
                    {
                        $value .= ', '.SaleFormatCurrency($arDelivery['PRICE'], $arDelivery['CURRENCY']);

                        $value_price = SaleFormatCurrency($arDelivery['PRICE'], $arDelivery['CURRENCY']);

                        $strOrderList .= '<tr><td colspan="3" style="text-align:right;">Стоимость доставки:&nbsp;</td><td style="text-align: center;">'.$value_price.'</td></tr>';
                    }
                    $arFields['DELIVERY'] = '<p><b>Способ доставки:</b> '.$value_name.'</p>';
                    $price_total += $arDelivery['PRICE'];

                    $strOrderList .= '<tr><td colspan="3" style="text-align:right;">Итого:&nbsp;</td><td style="text-align: center;">'.SaleFormatCurrency($price_total, $price_currency).'</td></tr>';

                    $arFields['ALL_PRICE'] = '<p><b>Итого: </b>'.SaleFormatCurrency($price_total, $price_currency).'</p>';
                }
            }
        }


        $strOrderList .= '</tbody>';
        $strOrderList .= '</table>';
        $arFields["ORDER_LIST_NEW"] = $strOrderList;



        // Указываем свойства заказа - Начало
        /* $arProps = array();
         $dbProps = CSaleOrderPropsValue::GetOrderProps($orderID);
         while ($arProp = $dbProps->Fetch())
         {
             $arProps[$arProp['CODE']] = $arProp;

             $val = $arProp['VALUE'];
             if ($arProp['TYPE']=="LOCATION") {
                 $v = CSaleLocation::GetByID($val);
                 $val = $v['CITY_NAME_LANG'];
             } elseif (in_array($arProp['TYPE'], array("SELECT", "MULTISELECT", "RADIO"))) {
                 $v = CSaleOrderPropsVariant::GetByValue($arProp['ORDER_PROPS_ID'], $val);
                 $val = $v['NAME'];
             }

             $arProp['VALUE_FORMATTED'] = $val;

         }*/

        // Получаем список исключенных свойств в зависимости от выбранной службы доставки
        /*$delivery_id = $arOrder['DELIVERY_ID'];
        $EXCLUDE_PROPS = $pre_defined_variables['ORDER_MAKE']["EXCLUDE_PROP_ON_DELIVERY_ID"];
        if (array_key_exists($delivery_id, $EXCLUDE_PROPS))
            $EXCLUDE_PROP = $EXCLUDE_PROPS[$delivery_id];
        else
            $EXCLUDE_PROP = array();
        $EXCLUDE_PROP = array_merge(array('AGREE'), $EXCLUDE_PROP);

        // Выводим свойства
        $strPropsList = '';
        foreach($arProps as $prop_code=>&$arProp)
        {
            if (in_array($prop_code, $EXCLUDE_PROP)) continue;

            $strPropsList .= '<p>';
            $value = strlen(trim($arProp['VALUE']))? $arProp['VALUE']: '<i>не указано</i>';
            $strPropsList .= '<b>'.$arProp['NAME'].':</b> '.$value;
            $strPropsList .= '</p>';
        }
        $arFields['PROPS_LIST'] = $strPropsList;*/
        // Указываем свойства заказа - Конец



        // Указываем способ оплаты
        $arFields['PAY_SYSTEM'] = '';
        if (strlen($arOrder['PAY_SYSTEM_ID']))
        {
            $arPaySystem = CSalePaySystem::GetByID($arOrder['PAY_SYSTEM_ID'], $arOrder['PERSON_TYPE_ID']);
            if ($arPaySystem)
            {
                $value = strlen(trim($arPaySystem['PSA_NAME']))? $arPaySystem['PSA_NAME']: $arPaySystem['NAME'];
                if($arOrder['PAY_SYSTEM_ID'] == 1 || $arOrder['PAY_SYSTEM_ID'] == 2)
                {
                    $arFields['PAY_SYSTEM'] = '<p><b>Способ оплаты:</b> <a href="http://www.zakrepi.ru/checkout/?ORDER_ID='.$orderID.'" target="_blank">'.$value.'</a></p>';
                }
                else
                {
                    $arFields['PAY_SYSTEM'] = '<p><b>Способ оплаты:</b> '.$value.'</p>';
                }
            }
        }

        // Получаем склад, указанный при доставке
        $arFields['STORE_LIST'] = '';
        $arFields['STORE_LIST_NEUTRAL'] = '';
        $arFields['STORE_EMAIL'] = '';
        $arStores = array();



        if ($arOrder['DELIVERY_ID'] == 1)
        {
            $dbStores = CCatalogStore::GetList(array(), array('ID'=>1), false, false, array());
            $arStore = $dbStores->Fetch();


            $strStoreList = '';
            if ($arStore)
            {
                // Получаем свойства склада в нужном порядке
                $prop_codes = array('TITLE'=>'', 'ADDRESS'=>'Адрес', 'PHONE'=>'Телефон', 'SCHEDULE'=>'Время работы');
                // Выводим склад
                $strStoreList = '<span style="font-size: 90%">';
                $have_value = false; $prev_value = false;
                foreach($prop_codes as $prop_code=>&$name)
                {
                    if ($prev_value)
                    {
                        $strStoreList .= ', ';
                        $prev_value = false;
                    }

                    if (strlen(trim($arStore[$prop_code])))
                    {
                        $have_value = true;
                        if (strlen($name))
                        {
                            $strStoreList .= $name.': ';
                        }
                        $strStoreList .= trim($arStore[$prop_code]);
                        $prev_value = true;
                    }

                }
                $strStoreList .= '</span><br />';
                // Добавляем поле списка складов в почтовый шаблон
                //$arFields['STORE_LIST_NEUTRAL'] = '<p>Указанный '$strStoreList;
                if (strlen($have_value))
                {
                    $arFields['STORE_LIST_NEUTRAL'] = '<p><b>Пункт выдачи:</b></p>' . $strStoreList;
                    $arFields['STORE_LIST'] = '<p><b>Пожалуйста, сообщите номер вашего заказа для оплаты по адресу:</b></p>' . $strStoreList;
                }

            }
        }
        else if($arOrder['DELIVERY_ID'] > 1)
        {
            $strStoreList = '';
            $arOrderProps = CSaleOrderPropsValue::GetOrderProps($arOrder['ID']);
            while ($arProps = $arOrderProps->Fetch())
            {
                switch ($arProps['CODE']) {
                    case 'CITY':
                        $strStoreList .= $arProps['NAME'].': '.$arProps['VALUE'];
                        break;
                    case 'STREET':
                        $strStoreList .= '<br/>'.$arProps['NAME'].': '.$arProps['VALUE'];
                        break;
                    case 'HOUSE':
                        $strStoreList .= '<br/>'.$arProps['NAME'].': '.$arProps['VALUE'];
                        break;
                    case 'KORPUS':
                        if($arProps['VALUE']!='')
                            $strStoreList .= '<br/>'.$arProps['NAME'].': '.$arProps['VALUE'];
                        break;
                    case 'FLAT':
                        if($arProps['VALUE']!='')
                            $strStoreList .= '<br/>'.$arProps['NAME'].': '.$arProps['VALUE'];
                        break;
                }
            }

            $arFields['STORE_LIST_NEUTRAL'] = '<div><p><b>Доставка по адресу:</b></p>' . $strStoreList.'</div>';
        }
        else if(is_string($arOrder['DELIVERY_ID']))
        {
            $strStoreList = '';
            $arOrderProps = CSaleOrderPropsValue::GetOrderProps($arOrder['ID']);
            while ($arProps = $arOrderProps->Fetch())
            {
                switch ($arProps['CODE']) {
                    case 'CITY':
                        $strStoreList .= $arProps['NAME'].': '.$arProps['VALUE'];
                        break;
                    case 'STREET':
                        $strStoreList .= '<br/>'.$arProps['NAME'].': '.$arProps['VALUE'];
                        break;
                    case 'HOUSE':
                        $strStoreList .= '<br/>'.$arProps['NAME'].': '.$arProps['VALUE'];
                        break;
                    case 'KORPUS':
                        if($arProps['VALUE']!='')
                            $strStoreList .= '<br/>'.$arProps['NAME'].': '.$arProps['VALUE'];
                        break;
                    case 'FLAT':
                        if($arProps['VALUE']!='')
                            $strStoreList .= '<br/>'.$arProps['NAME'].': '.$arProps['VALUE'];
                        break;
                }
            }

            $arFields['STORE_LIST_NEUTRAL'] = '<div><p><b>Доставка по адресу:</b></p>' . $strStoreList.'</div>';
        }

        //Получение данных пользователя
        $rsUser = CUser::GetByID($arOrder['USER_ID']);
        $arUser = $rsUser->Fetch();

        if(in_array(5, CUser::GetUserGroup($arOrder['USER_ID'])))
        {
            $arFields['STORE_PHONE'] = $arUser['WORK_PHONE'];
            $arFields['STORE_NAME_USER'] = '******'.$arUser['NAME'].' '.$arUser['LAST_NAME'];
        }
        else if(in_array(6, CUser::GetUserGroup($arOrder['USER_ID'])))
        {
            $arFields['STORE_PHONE'] = $arUser['WORK_PHONE'];
            $arFields['STORE_NAME_USER'] = '******'.$arUser['WORK_COMPANY'].' Контактное лицо '.$arUser['UF_CONTACT_MANAGER'];
        }
    }
コード例 #11
0
ファイル: component.php プロジェクト: CheBurashka334/zakrepi
					if ($arPaySysAction > 0)
						$arPaySysAction["LOGOTIP"] = CFile::GetFileArray($arPaySysAction["LOGOTIP"]);

					$arResult["PAY_SYSTEM"] = $arPaySysAction;
				}
			}
			$arResult["ORDER"] = $arOrder;

			if (!empty($arResult["ORDER"]["DELIVERY_ID"])){
				$arDeliv = CSaleDelivery::GetByID($arResult["ORDER"]["DELIVERY_ID"]);
				$arResult["ORDER_INFO"]["DELIVERY"] = $arDeliv;

				if (count($arResult["ORDER_INFO"]["DELIVERY"]) == 0 || is_string($arResult["ORDER"]["DELIVERY_ID"]))
				{
					$sid = explode(":", $arResult["ORDER"]["DELIVERY_ID"]);
					$dbDeliv = CSaleDeliveryHandler::GetBySID($sid[0]);
					if ($arDeliv = $dbDeliv->GetNext())
					{
						$arResult["ORDER_INFO"]["DELIVERY"] = $arDeliv;
					}
				}
			}
		}
	}
}

if(!$isAjaxRequest)
{
	CJSCore::Init(array('fx', 'popup', 'window', 'ajax'));
}
コード例 #12
0
ファイル: DDeliveryShop.php プロジェクト: ASDAFF/DDelivery
 public function aroundPrice($price)
 {
     $price = parent::aroundPrice($price);
     if ($this->useTaxRate) {
         $DDConfig = CSaleDeliveryHandler::GetBySID('ddelivery')->Fetch();
         $taxRate = $DDConfig['TAX_RATE'];
         $price = round($price * (1 + $taxRate / 100), 2);
         if ($DDConfig['PROFILES']['all']['TAX_RATE']) {
             $taxRate = $DDConfig['PROFILES']['all']['TAX_RATE'];
             $price = round($price * (1 + $taxRate / 100), 2);
         }
     }
     return $price;
 }
コード例 #13
0
 public static function FormatOrderDeliverySystemChanged($data)
 {
     $isOrderConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'N');
     $info = GetMessage("SOC_ORDER_DELIVERY_SYSTEM_CHANGED_INFO");
     if (is_array($data)) {
         foreach ($data as $param => $value) {
             if ($param == "DELIVERY_ID") {
                 if (!array_key_exists('DELIVERY_NAME', $arData) && strval($arData['DELIVERY_NAME']) != '') {
                     if (strpos($value, ":") !== false) {
                         $arId = explode(":", $value);
                         $dbDelivery = CSaleDeliveryHandler::GetBySID($arId[0]);
                         $arDelivery = $dbDelivery->Fetch();
                         $value = "\"" . htmlspecialcharsEx($arDelivery["NAME"]) . "\"";
                     } elseif (intval($value) > 0) {
                         if ($isOrderConverted == "Y") {
                             $arDelivery = \Bitrix\Sale\Delivery\Services\Manager::getById($value);
                         } else {
                             $arDelivery = CSaleDelivery::GetByID($value);
                         }
                         $value = "\"" . $arDelivery["NAME"] . "\"";
                     }
                 } else {
                     $value = "\"" . $arData['DELIVERY_NAME'] . "\"";
                 }
             } elseif ($param == "DELIVERY_NAME") {
                 $value = "\"" . $value . "\"";
             } else {
                 continue;
             }
             $info = str_replace("#" . $param . "#", $value, $info);
         }
     } else {
         $info = $data;
     }
     return array("NAME" => GetMessage("SOC_ORDER_DELIVERY_SYSTEM_CHANGED"), "INFO" => $info);
 }
コード例 #14
0
ファイル: history.php プロジェクト: Ksenobyte/bitrix-module
        if (isset($order['summ']) === false || $order['summ'] <= 0) {
            $order['summ'] = $arFields['PRICE'] - $arFields['PRICE_DELIVERY'];
        }

        $wasCanaceled = $arFields['CANCELED'] == 'Y' ? true : false;

        if (isset($optionsDelivTypes[$order['delivery']['code']])) {
            $resultDeliveryTypeId = $optionsDelivTypes[$order['delivery']['code']];
        } else {
            $resultDeliveryTypeId = isset($order['delivery']['service']) && isset($order['delivery']['service']['code']) ?
                                        reset(explode(":", $arFields['DELIVERY_ID'], 1)) :
                                        $arFields['DELIVERY_ID'];
        }

        if(isset($order['delivery']['service']) && isset($order['delivery']['service']['code'])) {
            $deliveryHandler = reset(CSaleDeliveryHandler::GetBySID($resultDeliveryTypeId)->arResult);
            if (count($deliveryHandler) > 0 && array_key_exists($order['delivery']['service']['code'], $deliveryHandler['PROFILES'])) {
                $resultDeliveryTypeId = $resultDeliveryTypeId . ':' . $order['delivery']['service']['code'];
            }
        }

        // orderUpdate
        $arFields = ICrmOrderActions::clearArr(array(
            'PRICE_DELIVERY'   => $order['delivery']['cost'],
            'PRICE'            => $order['summ'] + (double) $order['delivery']['cost'],
            'DATE_MARKED'      => $order['markDatetime'],
            'USER_ID'          => $userId,
            'PAY_SYSTEM_ID'    => $optionsPayTypes[$order['paymentType']],
            'DELIVERY_ID'      => $resultDeliveryTypeId,
            'STATUS_ID'        => $optionsPayStatuses[$order['status']],
            'REASON_CANCELED'  => ICrmOrderActions::fromJSON($order['statusComment']),
コード例 #15
0
ファイル: ajax.php プロジェクト: ASDAFF/DDelivery
<?
use DDelivery\DDeliveryUI;

define("STOP_STATISTICS", true);

require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

$saleModulePermissions = $APPLICATION->GetGroupRight("sale");
if ($saleModulePermissions == "D")
    $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));

header('Content-Type: text/html; charset=utf-8');

CModule::IncludeModule("sale");
$ddeliveryConfig = CSaleDeliveryHandler::GetBySID('ddelivery')->Fetch();
//$ddOrderId = $_REQUEST['order_id'];


$formData = array('bx_order_id' => $_REQUEST['bx_order_id']);
if(isset($_REQUEST['order_id'])){
    $formData['order_id'] = $_REQUEST['order_id'];
}

$dbBasketItems = CSaleBasket::GetList(
    array("ID" => "ASC"),
    array(
        "ORDER_ID" => $_REQUEST['bx_order_id']
    ),
    false,
    false,
    array('PRODUCT_ID', 'PRICE', 'QUANTITY', 'NAME')
コード例 #16
0
 function Calculate($STEP, $SID, $profile, $arOrder, $currency, $TMP = false, $SITE_ID = false)
 {
     global $APPLICATION;
     if (!defined('SALE_DH_INITIALIZED')) {
         CSaleDeliveryHandler::Initialize();
     }
     if (!$SITE_ID) {
         $SITE_ID = SITE_ID;
     }
     $rsDeliveryHandler = CSaleDeliveryHandler::GetBySID($SID, $SITE_ID);
     if (!($arHandler = $rsDeliveryHandler->Fetch())) {
         return array("RESULT" => "ERROR", "TEXT" => GetMessage("SALE_DH_ERROR_HANDLER_NOT_INSTALLED"));
     }
     if (is_callable($arHandler["CALCULATOR"])) {
         $arConfig = $arHandler["CONFIG"]["CONFIG"];
         $arOrder["PRICE"] = CCurrencyRates::ConvertCurrency($arOrder["PRICE"], $currency, $arHandler["BASE_CURRENCY"]);
         if ($res = call_user_func($arHandler["CALCULATOR"], $profile, $arConfig, $arOrder, $STEP, $TMP)) {
             if (is_array($res)) {
                 $arReturn = $res;
             } elseif (is_numeric($res)) {
                 $arReturn = array("RESULT" => "OK", "VALUE" => doubleval($res));
             }
         } else {
             if ($ex = $APPLICATION->GetException()) {
                 return array("RESULT" => "ERROR", "TEXT" => $ex->GetString());
             } else {
                 return array("RESULT" => "OK", "VALUE" => 0);
             }
         }
         if (is_array($arReturn) && $arReturn["RESULT"] == "OK" && $currency != $arHandler["BASE_CURRENCY"] && CModule::IncludeModule('currency')) {
             $arReturn["VALUE"] = CCurrencyRates::ConvertCurrency($arReturn["VALUE"], $arHandler["BASE_CURRENCY"], $currency);
         }
         $arReturn["VALUE"] *= 1 + $arHandler["TAX_RATE"] / 100;
         $arReturn = CSaleDeliveryHandler::__executeCalculateEvents($SID, $profile, $arOrder, $arReturn);
         return $arReturn;
     } else {
         return array("RESULT" => "ERROR", "TEXT" => GetMessage("SALE_DH_ERROR_WRONG_HANDLER_FILE"));
     }
 }
コード例 #17
0
         if (strlen($arVal["COUNTRY_NAME"]) > 0 && strlen($arVal["REGION_NAME"]) > 0) {
             $locationName .= " - " . $arVal["REGION_NAME"];
         } elseif (strlen($arVal["REGION_NAME"]) > 0) {
             $locationName .= $arVal["REGION_NAME"];
         }
         if (strlen($arVal["COUNTRY_NAME"]) > 0 || strlen($arVal["REGION_NAME"]) > 0) {
             $locationName .= " - " . $arVal["CITY_NAME"];
         } elseif (strlen($arVal["CITY_NAME"]) > 0) {
             $locationName .= $arVal["CITY_NAME"];
         }
         $arProperties["VALUE_FORMATED"] .= htmlspecialcharsEx($locationName);
     }
     $arResult["ORDER_PROPS_PRINT"][] = $arProperties;
 }
 if (is_array($arResult["DELIVERY_ID"])) {
     $obDeliveryHandler = CSaleDeliveryHandler::GetBySID($arResult["DELIVERY_ID"][0]);
     $arResult["DELIVERY"] = $obDeliveryHandler->Fetch();
     $arResult["DELIVERY_PROFILE"] = $arResult["DELIVERY_ID"][1];
     $arOrderTmpDel = array("PRICE" => $arResult["ORDER_PRICE"], "WEIGHT" => $arResult["ORDER_WEIGHT"], "LOCATION_FROM" => COption::GetOptionInt('sale', 'location'), "LOCATION_TO" => $arResult["DELIVERY_LOCATION"], "LOCATION_ZIP" => $arResult["DELIVERY_LOCATION_ZIP"]);
     $arDeliveryPrice = CSaleDeliveryHandler::CalculateFull($arResult["DELIVERY_ID"][0], $arResult["DELIVERY_ID"][1], $arOrderTmpDel, $arResult["BASE_LANG_CURRENCY"]);
     if ($arDeliveryPrice["RESULT"] == "ERROR") {
         $arResult["ERROR_MESSAGE"] = $arDeliveryPrice["TEXT"];
     } else {
         $arResult["DELIVERY_PRICE"] = roundEx($arDeliveryPrice["VALUE"], SALE_VALUE_PRECISION);
     }
 } elseif (IntVal($arResult["DELIVERY_ID"]) > 0 && ($arDeliv = CSaleDelivery::GetByID($arResult["DELIVERY_ID"]))) {
     $arDeliv["NAME"] = htmlspecialcharsEx($arDeliv["NAME"]);
     $arResult["DELIVERY"] = $arDeliv;
     $arResult["DELIVERY_PRICE"] = roundEx(CCurrencyRates::ConvertCurrency($arDeliv["PRICE"], $arDeliv["CURRENCY"], $arResult["BASE_LANG_CURRENCY"]), SALE_VALUE_PRECISION);
 } elseif (IntVal($DELIVERY_ID) > 0) {
     $arResult["DELIVERY"] = "ERROR";
コード例 #18
0
ファイル: order.php プロジェクト: k-kalashnikov/geekcon_new
 function CheckFields($ACTION, &$arFields, $ID = 0)
 {
     if (is_set($arFields, "SITE_ID") && strlen($arFields["SITE_ID"]) > 0) {
         $arFields["LID"] = $arFields["SITE_ID"];
     }
     if ((is_set($arFields, "LID") || $ACTION == "ADD") && strlen($arFields["LID"]) <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGO_EMPTY_SITE"), "EMPTY_SITE_ID");
         return false;
     }
     if ((is_set($arFields, "PERSON_TYPE_ID") || $ACTION == "ADD") && IntVal($arFields["PERSON_TYPE_ID"]) <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGO_EMPTY_PERS_TYPE"), "EMPTY_PERSON_TYPE_ID");
         return false;
     }
     if ((is_set($arFields, "USER_ID") || $ACTION == "ADD") && IntVal($arFields["USER_ID"]) <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGO_EMPTY_USER_ID"), "EMPTY_USER_ID");
         return false;
     }
     if (is_set($arFields, "PAYED") && $arFields["PAYED"] != "Y") {
         $arFields["PAYED"] = "N";
     }
     if (is_set($arFields, "CANCELED") && $arFields["CANCELED"] != "Y") {
         $arFields["CANCELED"] = "N";
     }
     if (is_set($arFields, "STATUS_ID") && strlen($arFields["STATUS_ID"]) <= 0) {
         $arFields["STATUS_ID"] = "N";
     }
     if (is_set($arFields, "ALLOW_DELIVERY") && $arFields["ALLOW_DELIVERY"] != "Y") {
         $arFields["ALLOW_DELIVERY"] = "N";
     }
     if (is_set($arFields, "PRICE") || $ACTION == "ADD") {
         $arFields["PRICE"] = str_replace(",", ".", $arFields["PRICE"]);
         $arFields["PRICE"] = DoubleVal($arFields["PRICE"]);
     }
     if (is_set($arFields, "PRICE_DELIVERY") || $ACTION == "ADD") {
         $arFields["PRICE_DELIVERY"] = str_replace(",", ".", $arFields["PRICE_DELIVERY"]);
         $arFields["PRICE_DELIVERY"] = DoubleVal($arFields["PRICE_DELIVERY"]);
     }
     if (is_set($arFields, "SUM_PAID") || $ACTION == "ADD") {
         $arFields["SUM_PAID"] = str_replace(",", ".", $arFields["SUM_PAID"]);
         $arFields["SUM_PAID"] = DoubleVal($arFields["SUM_PAID"]);
     }
     if (is_set($arFields, "DISCOUNT_VALUE") || $ACTION == "ADD") {
         $arFields["DISCOUNT_VALUE"] = str_replace(",", ".", $arFields["DISCOUNT_VALUE"]);
         $arFields["DISCOUNT_VALUE"] = DoubleVal($arFields["DISCOUNT_VALUE"]);
     }
     if (is_set($arFields, "TAX_VALUE") || $ACTION == "ADD") {
         $arFields["TAX_VALUE"] = str_replace(",", ".", $arFields["TAX_VALUE"]);
         $arFields["TAX_VALUE"] = DoubleVal($arFields["TAX_VALUE"]);
     }
     if (!is_set($arFields, "LOCKED_BY") && (!is_set($arFields, "UPDATED_1C") || is_set($arFields, "UPDATED_1C") && $arFields["UPDATED_1C"] != "Y")) {
         $arFields["UPDATED_1C"] = "N";
     }
     if ((is_set($arFields, "CURRENCY") || $ACTION == "ADD") && strlen($arFields["CURRENCY"]) <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGO_EMPTY_CURRENCY"), "EMPTY_CURRENCY");
         return false;
     }
     if (is_set($arFields, "CURRENCY")) {
         if (!($arCurrency = CCurrency::GetByID($arFields["CURRENCY"]))) {
             $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["CURRENCY"], GetMessage("SKGO_WRONG_CURRENCY")), "ERROR_NO_CURRENCY");
             return false;
         }
     }
     if (is_set($arFields, "LID")) {
         $dbSite = CSite::GetByID($arFields["LID"]);
         if (!$dbSite->Fetch()) {
             $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["LID"], GetMessage("SKGO_WRONG_SITE")), "ERROR_NO_SITE");
             return false;
         }
     }
     if (is_set($arFields, "USER_ID")) {
         $dbUser = CUser::GetByID($arFields["USER_ID"]);
         if (!$dbUser->Fetch()) {
             $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["USER_ID"], GetMessage("SKGO_WRONG_USER")), "ERROR_NO_USER_ID");
             return false;
         }
     }
     if (is_set($arFields, "PERSON_TYPE_ID")) {
         if (!($arPersonType = CSalePersonType::GetByID($arFields["PERSON_TYPE_ID"]))) {
             $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["PERSON_TYPE_ID"], GetMessage("SKGO_WRONG_PERSON_TYPE")), "ERROR_NO_PERSON_TYPE");
             return false;
         }
     }
     if (is_set($arFields, "PAY_SYSTEM_ID") && IntVal($arFields["PAY_SYSTEM_ID"]) > 0) {
         if (!($arPaySystem = CSalePaySystem::GetByID(IntVal($arFields["PAY_SYSTEM_ID"])))) {
             $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["PAY_SYSTEM_ID"], GetMessage("SKGO_WRONG_PS")), "ERROR_NO_PAY_SYSTEM");
             return false;
         }
     }
     if (is_set($arFields, "DELIVERY_ID") && (strpos($arFields["DELIVERY_ID"], ":") !== false || IntVal($arFields["DELIVERY_ID"]) > 0)) {
         if (strpos($arFields["DELIVERY_ID"], ":") !== false) {
             $arId = explode(":", $arFields["DELIVERY_ID"]);
             $obDelivery = new CSaleDeliveryHandler();
             if ($arDelivery = $obDelivery->GetBySID($arId[0])) {
                 if ($arDelivery = $arDelivery->Fetch()) {
                     if (!is_set($arDelivery["PROFILES"], $arId[1])) {
                         $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["DELIVERY_ID"], GetMessage("SKGO_WRONG_DELIVERY")), "ERROR_NO_DELIVERY");
                         return false;
                     }
                 }
             } else {
                 $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["DELIVERY_ID"], GetMessage("SKGO_WRONG_DELIVERY")), "ERROR_NO_DELIVERY");
                 return false;
             }
         } else {
             if (!($arDelivery = CSaleDelivery::GetByID(IntVal($arFields["DELIVERY_ID"])))) {
                 $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["DELIVERY_ID"], GetMessage("SKGO_WRONG_DELIVERY")), "ERROR_NO_DELIVERY");
                 return false;
             }
         }
     }
     if (is_set($arFields, "STATUS_ID")) {
         if (!($arStatus = CSaleStatus::GetByID($arFields["STATUS_ID"]))) {
             $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["STATUS_ID"], GetMessage("SKGO_WRONG_STATUS")), "ERROR_NO_STATUS_ID");
             return false;
         }
     }
     return True;
 }
コード例 #19
0
 /**
  *
  * History update, cron usage only
  * @global CUser $USER
  * @return boolean
  */
 public static function orderHistory()
 {
     global $USER;
     if (is_object($USER) == false) {
         $USER = new RetailUser();
     }
     if (!CModule::IncludeModule("iblock")) {
         self::eventLog('ICrmOrderActions::orderHistory', 'iblock', 'module not found');
         return false;
     }
     if (!CModule::IncludeModule("sale")) {
         self::eventLog('ICrmOrderActions::orderHistory', 'sale', 'module not found');
         return false;
     }
     if (!CModule::IncludeModule("catalog")) {
         self::eventLog('ICrmOrderActions::orderHistory', 'catalog', 'module not found');
         return false;
     }
     $api_host = COption::GetOptionString(self::$MODULE_ID, self::$CRM_API_HOST_OPTION, 0);
     $api_key = COption::GetOptionString(self::$MODULE_ID, self::$CRM_API_KEY_OPTION, 0);
     $optionsOrderTypes = array_flip(unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_TYPES_ARR, 0)));
     $optionsDelivTypes = array_flip(unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_DELIVERY_TYPES_ARR, 0)));
     $optionsPayTypes = array_flip(unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_PAYMENT_TYPES, 0)));
     $optionsPayStatuses = array_flip(unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_PAYMENT_STATUSES, 0)));
     // --statuses
     $optionsPayment = array_flip(unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_PAYMENT, 0)));
     $optionsOrderProps = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_PROPS, 0));
     $optionsLegalDetails = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_LEGAL_DETAILS, 0));
     $optionsContragentType = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_CONTRAGENT_TYPE, 0));
     $optionsSitesList = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_SITES_LIST, 0));
     $optionsCustomFields = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_CUSTOM_FIELDS, 0));
     foreach ($optionsOrderProps as $code => $value) {
         if (isset($optionsLegalDetails[$code])) {
             $optionsOrderProps[$code] = array_merge($optionsOrderProps[$code], $optionsLegalDetails[$code]);
         }
         if (isset($optionsCustomFields[$code])) {
             $optionsOrderProps[$code] = array_merge($optionsOrderProps[$code], $optionsCustomFields[$code]);
         }
         $optionsOrderProps[$code]['location'] = 'LOCATION';
         if (array_search('CITY', $optionsOrderProps[$code]) == false) {
             $optionsOrderProps[$code]['city'] = 'CITY';
         }
         if (array_search('ZIP', $optionsOrderProps[$code]) == false) {
             $optionsOrderProps[$code]['index'] = 'ZIP';
         }
     }
     $api = new RetailCrm\RestApi($api_host, $api_key);
     $dateStart = COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_HISTORY_DATE, null);
     if (is_null($dateStart)) {
         $dateStart = new \DateTime();
         $dateStart = $dateStart->format('Y-m-d H:i:s');
     }
     try {
         $orderHistory = $api->orderHistory($dateStart);
     } catch (\RetailCrm\Exception\CurlException $e) {
         self::eventLog('ICrmOrderActions::orderHistory', 'RetailCrm\\RestApi::orderHistory::CurlException', $e->getCode() . ': ' . $e->getMessage());
         return false;
     }
     $orderHistory = isset($orderHistory['orders']) ? $orderHistory['orders'] : array();
     $log = new Logger();
     $log->write($orderHistory, 'history');
     $dateFinish = $api->getGeneratedAt();
     if (is_null($dateFinish) || $dateFinish == false) {
         $dateFinish = new \DateTime();
     }
     $defaultOrderType = 1;
     $dbOrderTypesList = CSalePersonType::GetList(array(), array("ACTIVE" => "Y"));
     if ($arOrderTypesList = $dbOrderTypesList->Fetch()) {
         $defaultOrderType = $arOrderTypesList['ID'];
     }
     $GLOBALS['INTARO_CRM_FROM_HISTORY'] = true;
     foreach ($orderHistory as $order) {
         if (function_exists('intarocrm_order_pre_persist')) {
             $order = intarocrm_order_pre_persist($order);
         }
         if (!isset($order['externalId'])) {
             // custom orderType function
             if (function_exists('intarocrm_set_order_type')) {
                 $orderType = intarocrm_set_order_type($order);
                 if ($orderType) {
                     $optionsOrderTypes[$order['orderType']] = $orderType;
                 } else {
                     $optionsOrderTypes[$order['orderType']] = $defaultOrderType;
                 }
             }
             // we dont need new orders without any customers (can check only for externalId)
             if (!isset($order['customer']['externalId'])) {
                 if (!isset($order['customer']['id'])) {
                     continue;
                 }
                 $registerNewUser = true;
                 if (!isset($order['customer']['email']) || $order['customer']['email'] == '') {
                     $login = $order['customer']['email'] = uniqid('user_' . time()) . '@crm.com';
                 } else {
                     $dbUser = CUser::GetList($by = 'ID', $sort = 'ASC', array('=EMAIL' => $order['email']));
                     switch ($dbUser->SelectedRowsCount()) {
                         case 0:
                             $login = $order['customer']['email'];
                             break;
                         case 1:
                             $arUser = $dbUser->Fetch();
                             $registeredUserID = $arUser['ID'];
                             $registerNewUser = false;
                             break;
                         default:
                             $login = uniqid('user_' . time()) . '@crm.com';
                             break;
                     }
                 }
                 if ($registerNewUser === true) {
                     $userPassword = uniqid();
                     $newUser = new CUser();
                     $arFields = array("NAME" => self::fromJSON($order['customer']['firstName']), "LAST_NAME" => self::fromJSON($order['customer']['lastName']), "EMAIL" => $order['customer']['email'], "LOGIN" => $login, "LID" => "ru", "ACTIVE" => "Y", "PASSWORD" => $userPassword, "CONFIRM_PASSWORD" => $userPassword);
                     $registeredUserID = $newUser->Add($arFields);
                     if ($registeredUserID === false) {
                         self::eventLog('ICrmOrderActions::orderHistory', 'CUser::Register', 'Error register user');
                         continue;
                     }
                     try {
                         $api->customerFixExternalIds(array(array('id' => $order['customer']['id'], 'externalId' => $registeredUserID)));
                     } catch (\RetailCrm\Exception\CurlException $e) {
                         self::eventLog('ICrmOrderActions::orderHistory', 'RetailCrm\\RestApi::customerFixExternalIds::CurlException', $e->getCode() . ': ' . $e->getMessage());
                         continue;
                     }
                 }
                 $order['customer']['externalId'] = $registeredUserID;
             }
             // new order
             $newOrderFields = array('LID' => CSite::GetDefSite(), 'PERSON_TYPE_ID' => isset($optionsOrderTypes[$order['orderType']]) ? $optionsOrderTypes[$order['orderType']] : $defaultOrderType, 'PAYED' => 'N', 'CANCELED' => 'N', 'STATUS_ID' => 'N', 'PRICE' => 0, 'CURRENCY' => CCurrency::GetBaseCurrency(), 'USER_ID' => $order['customer']['externalId'], 'PAY_SYSTEM_ID' => 0, 'PRICE_DELIVERY' => 0, 'DELIVERY_ID' => 0, 'DISCOUNT_VALUE' => 0, 'USER_DESCRIPTION' => '');
             if (count($optionsSitesList) > 1 && ($lid = array_search($order['site'], $optionsSitesList))) {
                 $newOrderFields['LID'] = $lid;
             }
             $externalId = CSaleOrder::Add($newOrderFields);
             if (!isset($order['externalId'])) {
                 try {
                     $api->orderFixExternalIds(array(array('id' => $order['id'], 'externalId' => $externalId)));
                 } catch (\RetailCrm\Exception\CurlException $e) {
                     self::eventLog('ICrmOrderActions::orderHistory', 'RetailCrm\\RestApi::orderFixExternalIds::CurlException', $e->getCode() . ': ' . $e->getMessage());
                     continue;
                 }
             }
             $order['externalId'] = $externalId;
         }
         if (isset($order['externalId']) && $order['externalId']) {
             // custom orderType function
             if (function_exists('intarocrm_set_order_type')) {
                 $orderType = intarocrm_set_order_type($order);
                 if ($orderType) {
                     $optionsOrderTypes[$order['orderType']] = $orderType;
                 } else {
                     $optionsOrderTypes[$order['orderType']] = $defaultOrderType;
                 }
             }
             $arFields = CSaleOrder::GetById($order['externalId']);
             // incorrect order
             if ($arFields === false || empty($arFields)) {
                 continue;
             }
             $LID = $arFields['LID'];
             $userId = $arFields['USER_ID'];
             if (isset($order['customer']['externalId']) && !is_null($order['customer']['externalId'])) {
                 $userId = $order['customer']['externalId'];
             }
             $rsOrderProps = CSaleOrderPropsValue::GetList(array(), array('ORDER_ID' => $arFields['ID']));
             $arUpdateProps = array();
             while ($ar = $rsOrderProps->Fetch()) {
                 $prop = CSaleOrderProps::GetByID($ar['ORDER_PROPS_ID']);
                 $arUpdateProps[$ar['CODE']] = array('ID' => $ar['ID'], 'TYPE' => $prop['TYPE'], 'VALUE' => $ar['VALUE']);
             }
             $order['fio'] = trim(implode(' ', array(isset($order['lastName']) ? $order['lastName'] : '', isset($order['firstName']) ? $order['firstName'] : '', isset($order['patronymic']) ? $order['patronymic'] : '')));
             if (isset($order['delivery']['address']['city'])) {
                 $order['location'] = $order['delivery']['address']['city'];
             }
             if (isset($order['orderType']) && isset($optionsOrderTypes[$order['orderType']])) {
                 if (isset($optionsOrderProps[$arFields['PERSON_TYPE_ID']])) {
                     foreach ($optionsOrderProps[$arFields['PERSON_TYPE_ID']] as $code => $value) {
                         if (in_array($code, array_keys($order)) === false && isset($optionsOrderProps[$optionsOrderTypes[$order['orderType']]][$code])) {
                             $order[$code] = $arUpdateProps[$optionsOrderProps[$arFields['PERSON_TYPE_ID']][$code]]['VALUE'];
                         }
                     }
                 }
                 //update ordertype
                 CSaleOrder::Update($order['externalId'], array('PERSON_TYPE_ID' => $optionsOrderTypes[$order['orderType']]));
                 $arProp = CSaleOrderProps::GetList(array(), array('PERSON_TYPE_ID' => $optionsOrderTypes[$order['orderType']]));
                 $typeParam = array();
                 while ($ar = $arProp->Fetch()) {
                     $typeParam[$ar['CODE']] = $ar['CODE'];
                 }
                 foreach (array_diff_key($arUpdateProps, $typeParam) as $code => $param) {
                     if (isset($arUpdateProps[$code])) {
                         CSaleOrderPropsValue::Delete($param['ID']);
                     }
                 }
                 $arFields['PERSON_TYPE_ID'] = $optionsOrderTypes[$order['orderType']];
             }
             array_walk_recursive(self::clearArr($order), 'self::recursiveUpdate', array('update' => $arUpdateProps, 'type' => $arFields['PERSON_TYPE_ID'], 'options' => $optionsOrderProps, 'orderId' => $order['externalId']));
             foreach ($order['items'] as $item) {
                 if (isset($item['deleted']) && $item['deleted']) {
                     if ($p = CSaleBasket::GetList(array(), array('ORDER_ID' => $order['externalId'], 'PRODUCT_ID' => $item['id']))->Fetch()) {
                         if (!CSaleBasket::Delete($p['ID'])) {
                             self::eventLog('ICrmOrderActions::orderHistory', 'CSaleBasket::Delete', 'Error element delete');
                         }
                     } else {
                         $prp = CSaleBasket::GetPropsList(array(), array("ORDER_ID" => $order['externalId'], "CODE" => 'ID', "VALUE" => $item['id']))->Fetch();
                         if (!CSaleBasket::Delete($prp['BASKET_ID'])) {
                             self::eventLog('ICrmOrderActions::orderHistory', 'CSaleBasket::Delete', 'Error castom element delete');
                         }
                     }
                     continue;
                 }
                 if (isset($item['offer']) === false && isset($item['offer']['externalId']) === false) {
                     continue;
                 }
                 $res = CIBlockElement::GetByID($item['offer']['externalId'])->Fetch();
                 if ($res) {
                     $p = CSaleBasket::GetList(array(), array('ORDER_ID' => $order['externalId'], 'PRODUCT_ID' => $item['offer']['externalId']))->Fetch();
                     if ($p == false) {
                         $p = CIBlockElement::GetByID($item['offer']['externalId'])->GetNext();
                         $iblock = CIBlock::GetByID($p['IBLOCK_ID'])->Fetch();
                         $p['CATALOG_XML_ID'] = $iblock['XML_ID'];
                         $p['PRODUCT_XML_ID'] = $p['XML_ID'];
                         unset($p['XML_ID']);
                     } elseif ($propResult = CSaleBasket::GetPropsList(array(''), array('BASKET_ID' => $p['ID']))) {
                         while ($r = $propResult->Fetch()) {
                             unset($r['ID']);
                             unset($r['BASKET_ID']);
                             $p['PROPS'][] = $r;
                         }
                     }
                     $arProduct = array();
                     if (isset($item['created']) && $item['created'] == true) {
                         $productPrice = GetCatalogProductPrice($item['offer']['externalId'], COption::GetOptionString(self::$MODULE_ID, self::$CRM_CATALOG_BASE_PRICE, 0));
                         $arProduct = array('FUSER_ID' => $userId, 'ORDER_ID' => $order['externalId'], 'QUANTITY' => $item['quantity'], 'CURRENCY' => $productPrice['CURRENCY'], 'LID' => $LID, 'PRODUCT_ID' => $item['offer']['externalId'], 'PRODUCT_PRICE_ID' => $p['PRODUCT_PRICE_ID'], 'WEIGHT' => $p['WEIGHT'], 'DELAY' => $p['DELAY'], 'CAN_BUY' => $p['CAN_BUY'], 'MODULE' => $p['MODULE'], 'NOTES' => $item['comment'] ?: $p['NOTES'], 'PRODUCT_PROVIDER_CLASS' => $p['PRODUCT_PROVIDER_CLASS'], 'DETAIL_PAGE_URL' => $p['DETAIL_PAGE_URL'], 'CATALOG_XML_ID' => $p['CATALOG_XML_ID'], 'PRODUCT_XML_ID' => $p['PRODUCT_XML_ID'], 'CUSTOM_PRICE' => 'Y');
                     }
                     if (isset($item['isCanceled']) == false) {
                         if (isset($item['initialPrice']) && $item['initialPrice']) {
                             $arProduct['PRICE'] = (double) $item['initialPrice'];
                         }
                         if (isset($item['discount'])) {
                             $arProduct['DISCOUNT_PRICE'] = $item['discount'];
                         }
                         if (isset($item['discountPercent'])) {
                             $arProduct['DISCOUNT_VALUE'] = $item['discountPercent'];
                             $newPrice = round($arProduct['PRICE'] / 100 * (100 - $arProduct['DISCOUNT_VALUE']), 2);
                             $arProduct['DISCOUNT_PRICE'] = $arProduct['DISCOUNT_PRICE'] + $arProduct['PRICE'] - $newPrice;
                         }
                         if (isset($item['discount']) || isset($item['discountPercent'])) {
                             $arProduct['PRICE'] -= $arProduct['DISCOUNT_PRICE'];
                         }
                         if (isset($item['offer']['name']) && $item['offer']['name']) {
                             $arProduct['NAME'] = self::fromJSON($item['offer']['name']);
                         }
                         $arProduct = self::updateCancelProp($arProduct, 0);
                     } elseif (isset($item['isCanceled'])) {
                         $arProduct['PRICE'] = 0;
                         $arProduct = self::updateCancelProp($arProduct, 1);
                     }
                     if (isset($item['created']) && $item['created'] == true) {
                         if (!Add2BasketByProductID($item['offer']['externalId'], $item['quantity'], $arProduct, $p['PROPS'])) {
                             self::eventLog('ICrmOrderActions::orderHistory', 'Add2BasketByProductID', 'Error element add');
                         }
                         continue;
                     }
                     if (count($p['PROPS']) > 0) {
                         $arProduct['PROPS'] = $p['PROPS'];
                     }
                     if (isset($item['quantity']) && $item['quantity']) {
                         $arProduct['QUANTITY'] = $item['quantity'];
                     }
                     if (isset($item['offer']['name']) && $item['offer']['name']) {
                         $arProduct['NAME'] = self::fromJSON($item['offer']['name']);
                     }
                     if (!CSaleBasket::Update($p['ID'], $arProduct)) {
                         self::eventLog('ICrmOrderActions::orderHistory', 'CSaleBasket::Update', 'Error element update');
                     }
                     CSaleBasket::DeleteAll($userId);
                 } else {
                     $arProduct = array();
                     if (isset($item['created']) && $item['created'] == true) {
                         $arProduct = array('FUSER_ID' => $userId, 'ORDER_ID' => $order['externalId'], 'LID' => $LID, 'NOTES' => $item['comment']);
                     }
                     if (isset($item['isCanceled']) == false) {
                         if (isset($item['initialPrice']) && $item['initialPrice']) {
                             $arProduct['PRICE'] = (double) $item['initialPrice'];
                         }
                         if (isset($item['discount'])) {
                             $arProduct['DISCOUNT_PRICE'] = $item['discount'];
                         }
                         if (isset($item['discountPercent'])) {
                             $arProduct['DISCOUNT_VALUE'] = $item['discountPercent'];
                             $newPrice = round($arProduct['PRICE'] / 100 * (100 - $arProduct['DISCOUNT_VALUE']), 2);
                             $arProduct['DISCOUNT_PRICE'] = $arProduct['DISCOUNT_PRICE'] + $arProduct['PRICE'] - $newPrice;
                         }
                         if (isset($item['discount']) || isset($item['discountPercent'])) {
                             $arProduct['PRICE'] -= $arProduct['DISCOUNT_PRICE'];
                         }
                         if (isset($item['offer']['name']) && $item['offer']['name']) {
                             $arProduct['NAME'] = self::fromJSON($item['offer']['name']);
                         }
                         $arProduct = self::updateCancelProp($arProduct, 0);
                     } elseif (isset($item['isCanceled'])) {
                         $arProduct['PRICE'] = 0;
                         $arProduct = self::updateCancelProp($arProduct, 1);
                     }
                     if (isset($item['quantity']) && $item['quantity']) {
                         $arProduct['QUANTITY'] = $item['quantity'];
                     }
                     if (isset($item['offer']['name']) && $item['offer']['name']) {
                         $arProduct['NAME'] = self::fromJSON($item['offer']['name']);
                     }
                     if (isset($item['created']) && $item['created'] == true) {
                         $iBlocks = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_CATALOG_IBLOCKS, 0));
                         $iBlock = array_shift($iBlocks);
                         $newSection = new CIBlockSection();
                         $newSectionFields = array("ACTIVE" => 'N', "IBLOCK_ID" => $iBlock, "NAME" => 'RetailCRM', "CODE" => 'RetailCRM');
                         $resSection = $newSection->Add($newSectionFields);
                         if (!$resSection) {
                             self::eventLog('ICrmOrderActions::orderHistory', 'CIBlockSection::Add', 'Error castom section add');
                             continue;
                         }
                         $arLoadProductArray = array("IBLOCK_SECTION_ID" => $resSection, "IBLOCK_ID" => $iBlock, "NAME" => $item['offer']['name'] ? $item['offer']['name'] : 'RetailCrmElement', "CODE" => 'RetailCrmElement', "ACTIVE" => 'Y');
                         $el = new CIBlockElement();
                         $PRODUCT_ID = $el->Add($arLoadProductArray, false, false, true);
                         if (!$PRODUCT_ID) {
                             self::eventLog('ICrmOrderActions::orderHistory', 'CIBlockElement::Add', 'Error castom element add');
                             continue;
                         }
                         if (!CCatalogProduct::Add(array("ID" => $PRODUCT_ID))) {
                             self::eventLog('ICrmOrderActions::orderHistory', 'CCatalogProduct::Add', 'Error product add');
                             continue;
                         }
                         $arFields = array("PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => COption::GetOptionString(self::$MODULE_ID, self::$CRM_CATALOG_BASE_PRICE, 0), "PRICE" => $item['initialPrice'] ? $item['initialPrice'] : 1, "CURRENCY" => CCurrency::GetBaseCurrency());
                         if (!CPrice::Add($arFields)) {
                             self::eventLog('ICrmOrderActions::orderHistory', 'CPrice::Add', 'Error price add');
                             continue;
                         }
                         $Params = array(array('NAME' => 'id', 'CODE' => 'ID', 'VALUE' => $item['offer']['externalId']));
                         if (!Add2BasketByProductID($PRODUCT_ID, $item['quantity'], $arProduct, $Params)) {
                             self::eventLog('ICrmOrderActions::orderHistory', 'Add2BasketByProductID', 'Error add to basket');
                             continue;
                         }
                         if (!CIBlockSection::Delete($resSection)) {
                             self::eventLog('ICrmOrderActions::orderHistory', 'CIBlockSection::Delete', 'Error delete section');
                             continue;
                         }
                         continue;
                     }
                     $prp = CSaleBasket::GetPropsList(array(), array("ORDER_ID" => $order['externalId'], "CODE" => 'ID', "VALUE" => $item['offer']['externalId']))->Fetch();
                     CSaleBasket::Update($prp['BASKET_ID'], $arProduct);
                 }
             }
             if (isset($order['delivery']) === false || isset($order['delivery']['cost']) === false) {
                 $order['delivery']['cost'] = $arFields['PRICE_DELIVERY'];
             }
             if (isset($order['summ']) === false || $order['summ'] <= 0) {
                 $order['summ'] = $arFields['PRICE'] - $arFields['PRICE_DELIVERY'];
             }
             $wasCanaceled = $arFields['CANCELED'] == 'Y' ? true : false;
             if (isset($optionsDelivTypes[$order['delivery']['code']])) {
                 $resultDeliveryTypeId = $optionsDelivTypes[$order['delivery']['code']];
             } else {
                 $resultDeliveryTypeId = isset($order['delivery']['service']) && isset($order['delivery']['service']['code']) ? reset(explode(":", $arFields['DELIVERY_ID'], 1)) : $arFields['DELIVERY_ID'];
             }
             if (isset($order['delivery']['service']) && isset($order['delivery']['service']['code'])) {
                 $deliveryHandler = reset(CSaleDeliveryHandler::GetBySID($resultDeliveryTypeId)->arResult);
                 if (count($deliveryHandler) > 0 && array_key_exists($order['delivery']['service']['code'], $deliveryHandler['PROFILES'])) {
                     $resultDeliveryTypeId = $resultDeliveryTypeId . ':' . $order['delivery']['service']['code'];
                 }
             }
             // orderUpdate
             $arFields = self::clearArr(array('PRICE_DELIVERY' => $order['delivery']['cost'], 'PRICE' => $order['summ'] + (double) $order['delivery']['cost'], 'DATE_MARKED' => $order['markDatetime'], 'USER_ID' => $userId, 'PAY_SYSTEM_ID' => $optionsPayTypes[$order['paymentType']], 'DELIVERY_ID' => $resultDeliveryTypeId, 'STATUS_ID' => $optionsPayStatuses[$order['status']], 'REASON_CANCELED' => self::fromJSON($order['statusComment']), 'USER_DESCRIPTION' => self::fromJSON($order['customerComment']), 'COMMENTS' => self::fromJSON($order['managerComment'])));
             if (isset($order['discount'])) {
                 $arFields['DISCOUNT_VALUE'] = $order['discount'];
                 $arFields['PRICE'] -= $order['discount'];
             }
             if (!empty($arFields)) {
                 CSaleOrder::Update($order['externalId'], $arFields);
             }
             if (isset($order['status']) && $order['status']) {
                 if (isset($optionsPayStatuses[$order['status']]) && $optionsPayStatuses[$order['status']]) {
                     // set STATUS_ID
                     CSaleOrder::StatusOrder($order['externalId'], $optionsPayStatuses[$order['status']]);
                     if ($wasCanaceled && $optionsPayStatuses[$order['status']] != 'YY') {
                         CSaleOrder::CancelOrder($order['externalId'], "N", $order['statusComment']);
                     } elseif ($optionsPayStatuses[$order['status']] == 'YY') {
                         CSaleOrder::CancelOrder($order['externalId'], "Y", $order['statusComment']);
                     }
                 }
             }
             // set PAYED
             if (isset($order['paymentStatus']) && $order['paymentStatus'] && $optionsPayment[$order['paymentStatus']]) {
                 CSaleOrder::PayOrder($order['externalId'], $optionsPayment[$order['paymentStatus']]);
             }
             if (function_exists('intarocrm_order_post_persist')) {
                 intarocrm_order_post_persist($order);
             }
         }
     }
     if (count($orderHistory) > 0) {
         COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_HISTORY_DATE, $dateFinish->format('Y-m-d H:i:s'));
     }
     $GLOBALS['INTARO_CRM_FROM_HISTORY'] = false;
     return true;
 }