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