• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_product_result.php
  • Класс: \CCrmProductResult
  • Вызов: CCrmProductResult::Fetch
function Fetch()
{
	if (self::$catalogIncluded === false)
	{
		if (!CModule::IncludeModule('catalog'))
			return false;
		else
			self::$catalogIncluded = true;
	}

	if ($res = parent::Fetch())
	{
		foreach ($this->arFieldAssoc as $k => $v)
		{
			if ($k !== $v && (isset($res[$k]) || array_key_exists($k, $res)))
			{
				$res[$v] = $res[$k];
				unset($res[$k]);
			}
		}

		if (is_array($this->arAdditionalSelect) && count($this->arAdditionalSelect) > 0)
		{
			$priceInfo = null;
			$CCatalogProduct = new CCatalogProduct();

			$catalogValues = false;
			if (in_array('PRICE', $this->arAdditionalSelect, true) ||
				in_array('VAT_ID', $this->arAdditionalSelect, true) ||
				in_array('VAT_INCLUDED', $this->arAdditionalSelect, true) ||
				in_array('MEASURE', $this->arAdditionalSelect, true)
			)
			{
				$catalogValues = $CCatalogProduct->GetByID($res['ID']);
			}

			$bRequirePrice = in_array('PRICE', $this->arAdditionalSelect, true);
			$bRequireCurrency = in_array('CURRENCY_ID', $this->arAdditionalSelect, true);
			if ($bRequirePrice || $bRequireCurrency)
			{
				$arPrice = CCrmProduct::getPrice($res['ID']);
				$priceInfo = array(
					'PRICE' => isset($arPrice['PRICE']) ? $arPrice['PRICE'] : null,
					'CURRENCY' => isset($arPrice['CURRENCY']) ? $arPrice['CURRENCY'] : null
				);
				if ($bRequirePrice)
					$res['PRICE'] = $priceInfo['PRICE'];
				if ($bRequireCurrency)
					$res['CURRENCY_ID'] = $priceInfo['CURRENCY'];
				unset($arPrice);

				// recalculate price
				if (!$this->bRealPrice && self::$bVatMode && $catalogValues !== false)
				{
					if (isset($res['PRICE']) && isset($catalogValues['VAT_ID']) && isset($catalogValues['VAT_INCLUDED']))
					{
						if($catalogValues['VAT_INCLUDED'] !== 'Y')
						{
							if (isset(self::$arVatRates[$catalogValues['VAT_ID']]))
							{
								$vatRate = self::$arVatRates[$catalogValues['VAT_ID']]['RATE'];
								$res['PRICE'] = (doubleval($vatRate)/100 + 1) * doubleval($res['PRICE']);
							}
						}
					}
				}
			}
			unset($bRequirePrice, $bRequireCurrency);

			foreach ($this->arAdditionalSelect as $field)
			{
				if ($field === 'ORIGINATOR_ID')
				{
					if (isset($res['XML_ID']) && !empty($res['XML_ID']) && $res['XML_ID'] !== '#' &&
						isset($res['IBLOCK_ID']) && $res['IBLOCK_ID'] != CCrmProduct::getDefaultCatalogId())
					{
						$delimiterPos = mb_strpos($res['XML_ID'], '#');
						if ($delimiterPos !== false)
						{
							$res['ORIGINATOR_ID'] = mb_substr($res['XML_ID'], 0, $delimiterPos);
						}
						else $res['ORIGINATOR_ID'] = $res['XML_ID'];
					}
					else $res['ORIGINATOR_ID'] = '';
				}
				elseif ($field === 'ORIGIN_ID')
				{
					if (isset($res['XML_ID']) && !empty($res['XML_ID']) && $res['XML_ID'] !== '#' &&
						isset($res['IBLOCK_ID']) && $res['IBLOCK_ID'] != CCrmProduct::getDefaultCatalogId())
					{
						$delimiterPos = mb_strpos($res['XML_ID'], '#');
						if ($delimiterPos !== false)
						{
							$res['ORIGIN_ID'] = mb_substr($res['XML_ID'], $delimiterPos + 1);
							if ($res['ORIGIN_ID'] === false) $res['ORIGIN_ID'] = '';
						}
						else $res['ORIGIN_ID'] = '';
					}
					else $res['ORIGIN_ID'] = '';
				}
				elseif ($field === 'VAT_ID' || $field === 'VAT_INCLUDED' || $field === 'MEASURE')
				{
					if ($field === 'VAT_ID')
						$res['VAT_ID'] =
							($catalogValues !== false && isset($catalogValues['VAT_ID'])) ?
								$catalogValues['VAT_ID'] : null;
					if ($field === 'VAT_INCLUDED')
						$res['VAT_INCLUDED'] =
							($catalogValues !== false && isset($catalogValues['VAT_INCLUDED'])) ?
								$catalogValues['VAT_INCLUDED'] : null;
					if ($field === 'MEASURE')
						$res['MEASURE'] =
							($catalogValues !== false && isset($catalogValues['MEASURE'])) ?
								$catalogValues['MEASURE'] : null;
				}
			}
		}
		if (in_array('XML_ID', $this->arAdditionalSelect, true) && isset($res['XML_ID'])) unset($res['XML_ID']);
	}

	return $res;
}