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