• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/requisite/importhelper.php
  • Класс: Bitrix\Crm\Requisite\ImportHelper
  • Вызов: ImportHelper::importOldRequisiteAddresses
static function importOldRequisiteAddresses($entityTypeId, $entityId, $dupControlType, $presetId = 0,
	$fields)
{
	$result = new Main\Result();

	if(!in_array($dupControlType, array('REPLACE', 'MERGE', 'SKIP'), true))
		$dupControlType = 'NO_CONTROL';
	$rqImportMode = 'MERGE';
	switch ($dupControlType)
	{
		case 'REPLACE':
			$rqImportMode = $dupControlType;
			break;
	}

	if (!EntityRequisite::checkEntityType($entityTypeId))
	{
		$result->addError(
			new Main\Error(
				GetMessage('CRM_RQ_IMP_HLPR_ERR_INVALID_ENTITY_TYPE'),
				self::ERR_INVALID_ENTITY_TYPE
			)
		);
		return $result;
	}

	if ($entityId <= 0)
	{
		$result->addError(
			new Main\Error(
				GetMessage('CRM_RQ_IMP_HLPR_ERR_INVALID_ENTITY_ID'),
				self::ERR_INVALID_ENTITY_ID
			)
		);
		return $result;
	}

	$requisite = EntityRequisite::getSingleInstance();
	if (!$requisite->validateEntityExists($entityTypeId, $entityId))
	{
		$errMsg = '';
		$errCode = 0;
		switch ($entityTypeId)
		{
			case \CCrmOwnerType::Company:
				$errMsg = GetMessage('CRM_RQ_IMP_HLPR_ERR_COMPANY_NOT_EXISTS', array('#ID#' => $entityId));
				$errCode = self::ERR_COMPANY_NOT_EXISTS;
				break;
			case \CCrmOwnerType::Contact:
				$errMsg = GetMessage('CRM_RQ_IMP_HLPR_ERR_CONTACT_NOT_EXISTS', array('#ID#' => $entityId));
				$errCode = self::ERR_CONTACT_NOT_EXISTS;
				break;
		}
		$result->addError(new Main\Error($errMsg, $errCode));
		return $result;
	}

	if (!EntityRequisite::checkUpdatePermissionOwnerEntity($entityTypeId, $entityId))
	{
		$errMsg = '';
		$errCode = 0;
		switch ($entityTypeId)
		{
			case \CCrmOwnerType::Company:
				$errMsg = GetMessage(
					'CRM_RQ_IMP_HLPR_ERR_ACCESS_DENIED_COMPANY_UPDATE',
					array('#ID#' => $entityId)
				);
				$errCode = self::ERR_ACCESS_DENIED_COMPANY_UPDATE;
				break;
			case \CCrmOwnerType::Contact:
				$errMsg = GetMessage(
					'CRM_RQ_IMP_HLPR_ERR_ACCESS_DENIED_CONTACT_UPDATE',
					array('#ID#' => $entityId)
				);
				$errCode = self::ERR_ACCESS_DENIED_CONTACT_UPDATE;
				break;
		}
		$result->addError(new Main\Error($errMsg, $errCode));
		return $result;
	}

	$entityTypeName = \CCrmOwnerType::ResolveName($entityTypeId);
	if ($presetId === 0)
	{
		$presetId = EntityRequisite::getDefaultPresetId($entityTypeId);

		if ($presetId <= 0)
		{
			$result->addError(
				new Main\Error(
					GetMessage(
						'CRM_RQ_IMP_HLPR_ERR_DEF_IMP_PRESET_NOT_DEFINED',
						array('#ENTITY_TYPE_NAME_GENITIVE#' => $entityTypeName)
					),
					self::ERR_DEF_IMP_PRESET_NOT_DEFINED
				)
			);
			return $result;
		}
	}

	$presetId = (int)$presetId;
	if ($presetId <= 0)
	{
		$result->addError(
			new Main\Error(
				GetMessage('CRM_RQ_IMP_HLPR_ERR_INVALID_IMP_PRESET_ID'),
				self::ERR_INVALID_IMP_PRESET_ID
			)
		);
		return $result;
	}

	$preset = EntityPreset::getSingleInstance();
	$presetInfo = $preset->getById($presetId);
	$fieldsInPreset = array();
	if (!is_array($presetInfo))
	{
		$result->addError(
			new Main\Error(
				GetMessage('CRM_RQ_IMP_HLPR_ERR_IMP_PRESET_NOT_EXISTS', array('#ID#' => $presetId)),
				self::ERR_IMP_PRESET_NOT_EXISTS
			)
		);
		return $result;
	}
	$presetName = EntityPreset::formatName($presetId, $presetInfo['NAME']);
	if (is_array($presetInfo['SETTINGS']))
	{
		$presetFieldsInfo = $preset->settingsGetFields($presetInfo['SETTINGS']);
		foreach ($presetFieldsInfo as $fieldInfo)
		{
			if (isset($fieldInfo['FIELD_NAME']) && !empty($fieldInfo['FIELD_NAME']))
				$fieldsInPreset[$fieldInfo['FIELD_NAME']] = true;
		}
	}
	if (!isset($fieldsInPreset[EntityRequisite::ADDRESS]))
	{
		$result->addError(
			new Main\Error(
				GetMessage('CRM_RQ_IMP_HLPR_ERR_IMP_PRESET_HAS_NO_ADDR_FIELD', array('#ID#' => $presetId)),
				self::ERR_IMP_PRESET_HAS_NO_ADDR_FIELD
			)
		);
		return $result;
	}
	unset($preset, $presetInfo, $presetHasAddress, $presetFieldsInfo, $fieldInfo);

	$addresses = array();
	$addressFields = array(
		'ADDRESS_1',
		'ADDRESS_2',
		'CITY',
		'POSTAL_CODE',
		'REGION',
		'PROVINCE',
		'COUNTRY',
		'COUNTRY_CODE'/*,
		'LOC_ADDR_ID'*/
	);
	if (is_array($fields)
		&& is_array($fields[EntityRequisite::ADDRESS])
		&& !empty($fields[EntityRequisite::ADDRESS]))
	{
		$rqAddrTypeMap = array_fill_keys(EntityAddressType::getAvailableIds(), true);
		foreach ($fields[EntityRequisite::ADDRESS] as $addrTypeId => $address)
		{
			if (isset($rqAddrTypeMap[$addrTypeId]) && !RequisiteAddress::isEmpty($address))
			{
				foreach ($addressFields as $fieldName)
				{
					$addresses[$addrTypeId][$fieldName] =
						isset($address[$fieldName]) ? $address[$fieldName] : null;
				}
			}
		}
	}
	if (empty($addresses))
	{
		$result->addError(
			new Main\Error(
				GetMessage('CRM_RQ_IMP_HLPR_ERR_NO_ADDRESSES_TO_IMPORT', array('#ID#' => $presetId)),
				self::ERR_NO_ADDRESSES_TO_IMPORT
			)
		);
		return $result;
	}

	$rqIsFound = false;
	$rqListResult = $requisite->getList(
		array(
			'select' => array('ID'),
			'filter' => array(
				'=PRESET_ID' => $presetId,
				'=ENTITY_TYPE_ID' => $entityTypeId,
				'=ENTITY_ID' => $entityId
			)
		)
	);
	while($rqRow = $rqListResult->fetch())
	{
		$requisiteId = (int)$rqRow['ID'];
		$rqIsFound = true;
		$requisiteAddresses = EntityRequisite::getAddresses($requisiteId);
		foreach($addresses as $addrTypeId => $address)
		{
			// $rqImportMode may be only 'REPLACE' or 'MERGE'
			if(!isset($requisiteAddresses[$addrTypeId])
				|| RequisiteAddress::isEmpty($requisiteAddresses[$addrTypeId])
				|| ($rqImportMode === 'REPLACE'
					&&  !RequisiteAddress::areEquals($addresses[$addrTypeId], $requisiteAddresses[$addrTypeId])))
			{
				RequisiteAddress::register(\CCrmOwnerType::Requisite, $requisiteId, $addrTypeId, $address);
			}
		}
	}
	if (!$rqIsFound)
	{
		$requisiteFields = array(
			'ENTITY_TYPE_ID' => $entityTypeId,
			'ENTITY_ID' => $entityId,
			'PRESET_ID' => $presetId,
			'NAME' => $presetName,
			'SORT' => 500,
			'ACTIVE' => 'Y'
		);
		foreach (array_keys($fieldsInPreset) as $fieldName)
		{
			if (isset($fields[$fieldName]))
				$requisiteFields[$fieldName] = $fields[$fieldName];
		}
		$requisiteAddResult = $requisite->add($requisiteFields);
		if(!$requisiteAddResult->isSuccess())
		{
			$rqAddErrors = $requisiteAddResult->getErrorMessages();
			$rqAddErrorStr = GetMessage(
				'CRM_RQ_IMP_HLPR_ERR_CREATE_REQUISITE',
				array(
					'#ENTITY_TYPE_NAME_GENITIVE#' => GetMessage(
						'CRM_RQ_IMP_HLPR_ERR_'.$entityTypeName.'_GENITIVE'
					),
					'#ID#' => $entityId,
				)
			);
			if (is_array($rqAddErrors) && !empty($rqAddErrors))
				$rqAddErrorStr .= ': '.$rqAddErrors[0];
			$result->addError(
				new Main\Error(
					$rqAddErrorStr,
					self::ERR_CREATE_REQUISITE
				)
			);
			return $result;
		}
	}

	return $result;
}