public static function create(ShipmentItemStoreCollection $collection, BasketItem $basketItem) { $fields = array('BASKET_ID' => $basketItem->getId()); $shipmentItemStore = new static($fields); $shipmentItemStore->setCollection($collection); $shipmentItemStore->basketItem = $basketItem; return $shipmentItemStore; }
/** * @param BasketItem $basketItem * @return static * @throws \Bitrix\Main\ArgumentException */ public static function load(BasketItem $basketItem) { $basketPropertyCollection = new static(); $basketPropertyCollection->basketItem = $basketItem; if ($basketItem->getId() <= 0) { return $basketPropertyCollection; } $res = Internals\BasketPropertyTable::getList(array('order' => array("SORT" => "ASC", "ID" => "ASC"), 'filter' => array("BASKET_ID" => $basketItem->getId()))); while ($property = $res->fetch()) { $basketPropertyItem = BasketPropertyItem::create($basketPropertyCollection); $basketPropertyItem->initFields($property); $basketPropertyCollection->addItem($basketPropertyItem); } return $basketPropertyCollection; }
/** * @internal * @param BasketItem $basketItem * @param $moduleId * @param $productId * @param array $properties * * @return BasketItem|bool */ public static function getExistsItemInBundle(BasketItem $basketItem, $moduleId, $productId, array $properties = array()) { if (!$basketItem->isBundleParent()) { return null; } if (($bundleList = $basketItem->getBundleCollection()) && count($bundleList) > 0) { /** @var BasketItem $bundleBasketItem */ foreach ($basketItem->getBundleCollection() as $bundleBasketItem) { if ($bundleBasketItem->getField('PRODUCT_ID') != $productId || $bundleBasketItem->getField('MODULE') != $moduleId) { continue; } if (!empty($properties) && is_array($properties)) { /** @var BasketPropertiesCollection $basketPropertyCollection */ $basketPropertyCollection = $bundleBasketItem->getPropertyCollection(); if ($basketPropertyCollection->isPropertyAlreadyExists($properties)) { return $bundleBasketItem; } } else { return $bundleBasketItem; } } } return null; }
public function adapt(array $row) { if (!empty($row["~DIMENSIONS"]) && is_array($row["~DIMENSIONS"])) { $row["~DIMENSIONS"] = serialize($row["~DIMENSIONS"]); } if (!empty($row["DIMENSIONS"]) && is_array($row["DIMENSIONS"])) { $row["DIMENSIONS"] = serialize($row["DIMENSIONS"]); } if (!empty($row["QUANTITY"])) { $row["QUANTITY"] = Sale\BasketItem::formatQuantity($row['QUANTITY']); } if (!empty($row["~QUANTITY"])) { $row["~QUANTITY"] = Sale\BasketItem::formatQuantity($row['~QUANTITY']); } return $row; }
/** * @param $action * @param BasketItem $basketItem * @param null $name * @param null $oldValue * @param null $value */ public function onBasketModify($action, BasketItem $basketItem, $name = null, $oldValue = null, $value = null) { switch ($action) { case "UPDATE": if ($name == "QUANTITY") { /** @var ShipmentItemCollection $collection */ $collection = $this->getCollection(); $shipment = $collection->getShipment(); if ($shipment->isShipped() != "Y") { return true; } if ($basketItem->getBasketCode() != $this->getBasketCode()) { return true; } $quantity = $value - $oldValue; if ($quantity != 0) { $result = Provider::tryReserveShipmentItem($this); } if (!empty($result) && is_array($result)) { $this->setField('RESERVED_QUANTITY', $result['QUANTITY']); if ($quantity > 0) { if ($this->getQuantity() != $this->getReservedQuantity()) { /** @var ShipmentItemCollection $shipmentItemCollection */ $shipmentItemCollection = $this->getCollection(); /** @var Shipment $shipment */ $shipment = $shipmentItemCollection->getShipment(); $shipment->setMark(); } } } } //change quantity break; case "DELETE": // unreserve break; } }
/** * @internal * @return array|bool */ public function getListOfFormatText() { $list = array(); /** @var BasketItem $basketItem */ foreach ($this->collection as $basketItem) { if ($basketItem->isBundleChild()) { continue; } $basketItemData = $basketItem->getField("NAME"); /** @var \Bitrix\Sale\BasketPropertiesCollection $basketPropertyCollection */ if ($basketPropertyCollection = $basketItem->getPropertyCollection()) { $basketItemDataProperty = ""; /** @var \Bitrix\Sale\BasketPropertyItem $basketPropertyItem */ foreach ($basketPropertyCollection as $basketPropertyItem) { if ($basketPropertyItem->getField('CODE') == "PRODUCT.XML_ID" || $basketPropertyItem->getField('CODE') == "CATALOG.XML_ID") { continue; } if (strval(trim($basketPropertyItem->getField('VALUE'))) == "") { continue; } $basketItemDataProperty .= (!empty($basketItemDataProperty) ? "; " : "") . trim($basketPropertyItem->getField('NAME')) . ": " . trim($basketPropertyItem->getField('VALUE')); } if (!empty($basketItemDataProperty)) { $basketItemData .= " [" . $basketItemDataProperty . "]"; } } $measure = strval($basketItem->getField("MEASURE_NAME")) != '' ? $basketItem->getField("MEASURE_NAME") : Loc::getMessage("SOA_SHT"); $list[$basketItem->getBasketCode()] = $basketItemData . " - " . BasketItem::formatQuantity($basketItem->getQuantity()) . " " . $measure . ": " . SaleFormatCurrency($basketItem->getPrice(), $basketItem->getCurrency()); } return !empty($list) ? $list : false; }
/** * @internal * @param Sale\BasketItem $basketItem * * @return array * @throws Main\ObjectNotFoundException */ public static function convertBasketItemToArray(Sale\BasketItem $basketItem) { $fields = $basketItem->getFieldValues(); /** @var Sale\Basket $basket */ if (!($basket = $basketItem->getCollection())) { throw new Main\ObjectNotFoundException('Entity "Basket" not found'); } if (empty($fields['LID'])) { $fields['LID'] = $basket->getSiteId(); } if (empty($fields['LID'])) { if ($order = $basket->getOrder()) { $fields['LID'] = $order->getField('LID'); } //$order->getField('LID') } if (empty($fields['FUSER_ID'])) { $fields['FUSER_ID'] = $basket->getFUserId(true); } /** @var Sale\BasketPropertiesCollection $basketPropertyCollection */ if ($basketPropertyCollection = $basketItem->getPropertyCollection()) { /** @var Sale\BasketPropertyItem $basketPropertyItem */ foreach ($basketPropertyCollection as $basketPropertyItem) { $propValues = $basketPropertyItem->getFieldValues(); $propData = array("NAME" => $propValues['NAME'], "CODE" => $propValues['CODE'], "VALUE" => $propValues['VALUE'], "SORT" => $propValues['SORT']); if (isset($propValues['ID']) && intval($propValues['ID']) > 0) { $propData['ID'] = $propValues['ID']; } $fields['PROPS'][] = $propData; } } return $fields; }
/** * @return bool */ protected function loadBundleChildElements() { $bundleChildList = Provider::getSetItems($this); if (empty($bundleChildList)) { return null; } /** @var Basket $baseBasketCollection */ $baseBasketCollection = $this->getCollection(); /** @var Order $order */ $order = $baseBasketCollection->getOrder(); /** @var Basket $bundleCollection */ $bundleCollection = BasketBundleCollection::create($baseBasketCollection->getSiteId()); if ($order !== null) { $bundleCollection->setOrder($order); } foreach ($bundleChildList as $bundleBasketListDat) { foreach ($bundleBasketListDat["ITEMS"] as $bundleDat) { $bundleFields = static::clearBundleItemFields($bundleDat); $bundleFields['CURRENCY'] = $this->getCurrency(); if ($this->getId() > 0) { $bundleFields['SET_PARENT_ID'] = $this->getId(); } /** @var BasketItem $basketItem */ $bundleBasketItem = BasketItem::create($bundleCollection, $bundleFields['MODULE'], $bundleFields['PRODUCT_ID']); if (!empty($bundleDat["PROPS"]) && is_array($bundleDat["PROPS"])) { /** @var BasketPropertiesCollection $property */ $property = $bundleBasketItem->getPropertyCollection(); $property->setProperty($bundleDat["PROPS"]); } $bundleFields['QUANTITY'] = $bundleFields['QUANTITY'] * $this->getQuantity(); $bundleBasketItem->setFieldsNoDemand($bundleFields); $bundleBasketItem->parentBasketItem = $this; $bundleBasketItem->parentId = $this->getBasketCode(); $bundleCollection->addItem($bundleBasketItem); } } if ($productList = Provider::getProductData($bundleCollection, array('QUANTITY', 'PRICE'))) { foreach ($productList as $productBasketCode => $productDat) { if ($bundleBasketItem = $bundleCollection->getItemByBasketCode($productBasketCode)) { unset($productDat['DISCOUNT_LIST']); $bundleBasketItem->setFieldsNoDemand($productDat); } } } $this->bundleCollection = $bundleCollection; return $bundleCollection; }
/** * @param Sale\BasketItem $basketItem * @param $quantity */ public function set(Sale\BasketItem $basketItem, $quantity) { $this->quantities[$basketItem->getBasketCode()] = $quantity; $this->items[$basketItem->getBasketCode()] = $basketItem; }
protected static function setBasketItemFields(\Bitrix\Sale\BasketItem &$item, array $fields = array()) { $result = $item->setFields($fields); if (!$result->isSuccess()) { foreach ($result->getErrors() as $error) { if ($error->getCode() == "CATALOG_QUANTITY_NOT_ENOGH") { if ((string) Option::get('catalog', 'allow_negative_amount') != 'Y') { $data = $result->getData(); $res = $item->setField("QUANTITY", $data["AVAILABLE_QUANTITY"]); if (!$res->isSuccess()) { $result->addErrors($res->getErrors()); } } } } } return $result; }
/** * @param $quantity * * @return float * @throws \Bitrix\Main\ArgumentNullException */ public static function formatQuantity($quantity) { $isOrderConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'N'); if ($isOrderConverted == "Y") { return \Bitrix\Sale\BasketItem::formatQuantity($quantity); } return roundEx($quantity, SALE_VALUE_PRECISION); }
$fieldValue .= "</div>"; if (strlen($arItem["NAME"]) > 0) { $fieldName .= "<nobr>"; if (strlen($arItem["DETAIL_PAGE_URL"]) > 0) { $fieldName .= '<a href="' . $url . '">'; } $fieldName .= htmlspecialcharsbx($arItem["NAME"]); if (strlen($arItem["DETAIL_PAGE_URL"]) > 0) { $fieldName .= "</a>"; } $fieldName .= "</nobr>"; } else { $fieldName .= "<br />"; } if (strlen($arItem["QUANTITY"]) > 0) { $fieldQuantity .= htmlspecialcharsbx(Sale\BasketItem::formatQuantity($arItem["QUANTITY"])) . " " . $measure; } else { $fieldQuantity .= "<br />"; } if (strlen($arItem["PRODUCT_ID"]) > 0) { $fieldProductID .= htmlspecialcharsbx($arItem["PRODUCT_ID"]); } else { $fieldProductID .= "<br />"; } if (strlen($arItem["PRICE"]) > 0) { $fieldPrice .= "<nobr>" . htmlspecialcharsex(SaleFormatCurrency($arItem["PRICE"], $arItem["CURRENCY"])) . "</nobr>"; } else { $fieldPrice .= "<br />"; } if (strlen($arItem["WEIGHT"]) > 0) { if ((double) $WEIGHT_KOEF[$arOrder["LID"]] > 0) {
/** * @param BasketItem $basketItem * @return bool * @throws Main\ObjectNotFoundException */ protected function isExistsBasketItem(BasketItem $basketItem) { /** @var ShipmentItem $shipmentItem */ foreach ($this->collection as $shipmentItem) { if ($shipmentItem->getBasketCode() == $basketItem->getBasketCode()) { return true; } } return false; }
/** * @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(); $params["QUANTITY"] = Sale\BasketItem::formatQuantity($params["QUANTITY"]); /** @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; }
protected static function getProductPoolQuantityByBasketItem(\Bitrix\Sale\BasketItem $basketItem) { /** @var \Bitrix\Sale\Basket $basket */ if (!($basket = $basketItem->getCollection())) { return false; } /** @var \Bitrix\Sale\Order $order */ if (!($order = $basket->getOrder())) { return false; } return \Bitrix\Sale\Provider::getReservationPoolItem($order->getInternalId(), $basketItem); }
/** * @param BasketItem $basketItem * @return float|int * @throws Main\ObjectNotFoundException */ public function getBasketItemQuantity(BasketItem $basketItem) { $allQuantity = 0; /** @var ShipmentItemCollection $shipmntItemCollection */ if (!($shipmentItemCollection = $this->getShipmentItemCollection())) { throw new Main\ObjectNotFoundException('Entity "ShipmentItemCollection" not found'); } /** @var ShipmentItem $shipmentItem */ foreach ($shipmentItemCollection as $shipmentItem) { if ($shipmentItem->getBasketCode() == $basketItem->getBasketCode()) { $allQuantity += $shipmentItem->getQuantity(); } } return $allQuantity; }
/** * @param BasketItem $basketItem * * @return Result * @throws Main\ArgumentOutOfRangeException * @throws Main\ObjectNotFoundException * @throws \ErrorException */ public function deleteByBasketItem(BasketItem $basketItem) { $result = new Result(); $systemShipmentItem = null; /** @var Shipment $shipment */ if (!($shipment = $this->getShipment())) { throw new Main\ObjectNotFoundException('Entity "Shipment" not found'); } /** @var ShipmentItem $shipmentItem */ foreach ($this->collection as $shipmentItem) { if ($shipmentItem->getBasketCode() == $basketItem->getBasketCode()) { if ($shipment->isSystem()) { $systemShipmentItem = $shipmentItem; continue; } $r = $shipmentItem->delete(); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } } if ($systemShipmentItem !== null) { if ($systemShipmentItem->getReservedQuantity() > 0) { /** @var Result $r */ $r = $systemShipmentItem->tryUnreserve(); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } if ($result->isSuccess()) { $shipmentItem->setFieldNoDemand('QUANTITY', 0); } } return $result; }
/** * Modify basket. * * @param string $action Action. * @param BasketItem $basketItem Basket item. * @param null|string $name Field name. * @param null|string|int|float $oldValue Old value. * @param null|string|int|float $value New value. * @return Result * @throws Main\NotImplementedException * @throws Main\NotSupportedException * @throws Main\ObjectNotFoundException */ public function onBasketModify($action, BasketItem $basketItem, $name = null, $oldValue = null, $value = null) { if ($action != EventActions::UPDATE) { return new Result(); } if ($name == "QUANTITY") { if ($value < 0) { $result = new Result(); $result->addError(new ResultError(Loc::getMessage('SALE_ORDER_BASKET_WRONG_QUANTITY', array('#PRODUCT_NAME#' => $basketItem->getField('NAME'))), 'SALE_ORDER_BASKET_WRONG_QUANTITY')); return $result; } /** @var ShipmentCollection $shipmentCollection */ if (!($shipmentCollection = $this->getShipmentCollection())) { throw new Main\ObjectNotFoundException('Entity "ShipmentCollection" not found'); } $result = $shipmentCollection->onBasketModify($action, $basketItem, $name, $oldValue, $value); if (!$result->isSuccess()) { return $result; } if ($value == 0) { /** @var Result $r */ $r = $this->refreshVat(); if (!$r->isSuccess()) { return $r; } if ($tax = $this->getTax()) { $tax->refreshData(); } } if ($basketItem->isBundleChild()) { return $result; } /** @var Result $result */ $result = $this->setField("PRICE", $this->getBasket()->getPrice() + $this->getShipmentCollection()->getPriceDelivery()); if ($this->getId() == 0 && !$this->isMathActionOnly()) { $shipmentCollection->refreshData(); } return $result; } elseif ($name == "PRICE") { /** @var Result $result */ $result = $this->setField("PRICE", $this->getBasket()->getPrice() + $this->getShipmentCollection()->getPriceDelivery()); /** @var ShipmentCollection $shipmentCollection */ if (!($shipmentCollection = $this->getShipmentCollection())) { throw new Main\ObjectNotFoundException('Entity "ShipmentCollection" not found'); } if ($this->getId() == 0 && !$this->isMathActionOnly()) { $shipmentCollection->refreshData(); } return $result; } elseif ($name == "CURRENCY") { if ($value != $this->getField("CURRENCY")) { throw new Main\NotSupportedException("CURRENCY"); } } elseif ($name == "DIMENSIONS") { /** @var ShipmentCollection $shipmentCollection */ if (!($shipmentCollection = $this->getShipmentCollection())) { throw new Main\ObjectNotFoundException('Entity "ShipmentCollection" not found'); } return $shipmentCollection->onBasketModify($action, $basketItem, $name, $oldValue, $value); } return new Result(); }
public static function checkAvailableProductQuantity(BasketItem $basketItem, $deltaQuantity) { global $APPLICATION; $result = new Result(); $resultProductData = array(); $orderId = null; $userId = null; $siteId = null; /** @var Basket $basket */ $basket = $basketItem->getCollection(); if (($order = $basket->getOrder()) !== null) { $userId = $order->getUserId(); $siteId = $order->getSiteId(); } if ($userId === null || $siteId === null) { static $usersIds = array(); if (empty($usersIds[$basket->getFUserId()])) { $usersIds[$basket->getFUserId()] = \CSaleUser::GetUserID($basket->getFUserId()); } $userId = $usersIds[$basket->getFUserId()]; $siteId = $basket->getSiteId(); } if ($provider = $basketItem->getProvider()) { if ($provider instanceof Provider) { throw new NotSupportedException('provider not supported'); // $result = $provider::getProductData($siteId, $userId, $currency, $providerBasketItemList, $select); } elseif ($provider && array_key_exists("IBXSaleProductProvider", class_implements($provider))) { $needQuantity = $basketItem->getQuantity(); if ($order && $order->getId() > 0) { $needQuantity = $deltaQuantity; } $data = array("PRODUCT_ID" => $basketItem->getProductId(), "QUANTITY" => $needQuantity, "USER_ID" => $userId, "SITE_ID" => $siteId, "BASKET_ID" => $basketItem->getId(), "CHECK_QUANTITY" => "Y", 'CHECK_PRICE' => 'N', 'CHECK_COUPONS' => 'N', "SELECT_QUANTITY_TRACE" => "Y"); // TODO: ! if ($deltaQuantity <= 0) { $result->setData(array('AVAILABLE_QUANTITY' => $deltaQuantity)); return $result; } $APPLICATION->ResetException(); $resultProductData = $provider::GetProductData($data); if ($ex = $APPLICATION->GetException()) { $result->addError(new ResultError($ex->GetString(), $ex->GetID())); } } else { $APPLICATION->ResetException(); $resultProductData = \CSaleBasket::ExecuteCallbackFunction($basketItem->getField('CALLBACK_FUNC'), $basketItem->getField('MODULE'), $basketItem->getProductId(), $basketItem->getQuantity()); if ($ex = $APPLICATION->GetException()) { $result->addError(new ResultError($ex->GetString(), $ex->GetID())); } } } else { $availableQuantity = $basketItem->getQuantity(); if ($deltaQuantity <= 0) { $availableQuantity = $deltaQuantity; } $result->setData(array('AVAILABLE_QUANTITY' => $availableQuantity)); return $result; } $fields = array(); if (array_key_exists('QUANTITY', $resultProductData)) { $fields['AVAILABLE_QUANTITY'] = $resultProductData['QUANTITY']; } if (array_key_exists('QUANTITY_TRACE', $resultProductData)) { $fields['QUANTITY_TRACE'] = $resultProductData['QUANTITY_TRACE'] == "Y"; } if (!empty($fields)) { $result->setData($fields); } return $result; }
/** * Perform reading main data from database, no cache is used for it * @throws Main\SystemException * @return void */ protected function obtainDataOrder() { global $USER; $select = array('ID', 'LID', 'PERSON_TYPE_ID', 'PAYED', 'DATE_PAYED', 'EMP_PAYED_ID', 'CANCELED', 'DATE_CANCELED', 'EMP_CANCELED_ID', 'REASON_CANCELED', 'MARKED', 'DATE_MARKED', 'EMP_MARKED_ID', 'REASON_MARKED', 'STATUS_ID', 'DATE_STATUS', 'EMP_STATUS_ID', 'PRICE_DELIVERY', 'PRICE', 'CURRENCY', 'DISCOUNT_VALUE', 'USER_ID', 'DATE_INSERT', 'DATE_INSERT_FORMAT', 'DATE_UPDATE', 'USER_DESCRIPTION', 'ADDITIONAL_INFO', 'COMMENTS', 'TAX_VALUE', 'STAT_GID', 'RECURRING_ID', 'RECOUNT_FLAG', 'ORDER_TOPIC', 'ACCOUNT_NUMBER', 'XML_ID'); $sort = array("ID" => "ASC"); $filter = array("USER_ID" => $USER->GetID(), "ACCOUNT_NUMBER" => $this->requestData["ID"]); $arOrder = false; if ($this->options['USE_ACCOUNT_NUMBER']) { $res = \Bitrix\Sale\OrderTable::getList(array('filter' => $filter, 'select' => $select)); if ($arOrder = $res->fetch()) { $this->requestData["ID"] = $arOrder["ID"]; } } if (!$arOrder) { $filter = array("USER_ID" => $USER->GetID(), "ID" => $this->requestData["ID"]); $res = \Bitrix\Sale\OrderTable::getList(array('filter' => $filter, 'select' => $select)); $arOrder = $res->fetch(); } if (empty($arOrder)) { throw new Main\SystemException(str_replace("#ID#", $this->requestData["ID"], Localization\Loc::getMessage("SPOD_NO_ORDER")), self::E_ORDER_NOT_FOUND); } $arOShipment = array(); $dbShipment = \Bitrix\Sale\Internals\ShipmentTable::getList(array('select' => array('DELIVERY_NAME', 'DEDUCTED', 'DATE_DEDUCTED', 'EMP_DEDUCTED_ID', 'REASON_UNDO_DEDUCTED', 'SYSTEM', 'ID', 'DELIVERY_ID', 'TRACKING_NUMBER', 'TRACKING_STATUS', 'TRACKING_DESCRIPTION', 'ALLOW_DELIVERY', 'DATE_ALLOW_DELIVERY', 'EMP_ALLOW_DELIVERY_ID', 'RESERVED', 'DELIVERY_DOC_NUM', 'DELIVERY_DOC_DATE'), 'filter' => array('ORDER_ID' => $arOrder['ID']))); while ($arShipment = $dbShipment->fetch()) { if ($arShipment['SYSTEM'] == 'Y') { continue; } $dbShipmentItem = \Bitrix\Sale\Internals\ShipmentItemTable::getList(array('select' => array('BASKET_ID', 'QUANTITY'), 'filter' => array('ORDER_DELIVERY_ID' => $arShipment['ID']))); $shipmentItems = array(); while ($shipmentItem = $dbShipmentItem->fetch()) { $shipmentItem['QUANTITY'] = \Bitrix\Sale\BasketItem::formatQuantity($shipmentItem['QUANTITY']); $shipmentItems[$shipmentItem['BASKET_ID']] = $shipmentItem; } $arShipment['ITEMS'] = $shipmentItems; $arShipment['TRACKING_STATUS'] = \Bitrix\Sale\Delivery\Tracking\Manager::getStatusName($arShipment['TRACKING_STATUS']); $arOShipment[] = $arShipment; } $arOrder['SHIPMENT'] = $arOShipment; // for compatibility if (!empty($this->compatibilityShipmentFields) && is_array($this->compatibilityShipmentFields)) { foreach ($this->compatibilityShipmentFields as $shipmentField) { if (isset($arOShipment[0][$shipmentField])) { $setFieldValue = $arOShipment[0][$shipmentField]; if ($setFieldValue instanceof Main\Type\Date || $setFieldValue instanceof Main\Type\DateTime) { $setFieldValue = $setFieldValue->toString(); } $arOrder[$shipmentField] = $setFieldValue; } } } // $arOrder['DELIVERY_ID'] = $arOShipment[0]['DELIVERY_ID']; // $arOrder['TRACKING_NUMBER'] = $arOShipment[0]['TRACKING_NUMBER']; $dbPayment = \Bitrix\Sale\Internals\PaymentTable::getList(array('select' => array('PAY_SYSTEM_NAME', 'PAID', 'ID', 'DATE_PAID', 'PAY_SYSTEM_ID', 'SUM', 'PAY_VOUCHER_NUM', 'PAY_VOUCHER_DATE', 'PS_STATUS', 'PS_STATUS_CODE', 'PS_STATUS_DESCRIPTION', 'PS_STATUS_MESSAGE', 'PS_SUM', 'PS_CURRENCY', 'PS_RESPONSE_DATE', 'DATE_PAY_BEFORE', 'DATE_BILL'), 'filter' => array('ORDER_ID' => $arOrder['ID']))); $arOPayment = array(); while ($arPayment = $dbPayment->fetch()) { $arPayment['PAY_SYSTEM_NAME'] = htmlspecialcharsbx($arPayment['PAY_SYSTEM_NAME']); $arOPayment[] = $arPayment; } $arOrder['PAYMENT'] = $arOPayment; // for compatibility // $arOrder['PAY_SYSTEM_ID'] = $arOPayment[0]['PAY_SYSTEM_ID']; // $arOrder['PAY_VOUCHER_NUM'] = $arOPayment[0]['PAY_VOUCHER_NUM']; if (!empty($this->compatibilityPaymentFields) && is_array($this->compatibilityPaymentFields)) { foreach ($this->compatibilityPaymentFields as $paymentName => $paymentField) { $findPaymentField = $paymentField; if (intval($paymentName) !== $paymentName) { $findPaymentField = $paymentName; } if (isset($arOPayment[0][$findPaymentField])) { $setFieldValue = $arOPayment[0][$findPaymentField]; if ($setFieldValue instanceof Main\Type\Date || $setFieldValue instanceof Main\Type\DateTime) { $setFieldValue = $setFieldValue->toString(); } $arOrder[$paymentField] = $setFieldValue; } } } $this->dbResult = $arOrder; }
/** * @param array $oldOrder * @return Shipment * @internal */ public static function convertOrderOldToNew(array $oldOrder) { $siteId = isset($oldOrder["SITE_ID"]) ? $oldOrder["SITE_ID"] : SITE_ID; $newOrder = \Bitrix\Sale\Order::create($siteId, null, $oldOrder["CURRENCY"]); $isStartField = $newOrder->isStartField(); if (!empty($oldOrder["PERSON_TYPE_ID"]) && intval($oldOrder["PERSON_TYPE_ID"]) > 0) { $personTypeId = $oldOrder["PERSON_TYPE_ID"]; } else { $dbPersonType = \CSalePersonType::GetList(array("SORT" => "ASC", "NAME" => "ASC"), array("ACTIVE" => "Y", "LID" => $siteId)); if ($arPersonType = $dbPersonType->GetNext()) { $personTypeId = $arPersonType["ID"]; } else { $personTypeId = 1; } } $newOrder->setPersonTypeId($personTypeId); $newOrder->setFieldNoDemand("PRICE", $oldOrder["PRICE"]); $basket = \Bitrix\Sale\Basket::create($siteId); $settableFields = array_flip(\Bitrix\Sale\BasketItemBase::getSettableFields()); if (!empty($oldOrder["ITEMS"]) && is_array($oldOrder["ITEMS"])) { foreach ($oldOrder["ITEMS"] as $oldBasketItem) { $basketId = null; if (!empty($oldBasketItem['ID']) && intval($oldBasketItem['ID']) > 0) { $basketId = $oldBasketItem['ID']; } $newBasketItem = \Bitrix\Sale\BasketItem::create($basket, $oldBasketItem['MODULE'], $oldBasketItem['PRODUCT_ID']); $oldBasketItem = array_intersect_key($oldBasketItem, $settableFields); $newBasketItem->setFieldsNoDemand($oldBasketItem); if ($basketId > 0) { $newBasketItem->setFieldNoDemand('ID', $basketId); } if ($newBasketItem->isBundleChild()) { continue; } $basket->addItem($newBasketItem); } } $props = $newOrder->getPropertyCollection(); if (!empty($oldOrder['PROPERTIES']) && is_array($oldOrder['PROPERTIES'])) { $r = $props->setValuesFromPost($oldOrder, $_FILES); } $newOrder->setBasket($basket); if ($loc = $props->getDeliveryLocation()) { $loc->setValue($oldOrder["LOCATION_TO"]); } if ($loc = $props->getDeliveryLocationZip()) { $loc->setValue($oldOrder["LOCATION_ZIP"]); } /** @var \Bitrix\Sale\ShipmentCollection $shipmentCollection */ $shipmentCollection = $newOrder->getShipmentCollection(); $shipment = $shipmentCollection->createItem(); $shipment->setField("CURRENCY", $oldOrder["CURRENCY"]); $shipmentItemCollection = $shipment->getShipmentItemCollection(); foreach ($newOrder->getBasket() as $item) { $shipmentItem = $shipmentItemCollection->createItem($item); $shipmentItem->setQuantity($item->getQuantity()); if (strlen($shipmentItem->getField("DIMENSIONS"))) { $shipmentItem->setField("DIMENSIONS", unserialize($shipmentItem->getField("DIMENSIONS"))); } } if (isset($arOrder["DELIVERY_EXTRA_SERVICES"])) { $shipment->setExtraServices($arOrder["DELIVERY_EXTRA_SERVICES"]); } return $shipment; }