• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/Reservation/Strategy/ReserveQuantityEqualProductQuantityStrategy.php
  • Класс: Bitrix\Crm\Reservation\Strategy\ReserveQuantityEqualProductQuantityStrategy
  • Вызов: ReserveQuantityEqualProductQuantityStrategy::reservation
public function reservation(int $ownerTypeId, int $ownerId): ReservationResult
{
	$result = new ReservationResult();

	$rows = $this->getProductRows($ownerTypeId, $ownerId);
	foreach ($rows as $row)
	{
		$rowId = (int)$row['ID'];
		$quantity = (float)$row['QUANTITY'];
		if ($row['RESERVE_ID'])
		{
			$reserveInfo = $result->addReserveInfo(
				$rowId,
				$quantity,
				0
			);
			$reserveInfo->setStoreId($row['RESERVE_STORE_ID']);
			$reserveInfo->setDateReserveEnd((string)$row['RESERVE_DATE_RESERVE_END']);

			if ($row['RESERVE_IS_AUTO'] !== 'Y')
			{
				continue;
			}

			$reserveQuantity = (float)$row['RESERVE_QUANTITY'];
			if ($reserveQuantity === $quantity)
			{
				continue;
			}

			$saveResult = $this->saveCrmReserve([
				'ID' => $row['RESERVE_ID'],
				'RESERVE_QUANTITY' => $quantity,
			]);

			$reserveInfo->setDeltaReserveQuantity($quantity - $reserveQuantity);
		}
		else
		{
			$saveResult = $this->saveCrmReserve([
				'ROW_ID' => $rowId,
				'RESERVE_QUANTITY' => $quantity,
				'STORE_ID' => $this->defaultStoreId,
				'DATE_RESERVE_END' => $this->defaultDateReserveEnd,
				'IS_AUTO' => 'Y',
			]);

			$reserveInfo = $result->addReserveInfo(
				$rowId,
				$quantity,
				$quantity
			);
			$reserveInfo->setStoreId($this->defaultStoreId);
			$reserveInfo->setDateReserveEnd((string)$this->defaultDateReserveEnd);
		}

		$result->addErrors($saveResult->getErrors());
	}

	return $result;
}