• Модуль: 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;
}