/** * @param \DDelivery\Order\DDeliveryOrder $order * @throws \Bitrix\Main\ArgumentException */ public function onFinishChange($order) { global $APPLICATION; $point = $order->getPoint(); if ($order->type == DDeliverySDK::TYPE_SELF) { $replaceData = array('%1' => $order->cityName, '%2' => $point['address'], '%3' => $point['delivery_company_name'], '%4' => $point['_id'], '%5' => $point['type'] == 1 ? 'Постомат' : 'ПВЗ'); $replaceData = $APPLICATION->ConvertCharsetArray($replaceData, 'UTF-8', SITE_CHARSET); $comment = GetMessage('DDELIVERY_ABOUT_SELF', $replaceData); } else { if ($order->type == DDeliverySDK::TYPE_COURIER) { $replaceData = array('%1' => $order->getFullAddress(), '%2' => $point['delivery_company_name']); $replaceData = $APPLICATION->ConvertCharsetArray($replaceData, 'UTF-8', SITE_CHARSET); $comment = GetMessage('DDELIVERY_ABOUT_COURIER', $replaceData); } else { $comment = 'error'; } } $orderId = $this->formData['bx_order_id']; $params = array('DD_ABOUT' => $comment, 'DD_LOCAL_ID' => $order->localId); $orderDeliveryTableData = OrderDeliveryTable::getList(array('filter' => array('ORDER_ID' => $orderId)))->fetch(); if ($orderDeliveryTableData) { OrderDeliveryTable::update($orderDeliveryTableData['ID'], array('PARAMS' => serialize($params))); } else { OrderDeliveryTable::add(array('ORDER_ID' => $orderId, 'PARAMS' => serialize($params))); } $order = CSaleOrder::GetByID($orderId); $arDeliveryResult = CSaleDeliveryHandler::CalculateFull('ddelivery', 'ddelivery:all', $order, CSaleLang::GetLangCurrency(SITE_ID), SITE_ID); if ($arDeliveryResult['RESULT'] == 'OK') { CSaleOrder::Update($orderId, array('PRICE_DELIVERY' => $arDeliveryResult['VALUE'])); } }
{ $arDeliveryId = explode(":", $arOrder["DELIVERY_ID"]); $profileId = $arDeliveryId[1]; $arDeliveryOrder = array( "PRICE" => $orderTotalPrice, "WEIGHT" => $orderTotalWeight, "LOCATION_FROM" => COption::GetOptionString('sale', 'location', '', $LID), "LOCATION_TO" => $locationData, "LOCATION_ZIP" => $locationZip, "ITEMS" => $arBasketItems ); $depList = \Bitrix\Sale\Delivery\OrderDeliveryTable::getList(array( 'filter'=>array('=ORDER_ID' => $ID), )); if($dep = $depList->fetch()) { $arDeliveryOrder["EXTRA_PARAMS"] = unserialize($dep["PARAMS"]); } $arPacks = CSaleDeliveryHelper::getBoxesFromConfig($profileId, $arDeliveryData["CONFIG"]["CONFIG"]); $arDeliveryResult = CSaleDeliveryHandler::CalculateFull($arDeliveryData["SID"], $profileId, $arDeliveryOrder, $arOrder["CURRENCY"], $LID); $delDiscountDiff = roundEx($arDeliveryResult["VALUE"] - $arOrder["PRICE_DELIVERY"], SALE_VALUE_PRECISION); $tabControl->BeginCustomField("ORDER_DELIVERY_ADDITIONAL_INFO", ""); if (!empty($arPacks)): $arBox = array_shift(array_values($arPacks));
public static function execHandlerAction($orderId, $actionId) { global $DB, $USER; $arResult = array(); $arOrder = CSaleOrder::GetById($orderId); $handlerActions = CSaleDeliveryHandler::getActionsList($arOrder["DELIVERY_ID"]); if (!array_key_exists($actionId, $handlerActions)) { $arResult = array("RESULT" => "ERROR", "TEXT" => GetMessage("SALE_DHLP_HANDLER_HAS_NO_ACTION")); } $dt = new \Bitrix\Main\Type\DateTime(); $depList = \Bitrix\Sale\Delivery\OrderDeliveryTable::getList(array('filter' => array('=ORDER_ID' => $orderId))); $dep = $depList->fetch(); if ($dep && !is_null($dep["DATE_REQUEST"])) { $arResult = array("RESULT" => "ERROR", "TEXT" => GetMessage("SALE_DHLP_HANDLER_REQUEST_ALREADY_SENT")); } if (empty($arResult)) { $arUserGroups = $USER->GetUserGroupArray(); $arOrder["ITEMS"] = array(); $dbItemsList = CSaleBasket::GetList(array("SET_PARENT_ID" => "DESC", "TYPE" => "DESC", "NAME" => "ASC"), array("ORDER_ID" => $orderId)); while ($arItem = $dbItemsList->GetNext()) { $arItem["DIMENSIONS"] = unserialize($arItem["~DIMENSIONS"]); unset($arItem["~DIMENSIONS"]); $arOrder["ITEMS"][] = $arItem; } $arResult = CSaleDeliveryHandler::executeAction($arOrder["DELIVERY_ID"], $actionId, $arOrder); if ($actionId == "REQUEST_SELF" && isset($arResult["TRACKING_NUMBER"])) { $bUserCanEditOrder = CSaleOrder::CanUserUpdateOrder($orderId, $arUserGroups); if ($bUserCanEditOrder) { if ($dep) { \Bitrix\Sale\Delivery\OrderDeliveryTable::update($dep["ID"], array("DATE_REQUEST" => $dt)); } else { \Bitrix\Sale\Delivery\OrderDeliveryTable::add(array("ORDER_ID" => $orderId, "DATE_REQUEST" => $dt)); } $fields = array(); if (isset($arResult["TRACKING_NUMBER"])) { $fields["TRACKING_NUMBER"] = $arResult["TRACKING_NUMBER"]; } if (isset($arResult["DELIVERY_DOC_NUM"])) { $fields["DELIVERY_DOC_NUM"] = $arResult["DELIVERY_DOC_NUM"]; $fields["DELIVERY_DOC_DATE"] = Date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT", $arOrder["LID"]))); } CSaleOrder::Update($orderId, $fields); } } CSaleOrderChange::AddRecord($orderId, "ORDER_DELIVERY_REQUEST_SENT", $arResult); } return $arResult; }
/** * * @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; } }
$APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); } $orderId = (int) isset($_REQUEST['order_id']) ? $_REQUEST['order_id'] : 0; if (!$orderId) { LocalRedirect('/bitrix/admin/sale_order.php?lang=' . LANG); } IncludeModuleLangFile(__FILE__); $MODULE_ID = 'ddelivery.ddelivery'; $APPLICATION->SetTitle(GetMessage("DDELIVERY_NAME")); require $_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/include/prolog_admin_after.php"; $ddeliveryConfig = CSaleDeliveryHandler::GetBySID('ddelivery')->Fetch(); $dbBasketItems = CSaleBasket::GetList(array("ID" => "ASC"), array("ORDER_ID" => $_REQUEST['bx_order_id']), false, false, array('PRODUCT_ID', 'PRICE', 'QUANTITY', 'NAME')); while ($arBasket = $dbBasketItems->Fetch()) { $itemList[] = $arBasket; } $orderDeliveryTableData = OrderDeliveryTable::getList(array('filter' => array('ORDER_ID' => $orderId)))->fetch(); if ($orderDeliveryTableData) { $orderDeliveryParams = unserialize($orderDeliveryTableData['PARAMS']); $IntegratorShop = new DDeliveryAdminShop($ddeliveryConfig['CONFIG']['CONFIG'], $itemList, $formData); try { $ddeliveryUI = new DdeliveryUI($IntegratorShop); $order = $ddeliveryUI->initOrder($orderDeliveryParams['DD_LOCAL_ID']); if ($order->ddStatus == DDStatusProvider::ORDER_CONFIRMED) { CAdminMessage::ShowMessage(array('MESSAGE' => GetMessage("DDELIVERY_ORDER_IN_PROGRESS"), 'TYPE' => 'ERROR')); $orderDeliveryTableData = false; } } catch (Exception $e) { CAdminMessage::ShowMessage(array('MESSAGE' => $APPLICATION->ConvertCharset($e->getMessage(), 'utf-8', SITE_CHARSET), 'TYPE' => 'ERROR')); } } else { $orderDeliveryParams = false;