Esempio n. 1
0
                    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!"));
    }
Esempio n. 2
0
 protected function addProductToBasketAction()
 {
     if (!$this->request["formData"]) {
         throw new ArgumentNullException("formatData");
     }
     if (!$this->request["quantity"]) {
         throw new ArgumentNullException("quantity");
     }
     if (!$this->request["productId"]) {
         throw new ArgumentNullException("productId");
     }
     $productId = isset($this->request['productId']) ? intval($this->request['productId']) : 0;
     $quantity = isset($this->request['quantity']) ? floatval($this->request['quantity']) : 1;
     $columns = isset($this->request['columns']) ? $this->request['columns'] : array();
     $alreadyInBasketCode = "";
     $productParams = array();
     if (isset($this->request["formData"]["PRODUCT"]) && is_array($this->request["formData"]["PRODUCT"])) {
         foreach ($this->request["formData"]["PRODUCT"] as $basketCode => &$params) {
             if (!isset($params["MODULE"]) || $params["MODULE"] != "catalog") {
                 continue;
             }
             if (!isset($params["OFFER_ID"]) || $params["OFFER_ID"] != $productId) {
                 continue;
             }
             $params["QUANTITY"] += $quantity;
             $alreadyInBasketCode = $basketCode;
             $productParams = $params;
             break;
         }
     }
     if (empty($productParams)) {
         $productParams = Admin\Blocks\OrderBasket::getProductDetails($productId, $quantity, !empty($this->request["formData"]["USER_ID"]) ? $this->request["formData"]["USER_ID"] : 0, isset($this->request["formData"]["SITE_ID"]) ? $this->request["formData"]["SITE_ID"] : SITE_ID, $columns);
     }
     if (isset($this->request["replaceBasketCode"]) && strlen($this->request["replaceBasketCode"]) > 0 && isset($this->request["formData"]["PRODUCT"][$this->request["replaceBasketCode"]])) {
         $this->request["formData"]["PRODUCT"][$this->request["replaceBasketCode"]] = $productParams;
         if (strlen($alreadyInBasketCode) > 0) {
             unset($this->request["formData"]["PRODUCT"][$alreadyInBasketCode]);
         }
     } elseif (strlen($alreadyInBasketCode) <= 0) {
         $this->request["formData"]["PRODUCT"]["new"] = $productParams;
     }
     $this->formDataChanged = true;
 }
Esempio n. 3
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;
 }