- Модуль: 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;
}