- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/Service/Sale/BasketService.php
- Класс: Bitrix\Crm\Service\Sale\BasketService
- Вызов: BasketService::getRowsIdsToBasketIdsByFilter
private function getRowsIdsToBasketIdsByFilter(array $filter): array
{
$rows = ProductRowTable::getList([
'select' => [
'ID',
'OWNER_ID',
'OWNER_TYPE',
'PRODUCT_ID',
'PRICE',
'QUANTITY',
'XML_ID',
],
'filter' => $filter,
'order' => [
'ID' => 'ASC',
],
]);
if ($rows->getSelectedRowsCount() === 0)
{
return [];
}
$productRelations = new ProductRelationsBuilder();
$orderFilters = [];
foreach ($rows as $row)
{
$productRelations->addCrmProductRow(
(int)$row['ID'],
(int)$row['PRODUCT_ID'],
(float)$row['PRICE'],
(float)$row['QUANTITY'],
(string)$row['XML_ID']
);
$key = $row['OWNER_TYPE'] . $row['OWNER_ID'];
if (empty($orderFilters[$key]))
{
$orderFilters[$key] = [
'=OWNER_TYPE_ID' => CCrmOwnerTypeAbbr::ResolveTypeID($row['OWNER_TYPE']),
'=OWNER_ID' => (int)$row['OWNER_ID'],
];
}
}
if (empty($orderFilters))
{
return [];
}
$rows = OrderEntityTable::getList([
'select' => [
'ORDER_ID',
],
'filter' => [
'LOGIC' => 'OR',
...array_values($orderFilters),
],
]);
$orderIds = array_column($rows->fetchAll(), 'ORDER_ID');
if (empty($orderIds))
{
return [];
}
$rows = BasketTable::getList([
'select' => [
'ID',
'PRODUCT_ID',
'QUANTITY',
'PRICE',
'XML_ID',
],
'filter' => [
'=ORDER_ID' => $orderIds,
],
'order' => [
'ID' => 'ASC',
],
]);
if ($rows->getSelectedRowsCount() === 0)
{
return [];
}
foreach ($rows as $row)
{
$productRelations->addSaleBasketItem(
(int)$row['ID'],
(int)$row['PRODUCT_ID'],
(float)$row['PRICE'],
(float)$row['QUANTITY'],
(string)$row['XML_ID']
);
}
return $productRelations->getRelations();
}