- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/shipmentcollection.php
- Класс: BitrixSaleShipmentCollection
- Вызов: ShipmentCollection::onOrderModify
public function onOrderModify($name, $oldValue, $value)
{
$result = new Result();
switch($name)
{
case "CANCELED":
if ($value == "Y")
{
$isShipped = false;
/** @var Shipment $shipment */
foreach ($this->collection as $shipment)
{
if ($shipment->isShipped())
{
$isShipped = true;
break;
}
}
if ($isShipped)
{
$result->addError(
new ResultError(
Loc::getMessage('SALE_ORDER_CANCEL_SHIPMENT_EXIST_SHIPPED'),
'SALE_ORDER_CANCEL_SHIPMENT_EXIST_SHIPPED'
)
);
return $result;
}
$this->tryUnreserve();
}
else if (Configuration::isEnableAutomaticReservation())
{
/** @var Shipment $shipment */
foreach ($this->collection as $shipment)
{
if ($shipment->needReservation())
{
/** @var Result $r */
$r = $shipment->tryReserve();
if (!$r->isSuccess())
{
$registry = Registry::getInstance(static::getRegistryType());
/** @var EntityMarker $entityMarker */
$entityMarker = $registry->getEntityMarkerClassName();
$entityMarker::addMarker($this->getOrder(), $shipment, $r);
if (!$shipment->isSystem())
{
$shipment->setField('MARKED', 'Y');
}
$result->addErrors($r->getErrors());
}
}
}
}
break;
case "MARKED":
if ($value == "N")
{
/** @var Shipment $shipment */
foreach ($this->collection as $shipment)
{
if ($shipment->isSystem())
continue;
$shipment->setField('MARKED', $value);
}
}
break;
}
return $result;
}