/** * 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; }
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 $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 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; }
/** * @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; }