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;
}