- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/internals/providercreator.php
- Класс: BitrixSaleInternalsProviderCreator
- Вызов: ProviderCreator::createItemForShip
public function createItemForShip(SaleShipmentItem $shipmentItem, array $needShipList = [])
{
$basketItem = $shipmentItem->getBasketItem();
$shipment = $shipmentItem->getCollection()->getShipment();
$quantity = $shipmentItem->getQuantity();
if ($shipment->needShip() == SaleInternalsCatalogProvider::SALE_TRANSFER_PROVIDER_SHIPMENT_NEED_SHIP)
{
if ($quantity > 0)
{
$quantity *= -1;
}
}
$needUseReserve = $quantity < 0 || SaleConfiguration::isEnableAutomaticReservation();
$providerName = $basketItem->getProviderName();
$providerName = $this->clearProviderName($providerName);
if (empty($needShipList[$providerName]) && $shipmentItem->getReservedQuantity() > 0)
{
$quantity = 0;
}
$item = [
'PROVIDER_NAME' => $basketItem->getProviderName(),
'SHIPMENT_ITEM' => $shipmentItem,
'BASKET_ITEM' => $basketItem,
'QUANTITY' => $quantity,
'RESERVED_QUANTITY_BY_STORE' => [
$shipmentItem->getInternalIndex() => []
],
];
$storeData = SaleInternalsCatalogProvider::createMapShipmentItemStoreData($shipmentItem, $needUseReserve);
if ($storeData)
{
$item['STORE_DATA'] = $storeData;
$needReserveByStore = [];
foreach ($storeData as $data)
{
$item['RESERVED_QUANTITY_BY_STORE'][$shipmentItem->getInternalIndex()][$data['STORE_ID']] = $data['RESERVED_QUANTITY'];
$needReserveByStore[$data['STORE_ID']] = $data['RESERVED_QUANTITY'] > 0;
}
$item['RESERVED_QUANTITY'] = array_sum($item['RESERVED_QUANTITY_BY_STORE'][$shipmentItem->getInternalIndex()]);
$item['NEED_RESERVE'] = $item['RESERVED_QUANTITY'] > 0;
$item['NEED_RESERVE_BY_STORE'] = [
$shipmentItem->getInternalIndex() => $needReserveByStore
];
}
else
{
$item['RESERVED_QUANTITY'] = $needUseReserve ? $basketItem->getReservedQuantity() : 0;
$item['NEED_RESERVE'] = $item['RESERVED_QUANTITY'] > 0;
}
return $item;
}