• Модуль: 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;
}