Esempio n. 1
0
                    $arReports[] = array("TEXT" => $rep_title, "ONCLICK" => "window.open('/bitrix/admin/sale_order_print_new.php?&ORDER_ID=" . $ID . "&doc=" . substr($file, 0, strlen($file) - 4) . "&" . bitrix_sessid_get() . "', '_blank');");
                }
            }
        }
        closedir($handle);
    }
}
$aMenu[] = array("TEXT" => Loc::getMessage("SALE_OVIEW_TO_PRINT"), "TITLE" => Loc::getMessage("SALE_OVIEW_TO_PRINT_TITLE"), "LINK" => "/bitrix/admin/sale_order_print.php?ID=" . $ID . "&lang=" . LANGUAGE_ID . GetFilterParams("filter_"), "MENU" => $arReports);
$aMenu[] = array("TEXT" => Loc::getMessage("SALE_OVIEW_ORDER_COPY"), "TITLE" => Loc::getMessage("SALE_OVIEW_ORDER_COPY_TITLE"), "LINK" => '/bitrix/admin/sale_order_create.php?lang=' . LANGUAGE_ID . "&SITE_ID=" . $saleOrder->getSiteId() . "&ID=" . $ID . "&" . bitrix_sessid_get() . GetFilterParams("filter_"));
$aMenu[] = array("TEXT" => Loc::getMessage("SALE_OVIEW_DELETE"), "TITLE" => Loc::getMessage("SALE_OVIEW_DELETE_TITLE"), "LINK" => "javascript:if(confirm('" . GetMessageJS("SALE_OVIEW_DEL_MESSAGE") . "')) window.location='sale_order.php?ID=" . $ID . "&action=delete&lang=" . LANGUAGE_ID . "&" . bitrix_sessid_get() . urlencode(GetFilterParams("filter_")) . "'", "WARNING" => "Y");
$context = new CAdminContextMenu($aMenu);
$context->Show();
//prepare blocks order
$defaultBlocksOrder = array("statusorder", "buyer", "delivery", "financeinfo", "payment", "additional", "basket");
$formId = "sale_order_view";
$orderBasket = new Admin\Blocks\OrderBasket($saleOrder, "BX.Sale.Admin.OrderBasketObj", "sale_order_basket", true, Admin\Blocks\OrderBasket::VIEW_MODE);
echo Admin\OrderEdit::getScripts($saleOrder, $formId);
echo Admin\Blocks\OrderInfo::getScripts();
echo Admin\Blocks\OrderBuyer::getScripts();
echo Admin\Blocks\OrderPayment::getScripts();
echo Admin\Blocks\OrderStatus::getScripts($saleOrder, $USER->GetID());
echo Admin\Blocks\OrderAdditional::getScripts();
echo Admin\Blocks\OrderFinanceInfo::getScripts();
echo Admin\Blocks\OrderShipment::getScripts();
echo Admin\Blocks\OrderAnalysis::getScripts();
echo $orderBasket->getScripts();
$fastNavItems = array();
foreach ($defaultBlocksOrder as $item) {
    $fastNavItems[$item] = Loc::getMessage("SALE_OVIEW_BLOCK_TITLE_" . toUpper($item));
}
// navigation
Esempio n. 2
0
 protected function getProductEditDialogHtmlAction()
 {
     $currency = isset($this->request['currency']) ? $this->request['currency'] : array();
     $objName = isset($this->request['objName']) ? $this->request['objName'] : "";
     $this->addResultData('DIALOG_CONTENT', Admin\Blocks\OrderBasket::getProductEditDialogHtml($currency, $objName));
 }
Esempio n. 3
0
    public static function getView(Order $order, OrderBasket $orderBasket, $selectPayment = null, $selectId = null)
    {
        // prepare data
        $orderId = $order->getId();
        $data = $orderBasket->prepareData();
        $items = $data['ITEMS'];
        $documents = array();
        $itemNo = 0;
        /** @var \Bitrix\Sale\Payment $payment */
        foreach ($order->getPaymentCollection() as $payment) {
            $documents[] = $payment;
        }
        /** @var \Bitrix\Sale\Shipment $shipment */
        foreach ($order->getShipmentCollection() as $shipment) {
            if (!$shipment->isSystem()) {
                if (!$shipment->isCanceled() && $shipment->isShipped()) {
                    /** @var \Bitrix\Sale\ShipmentItem $shipmentItem */
                    foreach ($shipment->getShipmentItemCollection() as $shipmentItem) {
                        $basketItem = $shipmentItem->getBasketItem();
                        if (isset($items[$basketItem->getBasketCode()])) {
                            $item =& $items[$basketItem->getBasketCode()];
                            if ($shippedQuantity =& $item['SHIPPED_QUANTITY']) {
                                $shippedQuantity += (double) $shipmentItem->getField('QUANTITY');
                            } else {
                                $shippedQuantity = (double) $shipmentItem->getField('QUANTITY');
                            }
                        }
                    }
                }
                $documents[] = $shipment;
            }
        }
        unset($item, $shippedQuantity);
        usort($documents, array(__CLASS__, 'sortDocumentsByDate'));
        // render view
        ob_start();
        ?>
		<div class="adm-s-order-table-ddi">
			<table class="adm-s-order-table-ddi-table adm-s-bus-ordertable-option" style="width: 100%;">
				<thead>
				<tr>
					<td class="tac"><?php 
        echo Loc::getMessage('SALE_OANALYSIS_ITEM_NUMBER');
        ?>
</td>
					<td><?php 
        echo Loc::getMessage('SALE_OANALYSIS_ITEM_NAME');
        ?>
</td>
					<td class="tac"><?php 
        echo Loc::getMessage('SALE_OANALYSIS_ITEM_PROPERTIES');
        ?>
</td>
					<td class="tac"><?php 
        echo Loc::getMessage('SALE_OANALYSIS_ITEM_PLANNED');
        ?>
</td>
					<td class="tac"><?php 
        echo Loc::getMessage('SALE_OANALYSIS_ITEM_SHIPPED');
        ?>
</td>
					<td class="tac"><?php 
        echo Loc::getMessage('SALE_OANALYSIS_ITEM_TO_SHIP');
        ?>
</td>
				</tr>
				</thead>
				<tbody>
					<?php 
        foreach ($items as $item) {
            $properties = '<table style="margin: auto; width: 50%;">';
            if (is_array($item['SKU_PROPS'])) {
                foreach ($item['SKU_PROPS'] as $skuProp) {
                    $properties .= '<tr>';
                    $properties .= '<td style="text-align: left;">' . htmlspecialcharsbx($skuProp['NAME']) . ' : ' . '</td>';
                    if (isset($skuProp['VALUE']['PICT']) && $skuProp['VALUE']['PICT']) {
                        $properties .= '<td><span class="color"><img src="' . $skuProp['VALUE']['PICT'] . '" alt=""></span></td>';
                    } else {
                        $properties .= '<td><span>' . htmlspecialcharsbx($skuProp['VALUE']['NAME']) . '</span></td>';
                    }
                    $properties .= '</tr>';
                }
            }
            $properties .= '</table>';
            if (!($quantity = (double) $item['QUANTITY'])) {
                $quantity = 0;
            }
            if (!($shippedQuantity = $item['SHIPPED_QUANTITY'])) {
                $shippedQuantity = 0;
            }
            ?>
						<tr class="bdb-line">
							<td class="tac"><?php 
            echo ++$itemNo;
            ?>
</td>
							<td style="text-align: left;"><a class="fwb" href="<?php 
            echo $item['EDIT_PAGE_URL'];
            ?>
"><?php 
            echo htmlspecialcharsbx($item['NAME']);
            ?>
</a></td>
							<td class="tac"><?php 
            echo $properties;
            ?>
</td>
							<td class="tac"><?php 
            echo $quantity . ' ' . $item['MEASURE_TEXT'];
            ?>
</td>
							<td class="tac"><?php 
            echo $shippedQuantity . ' ' . $item['MEASURE_TEXT'];
            ?>
</td>
							<td class="tac"><?php 
            echo $quantity - $shippedQuantity . ' ' . $item['MEASURE_TEXT'];
            ?>
</td>
						</tr>
					<?php 
        }
        ?>
					<tr><td colspan="8" style="padding: 16px; background: #f7fafa; text-align: left;" class="fwb"><?php 
        echo Loc::getMessage('SALE_OANALYSIS_ITEMS_QUANTITY') . ': ' . count($items);
        ?>
</td></tr>
				</tbody>
			</table>
			<div class="adm-bus-table-contaier-white caption border" style="margin-top: 25px;">
				<div class="adm-bus-table-caption-white-title"><?php 
        echo Loc::getMessage('SALE_OANALYSIS_DOCUMENTS');
        ?>
:</div>
				<div class="adm-bus-orderdocs-threelist-container">
					<div class="adm-bus-orderdocs-threelist-block-top<?php 
        echo $selectPayment === null ? ' adm-bus-orderdocs-threelist-block-children-open' : '';
        ?>
">
						<div class="adm-bus-orderdocs-threelist-block-img adm-bus-orderdocs-threelist-block-img-order"></div>
						<div class="adm-bus-orderdocs-threelist-block-content">
							<div class="adm-bus-orderdocs-threelist-block-title">
								<a class="adm-bus-orderdocs-threelist-block-title-link fwb" href="/bitrix/admin/sale_order_edit.php?lang=ru&ID=<?php 
        echo $orderId;
        ?>
">
									<?php 
        echo Loc::getMessage('SALE_OANALYSIS_ORDER_TITLE', array('#USER_ID#' => $order->getField('USER_ID'), '#ORDER_ID#' => $orderId));
        ?>
								</a>
							</div>
							<?php 
        self::renderBottomBlocks($order->getField('DATE_INSERT'), $order->getField('RESPONSIBLE_ID'));
        ?>
						</div>
						<div class="clb"></div>
					</div>
					<?php 
        foreach ($documents as $document) {
            $isPayment = $document instanceof Payment;
            $documentId = $document->getId();
            ?>
						<div class="adm-bus-orderdocs-threelist-block-children<?php 
            echo $selectPayment === $isPayment && $selectId == $documentId ? ' adm-bus-orderdocs-threelist-block-children-open' : '';
            ?>
">
							<div class="adm-bus-orderdocs-threelist-block-img adm-bus-orderdocs-threelist-block-img-doc_<?php 
            echo $isPayment ? 'payment' : 'shipping';
            ?>
"></div>
							<div class="adm-bus-orderdocs-threelist-block-content">
								<div class="adm-bus-orderdocs-threelist-block-title">
									<?php 
            if ($isPayment) {
                ?>
										<?php 
                if ($document->isPaid()) {
                    ?>
											<span class="adm-bus-orderdocs-docstatus adm-bus-orderdocs-docstatus-paid"><?php 
                    echo Loc::getMessage('SALE_OANALYSIS_PAYMENT_PAID');
                    ?>
</span>
										<?php 
                } elseif ($document->isReturn()) {
                    ?>
											<span class="adm-bus-orderdocs-docstatus"><?php 
                    echo Loc::getMessage('SALE_OANALYSIS_PAYMENT_RETURN');
                    ?>
</span>
										<?php 
                }
                ?>
										<a href="/bitrix/admin/sale_order_payment_edit.php?order_id=<?php 
                echo $orderId;
                ?>
&payment_id=<?php 
                echo $documentId;
                ?>
" class="adm-bus-orderdocs-threelist-block-title-link">
											<?php 
                echo Loc::getMessage('SALE_OANALYSIS_PAYMENT_TITLE', array('#SYSTEM_NAME#' => htmlspecialcharsbx($document->getField('PAY_SYSTEM_NAME')), '#PAYMENT_ID#' => $documentId, '#SUM#' => SaleFormatCurrency($document->getField('SUM'), $document->getField('CURRENCY'))));
                ?>
										</a>
									<?php 
            } else {
                /* shipment*/
                ?>
										<?php 
                if ($document->isShipped()) {
                    ?>
											<span class="adm-bus-orderdocs-docstatus adm-bus-orderdocs-docstatus-shippingallowed"><?php 
                    echo Loc::getMessage('SALE_OANALYSIS_SHIPMENT_SHIPPED');
                    ?>
</span>
										<?php 
                } elseif ($document->isCanceled()) {
                    ?>
											<span class="adm-bus-orderdocs-docstatus adm-bus-orderdocs-docstatus-canceled"><?php 
                    echo Loc::getMessage('SALE_OANALYSIS_SHIPMENT_CANCELED');
                    ?>
</span>
										<?php 
                } elseif ($document->isAllowDelivery()) {
                    ?>
											<span class="adm-bus-orderdocs-docstatus adm-bus-orderdocs-docstatus-shippingallowed"><?php 
                    echo Loc::getMessage('SALE_OANALYSIS_SHIPMENT_ALLOWED');
                    ?>
</span>
										<?php 
                }
                ?>
										<a href="/bitrix/admin/sale_order_shipment_edit.php?order_id=<?php 
                echo $orderId;
                ?>
&shipment_id=<?php 
                echo $documentId;
                ?>
"
										   class="adm-bus-orderdocs-threelist-block-title-link<?php 
                echo $document->isCanceled() ? 'adm-bus-orderdocs-threelist-block-title-link-canceled' : '';
                ?>
">
											<?php 
                echo Loc::getMessage('SALE_OANALYSIS_SHIPMENT_TITLE', array('#SHIPMENT_ID#' => $documentId, '#ORDER_ID#' => $orderId));
                ?>
										</a>
									<?php 
            }
            ?>
								</div>
								<?php 
            self::renderBottomBlocks($document->getField($isPayment ? 'DATE_BILL' : 'DATE_INSERT'), $document->getField('RESPONSIBLE_ID'));
            ?>
							</div>
							<div class="clb"></div>
						</div>
					<?php 
        }
        ?>
				</div>
			</div>
		</div>
		<?php 
        $result = ob_get_contents();
        ob_end_clean();
        return $result;
    }
Esempio n. 4
0
$defaultBlocksOrder = array("statusorder", "buyer", "delivery", "payment", "additional", "basket");
$fastNavItems = array();
foreach ($defaultBlocksOrder as $item) {
    $fastNavItems[$item] = Loc::getMessage("SALE_BLOCK_TITLE_" . toUpper($item));
}
// errors
if (!$result->isSuccess() && !$isNeedFieldsRestore) {
    $message = "";
    foreach ($result->getErrors() as $error) {
        $message .= $error->getMessage() . "<br>\n";
    }
    CAdminMessage::ShowMessage(array("TYPE" => "ERROR", "MESSAGE" => $message, "HTML" => true));
}
$formId = "sale_order_edit";
$basketPrefix = "sale_order_basket";
$orderBasket = new Blocks\OrderBasket($order, "BX.Sale.Admin.OrderBasketObj", $basketPrefix);
echo OrderEdit::getScripts($order, $formId);
echo Blocks\OrderInfo::getScripts();
echo Blocks\OrderBuyer::getScripts();
echo Blocks\OrderPayment::getScripts();
echo Blocks\OrderAdditional::getScripts();
echo Blocks\OrderStatus::getScripts($order, $USER->GetID());
echo Blocks\OrderFinanceInfo::getScripts();
echo Blocks\OrderShipment::getScripts();
echo $orderBasket->getScripts();
// navigation
echo OrderEdit::getFastNavigationHtml($fastNavItems);
// yellow block with brief
echo Blocks\OrderInfo::getView($order, $orderBasket);
// Problem block
if ($order->getField("MARKED") == "Y") {
Esempio n. 5
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;
 }
Esempio n. 6
0
$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";
$basketPrefix = "sale_order_basket";
$orderBasket = new Blocks\OrderBasket($order, "BX.Sale.Admin.OrderBasketObj", $basketPrefix);
echo OrderEdit::getScripts($order, $formId);
echo Blocks\OrderBuyer::getScripts();
echo Blocks\OrderAdditional::getScripts();
echo Blocks\OrderPayment::getScripts();
echo Blocks\OrderShipment::getScripts();
echo Blocks\OrderFinanceInfo::getScripts();
echo $orderBasket->getScripts();
$fastNavItems = array();
foreach ($defaultBlocksOrder as $item) {
    $fastNavItems[$item] = Loc::getMessage("SALE_OK_BLOCK_TITLE_" . toUpper($item));
}
echo OrderEdit::getFastNavigationHtml($fastNavItems);
$aTabs = array(array("DIV" => "tab_order", "TAB" => Loc::getMessage("SALE_OK_TAB_ORDER"), "SHOW_WRAP" => "N", "IS_DRAGGABLE" => "Y"));
?>
<form method="POST" action="<?php 
Esempio n. 7
0
 public static function getTotalPrices(Order $order, OrderBasket $orderBasket, $needRecalculate = true)
 {
     $result = array('PRICE_TOTAL' => $order->getPrice(), 'TAX_VALUE' => $order->getTaxValue(), 'PRICE_DELIVERY_DISCOUNTED' => $order->getDeliveryPrice(), 'SUM_PAID' => $order->getSumPaid());
     $result["SUM_UNPAID"] = $result["PRICE_TOTAL"] - $result["SUM_PAID"];
     if (!$result["PRICE_DELIVERY_DISCOUNTED"]) {
         $result["PRICE_DELIVERY_DISCOUNTED"] = 0;
     }
     if (!$result["TAX_VALUE"]) {
         $result["TAX_VALUE"] = 0;
     }
     $orderDiscount = $order->getDiscount();
     if ($orderDiscount) {
         $discountsList = self::getDiscountsApplyResult($order, $needRecalculate);
     } else {
         $discountsList = array();
     }
     if (isset($discountsList["PRICES"]["DELIVERY"]["DISCOUNT"])) {
         $result['DELIVERY_DISCOUNT'] = $discountsList["PRICES"]["DELIVERY"]["DISCOUNT"];
     } else {
         $result['DELIVERY_DISCOUNT'] = 0;
     }
     $result['PRICE_DELIVERY'] = $result['PRICE_DELIVERY_DISCOUNTED'] + $result['DELIVERY_DISCOUNT'];
     $basketData = $orderBasket->prepareData(array("DISCOUNTS" => $discountsList));
     $result["PRICE_BASKET_DISCOUNTED"] = $basketData["BASKET_PRICE"];
     $result["PRICE_BASKET"] = $basketData["BASKET_PRICE_BASE"];
     return $result;
 }
Esempio n. 8
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;
 }