• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/integration/sale/cashbox/eventhandlers/check.php
  • Класс: BitrixCatalogIntegrationSaleCashboxEventHandlersCheck
  • Вызов: Check::getContractIdsByProductsInfo
static function getContractIdsByProductsInfo(array $productsInfo): array
{
	$result = [
		'products' => [],
		'sections' => [],
	];

	$productIds = [];
	$sectionIds = [];

	foreach ($productsInfo as $productInfo)
	{
		$productIds[] = $productInfo['parent_id'];
		$sectionIds[] = $productInfo['sections'];
	}

	$sectionIds = array_unique(array_merge(...$sectionIds));

	$agentProductIterator = CatalogAgentProductTable::getList([
		'select' => ['CONTRACT_ID', 'PRODUCT_ID', 'PRODUCT_TYPE'],
		'filter' => [
			'LOGIC' => 'OR',
			[
				'=PRODUCT_ID' => $productIds,
				'=PRODUCT_TYPE' => CatalogAgentProductTable::PRODUCT_TYPE_PRODUCT,
			],
			[
				'=PRODUCT_ID' => $sectionIds,
				'=PRODUCT_TYPE' => CatalogAgentProductTable::PRODUCT_TYPE_SECTION,
			]

		],
		'order' => ['ID' => 'ASC'], // DESC ?
		// group ?
	]);
	while ($agentProduct = $agentProductIterator->fetch())
	{
		if ($agentProduct['PRODUCT_TYPE'] === CatalogAgentProductTable::PRODUCT_TYPE_PRODUCT)
		{
			$result['products'][$agentProduct['PRODUCT_ID']] = (int)$agentProduct['CONTRACT_ID'];
		}
		elseif ($agentProduct['PRODUCT_TYPE'] === CatalogAgentProductTable::PRODUCT_TYPE_SECTION)
		{
			$result['sections'][$agentProduct['PRODUCT_ID']] = (int)$agentProduct['CONTRACT_ID'];
		}
	}

	return $result;
}