• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/rest_lead.php
  • Класс: \CCRMLeadRest
  • Вызов: CCRMLeadRest::AddLead
static function AddLead($arData, $CCrmLead)
{
	global $DB, $USER_FIELD_MANAGER;

	$arData['CURRENCY_ID'] = trim($arData['CURRENCY_ID']);
	if ($arData['CURRENCY_ID'] == '')
		$arData['CURRENCY_ID'] = CCrmCurrency::GetBaseCurrencyID();

	$arFields = [
		'TITLE' => trim($arData['TITLE']),
		'COMPANY_TITLE' => trim($arData['COMPANY_TITLE']),
		'NAME' => trim($arData['NAME']),
		'LAST_NAME' => trim($arData['LAST_NAME']),
		'SECOND_NAME' => trim($arData['SECOND_NAME']),
		'POST' => trim($arData['POST']),
		'ADDRESS' => trim($arData['ADDRESS']),
		'COMMENTS' => trim($arData['COMMENTS']),
		'SOURCE_DESCRIPTION' => trim($arData['SOURCE_DESCRIPTION']),
		'STATUS_DESCRIPTION' => trim($arData['STATUS_DESCRIPTION']),
		'OPPORTUNITY' => trim($arData['OPPORTUNITY']),
		'CURRENCY_ID' => trim($arData['CURRENCY_ID']),
		'ASSIGNED_BY_ID' => (int)(is_array($arData['ASSIGNED_BY_ID']) ? $arData['ASSIGNED_BY_ID'][0] : $arData['ASSIGNED_BY_ID']),
		'OPENED' => \Bitrix\Crm\Settings\LeadSettings::getCurrent()->getOpenedFlag() ? 'Y' : 'N',
	];

	if (isset($arData['BIRTHDATE']))
	{
		$date = ConvertTimeStamp(MakeTimeStamp(trim($arData['BIRTHDATE'])), 'SHORT', SITE_ID);
		if($date !== false)
		{
			$arFields['BIRTHDATE'] = $date;
		}
	}

	$arData['SOURCE_ID'] = trim($arData['SOURCE_ID']);
	$arData['STATUS_ID'] = trim($arData['STATUS_ID']);

	if ($arData['STATUS_ID'] <> '')
		$arFields['STATUS_ID'] = $arData['STATUS_ID'];
	if ($arData['SOURCE_ID'] <> '')
		$arFields['SOURCE_ID'] = $arData['SOURCE_ID'];

	if(isset($arFields['SOURCE_ID']))
	{
		if(self::$sources === null)
		{
			self::$sources = CCrmStatus::GetStatus('SOURCE');
		}

		if(!isset(self::$sources[$arFields['SOURCE_ID']]))
		{
			//Crutch: Try to fix form bug. If we get source name instead of spurce ID.
			$sourceID = self::ResolveStatusID(self::$sources, $arFields['SOURCE_ID']);
			if($sourceID !== '')
			{
				$arFields['SOURCE_ID'] = $sourceID;
			}
			else
			{
				unset($arFields['SOURCE_ID']);
			}
		}
	}

	$CCrmUserType = new CCrmUserType($USER_FIELD_MANAGER, CCrmLead::$sUFEntityID);
	$arFields = array_merge($arFields, $CCrmUserType->PrepareExternalFormFields($arData, ','));
	global $USER_FIELD_MANAGER;
	$USER_FIELD_MANAGER->EditFormAddFields(CCrmLead::USER_FIELD_ENTITY_ID, $arFields, [
		'FORM' => $arFields
	]);
	$arFields['FM'] = CCrmFieldMulti::PrepareFields($arData);

	$DB->StartTransaction();

	$ID = $CCrmLead->Add($arFields);


	if ($ID === false)
	{
		$DB->Rollback();
		if (!empty($arFields['RESULT_MESSAGE']))
			$sErrorMessage = $arFields['RESULT_MESSAGE'];
		else
			$sErrorMessage = GetMessage('UNKNOWN_ERROR');

		$res =  array('error' => 400, 'error_message' => strip_tags(nl2br($sErrorMessage)));
	}
	else
	{
		$DB->Commit();

		// Ignore all BizProc errors
		try
		{
			$arErrors = array();
			CCrmBizProcHelper::AutoStartWorkflows(
				CCrmOwnerType::Lead,
				$ID,
				CCrmBizProcEventType::Create,
				$arErrors
			);

			//Region automation
			$starter = new \Bitrix\Crm\Automation\Starter(\CCrmOwnerType::Lead, $ID);
			$starter->setContextToRest()->runOnAdd();
			//End region
		}
		catch(Exception $e)
		{
		}

		$res = array('error' => 201, 'ID' => $ID, 'error_message' => GetMessage('CRM_REST_OK'));
	}

	return self::_out($res);
}