CAllCrmProductRow::Add

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CAllCrmProductRow
  4. Add
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_product_row.php
  • Класс: \CAllCrmProductRow
  • Вызов: CAllCrmProductRow::Add
static function Add($arFields, $checkPerms = true, $regEvent = true)
{
	global $DB;

	if (!self::CheckFields('ADD', $arFields, 0))
	{
		return false;
	}

	$ownerType = isset($arFields['OWNER_TYPE']) ? strval($arFields['OWNER_TYPE']) : '';
	$ownerID = isset($arFields['OWNER_ID']) ? intval($arFields['OWNER_ID']) : 0;

	if($ownerType !== '' && $ownerID > 0)
	{
		$accContext = self::PrepareAccountingContext($ownerType, $ownerID);
		if(isset($accContext['CURRENCY_ID']))
		{
			$arFields['CURRENCY_ID'] = $accContext['CURRENCY_ID'];
		}

		if(isset($accContext['EXCH_RATE']))
		{
			$arFields['EXCH_RATE'] = $accContext['EXCH_RATE'];
		}
	}

	// Calculation of Account Data
	if(isset($arFields['CURRENCY_ID']))
	{
		$accData = CCrmAccountingHelper::PrepareAccountingData(
			array(
				'CURRENCY_ID' => $arFields['CURRENCY_ID'],
				'SUM' => isset($arFields['PRICE']) ? $arFields['PRICE'] : null,
				'EXCH_RATE' => isset($arFields['EXCH_RATE']) ? $arFields['EXCH_RATE'] : null
			)
		);

		if(is_array($accData))
		{
			$arFields['PRICE_ACCOUNT'] = $accData['ACCOUNT_SUM'];
		}
	}

	$productID = $arFields['PRODUCT_ID'] = isset($arFields['PRODUCT_ID']) ? intval($arFields['PRODUCT_ID']) : 0;
	$arFields['PRODUCT_NAME'] = isset($arFields['PRODUCT_NAME']) ? $arFields['PRODUCT_NAME'] : '';
	if ($productID > 0
		&& $arFields['PRODUCT_NAME'] !== ''
		&& $arFields['PRODUCT_NAME'] === CCrmProduct::GetProductName($productID))
	{
		$arFields['PRODUCT_NAME'] = '';
	}

	$arFields['DISCOUNT_TYPE_ID'] = isset($arFields['DISCOUNT_TYPE_ID'])
		? intval($arFields['DISCOUNT_TYPE_ID']) : \Bitrix\Crm\Discount::UNDEFINED;

	if(!\Bitrix\Crm\Discount::isDefined($arFields['DISCOUNT_TYPE_ID']))
	{
		$arFields['DISCOUNT_TYPE_ID'] = \Bitrix\Crm\Discount::PERCENTAGE;
	}

	if($arFields['DISCOUNT_TYPE_ID'] === \Bitrix\Crm\Discount::MONETARY)
	{
		$arFields['DISCOUNT_SUM'] = round(doubleval($arFields['DISCOUNT_SUM']), 2);
		$arFields['DISCOUNT_RATE'] = \Bitrix\Crm\Discount::calculateDiscountRate(
			($arFields['PRICE'] + $arFields['DISCOUNT_SUM']),
			$arFields['PRICE']
		);
	}
	else if($arFields['DISCOUNT_TYPE_ID'] === \Bitrix\Crm\Discount::PERCENTAGE)
	{
		$arFields['DISCOUNT_RATE'] = round(doubleval($arFields['DISCOUNT_RATE']), 2);
		$arFields['DISCOUNT_SUM'] = round(\Bitrix\Crm\Discount::calculateDiscountSum(
			$arFields['PRICE'],
			$arFields['DISCOUNT_RATE']
		), 2);
	}
	else
	{
		$arFields['DISCOUNT_SUM'] = $arFields['DISCOUNT_RATE'] = 0.0;
	}

	$arFields['MEASURE_CODE'] = isset($arFields['MEASURE_CODE']) ? intval($arFields['MEASURE_CODE']) : 0;
	$arFields['MEASURE_NAME'] = isset($arFields['MEASURE_NAME']) ? $arFields['MEASURE_NAME'] : '';

	$defaultMeasureInfo = \Bitrix\Crm\Measure::getDefaultMeasure();

	if($arFields['MEASURE_CODE'] <= 0)
	{
		if($productID > 0)
		{
			$measureInfos = \Bitrix\Crm\Measure::getProductMeasures($productID);
			if(isset($measureInfos[$productID]) && !empty($measureInfos[$productID]))
			{
				$measureInfo = $measureInfos[$productID][0];
				$arFields['MEASURE_CODE'] = $measureInfo['CODE'];
				$arFields['MEASURE_NAME'] = $measureInfo['SYMBOL'];
			}

		}
		if($arFields['MEASURE_CODE'] <= 0 && $defaultMeasureInfo !== null)
		{
			$arFields['MEASURE_CODE'] = $defaultMeasureInfo['CODE'];
			$arFields['MEASURE_NAME'] = $defaultMeasureInfo['SYMBOL'];
		}
	}
	elseif($arFields['MEASURE_NAME'] === '')
	{
		$measureInfo = \Bitrix\Crm\Measure::getMeasureByCode($arFields['MEASURE_CODE']);
		if(is_array($measureInfo))
		{
			$arFields['MEASURE_NAME'] = $measureInfo['SYMBOL'];
		}
	}

	$arFields['TAX_RATE'] = isset($arFields['TAX_RATE']) ? round(doubleval($arFields['TAX_RATE']), 2) : null;
	$arFields['TAX_INCLUDED'] = isset($arFields['TAX_INCLUDED']) && mb_strtoupper($arFields['TAX_INCLUDED']) === 'Y' ? 'Y' : 'N';
	$arFields['CUSTOMIZED'] = isset($arFields['CUSTOMIZED']) && mb_strtoupper($arFields['CUSTOMIZED']) === 'Y' ? 'Y' : 'N';

	$ID = $DB->Add(CCrmProductRow::TABLE_NAME, $arFields);
	if($ID === false)
	{
		self::RegisterError('DB connection was lost');
	}
	else
	{
		$arFields['ID'] = $ID;

		// Update list of taxes
		self::UpdateTotalInfo($ownerType, $ownerID);

		self::SynchronizeOwner($ownerType, $ownerID);

		if($regEvent)
		{
			self::RegisterAddEvent($ownerType, $ownerID, $arFields, $checkPerms);
		}
	}

	return $ID;
}

Добавить комментарий