$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")
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; }
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; }
$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"]])
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))); } }
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); }
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);
$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>
/** * * @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; } }
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"].' шт.</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;">Общая стоимость: </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;">Стоимость доставки: </td><td style="text-align: center;">'.SaleFormatCurrency($arOrder['PRICE_DELIVERY'], $price_currency).'</td></tr>'; $strOrderList .= '<tr><td colspan="3" style="text-align:right;">Итого: </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;">Стоимость доставки: </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;">Итого: </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']; } }
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')); }
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; }
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); }
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']),
<? 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')
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")); } }
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";
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; }
/** * * 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; }