- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/compatible/ordercompatibility.php
- Класс: BitrixSaleCompatibleOrderCompatibility
- Вызов: OrderCompatibility::reserve
static function reserve($orderId, $value)
{
$result = new SaleResult();
$registry = SaleRegistry::getInstance(static::getRegistryType());
/** @var SaleOrder $orderClassName */
$orderClassName = $registry->getOrderClassName();
if (!$order = $orderClassName::load($orderId))
{
$result->addError( new SaleResultError(MainLocalizationLoc::getMessage('SALE_COMPATIBLE_ORDER_NOT_FOUND'), 'SALE_COMPATIBLE_ORDER_NOT_FOUND') );
return $result;
}
/** @var SaleShipmentCollection $shipmentCollection */
if (!$shipmentCollection = $order->getShipmentCollection())
{
throw new MainObjectNotFoundException('Entity "ShipmentCollection" not found');
}
/** @var SaleShipment $shipment */
foreach ($shipmentCollection as $shipment)
{
if ($shipment->isSystem())
continue;
if ($value == "Y")
{
/** @var SaleResult $r */
$r = $shipment->tryReserve();
if (!$r->isSuccess())
{
$registry = SaleRegistry::getInstance(static::getRegistryType());
/** @var SaleEntityMarker $entityMarkerClassName */
$entityMarkerClassName = $registry->getEntityMarkerClassName();
$entityMarkerClassName::addMarker($order, $shipment, $r);
if (!$shipment->isSystem())
{
$shipment->setField('MARKED', 'Y');
}
$result->addErrors($r->getErrors());
}
}
else
{
if (!$shipment->isShipped())
{
/** @var SaleResult $r */
$r = $shipment->tryUnreserve();
if (!$r->isSuccess())
{
$registry = SaleRegistry::getInstance(static::getRegistryType());
/** @var SaleEntityMarker $entityMarkerClassName */
$entityMarkerClassName = $registry->getEntityMarkerClassName();
$entityMarkerClassName::addMarker($order, $shipment, $r);
if (!$shipment->isSystem())
{
$shipment->setField('MARKED', 'Y');
}
$result->addErrors($r->getErrors());
}
}
}
}
/** @var SaleResult $r */
$r = $order->save();
if (!$r->isSuccess())
{
$result->addErrors($r->getErrors());
}
return $result;
}