• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/shipmentcollection.php
  • Класс: BitrixSaleShipmentCollection
  • Вызов: ShipmentCollection::onBasketModify
public function onBasketModify($action, BasketItemBase $basketItem, $name = null, $oldValue = null, $value = null) : Result
{
	$result = new Result();

	if (!($basketItem instanceof BasketItem))
	{
		return $result;
	}

	if ($action === EventActions::DELETE)
	{
		$order = $this->getOrder();
		if ($order->getId() == 0 && !$order->isMathActionOnly())
		{
			$this->refreshData();
		}

		return $result;
	}
	elseif ($action === EventActions::ADD)
	{
		return $this->getSystemShipment()->onBasketModify($action, $basketItem, $name, $oldValue, $value);
	}
	elseif ($action !== EventActions::UPDATE)
	{
		return $result;
	}

	if ($name == 'QUANTITY')
	{
		if (!$this->isAllowAutoEdit($basketItem))
		{
			$result = $this->checkDistributedQuantity($basketItem, $value);
			if (!$result->isSuccess())
			{
				return $result;
			}
		}

		$shipment = $this->getItemForAutoEdit($basketItem);

		if ($value - $oldValue > 0)
		{
			$r = $this->getSystemShipment()->onBasketModify($action, $basketItem, $name, $oldValue, $value);
			if (!$r->isSuccess())
			{
				return $result->addErrors($r->getErrors());
			}
		}

		if ($shipment)
		{
			$r = $shipment->onBasketModify($action, $basketItem, $name, $oldValue, $value);
			if (!$r->isSuccess())
			{
				$result->addErrors($r->getErrors());
				return $result;
			}
		}

		if ($value - $oldValue < 0)
		{
			$r = $this->getSystemShipment()->onBasketModify($action, $basketItem, $name, $oldValue, $value);
			if (!$r->isSuccess())
			{
				return $result->addErrors($r->getErrors());
			}
		}
	}
	elseif (in_array($name, ['WEIGHT', 'PRICE']))
	{
		/** @var Shipment $shipment */
		foreach ($this->getNotSystemItems() as $shipment)
		{
			$shipment->onBasketModify($action, $basketItem, $name, $value, $oldValue);
		}
	}

	return $result;
}