• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/shipmentitem.php
  • Класс: BitrixSaleShipmentItem
  • Вызов: ShipmentItem::setReserveQuantity
protected function setReserveQuantity($value, $oldValue)
{
	$result = new Result();

	$basketItem = $this->getBasketItem();

	$reserveCollection = $basketItem->getReserveQuantityCollection();
	if (!$reserveCollection)
	{
		return $result;
	}

	if ($value - $oldValue > 0) // plus
	{
		$reserve = null;
		foreach ($reserveCollection as $reserve)
		{
			break;
		}

		if ($reserve === null)
		{
			$reserve = $reserveCollection->create();
		}

		$settableReserveQuantity = $reserve->getQuantity() + $value - $oldValue;
		$reserve->setFieldNoDemand('QUANTITY', $settableReserveQuantity);
	}
	else // minus
	{
		$delta = abs($value - $oldValue);

		/** @var ReserveQuantity $reserve */
		foreach ($reserveCollection as $reserve)
		{
			if ($delta === 0)
			{
				break;
			}

			if ($reserve->getQuantity() > $delta)
			{
				$settableReserveQuantity = $reserve->getQuantity() - $delta;
				$reserve->setFieldNoDemand('QUANTITY', $settableReserveQuantity);

				break;
			}

			$delta -= $reserve->getQuantity();
			$reserve->deleteNoDemand();
		}
	}

	return $result;
}