- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/internals/providerbuilder.php
- Класс: BitrixSaleInternalsProviderBuilder
- Вызов: ProviderBuilder::addProductByShipmentItem
public function addProductByShipmentItem(SaleShipmentItem $shipmentItem)
{
$basketItem = $shipmentItem->getBasketItem();
$productId = $basketItem->getProductId();
$fields = [
'ITEM_CODE' => $productId,
'BASKET_CODE' => $basketItem->getBasketCode(),
'PRODUCT_ID' => $productId,
'QUANTITY' => $shipmentItem->getQuantity(),
'IS_BARCODE_MULTI' => $basketItem->isBarcodeMulti(),
'BUNDLE_CHILD' => $basketItem->isBundleChild(),
'SHIPMENT_ITEM_DATA' => [
$shipmentItem->getInternalIndex() => $shipmentItem->getQuantity()
],
'SHIPMENT_ITEM' => $shipmentItem,
];
if (SaleConfiguration::useStoreControl())
{
$storeData = SaleInternalsCatalogProvider::createMapShipmentItemStoreData($shipmentItem);
$reservedQuantity = 0;
$needReserveByStore = [];
if ($storeData)
{
foreach ($storeData as $item)
{
$reservedQuantity += $item['RESERVED_QUANTITY'];
$needReserveByStore[$item['STORE_ID']] = $item['RESERVED_QUANTITY'] > 0;
}
}
$fields['STORE_DATA'] = array(
$shipmentItem->getInternalIndex() => $storeData
);
$fields['NEED_RESERVE_BY_STORE'] = [
$shipmentItem->getInternalIndex() => $needReserveByStore
];
}
else
{
$reservedQuantity = $basketItem->getReservedQuantity();
}
$fields['RESERVED_QUANTITY'] = $reservedQuantity;
$fields['NEED_RESERVE'] = [
$shipmentItem->getInternalIndex() => $reservedQuantity > 0
];
$this->addItem($productId, $fields);
}