- Модуль: catalog
- Путь к файлу: ~/bitrix/modules/catalog/lib/integration/report/handler/basehandler.php
- Класс: BitrixCatalogIntegrationReportHandlerBaseHandler
- Вызов: BaseHandler::getStoreProductData
private function getStoreProductData(): array
{
$accessController = AccessController::getCurrent();
if (!$accessController->check(ActionDictionary::ACTION_STORE_VIEW))
{
return [];
}
// adding a new runtime reference field with right join
// in order to select all the stores and not just the
// ones that have corresponding entries in b_catalog_store_product
$queryParams = [
'select' => [
'TITLE' => 'STORE_TMP.TITLE',
'TMP_STORE_ID' => 'STORE_TMP.ID',
'SORT' => 'STORE_TMP.SORT',
'AMOUNT_SUM',
'QUANTITY_RESERVED_SUM',
'MEASURE_ID' => 'PRODUCT.MEASURE',
],
'filter' => [
'=STORE_TMP.ACTIVE' => 'Y',
],
'group' => ['TMP_STORE_ID', 'MEASURE_ID'],
'order' => ['SORT'],
'runtime' => [
new ExpressionField('AMOUNT_SUM', 'SUM(AMOUNT)'),
new ExpressionField('QUANTITY_RESERVED_SUM', 'SUM(%s)', ['QUANTITY_RESERVED']),
(new Reference(
'STORE_TMP',
StoreTable::class,
Join::on('this.STORE_ID', 'ref.ID')
))->configureJoinType(Join::TYPE_RIGHT),
],
];
$userFilterParameters = $this->getFilterParameters();
if (isset($userFilterParameters['STORES']) && is_array($userFilterParameters['STORES']))
{
$storesList = $userFilterParameters['STORES'];
}
else
{
$storesList = null;
}
$filteredStoresList = self::getFilteredByRightsStoreList($storesList);
if (is_array($filteredStoresList))
{
$queryParams['filter']['=TMP_STORE_ID'] = $filteredStoresList;
}
if (!empty($userFilterParameters['PRODUCTS']) && is_array($userFilterParameters['PRODUCTS']))
{
$queryParams['filter']['=PRODUCT_ID'] = StoreStockFilter::prepareProductFilter($userFilterParameters['PRODUCTS']);
$queryParams['filter'][] = [
'LOGIC' => 'OR',
'!=AMOUNT' => 0,
'!=QUANTITY_RESERVED' => 0,
];
}
return StoreProductTable::getList($queryParams)->fetchAll();
}