- Модуль: catalog
- Путь к файлу: ~/bitrix/modules/catalog/lib/integration/report/handler/basehandler.php
- Класс: BitrixCatalogIntegrationReportHandlerBaseHandler
- Вызов: BaseHandler::getStoreTotals
protected function getStoreTotals(): array
{
$storeTotals = $this->getStoreProductData();
if (!empty($storeTotals))
{
$receivedQuantities = $this->getReceivedQuantity();
$soldAmounts = $this->getSoldAmounts();
$outgoingQuantities = $this->getOutgoingQuantity();
$receivedQuantitiesDifference = $this->getReceivedQuantityForDifference();
$outgoingQuantitiesDifference = $this->getOutgoingQuantityForDifference();
$soldAmountsDifference = $this->getSoldAmountsForDifference();
$groupedStoreTotals = [];
foreach ($storeTotals as $key => $storeTotal)
{
$storeId = (int)$storeTotal['TMP_STORE_ID'];
$measureId = (int)$storeTotal['MEASURE_ID'] ?: CCatalogMeasure::getDefaultMeasure(true)['ID'];
if (isset($groupedStoreTotals[$storeId][$measureId]))
{
$groupedStoreTotals[$storeId][$measureId]['AMOUNT_SUM'] += (float)$storeTotal['AMOUNT_SUM'];
$groupedStoreTotals[$storeId][$measureId]['QUANTITY_RESERVED_SUM'] += (float)$storeTotal['QUANTITY_RESERVED_SUM'];
continue;
}
$groupedStoreTotals[$storeId][$measureId] = [
'TITLE' => $storeTotal['TITLE'],
'TMP_STORE_ID' => $storeId,
'SORT' => $storeTotal['SORT'],
'AMOUNT_SUM' => (float)$storeTotal['AMOUNT_SUM'],
'QUANTITY_RESERVED_SUM' => (float)$storeTotal['QUANTITY_RESERVED_SUM'],
'MEASURE_ID' => $measureId,
];
if (array_key_exists($storeId, $receivedQuantities))
{
$groupedStoreTotals[$storeId][$measureId]['RECEIVED_QUANTITIES'] = $receivedQuantities[$storeId];
}
if (array_key_exists($storeId, $receivedQuantitiesDifference))
{
$groupedStoreTotals[$storeId][$measureId]['RECEIVED_QUANTITIES_DIFFERENCE'] = $receivedQuantitiesDifference[$storeId];
}
if (array_key_exists($storeId, $outgoingQuantities))
{
$groupedStoreTotals[$storeId][$measureId]['OUTGOING_QUANTITIES'] = $outgoingQuantities[$storeId];
}
if (array_key_exists($storeId, $outgoingQuantitiesDifference))
{
$groupedStoreTotals[$storeId][$measureId]['OUTGOING_QUANTITIES_DIFFERENCE'] = $outgoingQuantitiesDifference[$storeId];
}
if (array_key_exists($storeId, $soldAmounts))
{
$groupedStoreTotals[$storeId][$measureId]['SOLD_AMOUNTS'] = $soldAmounts[$storeId];
}
if (array_key_exists($storeId, $soldAmountsDifference))
{
$groupedStoreTotals[$storeId][$measureId]['SOLD_AMOUNTS_DIFFERENCE'] = $soldAmountsDifference[$storeId];
}
ksort($groupedStoreTotals[$storeId]);
}
ksort($groupedStoreTotals);
$storeTotals = $this->prepareStoreTotals($groupedStoreTotals);
}
return $storeTotals;
}