...Человеческий поиск в разработке...
- Модуль: 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; }