- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/shipment.php
- Класс: BitrixSaleShipment
- Вызов: Shipment::updateReservedFlag
static function updateReservedFlag(Shipment $shipment)
{
$shipmentReserved = true;
$shipmentItemList = $shipment->getShipmentItemCollection()->getShippableItems();
if ($shipmentItemList->count() === 0)
{
$shipmentReserved = false;
}
/** @var ShipmentItem $shipmentItem */
foreach ($shipmentItemList as $shipmentItem)
{
if ($shipmentItem->getQuantity() - $shipmentItem->getReservedQuantity())
{
$shipmentReserved = false;
break;
}
}
$shipmentReservedValue = $shipmentReserved ? "Y" : "N";
$currentValue = $shipment->getField('RESERVED');
if ($shipment->getField('RESERVED') != $shipmentReservedValue)
{
$eventManager = MainEventManager::getInstance();
$eventsList = $eventManager->findEventHandlers('sale', EventActions::EVENT_ON_BEFORE_SHIPMENT_RESERVE);
if (!empty($eventsList))
{
/** @var MainEntityEvent $event */
$event = new MainEvent('sale', EventActions::EVENT_ON_BEFORE_SHIPMENT_RESERVE, [
'ENTITY' => $shipment,
'VALUE' => $shipmentReservedValue,
]);
$event->send();
if ($event->getResults())
{
$result = new Result();
/** @var MainEventResult $eventResult */
foreach($event->getResults() as $eventResult)
{
if($eventResult->getType() === MainEventResult::ERROR)
{
$errorMsg = new ResultError(MainLocalizationLoc::getMessage('SALE_EVENT_ON_BEFORE_SHIPMENT_RESERVE_ERROR'), 'SALE_EVENT_ON_BEFORE_SHIPMENT_RESERVE_ERROR');
$eventResultData = $eventResult->getParameters();
if ($eventResultData)
{
if (isset($eventResultData) && $eventResultData instanceof ResultError)
{
/** @var ResultError $errorMsg */
$errorMsg = $eventResultData;
}
}
$result->addError($errorMsg);
}
}
if (!$result->isSuccess())
{
return $result;
}
}
}
$shipment->setFieldNoDemand('RESERVED', $shipmentReserved ? "Y" : "N");
InternalsEventsPool::addEvent('s'.$shipment->getInternalIndex(), EventActions::EVENT_ON_SHIPMENT_RESERVED, [
'ENTITY' => $shipment,
'VALUE' => $shipmentReservedValue,
'OLD_VALUE' => $currentValue,
]);
}
return new Result();
}