- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/providerbase.php
- Класс: BitrixSaleProviderBase
- Вызов: ProviderBase::setShipmentItemReserved
static function setShipmentItemReserved(Shipment $shipment)
{
$result = new Result();
$needShip = $shipment->needShip();
if ($needShip === null
|| ($needShip === false && !$shipment->isReserved()))
{
return $result;
}
$order = $shipment->getParentOrder();
if (!$order)
{
throw new ObjectNotFoundException('Entity "Order" not found');
}
if (
Configuration::isEnableAutomaticReservation()
&& !$shipment->needReservation()
)
{
if ($needShip === false)
{
if (!InternalsActionEntity::isTypeExists(
$order->getInternalId(),
InternalsActionEntity::ACTION_ENTITY_SHIPMENT_COLLECTION_RESERVED_QUANTITY
)
)
{
InternalsActionEntity::add(
$order->getInternalId(),
InternalsActionEntity::ACTION_ENTITY_SHIPMENT_COLLECTION_RESERVED_QUANTITY,
array(
'METHOD' => 'BitrixSaleShipmentCollection::updateReservedFlag',
'PARAMS' => array($shipment->getCollection())
)
);
}
}
return $result;
}
/** @var ShipmentItemCollection $shipmentItemCollection */
$shipmentItemCollection = $shipment->getShipmentItemCollection();
/** @var ShipmentItem $shipmentItem */
foreach ($shipmentItemCollection as $shipmentItem)
{
/** @var BasketItem $basketItem */
$basketItem = $shipmentItem->getBasketItem();
if (!$basketItem)
{
$result->addError(new ResultError(
Loc::getMessage(
'SALE_PROVIDER_BASKET_ITEM_NOT_FOUND',
[
'#BASKET_ITEM_ID#' => $shipmentItem->getBasketId(),
'#SHIPMENT_ID#' => $shipment->getId(),
'#SHIPMENT_ITEM_ID#' => $shipmentItem->getId(),
]
),
'PROVIDER_SET_SHIPMENT_ITEM_RESERVED_WRONG_BASKET_ITEM')
);
return $result;
}
$providerName = $basketItem->getProvider();
$providerClass = null;
if (class_exists($providerName))
{
$providerClass = new $providerName();
}
if ($providerClass && ($providerClass instanceof SaleProviderBase))
{
continue;
}
$setReservedQuantity = 0;
if ($needShip === false)
{
if ($basketItem->isBundleParent())
{
continue;
}
$setReservedQuantity = $shipmentItem->getQuantity();
}
$shipmentItem->setFieldNoDemand('RESERVED_QUANTITY', $setReservedQuantity);
}
if ($needShip === false)
{
if (!InternalsActionEntity::isTypeExists(
$order->getInternalId(),
InternalsActionEntity::ACTION_ENTITY_SHIPMENT_COLLECTION_RESERVED_QUANTITY
)
)
{
InternalsActionEntity::add(
$order->getInternalId(),
InternalsActionEntity::ACTION_ENTITY_SHIPMENT_COLLECTION_RESERVED_QUANTITY,
array(
'METHOD' => 'BitrixSaleShipmentCollection::updateReservedFlag',
'PARAMS' => array($shipment->getCollection())
)
);
}
}
return $result;
}