• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/Reservation/Component/InventoryManagementChecker.php
  • Класс: Bitrix\Crm\Reservation\Component\InventoryManagementChecker
  • Вызов: InventoryManagementChecker::checkBeforeAdd
public function checkBeforeAdd(array $entityFields): Main\Result
{
	$result = new Main\Result();
	$result->setData($entityFields);

	if (!$this->isProcessInventoryManagementAvailable())
	{
		return $result;
	}

	$semanticId =
		$this->item->hasField(Crm\Item::FIELD_NAME_STAGE_SEMANTIC_ID)
			? $this->item->getStageSemanticId()
			: null
	;
	if (!$semanticId)
	{
		$stageId = $entityFields[Crm\Item::FIELD_NAME_STAGE_ID] ?? null;
		if (!$stageId)
		{
			return $result;
		}

		$semanticId = $this->factory->getStageSemantics($stageId);
	}

	if ($semanticId && Crm\PhaseSemantics::isSuccess($semanticId))
	{
		$productRows = $this->getEntityProducts();
		if ($productRows)
		{
			$checkResult = self::checkQuantityFromArray(CCrmOwnerType::Deal, 0, $productRows);
			if (!$checkResult->isSuccess())
			{
				$result->addError(Crm\Reservation\Error\InventoryManagementError::create());
			}

			$checkResult = self::checkAvailabilityServices(self::filterServices($productRows));
			if (!$checkResult->isSuccess())
			{
				$result->addError(Crm\Reservation\Error\AvailabilityServices::create());
			}

			if (!$result->isSuccess())
			{
				unset(
					$entityFields[Crm\Item::FIELD_NAME_STAGE_ID],
					$entityFields[Crm\Item::FIELD_NAME_STAGE_SEMANTIC_ID]
				);

				$result->setData($entityFields);
			}
		}
	}

	return $result;
}