$arFields['ORIGIN_ID'] = $originId; }*/ $ID = $CCrmQuote->Add($arFields, true, array('REGISTER_SONET_EVENT' => false)); $bSuccess = $ID !== false; if ($bSuccess) { $arResult['ELEMENT']['ID'] = $ID; } } if ($bSuccess) { // Save settings if (is_array($productRowSettings) && count($productRowSettings) > 0) { $arSettings = CCrmProductRow::LoadSettings(CCrmQuote::OWNER_TYPE, $arResult['ELEMENT']['ID']); foreach ($productRowSettings as $k => $v) { $arSettings[$k] = $v; } CCrmProductRow::SaveSettings(CCrmQuote::OWNER_TYPE, $arResult['ELEMENT']['ID'], $arSettings); } unset($arSettings); } if ($bSuccess && $processProductRows && ($bEdit || !empty($arProd))) { // Suppress owner synchronization $bSuccess = $CCrmQuote::SaveProductRows($arResult['ELEMENT']['ID'], $arProd, true, true, false); if (!$bSuccess) { $arResult['ERROR_MESSAGE'] = GetMessage('PRODUCT_ROWS_SAVING_ERROR'); } } if ($bSuccess) { if ($arFields['CONTACT_ID'] > 0 && $arFields['COMPANY_ID'] > 0 && isset($_POST['NEW_CONTACT_ID']) && $arFields['CONTACT_ID'] == $_POST['NEW_CONTACT_ID']) { $CrmContact = new CCrmContact(); $arContactFields = array('COMPANY_ID' => $arFields['COMPANY_ID']); $bSuccess = $CrmContact->Update($arFields['CONTACT_ID'], $arContactFields, false, true, array('DISABLE_USER_FIELD_CHECK' => true));
} else { echo CUtil::PhpToJSObject(array('PRODUCT_ROW' => array('ID' => $ID))); } } elseif ($mode === 'SAVE_PRODUCTS') { if (!empty($ownerType) && $ownerID > 0) { $enableDiscount = false; $enableTax = false; if (isset($_POST['PRODUCT_ROW_SETTINGS']) && is_array($_POST['PRODUCT_ROW_SETTINGS'])) { $settings = $_POST['PRODUCT_ROW_SETTINGS']; $enableDiscount = isset($settings['ENABLE_DISCOUNT']) ? $settings['ENABLE_DISCOUNT'] === 'Y' : false; $enableTax = isset($settings['ENABLE_TAX']) ? $settings['ENABLE_TAX'] === 'Y' : false; } $settings = CCrmProductRow::LoadSettings($ownerType, $ownerID); $settings['ENABLE_DISCOUNT'] = $enableDiscount; $settings['ENABLE_TAX'] = $enableTax; CCrmProductRow::SaveSettings($ownerType, $ownerID, $settings); unset($settings); } $prodJson = isset($_POST['PRODUCT_ROW_DATA']) ? strval($_POST['PRODUCT_ROW_DATA']) : ''; $arProducts = $arResult['PRODUCT_ROWS'] = strlen($prodJson) > 0 ? CUtil::JsObjectToPhp($prodJson) : array(); if ($perms->HavePerm($ownerName, BX_CRM_PERM_NONE, 'WRITE')) { echo CUtil::PhpToJSObject(array('ERROR' => 'PERMISSION_DENIED')); die; } $arProductRows = array(); foreach ($arProducts as $arProduct) { $fields = array(); $ID = isset($arProduct['ID']) ? intval($arProduct['ID']) : 0; $fields['ID'] = $ID; // Custom products are allowed (PRODUCT_ID === 0) $productID = isset($arProduct['PRODUCT_ID']) ? intval($arProduct['PRODUCT_ID']) : 0;
$arFields['ORIGIN_ID'] = $originId; } $ID = $CCrmDeal->Add($arFields, true, array('REGISTER_SONET_EVENT' => true)); $bSuccess = $ID !== false; if ($bSuccess) { $arResult['ELEMENT']['ID'] = $ID; } } if ($bSuccess) { // Save settings if (is_array($productRowSettings) && count($productRowSettings) > 0) { $arSettings = CCrmProductRow::LoadSettings('D', $arResult['ELEMENT']['ID']); foreach ($productRowSettings as $k => $v) { $arSettings[$k] = $v; } CCrmProductRow::SaveSettings('D', $arResult['ELEMENT']['ID'], $arSettings); } unset($arSettings); } if ($bSuccess && !$isExternal && $processProductRows && ($bEdit || !empty($arProd))) { // Suppress owner synchronization $bSuccess = $CCrmDeal::SaveProductRows($arResult['ELEMENT']['ID'], $arProd, true, true, false); if (!$bSuccess) { $arResult['ERROR_MESSAGE'] = GetMessage('PRODUCT_ROWS_SAVING_ERROR'); } } if ($bSuccess) { if ($arFields['CONTACT_ID'] > 0 && $arFields['COMPANY_ID'] > 0 && isset($_POST['NEW_CONTACT_ID']) && $arFields['CONTACT_ID'] == $_POST['NEW_CONTACT_ID']) { $CrmContact = new CCrmContact(); $arContactFields = array('COMPANY_ID' => $arFields['COMPANY_ID']); $bSuccess = $CrmContact->Update($arFields['CONTACT_ID'], $arContactFields, false, true, array('DISABLE_USER_FIELD_CHECK' => true));
protected static function UpdateTotalInfo($ownerType, $ownerID, $totalInfo = array()) { $result = array(); if (!is_array($totalInfo)) { $totalInfo = array(); } $taxMode = isset($totalInfo['TAX_MODE']) ? intval($totalInfo['TAX_MODE']) : 0; if ($taxMode !== self::TAX_MODE && $taxMode !== self::LD_TAX_MODE) { $taxMode = CCrmTax::isVatMode() ? self::TAX_MODE : self::LD_TAX_MODE; } $taxList = null; if (is_array($totalInfo['TAX_LIST'])) { $taxList = $totalInfo['TAX_LIST']; } else { $owner = null; if (!isset($totalInfo['CURRENCY']) || !isset($totalInfo['PERSON_TYPE_ID'])) { if ($ownerType === 'D') { $owner = CCrmDeal::GetByID($ownerID, false); } elseif ($ownerType === CCrmQuote::OWNER_TYPE) { $owner = CCrmQuote::GetByID($ownerID, false); } elseif ($ownerType === 'L') { $owner = CCrmLead::GetByID($ownerID, false); } } // Determine person type $personTypeID = 0; $arPersonTypes = CCrmPaySystem::getPersonTypeIDs(); if (isset($arPersonTypes['COMPANY']) && isset($arPersonTypes['CONTACT'])) { if (!isset($totalInfo['PERSON_TYPE_ID'])) { if (intval($owner['COMPANY_ID']) > 0) { $personTypeID = intval($arPersonTypes['COMPANY']); } elseif (intval($owner['CONTACT_ID']) > 0) { $personTypeID = intval($arPersonTypes['CONTACT']); } } else { $personTypeID = intval($totalInfo['PERSON_TYPE_ID']); } if ($personTypeID !== intval($arPersonTypes['COMPANY']) && $personTypeID !== intval($arPersonTypes['CONTACT'])) { $personTypeID = 0; } } $currencyID = ''; if (isset($totalInfo['CURRENCY_ID'])) { $currencyID = $totalInfo['CURRENCY_ID']; } if (empty($currencyID) && !empty($owner['CURRENCY_ID'])) { $currencyID = $owner['CURRENCY_ID']; } if (empty($currencyID)) { $currencyID = CCrmCurrency::GetBaseCurrencyID(); } $locationID = 0; if (isset($totalInfo['LOCATION_ID'])) { $locationID = $totalInfo['LOCATION_ID']; } else { if (isset($owner['LOCATION_ID'])) { $locationID = $owner['LOCATION_ID']; } } $enableSaleDiscount = false; $siteID = ''; if (!defined("SITE_ID")) { $obSite = CSite::GetList($by = "def", $order = "desc", array("ACTIVE" => "Y")); if ($obSite && ($arSite = $obSite->Fetch())) { $siteID = $arSite["LID"]; } unset($obSite, $arSite); } else { $siteID = SITE_ID; } $arRows = self::LoadRows($ownerType, $ownerID, true); $calculateOptions = array(); if ($taxMode === self::LD_TAX_MODE) { $calculateOptions['LOCATION_ID'] = $locationID; } $arResult = CCrmSaleHelper::Calculate($arRows, $currencyID, $personTypeID, $enableSaleDiscount, $siteID, $calculateOptions); if (is_array($arResult['TAX_LIST'])) { $taxList = $arResult['TAX_LIST']; } } $settings = CCrmProductRow::LoadSettings($ownerType, $ownerID); $settings["TAX_MODE"] = $taxMode; if (is_array($taxList)) { $settings['TAX_LIST'] = $taxList; } CCrmProductRow::SaveSettings($ownerType, $ownerID, $settings); return $result; }