• Модуль: crmmobile
  • Путь к файлу: ~/bitrix/modules/crmmobile/lib/Command/SaveEntityCommand.php
  • Класс: BitrixCrmMobileCommandSaveEntityCommand
  • Вызов: SaveEntityCommand::prepareProductRowData
private function prepareProductRowData(array &$fields): void
{
	if ($this->entity->getEntityTypeId() !== CCrmOwnerType::Deal)
	{
		return;
	}

	if (empty($fields['PRODUCT_ROWS']))
	{
		return;
	}

	$existReserveIds = [];
	foreach ($fields['PRODUCT_ROWS'] as $productRow)
	{
		if (!isset($productRow['ID']) || !is_numeric($productRow['ID']))
		{
			continue;
		}
		$existReserveIds[] = $productRow['ID'];
	}
	$existReserves = self::getReserves($existReserveIds);

	foreach ($fields['PRODUCT_ROWS'] as $productRowIndex => $productRow)
	{
		$isAutoReservation = $productRow['INPUT_RESERVE_QUANTITY'] === $productRow['QUANTITY'];
		$existReserve =
			isset($productRow['ID']) && is_numeric($productRow['ID'])
				? $existReserves[(int)$productRow['ID']]
				: null
		;
		if ($existReserve)
		{
			$isAuto = $isAutoReservation && $existReserve['IS_AUTO'] === 'Y' ? 'Y' : 'N';
		}
		else
		{
			$isAuto =
				!isset($productRow['INPUT_RESERVE_QUANTITY'])
				|| $productRow['QUANTITY'] === 0
				|| $isAutoReservation
					? 'Y'
					: 'N'
			;
		}
		$fields['PRODUCT_ROWS'][$productRowIndex]['IS_AUTO'] = $isAuto;
	}
}