• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_product_row.php
  • Класс: \CAllCrmProductRow
  • Вызов: CAllCrmProductRow::CalculateTotalInfo
static function CalculateTotalInfo($ownerType, $ownerID, $checkPerms = true, $params = null, $rows = null, $totalInfo = array())
{
	if (!is_array($totalInfo))
	{
		$totalInfo = array();
	}

	$result = false;
	if (isset($totalInfo['OPPORTUNITY']) && isset($totalInfo['TAX_VALUE']))
	{
		$result = array(
			'OPPORTUNITY' => round(doubleval($totalInfo['OPPORTUNITY']), 2),
			'TAX_VALUE' => round(doubleval($totalInfo['TAX_VALUE']), 2)
		);
	}
	else
	{
		$arParams = null;
		if ($ownerID <= 0)
		{
			$arParams = $params;
		}
		else
		{
			$arParams = self::getOwnerData($ownerType, $ownerID, $checkPerms);
		}

		if(!is_array($arParams))
		{
			return $result;
		}

		$arRows = null;
		if (is_array($rows))
		{
			$arRows = $rows;
		}
		elseif($ownerID > 0)
		{
			$arRows = CCrmProductRow::LoadRows($ownerType, $ownerID);
		}

		if (!is_array($arRows))
		{
			return $result;
		}

		$currencyID = isset($params['CURRENCY_ID']) ? $params['CURRENCY_ID'] : '';
		if($currencyID === '')
		{
			$currencyID = CCrmCurrency::GetBaseCurrencyID();
		}

		$companyID = isset($params['COMPANY_ID']) ? intval($params['COMPANY_ID']) : 0;
		$contactID = isset($params['CONTACT_ID']) ? intval($params['CONTACT_ID']) : 0;

		// Determine person type
		$personTypeId = 0;
		$arPersonTypes = CCrmPaySystem::getPersonTypeIDs();
		if ($companyID > 0 && isset($arPersonTypes['COMPANY']))
		{
			$personTypeId = $arPersonTypes['COMPANY'];
		}
		elseif ($contactID > 0 && isset($arPersonTypes['CONTACT']))
		{
			$personTypeId = $arPersonTypes['CONTACT'];
		}

		$enableSaleDiscount = false;
		$siteID = '';
		if (defined('SITE_ID'))
		{
			$siteID = SITE_ID;
		}
		else
		{
			$obSite = CSite::GetList('def', 'desc', array('ACTIVE' => 'Y'));
			if ($obSite && $arSite = $obSite->Fetch())
				$siteID= $arSite["LID"];
			unset($obSite, $arSite);
		}

		$calculateOptions = array();
		if (CCrmTax::isTaxMode())
		{
			$calculateOptions['LOCATION_ID'] = isset($arParams['LOCATION_ID']) ? $arParams['LOCATION_ID'] : '';
		}

		$calculated = CCrmSaleHelper::Calculate($arRows, $currencyID, $personTypeId, $enableSaleDiscount, $siteID, $calculateOptions);
		$result = array(
			'OPPORTUNITY' => isset($calculated['PRICE']) ? round(doubleval($calculated['PRICE']), 2) : 0.0,
			'TAX_VALUE' => isset($calculated['TAX_VALUE']) ? round(doubleval($calculated['TAX_VALUE']), 2) : 0.0
		);
	}

	return $result;
}