- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/internals/providerbuilder.php
- Класс: BitrixSaleInternalsProviderBuilder
- Вызов: ProviderBuilder::setItemsResultAfterTryShip
public function setItemsResultAfterTryShip(PoolQuantity $pool, array $productTryShipList)
{
$products = $this->getItems();
if (empty($products))
{
return new SaleResult();
}
foreach ($products as $productId => $productData)
{
if (!isset($productTryShipList[$productId]))
{
continue;
}
if (empty($productData['SHIPMENT_ITEM_DATA_LIST']))
{
continue;
}
if (empty($productData['SHIPMENT_ITEM_LIST']))
{
continue;
}
/**
* @var int $shipmentItemIndex
* @var SaleShipmentItem $shipmentItem
*/
foreach ($productData['SHIPMENT_ITEM_DATA_LIST'] as $shipmentItemIndex => $shipmentItemQuantity)
{
$shipmentItem = $productData['SHIPMENT_ITEM_LIST'][$shipmentItemIndex] ?? null;
if ($shipmentItem === null)
{
continue;
}
$shipment = $shipmentItem->getCollection()->getShipment();
$coefficient = -1;
if ($shipment->needShip() === SaleInternalsCatalogProvider::SALE_TRANSFER_PROVIDER_SHIPMENT_NEED_NOT_SHIP)
{
$coefficient = 1;
}
$shipmentItemQuantity = $shipmentItem->getQuantity();
/** @var SaleShipmentItemStoreCollection $shipmentItemStoreCollection */
$shipmentItemStoreCollection = $shipmentItem->getShipmentItemStoreCollection();
if ($shipmentItemStoreCollection)
{
/** @var SaleShipmentItemStore $shipmentItemStore */
foreach ($shipmentItemStoreCollection as $shipmentItemStore)
{
$quantity = $coefficient * $shipmentItemStore->getQuantity();
$pool->addByStore(PoolQuantity::POOL_QUANTITY_TYPE, $productId, $shipmentItemStore->getStoreId(), $quantity);
$shipmentItemQuantity -= $shipmentItemStore->getQuantity();
}
}
if ($shipmentItemQuantity > 0)
{
$pool->add(PoolQuantity::POOL_QUANTITY_TYPE, $productId, $shipmentItemQuantity);
}
$foundItem = false;
$poolItems = SaleInternalsItemsPool::get($shipment->getOrder()->getInternalId(), $productId);
if (!empty($poolItems))
{
/** @var SaleShipmentItem $poolItem */
foreach ($poolItems as $poolItem)
{
if (
$poolItem instanceof SaleShipmentItem
&& $poolItem->getInternalIndex() == $shipmentItem->getInternalIndex()
)
{
$foundItem = true;
break;
}
}
}
if (!$foundItem)
{
SaleInternalsItemsPool::add($shipment->getOrder()->getInternalId(), $productId, $shipmentItem);
}
}
}
return new SaleResult();
}