CCrmDealRestProxy::innerUpdate

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CCrmDealRestProxy
  4. innerUpdate
  • Модуль: 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;
}

Добавить комментарий