...Человеческий поиск в разработке...
- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_document_deal.php
- Класс: \CCrmDocumentDeal
- Вызов: CCrmDocumentDeal::UpdateDocument
static function UpdateDocument($documentId, $arFields, $modifiedById = null) { global $DB; if(empty($arFields)) { return; } $arDocumentID = self::GetDocumentInfo($documentId); if (empty($arDocumentID)) { throw new CBPArgumentNullException('documentId'); } $dbDocumentList = CCrmDeal::GetListEx( [], [ 'ID' => $arDocumentID['ID'], 'CHECK_PERMISSIONS' => 'N', ], false, false, ['ID', 'CATEGORY_ID', 'STAGE_ID'] ); $arPresentFields = $dbDocumentList->Fetch(); if (!is_array($arPresentFields)) { throw new Exception(GetMessage('CRM_DOCUMENT_ELEMENT_IS_NOT_FOUND')); } $arFields = self::performTypeCast($arDocumentID, $arFields, true); //region Category & Stage $categoryID = isset($arPresentFields['CATEGORY_ID']) ? (int)$arPresentFields['CATEGORY_ID'] : 0; if(isset($arFields['CATEGORY_ID']) && $arFields['CATEGORY_ID'] != $categoryID) { throw new Exception(GetMessage('CRM_DOCUMENT_DEAL_CATEGORY_CHANGE_ERROR')); } $arFields = self::performTypeCast4CategoryAndStage($arFields, $categoryID); //endregion if(empty($arFields)) { return; } $useTransaction = static::shouldUseTransaction(); if ($useTransaction) { $DB->StartTransaction(); } if ($modifiedById > 0) { $arFields['MODIFY_BY_ID'] = $modifiedById; } if (isset($arFields['OPPORTUNITY'])) { $arFields['IS_MANUAL_OPPORTUNITY'] = $arFields['OPPORTUNITY'] > 0 ? 'Y' : 'N'; } $CCrmEntity = new CCrmDeal(false); $res = $CCrmEntity->Update( $arDocumentID['ID'], $arFields, true, true, [ 'DISABLE_USER_FIELD_CHECK' => true, 'REGISTER_SONET_EVENT' => true, 'CURRENT_USER' => $modifiedById ?? static::getSystemUserId() ] ); if (!$res) { if ($useTransaction) { $DB->Rollback(); } throw new Exception($CCrmEntity->LAST_ERROR); } if (isset($arFields['TRACKING_SOURCE_ID'])) { Crm\Tracking\UI\Details::saveEntityData( \CCrmOwnerType::Deal, $arDocumentID['ID'], $arFields ); } if (COption::GetOptionString('crm', 'start_bp_within_bp', 'N') == 'Y') { $CCrmBizProc = new CCrmBizProc('DEAL'); if (false === $CCrmBizProc->CheckFields($arDocumentID['ID'], true)) { if ($useTransaction) { $DB->Rollback(); } throw new Exception($CCrmBizProc->LAST_ERROR); } if ($res && !$CCrmBizProc->StartWorkflow($arDocumentID['ID'])) { if ($useTransaction) { $DB->Rollback(); } throw new Exception($CCrmBizProc->LAST_ERROR); } } //region automation $starter = new Crm\Automation\Starter(\CCrmOwnerType::Deal, $arDocumentID['ID']); $starter->setContextToBizproc()->runOnUpdate($arFields, $arPresentFields); //endregion if ($res && $useTransaction) { $DB->Commit(); } }