- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/conversion/leadconversionmapper.php
- Класс: Bitrix\Crm\Conversion\LeadConversionMapper
- Вызов: LeadConversionMapper::map
public function map(EntityConversionMap $map, array $options = null)
{
$srcFields = $this->getSourceFields();
if(empty($srcFields))
{
return array();
}
if(!is_array($options))
{
$options = array();
}
$multiFieldKeys = array('PHONE' => true, 'EMAIL' => true, 'WEB' => true, 'IM' => true, 'LINK' => true);
$dstFields = array();
$dstEntityTypeID = $map->getDestinationEntityTypeID();
foreach($map->getItems() as $item)
{
$dstFieldID = $item->getDestinationField();
//Skip empty binding
if($dstFieldID === '-')
{
continue;
}
$srcFieldID = $item->getSourceField();
if((!isset($srcFields[$srcFieldID]) || $srcFields[$srcFieldID] === '')
&& !isset($multiFieldKeys[$srcFieldID]) && $srcFieldID !== 'PRODUCT_ROWS')
{
$altSrcFieldID = '';
foreach($item->getAlternativeSourceFields() as $fieldID)
{
if(isset($srcFields[$fieldID]))
{
$altSrcFieldID = $fieldID;
break;
}
}
if($altSrcFieldID !== '')
{
$srcFieldID = $altSrcFieldID;
}
}
if($dstFieldID === '')
{
$dstFieldID = $srcFieldID;
}
if(mb_strpos($srcFieldID, 'UF_') === 0 && mb_strpos($dstFieldID, 'UF_') === 0)
{
self::mapUserField(\CCrmOwnerType::Lead, $srcFieldID, $srcFields, $dstEntityTypeID, $dstFieldID, $dstFields, $options);
}
elseif(isset($multiFieldKeys[$srcFieldID]))
{
$multifields = $this->getSourceMultiFields();
if(isset($multifields[$dstFieldID]))
{
if(!isset($dstFields['FM']))
{
$dstFields['FM'] = array();
}
$dstFields['FM'][$dstFieldID] = $multifields[$dstFieldID];
}
}
elseif($srcFieldID === 'PRODUCT_ROWS')
{
if($dstEntityTypeID === \CCrmOwnerType::Deal)
{
$productRows = \CCrmLead::LoadProductRows($this->srcEntityID);
if(count($productRows) > 0)
{
$entityProductRows = array();
$entityDbResult = \CCrmDeal::GetListEx(
array(),
array('=LEAD_ID' => $this->srcEntityID, 'CHECK_PERMISSIONS' => 'N'),
false,
false,
array('ID')
);
while($entityFields = $entityDbResult->Fetch())
{
$entityProductRows[] = \CCrmDeal::LoadProductRows((int)$entityFields['ID']);
}
$dstFields[$dstFieldID] = \CCrmProductRow::GetDiff(array($productRows), $entityProductRows);
}
}
}
elseif(isset($srcFields[$srcFieldID]))
{
$dstFields[$dstFieldID] = $srcFields[$srcFieldID];
}
}
$initData = isset($options['INIT_DATA']) && is_array($options['INIT_DATA'])
? $options['INIT_DATA'] : array();
//region Setup fields by default
if($dstEntityTypeID === \CCrmOwnerType::Contact)
{
$name = isset($dstFields['NAME']) ? $dstFields['NAME'] : '';
$secondName = isset($dstFields['SECOND_NAME']) ? $dstFields['SECOND_NAME'] : '';
$lastName = isset($dstFields['LAST_NAME']) ? $dstFields['LAST_NAME'] : '';
if($name === '' && $secondName === '' && $lastName === '' && isset($initData['defaultName']))
{
$dstFields['NAME'] = $initData['defaultName'];
}
}
//endregion
if(!empty($dstFields))
{
$dstFields['LEAD_ID'] = $this->srcEntityID;
if($dstEntityTypeID === \CCrmOwnerType::Deal)
{
if(isset($dstFields['PRODUCT_ROWS'])
&& is_array($dstFields['PRODUCT_ROWS'])
&& !empty($dstFields['PRODUCT_ROWS']))
{
$totalInfo = \CCrmProductRow::CalculateTotalInfo('D', 0, false, $dstFields, $dstFields['PRODUCT_ROWS']);
$dstFields['OPPORTUNITY'] = isset($totalInfo['OPPORTUNITY']) ? $totalInfo['OPPORTUNITY'] : 1.0;
$dstFields['TAX_VALUE'] = isset($totalInfo['TAX_VALUE']) ? $totalInfo['TAX_VALUE'] : 0.0;
}
$dealTypeList = \CCrmStatus::GetStatusList('DEAL_TYPE');
if(!empty($dealTypeList))
{
$dstFields['TYPE_ID'] = current(array_keys($dealTypeList));
}
if(isset($initData['categoryId']) && $initData['categoryId'] > 0)
{
$dstFields['CATEGORY_ID'] = (int)$initData['categoryId'];
}
}
if(!(isset($options['DISABLE_USER_FIELD_INIT']) && $options['DISABLE_USER_FIELD_INIT'] === true))
{
self::initializeUserFields($dstEntityTypeID, $dstFields);
}
}
return $dstFields;
}