%PDF- %PDF-
Direktori : /proc/self/root/home/bitrix/www/bitrix/modules/sale/admin/ |
Current File : //proc/self/root/home/bitrix/www/bitrix/modules/sale/admin/order_create.php |
<? /** * @var CUser $USER * @var CMain $APPLICATION */ use Bitrix\Main\Localization\Loc, Bitrix\Sale\DiscountCouponsManager, Bitrix\Sale\Helpers\Admin\OrderEdit, Bitrix\Sale\Helpers\Admin\Blocks, Bitrix\Sale, Bitrix\Catalog; require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/prolog.php"); Loc::loadMessages(__FILE__); $ID = isset($_REQUEST["ID"]) ? intval($_REQUEST["ID"]) : 0; $isSavingOperation = ( $_SERVER["REQUEST_METHOD"] == "POST" && ( isset($_POST["apply"]) || isset($_POST["save"]) ) && check_bitrix_sessid() ); $needFieldsRestore = $_SERVER["REQUEST_METHOD"] == "POST" && !$isSavingOperation; $isCopyingOrderOperation = $ID > 0; $isRestoringOrderOperation = ((int)$_GET['restoreID'] > 0); $createWithProducts = (isset($_GET["USER_ID"]) && isset($_GET["SITE_ID"]) || isset($_GET["product"])); $showProfiles = false; $profileId = 0; $arUserGroups = $USER->GetUserGroupArray(); $saleModulePermissions = $APPLICATION->GetGroupRight("sale"); if ( $saleModulePermissions == "D" || ($isSavingOperation && $saleModulePermissions < "P") || ($isRestoringOrderOperation && $saleModulePermissions < "P") ) { $APPLICATION->AuthForm(Loc::getMessage("SALE_OK_ACCESS_DENIED")); } $moduleId = "sale"; Bitrix\Main\Loader::includeModule('sale'); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/lib/helpers/admin/orderedit.php"); $siteId = isset($_REQUEST["SITE_ID"]) ? htmlspecialcharsbx($_REQUEST["SITE_ID"]) : ""; $siteName = OrderEdit::getSiteName($siteId); /** @var \Bitrix\Sale\Order $order */ $order = null; $result = new \Bitrix\Sale\Result(); $customTabber = new CAdminTabEngine("OnAdminSaleOrderCreate"); $customDraggableBlocks = new CAdminDraggableBlockEngine('OnAdminSaleOrderCreateDraggable'); DiscountCouponsManager::init( DiscountCouponsManager::MODE_MANAGER, array( 'userId' => isset($_POST["USER_ID"]) ? $_POST["USER_ID"] : 0 ) ); // try to create order from form data & save it if($isSavingOperation || $needFieldsRestore) { if($isSavingOperation) OrderEdit::$isTrustProductFormData = true; $order = OrderEdit::createOrderFromForm($_POST, $USER->GetID(), true, $_FILES, $result); if($order && $result->isSuccess()) { $errorMessage = ''; if (!$customTabber->Check()) { if ($ex = $APPLICATION->GetException()) $errorMessage .= $ex->GetString(); else $errorMessage .= "Custom tabber check unknown error!"; $result->addError(new \Bitrix\Main\Entity\EntityError($errorMessage)); } if (!$customDraggableBlocks->check()) { if ($ex = $APPLICATION->GetException()) $errorMessage .= $ex->GetString(); else $errorMessage .= "Custom draggable block check unknown error!"; $result->addError(new \Bitrix\Main\Entity\EntityError($errorMessage)); } if(isset($_POST["SHIPMENT"]) && $_POST["SHIPMENT"]) { $dlvRes = Blocks\OrderShipment::updateData($order, $_POST['SHIPMENT']); if(!$dlvRes->isSuccess()) $result->addErrors($dlvRes->getErrors()); } if(isset($_POST["PAYMENT"]) && $_POST["PAYMENT"]) { $payRes = Blocks\OrderPayment::updateData($order, $_POST['PAYMENT'], !$result->isSuccess()); if(!$payRes->isSuccess()) $result->addErrors($payRes->getErrors()); } if($isSavingOperation && $result->isSuccess()) { $res = OrderEdit::saveCoupons($order->getUserId(), $_POST); if(!$res) $result->addError(new \Bitrix\Main\Entity\EntityError("Can't save coupons!")); /* To apply discounts depended on paysystems, or delivery services */ if (!($basket = $order->getBasket())) throw new \Bitrix\Main\ObjectNotFoundException('Entity "Basket" not found'); $res = $basket->refreshData(array('PRICE', 'QUANTITY', 'COUPONS')); if(!$res->isSuccess()) $result->addErrors($res->getErrors()); /* * */ $res = $order->save(); if($res->isSuccess()) { if(isset($_POST["BUYER_PROFILE_ID"])) $profileId = intval($_POST["BUYER_PROFILE_ID"]); else $profileId = 0; $profResult = OrderEdit::saveProfileData($profileId, $order, $_POST); \CSaleMobileOrderPush::send("ORDER_CREATED", array("ORDER_ID" => $order->getId())); $customTabber->SetArgs(array("ID" => $order->getId())); if (!$customTabber->Action()) { if ($ex = $APPLICATION->GetException()) $errorMessage .= $ex->GetString(); else $errorMessage .= "Custom tabber action unknown error!"; } $customDraggableBlocks->setArgs(array('ORDER' => $order)); if (!$customDraggableBlocks->action()) { if ($ex = $APPLICATION->GetException()) $errorMessage .= $ex->GetString(); else $errorMessage .= "Custom draggable block action unknown error!"; } if(!empty($errorMessage)) $_SESSION['SALE_ORDER_EDIT_ERROR'] = $errorMessage; if ( isset($_POST["ABANDONED_USER_ID"]) && (int)$_POST["ABANDONED_USER_ID"] === $order->getUserId() && (int)$_POST["ABANDONED_FUSER_ID"] > 0 ) { $itemsDataList = Sale\Internals\BasketTable::getList( array( "filter" => array( "=ORDER_ID" => NULL, "=FUSER_ID" => (int)$_POST["ABANDONED_FUSER_ID"], ), "select" => array("ID") ) ); while ($item = $itemsDataList->fetch()) { Sale\Internals\BasketTable::deleteWithItems($item['ID']); } } if(isset($_POST["save"])) LocalRedirect("/bitrix/admin/sale_order.php?lang=".LANGUAGE_ID); else LocalRedirect("/bitrix/admin/sale_order_edit.php?lang=".LANGUAGE_ID."&ID=".$order->getId()); } else { $result->addErrors($res->getErrors()); } } } else { $result->addError(new \Bitrix\Main\Error(Loc::getMessage('SALE_OK_ORDER_CREATE_ERROR'))); } } elseif($createWithProducts) { $showProfiles = true; $formData = array( "USER_ID" => $_GET["USER_ID"], "SITE_ID" => $_GET["SITE_ID"] ); $formData["PRODUCT"] = array(); $basketCode = 1; $userProfiles = array(); if(isset($_GET["product"]) && is_array($_GET["product"])) { $productParams = Blocks\OrderBasket::getProductsData(array_keys($_GET["product"]), $formData["SITE_ID"], array(), intval($_GET["USER_ID"])); foreach($_GET["product"] as $productId => $quantity) { if( !is_array($productParams[$productId]) || empty($productParams[$productId]) || intval($productParams[$productId]["PRODUCT_ID"]) <= 0 || strlen($productParams[$productId]["MODULE"]) <= 0 ) { continue; } $formData["PRODUCT"][$basketCode] = $productParams[$productId]; $formData["PRODUCT"][$basketCode]["BASKET_CODE"] = $basketCode; $formData["PRODUCT"][$basketCode]["QUANTITY"] = $quantity; $basketCode++; } } else { if(isset($_GET['FUSER_ID']) && intval($_GET['FUSER_ID']) > 0) $fuserId = $_GET['FUSER_ID']; else $fuserId = \Bitrix\Sale\Fuser::getIdByUserId($_GET["USER_ID"]); if(intval($fuserId) > 0) { $basketList = array(); $fakeBasket = Sale\Basket::create($_GET['SITE_ID']); $context = array( "SITE_ID" => $_GET['SITE_ID'], ); if (!empty($_GET["USER_ID"])) { $context['USER_ID'] = $_GET["USER_ID"]; } Bitrix\Main\Loader::includeModule('catalog'); $basketFilter = array( 'filter' => array( 'LID' => $_GET['SITE_ID'], 'FUSER_ID' => intval($fuserId), 'DELAY' => "N", 'ORDER_ID' => null, 'SET_PARENT_ID' => false, ), 'select' => array('PRODUCT_ID', 'QUANTITY', 'CAN_BUY', 'NAME', 'MODULE', 'PRODUCT_PROVIDER_CLASS', 'CALLBACK_FUNC', 'PAY_CALLBACK_FUNC', 'PRICE', 'SUBSCRIBE'), 'order' => array('ID' => 'ASC'), ); $resBasketDataList = \Bitrix\Sale\Basket::getList($basketFilter); while($basketData = $resBasketDataList->fetch()) { if ($basketData['CAN_BUY'] != 'Y') { $result->addError( new \Bitrix\Main\Error( Loc::getMessage( 'SALE_OK_ORDER_CREATE_ERROR_NO_PRODUCT', array('##NAME##' => $basketData['NAME']) ) ) ); continue; } $basketFields = array( 'PRODUCT_ID' => $basketData['PRODUCT_ID'], 'QUANTITY' => $basketData['QUANTITY'], 'SUBSCRIBE' => $basketData['SUBSCRIBE'], ); if (!empty($basketData['MODULE'])) { $basketFields['MODULE'] = $basketData['MODULE']; } if (!empty($basketData['PRODUCT_PROVIDER_CLASS'])) { $basketFields['PRODUCT_PROVIDER_CLASS'] = $basketData['PRODUCT_PROVIDER_CLASS']; } if (!empty($basketData['CALLBACK_FUNC'])) { $basketFields['CALLBACK_FUNC'] = $basketData['CALLBACK_FUNC']; } if (!empty($basketData['PAY_CALLBACK_FUNC'])) { $basketFields['PAY_CALLBACK_FUNC'] = $basketData['PAY_CALLBACK_FUNC']; } $r = Catalog\Product\Basket::addProductToBasket($fakeBasket, $basketFields, $context); if ($r->isSuccess()) { $resultData = $r->getData(); if (isset($resultData['BASKET_ITEM'])) { /** @var \Bitrix\Sale\BasketItem $basketItem */ $basketItem = $resultData['BASKET_ITEM']; $basketCode = $basketItem->getBasketCode(); } else { $result->addError( new \Bitrix\Main\Error( Loc::getMessage( 'SALE_OK_ORDER_CREATE_ERROR_BASKET_ITEM_NOT_CREATED', array('##NAME##' => $basketData['NAME']) ) ) ); continue; } } else { $result->addErrors($r->getErrors()); continue; } $basketList[$basketCode] = $basketData; } $providerItemDataList = Sale\Provider::getProductData($fakeBasket, array('QUANTITY')); unset($fakeBasket); if (!empty($basketList)) { foreach ($basketList as $basketCode => $basketItem) { if (empty($providerItemDataList[$basketCode])) { $result->addError( new \Bitrix\Main\Error( Loc::getMessage( 'SALE_OK_ORDER_CREATE_ERROR_NO_PRODUCT', array('##NAME##' => $basketItem['NAME']) ) ) ); continue; } $productId = $basketItem['PRODUCT_ID']; if ($basketItem['MODULE'] == 'catalog') { // Temporary fix for custom products $productParams = Blocks\OrderBasket::getProductsData(array($productId), $formData["SITE_ID"], array(), intval($_GET["USER_ID"])); } elseif (empty($basketItem['PRODUCT_PROVIDER_CLASS'])) { $productParams[$productId] = $basketItem; } if(!is_array($productParams[$productId]) || empty($productParams[$productId])) continue; if(strlen($productParams[$productId]['PRODUCT_ID']) <= 0) { $result->addError( new \Bitrix\Main\Error( Loc::getMessage( 'SALE_OK_ORDER_CREATE_ERROR_NO_PRODUCT', array('##NAME##' => $basketItem['NAME']) ) ) ); continue; } $formData["PRODUCT"][$basketCode] = $productParams[$productId]; $formData["PRODUCT"][$basketCode]["BASKET_CODE"] = $basketCode; $formData["PRODUCT"][$basketCode]["QUANTITY"] = $basketItem['QUANTITY']; } } } } if(empty($formData["PRODUCT"])) unset($formData["PRODUCT"]); $res = new \Bitrix\Sale\Result(); $order = OrderEdit::createOrderFromForm($formData, $USER->GetID(), false, array(), $res); $userProfiles = \Bitrix\Sale\Helpers\Admin\Blocks\OrderBuyer::getUserProfiles($_GET['USER_ID']); //Just get first available profile if($order && !empty($userProfiles)) { $propCollection = $order->getPropertyCollection(); $ptList = \Bitrix\Sale\Helpers\Admin\Blocks\OrderBuyer::getBuyerTypesList($order->getSiteId()); $ptIndex = 0; $userPersonTypeId = $order->getPersonTypeId(); if(!empty($ptList[$userPersonTypeId]) && is_array($userProfiles[$userPersonTypeId])) { reset($userProfiles[$userPersonTypeId]); $userProfile = current($userProfiles[$userPersonTypeId]); $profileId = key($userProfiles[$userPersonTypeId]); $order->setPersonTypeId($userPersonTypeId); foreach($userProfile as $propId => $propValue) { $property = $propCollection->getItemByOrderPropertyId($propId); if($property) { try { $property->setValue($propValue); } catch(\Exception $e) {} } } } } if(!$order) { if(!$res->isSuccess()) $result->addErrors($res->getErrors()); else $result->addError( new \Bitrix\Main\Entity\EntityError( Loc::getMessage('SALE_OK_ORDER_CREATE_ERROR') ) ); } } elseif($isRestoringOrderOperation) // Restore order from archive { $profileList = array(); $archivedOrder = Sale\Archive\Manager::returnArchivedOrder((int)$_GET['restoreID']); $allowedStatusUpdate = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($USER->GetID(), array('update')); if (!in_array($archivedOrder->getField("STATUS_ID"), $allowedStatusUpdate)) { LocalRedirect("/bitrix/admin/sale_order_archive.php?lang=".LANGUAGE_ID); } if ($saleModulePermissions == 'P') { $userCompanyList = Sale\Services\Company\Manager::getUserCompanyList($USER->GetID()); if ( !in_array($archivedOrder->getField('COMPANY_ID'), $userCompanyList) && $archivedOrder->getField('RESPONSIBLE_ID') !== $USER->GetID() ) { LocalRedirect("/bitrix/admin/sale_order_archive.php?lang=".LANGUAGE_ID); } } //Create order for form from a returned archive $order = Sale\Order::create($archivedOrder->getSiteId(), $archivedOrder->getUserId(), $archivedOrder->getCurrency()); $availableFields = array_flip(Sale\Order::getAvailableFields()); $orderFields = array_intersect_key($archivedOrder->getFieldValues(), $availableFields); $order->setFields($orderFields); //Copy properties to current order $propertyCollection = $order->getPropertyCollection(); $userProfiles = \Bitrix\Sale\Helpers\Admin\Blocks\OrderBuyer::getUserProfiles($order->getUserId()); if (empty($userProfiles[$order->getPersonTypeId()])) { $propertyArchivedCollection = $archivedOrder->getPropertyCollection(); foreach ($propertyArchivedCollection as $propertyOld) { $profileList[$propertyOld->getField('ORDER_PROPS_ID')] = $propertyOld->getValue(); } } else { $profileList = current($userProfiles[$order->getPersonTypeId()]); $profileId = key($userProfiles[$order->getPersonTypeId()]); $showProfiles = true; } foreach ($profileList as $id => $propertyProfileValue) { $property = $propertyCollection->getItemByOrderPropertyId($id); if($property) { try { $property->setValue($propertyProfileValue); } catch(\Exception $e) {} } } //Copy basket to current order $archivedBasket = $archivedOrder->getBasket(); $archivedBasketItems = $archivedBasket->getBasketItems(); //Check exists products in basket /** @var Sale\BasketItem $archivedItem */ $errorMessage = ""; foreach ($archivedBasketItems as $archivedItem) { $archivedItemModule = $archivedItem->getField('MODULE'); if ($archivedItemModule == "sale") continue; Bitrix\Main\Loader::includeModule('catalog'); $product = Catalog\ProductTable::getById($archivedItem->getProductId()); if (!($product->fetch())) { $errorAbsentProductMessage .= Loc::getMessage( "ARCHIVE_ERROR_PRODUCT_NOT_FOUND", array( "#NAME#" => $archivedItem->getField("NAME"), "#ID#" => $archivedItem->getProductId(), ) ); $errorAbsentProductMessage .= "<br>"; } } $order->setBasket($archivedBasket); //Fill one order's shipment from archived shipments (limit - creation with single shipment) $shipmentCollection = $order->getShipmentCollection(); $archivedShipmentCollection = $archivedOrder->getShipmentCollection(); /** @var \Bitrix\Sale\Shipment $archivedShipment */ foreach ($archivedShipmentCollection as $archivedShipment) { if (!$archivedShipment->isSystem()) { $shipmentItem = $shipmentCollection->createItem(); $shipmentItem->setField('DELIVERY_ID', $archivedShipment->getDeliveryId()); break; } } //Fill one order's payment from archived payments (limit - creation with single payment) $paymentCollection = $order->getPaymentCollection(); $archivedPaymentCollection = $archivedOrder->getPaymentCollection(); /** @var \Bitrix\Sale\Payment $archivedPayment */ foreach ($archivedPaymentCollection as $archivedPayment) { if ($archivedPaymentCollection->count() > 1 && $archivedPayment->isInner()) continue; /** @var \Bitrix\Sale\Payment $paymentItem */ $paymentItem = $paymentCollection->createItem(); $paymentItem->setField("PAY_SYSTEM_ID",$archivedPayment->getField("PAY_SYSTEM_ID")); break; } } elseif($isCopyingOrderOperation) // copy order { /** @var \Bitrix\Sale\Order $originalOrder */ $originalOrder = Bitrix\Sale\Order::load($ID); if ($originalOrder) { $order = \Bitrix\Sale\Order::create($originalOrder->getSiteId(), $originalOrder->getUserId(), $originalOrder->getCurrency()); $order->setPersonTypeId($originalOrder->getPersonTypeId()); $userProfiles = \Bitrix\Sale\Helpers\Admin\Blocks\OrderBuyer::getUserProfiles($originalOrder->getUserId()); if(!empty($userProfiles[$originalOrder->getPersonTypeId()])) { $profileList = current($userProfiles[$originalOrder->getPersonTypeId()]); $profileId = key($userProfiles[$originalOrder->getPersonTypeId()]); $showProfiles = true; } $originalPropCollection = $originalOrder->getPropertyCollection(); $properties['PROPERTIES'] = array(); $files = array(); /** @var \Bitrix\Sale\PropertyValue $prop */ foreach ($originalPropCollection as $prop) { if ($prop->getField('TYPE') == 'FILE') { $propValue = $prop->getValue(); if ($propValue) { $files[] = CAllFile::MakeFileArray($propValue['ID']); $properties['PROPERTIES'][$prop->getPropertyId()] = $propValue['ID']; } } else { $properties['PROPERTIES'][$prop->getPropertyId()] = $prop->getValue(); } } $propCollection = $order->getPropertyCollection(); $propCollection->setValuesFromPost($properties, $files); $originalBasket = $originalOrder->getBasket(); $originalBasketItems = $originalBasket->getBasketItems(); $basket = \Bitrix\Sale\Basket::create($originalOrder->getSiteId()); $basket->setFUserId($originalBasket->getFUserId()); /** @var \Bitrix\Sale\BasketItem $originalBasketItem */ foreach($originalBasketItems as $originalBasketItem) { $item = $basket->createItem($originalBasketItem->getField("MODULE"), $originalBasketItem->getProductId()); $item->setField('NAME', $originalBasketItem->getField('NAME')); $item->setFields( array_intersect_key( $originalBasketItem->getFields()->getValues(), array_flip( $originalBasketItem->getAvailableFields() ) ) ); $item->getPropertyCollection()->setProperty( $originalBasketItem->getPropertyCollection()->getPropertyValues() ); } $res = $order->setBasket($basket); if(!$res->isSuccess()) $result->addErrors($res->getErrors()); $paymentCollection = $originalOrder->getPaymentCollection(); $originalPayment = $paymentCollection->current(); if ($originalPayment) { $payment = $order->getPaymentCollection()->createItem(); /** @var \Bitrix\Sale\Payment $payment */ $payment->setField('PAY_SYSTEM_ID', $originalPayment->getPaymentSystemId()); } $originalDeliveryId = 0; $originalStoreId = 0; $shipmentCollection = $originalOrder->getShipmentCollection(); /** @var \Bitrix\Sale\Shipment $shipment */ foreach ($shipmentCollection as $shipment) { if (!$shipment->isSystem()) { $originalDeliveryId = $shipment->getDeliveryId(); $customPriceDelivery = $shipment->getField('CUSTOM_PRICE_DELIVERY'); $basePrice = $shipment->getField('BASE_PRICE_DELIVERY'); $originalStoreId = $shipment->getStoreId(); break; } } if ($originalDeliveryId > 0) { $shipment = $order->getShipmentCollection()->createItem(); $shipment->setField('DELIVERY_ID', $originalDeliveryId); if(intval($originalStoreId) > 0) $shipment->setStoreId($originalStoreId); $shipment->setBasePriceDelivery($basePrice, ($customPriceDelivery == 'Y')); } $order->getDiscount()->calculate(); } } if(!$order) { $order = \Bitrix\Sale\Order::create($siteId); $order->setPersonTypeId( Blocks\OrderBuyer::getDefaultPersonType( $siteId ) ); } if(strlen($siteName) > 0) $APPLICATION->SetTitle(str_replace("##SITE##", $siteName, Loc::getMessage("SALE_OK_TITLE_SITE"))); else $APPLICATION->SetTitle(Loc::getMessage("SALE_OK_TITLE_NO_SITE")); CUtil::InitJSCore(); \Bitrix\Main\Page\Asset::getInstance()->addJs("/bitrix/js/sale/admin/order_edit.js"); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); Blocks\OrderBasket::getCatalogMeasures(); // context menu $aMenu = array(); if ($isRestoringOrderOperation) { $aMenu[] = array( "ICON" => "btn_list", "TEXT" => Loc::getMessage("SALE_OK_ARCHIVE_LIST"), "TITLE"=> Loc::getMessage("SALE_OK_ARCHIVE_LIST_TITLE"), "LINK" => "/bitrix/admin/sale_order_archive.php?lang=".LANGUAGE_ID ); } else { $aMenu[] = array( "ICON" => "btn_list", "TEXT" => Loc::getMessage("SALE_OK_LIST"), "TITLE"=> Loc::getMessage("SALE_OK_LIST_TITLE"), "LINK" => "/bitrix/admin/sale_order.php?lang=".LANGUAGE_ID ); } $context = new CAdminContextMenu($aMenu); $context->Show(); //errors $errorMessage = ""; if(!empty($_SESSION['SALE_ORDER_EDIT_ERROR'])) { $errorMessage = $_SESSION['SALE_ORDER_EDIT_ERROR']."<br>\n"; unset($_SESSION['SALE_ORDER_EDIT_ERROR']); } if(!$result->isSuccess() && !$needFieldsRestore) foreach($result->getErrors() as $error) $errorMessage .= $error->getMessage()."<br>\n"; if(!empty($errorMessage)) { $admMessage = new CAdminMessage($errorMessage); echo $admMessage->Show(); } //prepare blocks order $defaultBlocksOrder = array( "basket", "buyer", "financeinfo", "delivery", "payment", "relprops", "additional", "statusorder", ); $formId = "sale_order_create"; $basketPrefix = "sale_order_basket"; $orderBasket = new Blocks\OrderBasket($order,"BX.Sale.Admin.OrderBasketObj", $basketPrefix); echo OrderEdit::getScripts($order, $formId); echo Blocks\OrderBuyer::getScripts(); echo Blocks\OrderAdditional::getScripts(); echo Blocks\OrderPayment::getScripts(); echo Blocks\OrderShipment::getScripts(); echo Blocks\OrderFinanceInfo::getScripts(); echo $orderBasket->getScripts(false); echo $customDraggableBlocks->getScripts(); // navigation socket ?><div id="sale-order-edit-block-fast-nav-socket"></div><? $aTabs = array( array("DIV" => "tab_order", "TAB" => Loc::getMessage("SALE_OK_TAB_ORDER"), "SHOW_WRAP" => "N", "IS_DRAGGABLE" => "Y"), ); ?><form method="POST" action="<?=$APPLICATION->GetCurPage()."?lang=".LANGUAGE_ID."&SITE_ID=".$siteId?>" name="<?=$formId?>_form" id="<?=$formId?>_form" enctype="multipart/form-data"><? $tabControl = new CAdminTabControlDrag($formId, $aTabs, $moduleId, false, true); $tabControl->AddTabs($customTabber); $tabControl->Begin(); //TAB order -- $tabControl->BeginNextTab(); $customFastNavItems = array(); $customBlocksOrder = array(); $fastNavItems = array(); foreach($customDraggableBlocks->getBlocksBrief() as $blockId => $blockParams) { $defaultBlocksOrder[] = $blockId; $customFastNavItems[$blockId] = $blockParams['TITLE']; $customBlocksOrder[] = $blockId; } $blocksOrder = $tabControl->getCurrentTabBlocksOrder($defaultBlocksOrder); $customNewBlockIds = array_diff($customBlocksOrder, $blocksOrder); $blocksOrder = array_merge($blocksOrder, $customNewBlockIds); foreach($blocksOrder as $item) { if(isset($customFastNavItems[$item])) $fastNavItems[$item] = $customFastNavItems[$item]; else $fastNavItems[$item] = Loc::getMessage("SALE_OK_BLOCK_TITLE_".toUpper($item)); } ?> <tr><td> <input type="hidden" id="SITE_ID" name="SITE_ID" value="<?=htmlspecialcharsbx($siteId)?>"> <input type="hidden" id="OLD_USER_ID" name="OLD_USER_ID" value="0"> <input type="hidden" name="BASKET_PREFIX" value="<?=$basketPrefix?>"> <? if ($_REQUEST["ABANDONED"] === 'Y') { ?> <input type="hidden" id="ABANDONED_USER_ID" name="ABANDONED_USER_ID" value="<?=(int)$_REQUEST["USER_ID"]?>"> <input type="hidden" id="ABANDONED_FUSER_ID" name="ABANDONED_FUSER_ID" value="<?=(int)$_REQUEST["FUSER_ID"]?>"> <? } ?> <?=bitrix_sessid_post()?> <div style="position: relative; vertical-align: top"> <?$tabControl->DraggableBlocksStart();?> <? foreach ($blocksOrder as $blockCode) { echo '<a id="'.$blockCode.'" class="adm-sale-fastnav-anchor"></a>'; $tabControl->DraggableBlockBegin($fastNavItems[$blockCode], $blockCode); switch ($blockCode) { case "basket": if (strlen($errorAbsentProductMessage)) { $admMessage = new CAdminMessage($errorAbsentProductMessage); echo $admMessage->Show(); } echo $orderBasket->getEdit(false); break; case "buyer": echo Blocks\OrderBuyer::getEdit($order, $showProfiles, $profileId); break; case "delivery": $shipments = $order->getShipmentCollection(); if(count($shipments) < 2) $order->getShipmentCollection()->createItem(); /** @var \Bitrix\Sale\Shipment $shipment*/ foreach ($shipments as $shipment) if (!$shipment->isSystem()) echo Blocks\OrderShipment::getEdit($shipment, 0, '', $_POST['SHIPMENT'][1]); break; case "payment": $payments = $order->getPaymentCollection(); if(count($payments) == 0) $order->getPaymentCollection()->createItem(); $index = 0; foreach ($payments as $payment) echo Blocks\OrderPayment::getEdit($payment, ++$index, $_POST['PAYMENT'][$index]); echo Blocks\OrderPayment::createButtonAddPayment('edit'); break; case 'relprops' : echo Blocks\OrderBuyer::getPropsEdit($order); break; case "financeinfo": echo Blocks\OrderFinanceInfo::getView($order); break; case "additional": echo Blocks\OrderAdditional::getEdit($order, $formId."_form", 'ORDER', (!empty($_POST['ORDER']) ? $_POST['ORDER'] : array())); break; case "statusorder": echo Blocks\OrderStatus::getEditSimple($USER->GetID(), 'STATUS_ID', \Bitrix\Sale\OrderStatus::getInitialStatus()); break; default: echo $customDraggableBlocks->getBlockContent($blockCode, $tabControl->selectedTab); break; } $tabControl->DraggableBlockEnd(); } ?> </div> </td></tr> <? $tabControl->EndTab(); $tabControl->Buttons( array( "back_url" => "/bitrix/admin/sale_order_create.php?lang=".LANGUAGE_ID."&SITE_ID=".$siteId) ); $tabControl->End(); ?> <div style="display: none;"> <?=$orderBasket->getSettingsDialogContent();?> </div> <div style="display: none;"><?=OrderEdit::getFastNavigationHtml($fastNavItems);?></div> <script type="text/javascript"> BX.ready( function(){ BX.Sale.Admin.OrderEditPage.setFixHashCorrection(); //place navigation data to navigation socket BX('sale-order-edit-block-fast-nav-socket').appendChild( BX('sale-order-edit-block-fast-nav') ); }); </script> <?if(!$result->isSuccess() || $needFieldsRestore):?> <script type="text/javascript"> BX.ready( function(){ BX.Sale.Admin.OrderEditPage.restoreFormData( <?=CUtil::PhpToJSObject(OrderEdit::restoreFieldsNames( array_diff_key($_POST, array("USER_ID" => true)) )); ?> ); }); </script> <?endif;?> <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");