示例#1
0
 /**
  * @param array $discounts
  * @return array|null
  * @throws Main\LoaderException
  */
 public function prepareData(array $inParams = array())
 {
     if ($this->data === null) {
         $result = array("ITEMS" => array(), "WEIGHT" => 0);
         $basket = $this->order->getBasket();
         if (empty($inParams["DISCOUNTS"])) {
             $inParams["DISCOUNTS"] = OrderEdit::getDiscountsApplyResult($this->order, true);
         }
         $basketDiscount = 0;
         $basketPrice = 0;
         $basketPriceBase = 0;
         if (!$basket) {
             $result["WEIGHT_FOR_HUMAN"] = roundEx(floatval(0), SALE_WEIGHT_PRECISION);
             $this->data = $result;
             return $result;
         }
         $result["WEIGHT"] = $basket->getWeight();
         $result["WEIGHT_FOR_HUMAN"] = roundEx(floatval($result["WEIGHT"] / $this->weightKoef), SALE_WEIGHT_PRECISION);
         $items = $basket->getBasketItems();
         /** @var \Bitrix\Sale\BasketItem $item */
         if (self::$catalogIncluded === null) {
             self::$catalogIncluded = Main\Loader::includeModule('catalog');
         }
         foreach ($items as $item) {
             $productId = $item->getProductId();
             $params = array();
             if ($item->getField("MODULE") == "catalog") {
                 $params = static::getProductDetails($productId, $item->getQuantity(), $this->order->getUserId(), $this->order->getSiteId(), $this->visibleColumns);
             } elseif (strval($item->getField("MEASURE_CODE")) != '' && self::$catalogIncluded) {
                 $measures = OrderBasket::getCatalogMeasures();
                 if (isset($measures[$item->getField("MEASURE_CODE")]) && strlen($measures[$item->getField("MEASURE_CODE")]) > 0) {
                     $params["MEASURE_TEXT"] = $measures[$item->getField("MEASURE_CODE")];
                 }
                 if (strval($params["MEASURE_TEXT"]) == '') {
                     $defaultMeasure = static::getDefaultMeasures();
                     $params["MEASURE_TEXT"] = $defaultMeasure["SYMBOL_RUS"] != '' ? $defaultMeasure["SYMBOL_RUS"] : $defaultMeasure["SYMBOL_INTL"];
                 }
             }
             if (!isset($params["OFFER_ID"])) {
                 $params["OFFER_ID"] = $productId;
             }
             $params["BASKET_CODE"] = $basketCode = $item->getBasketCode();
             $params["PRODUCT_PROVIDER_CLASS"] = $item->getProvider();
             $id = $params["PRODUCT_ID"];
             $params = array_merge($params, $item->getFieldValues(), array("PRODUCT_ID" => $id));
             $params["PROPS"] = array();
             /** @var \Bitrix\Sale\BasketPropertyItem $property */
             foreach ($item->getPropertyCollection() as $property) {
                 $params["PROPS"][] = array("VALUE" => $property->getField("VALUE"), "NAME" => $property->getField("NAME"), "CODE" => $property->getField("CODE"), "SORT" => $property->getField("SORT"));
             }
             if (isset($inParams["DISCOUNTS"]["RESULT"]["BASKET"][$basketCode]) && is_array($inParams["DISCOUNTS"]["RESULT"]["BASKET"][$basketCode])) {
                 foreach ($inParams["DISCOUNTS"]["RESULT"]["BASKET"][$basketCode] as $discount) {
                     $params["DISCOUNTS"][$discount["DISCOUNT_ID"]] = $discount;
                 }
             }
             if (isset($inParams["DISCOUNTS"]["PRICES"]["BASKET"][$basketCode])) {
                 $params["PRICE_BASE"] = roundEx($inParams["DISCOUNTS"]["PRICES"]["BASKET"][$basketCode]["BASE_PRICE"], SALE_VALUE_PRECISION);
                 $params["PRICE"] = roundEx($inParams["DISCOUNTS"]["PRICES"]["BASKET"][$basketCode]["PRICE"], SALE_VALUE_PRECISION);
                 $basketPriceBase += $params["PRICE_BASE"] * $params["QUANTITY"];
                 $basketPrice += $params["PRICE"] * $params["QUANTITY"];
                 if (!$item->isCustomPrice()) {
                     $basketDiscount += $inParams["DISCOUNTS"]["PRICES"]["BASKET"][$basketCode]["DISCOUNT"] * $params["QUANTITY"];
                 }
             } else {
                 // TODO: for old orders
             }
             $params["CUSTOM_PRICE"] = $item->isCustomPrice() ? "Y" : "N";
             //Let's cache provider product data into form field
             if (Provider::isExistsTrustData($this->order->getSiteId(), 'sale', $item->getProductId())) {
                 $providerData = Provider::getTrustData($this->order->getSiteId(), 'sale', $item->getProductId());
                 if (is_array($providerData) && !empty($providerData)) {
                     $params["PROVIDER_DATA"] = serialize($providerData);
                 }
             }
             if (is_array($params["SET_ITEMS"]) && !empty($params["SET_ITEMS"])) {
                 $params["SET_ITEMS_DATA"] = serialize($params["SET_ITEMS"]);
             }
             $result["ITEMS"][$basketCode] = $params;
         }
         $result["BASKET_PRICE_BASE"] = roundEx($basketPriceBase, SALE_VALUE_PRECISION);
         $result["BASKET_PRICE"] = roundEx($basketPrice, SALE_VALUE_PRECISION);
         $result["DISCOUNT_VALUE"] = roundEx($basketDiscount, SALE_VALUE_PRECISION);
         $result["ITEMS_ORDER"] = array_keys($result["ITEMS"]);
         if (!isset($inParams["SKIP_SKU_INFO"]) || $inParams["SKIP_SKU_INFO"] != true) {
             $result = static::getOffersSkuParams($result);
         }
         $this->data = $result;
     }
     return $this->data;
 }
示例#2
0
 /**
  * @param BasketItem $item
  * @param array $productData
  * @return \Bitrix\Sale\Result
  * @throws SystemException
  */
 public static function fillBasketItem(BasketItem &$item, array $productData, Order $order, Basket $basket, $needDataUpdate = false)
 {
     $basketCode = $item->getBasketCode();
     if (isset($productData["PRODUCT_PROVIDER_CLASS"]) && strlen($productData["PRODUCT_PROVIDER_CLASS"]) > 0) {
         $item->setField("PRODUCT_PROVIDER_CLASS", trim($productData["PRODUCT_PROVIDER_CLASS"]));
     }
     $item->setField("QUANTITY", $productData["QUANTITY"]);
     $product = array();
     $data = array();
     /* Get actual info from provider
      *	cases:
      *	 1) add new product to basket;
      *	 2) saving operation;
      */
     if (!self::$isTrustProductFormData || $needDataUpdate) {
         $data = Provider::getProductData($basket, array("PRICE"), $item);
         if (isset($data[$basketCode])) {
             $product = $data[$basketCode];
             if (isset($product['DISCOUNT_PRICE'])) {
                 $product['DISCOUNT_PRICE'] = roundEx($product['DISCOUNT_PRICE'], SALE_VALUE_PRECISION);
             }
             if (isset($product['BASE_PRICE'])) {
                 $product['PRICE'] = $product['BASE_PRICE'] - $product['DISCOUNT_PRICE'];
             }
             $discount = $order->getDiscount();
             if ($discount !== null) {
                 if (isset($data[$basketCode]['BASE_PRICE']) && isset($data[$basketCode]['CURRENCY'])) {
                     $discount->setBasketItemBasePrice($basketCode, $data[$basketCode]['BASE_PRICE'], $data[$basketCode]['CURRENCY']);
                 }
                 if (!empty($data[$basketCode]['DISCOUNT_LIST'])) {
                     $discount->setBasketItemDiscounts($basketCode, $data[$basketCode]['DISCOUNT_LIST']);
                 }
             }
         }
     }
     /*
      * Let's extract cached provider product data from field
      * cases:
      *  1) all activity through ajax
      */
     if (empty($data[$basketCode]) && !empty($productData["PROVIDER_DATA"])) {
         $data[$basketCode] = unserialize($productData["PROVIDER_DATA"]);
     }
     if (!empty($productData["SET_ITEMS_DATA"])) {
         $productData["SET_ITEMS"] = unserialize($productData["SET_ITEMS_DATA"]);
     }
     if (is_array($data[$basketCode]) && !empty($data[$basketCode])) {
         self::setProviderTrustData($item, $order, $data[$basketCode]);
     }
     if (!self::$isTrustProductFormData) {
         if (isset($productData["MODULE"]) && $productData["MODULE"] == "catalog") {
             $data = OrderBasket::getProductDetails($item->getProductId(), $productData["QUANTITY"], $order->getUserId(), $order->getSiteId());
             $product = array_merge($product, $data);
         }
         unset($productData["CURRENCY"]);
     }
     $product = array_merge($product, $productData);
     if (isset($product["OFFER_ID"]) || intval($product["OFFER_ID"]) >= 0) {
         $product["PRODUCT_ID"] = $product["OFFER_ID"];
     }
     $product = array_intersect_key($product, array_flip($item::getAvailableFields()));
     if (isset($product["MEASURE_CODE"]) && strlen($product["MEASURE_CODE"]) > 0) {
         $measures = OrderBasket::getCatalogMeasures();
         if (isset($measures[$product["MEASURE_CODE"]]) && strlen($measures[$product["MEASURE_CODE"]]) > 0) {
             $product["MEASURE_NAME"] = $measures[$product["MEASURE_CODE"]];
         }
     }
     if (!isset($product["CURRENCY"]) || strlen($product["CURRENCY"]) <= 0) {
         $product["CURRENCY"] = $order->getCurrency();
     }
     if ($productData["IS_SET_PARENT"] == "Y") {
         $product["TYPE"] = BasketItem::TYPE_SET;
     }
     OrderEdit::setProductDetails($productData["OFFER_ID"], $order->getUserId(), $order->getSiteId(), array_merge($product, $productData));
     $result = self::setBasketItemFields($item, $product);
     return $result;
 }
示例#3
0
        }
        $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() . "<br>\n";
    }
    CAdminMessage::ShowMessage($errorMessage);
}
//prepare blocks order
$defaultBlocksOrder = array("basket", "buyer", "financeinfo", "delivery", "payment", "relprops", "additional", "statusorder");
$formId = "sale_order_create";
示例#4
0
 /**
  * @param \Bitrix\Sale\ShipmentItemCollection $shipmentItemCollection
  * @return array
  * @throws \Bitrix\Main\LoaderException
  */
 public function getProductsInfo($shipmentItemCollection)
 {
     /** @var \Bitrix\Sale\Shipment $shipment */
     $shipment = $shipmentItemCollection->getShipment();
     $systemShipmentItemCollection = null;
     $result = array("ITEMS" => array());
     /** @var \Bitrix\Sale\ShipmentItemCollection $shipmentItemCollection */
     $isSystemShipment = $shipment->isSystem();
     if (!$isSystemShipment) {
         $systemShipment = $shipment->getCollection()->getSystemShipment();
         $systemShipmentItemCollection = $systemShipment->getShipmentItemCollection();
     }
     $items = array();
     /** @var \Bitrix\Sale\ShipmentItem $item */
     foreach ($shipmentItemCollection as $item) {
         $params = array();
         $basketItem = $item->getBasketItem();
         if (!$basketItem) {
             continue;
         }
         if ($systemShipmentItemCollection) {
             /** @var \Bitrix\Sale\ShipmentItemCollection $systemShipmentItemCollection */
             $systemShipmentItem = $systemShipmentItemCollection->getItemByBasketCode($basketItem->getBasketCode());
         }
         $productId = $basketItem->getProductId();
         if ($basketItem->getField("MODULE") == "catalog") {
             $params = self::getProductDetails($productId, $item->getQuantity(), $this->order->getUserId(), $this->order->getSiteId(), $this->visibleColumns);
         } elseif (strval($basketItem->getField("MEASURE_CODE")) != '' && \Bitrix\Main\Loader::includeModule("catalog")) {
             $measures = OrderBasket::getCatalogMeasures();
             if (isset($measures[$basketItem->getField("MEASURE_CODE")]) && strlen($measures[$basketItem->getField("MEASURE_CODE")]) > 0) {
                 $params["MEASURE_TEXT"] = $measures[$basketItem->getField("MEASURE_CODE")];
             }
             if (strval($params["MEASURE_TEXT"]) == '') {
                 $defaultMeasure = static::getDefaultMeasures();
                 $params["MEASURE_TEXT"] = $defaultMeasure["SYMBOL_RUS"] != '' ? $defaultMeasure["SYMBOL_RUS"] : $defaultMeasure["SYMBOL_INTL"];
             }
         }
         if ($basketItem->isBundleParent()) {
             $params["BASE_ELEMENTS_QUANTITY"] = $basketItem->getBundleBaseQuantity();
         }
         $params["BASKET_ID"] = $basketItem->getId();
         $params["PRODUCT_PROVIDER_CLASS"] = $basketItem->getProvider();
         $params["NAME"] = $basketItem->getField("NAME");
         $params["MODULE"] = $basketItem->getField("MODULE");
         $itemStoreCollection = $item->getShipmentItemStoreCollection();
         /** @var \Bitrix\Sale\ShipmentItemStore $barcode */
         $params['BARCODE_INFO'] = array();
         foreach ($itemStoreCollection as $barcode) {
             $storeId = $barcode->getStoreId();
             if (!isset($params['BARCODE_INFO'][$storeId])) {
                 $params['BARCODE_INFO'][$storeId] = array();
             }
             $params['BARCODE_INFO'][$storeId][] = array('ID' => $barcode->getId(), 'BARCODE' => $barcode->getField('BARCODE'), 'QUANTITY' => $barcode->getQuantity());
         }
         $params['ORDER_DELIVERY_BASKET_ID'] = $item->getId();
         $systemItemQuantity = $systemShipmentItem ? $systemShipmentItem->getQuantity() : 0;
         $params["QUANTITY"] = floatval($item->getQuantity() + $systemItemQuantity);
         $params["AMOUNT"] = floatval($item->getQuantity());
         $params["PRICE"] = $basketItem->getPrice();
         $params["CURRENCY"] = $basketItem->getCurrency();
         $params["PRODUCT_PROVIDER_CLASS"] = $basketItem->getProvider();
         $params["PROPS"] = array();
         /** @var \Bitrix\Sale\BasketPropertyItem $property */
         foreach ($basketItem->getPropertyCollection() as $property) {
             $params["PROPS"][] = array("VALUE" => $property->getField("VALUE"), "NAME" => $property->getField("NAME"), "CODE" => $property->getField("CODE"), "SORT" => $property->getField("SORT"));
         }
         if (\Bitrix\Main\Loader::includeModule("catalog")) {
             $productInfo = \CCatalogSku::GetProductInfo($productId);
             $params["OFFERS_IBLOCK_ID"] = $productInfo["OFFER_IBLOCK_ID"];
             $params["IBLOCK_ID"] = $productInfo["IBLOCK_ID"];
             $params["PRODUCT_ID"] = $productInfo["ID"];
         }
         if ($basketItem->isBundleChild()) {
             $params["PARENT_BASKET_ID"] = $basketItem->getParentBasketItem()->getId();
         }
         $items[$params['BASKET_ID']] = $params;
     }
     foreach ($items as $basketId => $item) {
         $parentBasketId = $item['PARENT_BASKET_ID'];
         if ($parentBasketId > 0) {
             $parent =& $items[$parentBasketId];
             if (!$parent) {
                 continue;
             }
             foreach ($parent['SET_ITEMS'] as &$setItem) {
                 if ($item['OFFER_ID'] == $setItem['OFFER_ID']) {
                     $setItem['PRODUCT_ID'] = $item['PRODUCT_ID'];
                     $setItem["BASKET_ID"] = $item['BASKET_ID'];
                     $setItem["ORDER_DELIVERY_BASKET_ID"] = $item['ORDER_DELIVERY_BASKET_ID'];
                     $setItem['BARCODE_INFO'] = $item['BARCODE_INFO'];
                     $setItem["AMOUNT"] = floatval($item['AMOUNT']);
                     $setItem["QUANTITY"] = $item["QUANTITY"];
                     $setItem["PARENT_BASKET_ID"] = $item['PARENT_BASKET_ID'];
                 }
             }
             unset($setItem);
             unset($items[$basketId]);
         }
     }
     $result['ITEMS'] = $items;
     return $result;
 }