• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/Service/Sale/Reservation/ReservationService.php
  • Класс: Bitrix\Crm\Service\Sale\Reservation\ReservationService
  • Вызов: ReservationService::fillCrmReserves
public function fillCrmReserves(array $productRows): array
{
	$productRowIds = array_filter(
		array_column($productRows, 'ID')
	);

	$crmReserves = [];
	if (!empty($productRowIds))
	{
		$rows = ProductRowReservationTable::getList([
			'select' => [
				'ROW_ID',
				'STORE_ID',
				'DATE_RESERVE_END',
				'RESERVE_QUANTITY',
				'RESERVE_ID' => 'PRODUCT_RESERVATION_MAP.BASKET_RESERVATION_ID',
			],
			'filter' => [
				'=ROW_ID' => $productRowIds,
			],
		]);
		foreach ($rows as $row)
		{
			$rowId = (int)$row['ROW_ID'];
			$crmReserves[$rowId] = [
				'STORE_ID' => isset($row['STORE_ID']) ? (int)$row['STORE_ID'] : null,
				'RESERVE_ID' => isset($row['RESERVE_ID']) ? (int)$row['RESERVE_ID'] : null,
				'RESERVE_QUANTITY' => isset($row['RESERVE_QUANTITY']) ? (float)$row['RESERVE_QUANTITY'] : null,
				'DATE_RESERVE_END' => isset($row['DATE_RESERVE_END']) ? (string)$row['DATE_RESERVE_END'] : null,
			];
		}
	}

	$defaulValues = [
		'STORE_ID' => null,
		'RESERVE_ID' => null,
		'DATE_RESERVE_END' => null,
		'RESERVE_QUANTITY' => null,
	];
	foreach ($productRows as &$row)
	{
		$rowId = $row['ID'];

		$reserve = $crmReserves[$rowId] ?? null;
		if ($reserve !== null)
		{
			foreach ($defaulValues as $key => $defaulValue)
			{
				$row[$key] = $reserve[$key] ?? $defaulValue;
			}
		}
		else
		{
			$row += $defaulValues;
		}
	}
	unset($row);

	return $productRows;
}