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!")); }
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; }
/** * @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; }