- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/restservice.php
- Класс: \CCrmDealRestProxy
- Вызов: CCrmDealRestProxy::innerUpdate
protected function innerUpdate($ID, &$fields, &$errors, array $params = null)
{
$userPermissions = CCrmPerms::GetCurrentUserPermissions();
$categoryID = CCrmDeal::GetCategoryID($ID);
if($categoryID < 0)
{
$errors[] = !CCrmDeal::CheckUpdatePermission(0, $userPermissions) ? 'Access denied' : 'Not found';
return false;
}
elseif(!CCrmDeal::CheckUpdatePermission($ID, $userPermissions, $categoryID))
{
$errors[] = 'Access denied.';
return false;
}
$diskQuotaRestriction = \Bitrix\Crm\Restriction\RestrictionManager::getDiskQuotaRestriction();
if (!$diskQuotaRestriction->hasPermission())
{
$errors[] = $diskQuotaRestriction->getErrorMessage();
return false;
}
$entity = self::getEntity(false);
$compare = true;
$options = array();
if(!$this->isRequiredUserFieldCheckEnabled())
{
$options['DISABLE_REQUIRED_USER_FIELD_CHECK'] = true;
}
if(is_array($params))
{
if(isset($params['REGISTER_HISTORY_EVENT']))
{
$compare = mb_strtoupper($params['REGISTER_HISTORY_EVENT']) === 'Y';
}
if(isset($params['REGISTER_SONET_EVENT']))
{
$options['REGISTER_SONET_EVENT'] = mb_strtoupper($params['REGISTER_SONET_EVENT']) === 'Y';
}
}
//check STAGE_ID changes
$arPresentFields = [];
if (isset($fields['STAGE_ID']))
{
$dbDocumentList = CCrmDeal::GetListEx(
array(),
array('ID' => $ID, 'CHECK_PERMISSIONS' => 'N'),
false,
false,
array('ID', 'STAGE_ID')
);
$arPresentFields = $dbDocumentList->Fetch();
if (!is_array($arPresentFields))
{
$arPresentFields = [];
}
}
$defaultRequisiteLinkParams = Requisite\EntityLink::determineRequisiteLinkBeforeSave(
CCrmOwnerType::Deal, $ID, Requisite\EntityLink::ENTITY_OPERATION_UPDATE, $fields
);
$result = $entity->Update($ID, $fields, $compare, true, $options);
if($result !== true)
{
$errors[] = $entity->LAST_ERROR;
}
else
{
Requisite\EntityLink::register(
CCrmOwnerType::Deal, (int)$ID,
$defaultRequisiteLinkParams['REQUISITE_ID'],
$defaultRequisiteLinkParams['BANK_DETAIL_ID']
);
self::traceEntity(\CCrmOwnerType::Deal, $ID, $fields, true);
if(self::isBizProcEnabled())
{
CCrmBizProcHelper::AutoStartWorkflows(
CCrmOwnerType::Deal,
$ID,
CCrmBizProcEventType::Edit,
$errors
);
}
//Region automation
$starter = new \Bitrix\Crm\Automation\Starter(\CCrmOwnerType::Deal, $ID);
$starter->setContextToRest()->setUserId($this->getCurrentUserID());
$starter->runOnUpdate($fields, $arPresentFields);
//End region
}
return $result;
}