0; $createWithProducts = (isset($_GET["USER_ID"]) && isset($_GET["SITE_ID"]) && isset($_GET["product"])); $arUserGroups = $USER->GetUserGroupArray(); $saleModulePermissions = $APPLICATION->GetGroupRight("sale"); if ( $saleModulePermissions == "D" || ($isSavingOperation && $saleModulePermissions < "U") ) { $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); $order = null; $result = new \Bitrix\Sale\Result(); 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) { $order = OrderEdit::createOrderFromForm($_POST, $USER->GetID(), true, $_FILES, $result); if($order) { 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!")); $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); if(isset($_POST["save"])) LocalRedirect("/bitrix/admin/sale_order.php?lang=".LANGUAGE_ID.GetFilterParams("filter_", false)); else LocalRedirect("/bitrix/admin/sale_order_edit.php?lang=".LANGUAGE_ID."&ID=".$order->getId().GetFilterParams("filter_", false)); } else { $result->addErrors($res->getErrors()); } } } else { $result->addError(new \Bitrix\Main\Entity\EntityError("Can't create order!")); } } elseif($createWithProducts) { $formData = array( "USER_ID" => $_GET["USER_ID"], "SITE_ID" => $_GET["SITE_ID"] ); if(isset($_GET["product"]) && is_array($_GET["product"])) { $formData["PRODUCT"] = array(); $basketCode = 1; foreach($_GET["product"] as $productId => $quantity) { $productParams = Blocks\OrderBasket::getProductDetails( $productId, $quantity, $formData["USER_ID"], $formData["SITE_ID"] ); if(!is_array($productParams) || empty($productParams)) continue; $formData["PRODUCT"][$basketCode] = $productParams; $formData["PRODUCT"][$basketCode]["BASKET_CODE"] = $basketCode; $basketCode++; } if(empty($formData["PRODUCT"])) unset($formData["PRODUCT"]); } $order = OrderEdit::createOrderFromForm($formData, $USER->GetID(), false, array(), $result); if(!$order) $result->addError(new \Bitrix\Main\Entity\EntityError("Can't create order!")); } 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()); $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(), $originalBasket->getFUserId()); /** @var \Bitrix\Sale\BasketItem $originalBasketItem */ foreach($originalBasketItems as $originalBasketItem) { $item = $basket->createItem($originalBasketItem->getField("MODULE"), $originalBasketItem->getProductId()); $item->setFields( array_intersect_key( $originalBasketItem->getFields()->getValues(), array_flip( $originalBasketItem->getAvailableFields() ) ) ); } $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; $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'); break; } } if ($originalDeliveryId > 0) { $shipment = $order->getShipmentCollection()->createItem(); $shipment->setField('DELIVERY_ID', $originalDeliveryId); $shipment->setField('CUSTOM_PRICE_DELIVERY', $customPriceDelivery); $shipment->setField('BASE_PRICE_DELIVERY', $basePrice); } $order->getDiscount()->calculate(); } } else { $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(); $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.GetFilterParams("filter_") ); $context = new CAdminContextMenu($aMenu); $context->Show(); if(!$result->isSuccess() && !$needFieldsRestore) { $errorMessage = ""; foreach($result->getErrors() as $error) $errorMessage .= $error->getMessage()."
\n"; CAdminMessage::ShowMessage($errorMessage); } //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(); $fastNavItems = array(); foreach($defaultBlocksOrder as $item) $fastNavItems[$item] = Loc::getMessage("SALE_OK_BLOCK_TITLE_".toUpper($item)); echo OrderEdit::getFastNavigationHtml($fastNavItems); $aTabs = array( array("DIV" => "tab_order", "TAB" => Loc::getMessage("SALE_OK_TAB_ORDER"), "SHOW_WRAP" => "N", "IS_DRAGGABLE" => "Y"), ); ?>