- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/entitypreset.php
- Класс: Bitrix\Crm\EntityPreset
- Вызов: EntityPreset::convertOrderPropsSyncSettings
private function convertOrderPropsSyncSettings(array $newPresetMap, array $existsDefPresetMap)
{
//region Verification of initial data
$presetMap = [];
foreach (['COMPANY', 'CONTACT'] as $entityTypeName)
{
$isValidPreset = (
is_array($newPresetMap[$entityTypeName])
&& isset($newPresetMap[$entityTypeName]['ID'])
&& $newPresetMap[$entityTypeName]['ID'] > 0
&& isset($newPresetMap[$entityTypeName]['COUNTRY_ID'])
&& $newPresetMap[$entityTypeName]['COUNTRY_ID'] > 0
&& isset($newPresetMap[$entityTypeName]['NAME'])
&& is_string($newPresetMap[$entityTypeName]['NAME'])
&& is_array($newPresetMap[$entityTypeName]['SETTINGS'])
&& is_array($newPresetMap[$entityTypeName]['SETTINGS']['FIELDS'])
);
$presetMap[$entityTypeName] = [
'IS_VALID' => $isValidPreset,
'ID' => $isValidPreset ? (int)$newPresetMap[$entityTypeName]['ID'] : 0,
'COUNTRY_ID' => $isValidPreset ? (int)$newPresetMap[$entityTypeName]['COUNTRY_ID'] : 0,
'NAME' => $isValidPreset ? $newPresetMap[$entityTypeName]['NAME'] : '',
'SETTINGS' => $isValidPreset ? $newPresetMap[$entityTypeName]['SETTINGS'] : [],
];
}
$newPresetMap = $presetMap;
unset($entityTypeName, $isValidPreset, $presetMap);
//endregion Verification of initial data
if (
($newPresetMap['COMPANY']['IS_VALID'] || $newPresetMap['CONTACT']['IS_VALID'])
&& !empty($existsDefPresetMap)
)
{
$bankDetail = EntityBankDetail::getSingleInstance();
$res = OrderPropsMatchTable::getList(
[
'filter' => [
'@CRM_ENTITY_TYPE' => [
\CCrmOwnerType::Company,
\CCrmOwnerType::Contact
],
'@CRM_FIELD_TYPE' => [
BaseEntityMatcher::REQUISITE_FIELD_TYPE,
BaseEntityMatcher::BANK_DETAIL_FIELD_TYPE
]
],
'select' => [
'ID',
'CRM_ENTITY_TYPE',
'CRM_FIELD_TYPE',
'SETTINGS',
'CRM_FIELD_CODE'
]
]
);
if (is_object($res))
{
$settingsFieldsMap = [];
$bankDetailFieldsMap = $bankDetail->getRqFieldByCountry();
while ($row = $res->fetch())
{
if (
is_array($row['SETTINGS'])
&& isset($row['SETTINGS']['RQ_PRESET_ID'])
&& $row['SETTINGS']['RQ_PRESET_ID'] > 0
)
{
$propPresetId = (int)$row['SETTINGS']['RQ_PRESET_ID'];
if (is_array($existsDefPresetMap[$propPresetId]))
{
$entityTypeId = \CCrmOwnerType::Undefined;
$presetInfo = $existsDefPresetMap[$propPresetId];
//region Detect entity type
if (
isset($presetInfo['XML_ID'])
&& is_string($presetInfo['XML_ID'])
&& $presetInfo['XML_ID'] !== ''
)
{
$xmlIdLength = mb_strlen($presetInfo['XML_ID']);
$signMap = [
'COMPANY' => \CCrmOwnerType::Company,
'INDIVIDUAL' => \CCrmOwnerType::Company,
'PERSON' => \CCrmOwnerType::Contact,
'LEGALENTITY' => \CCrmOwnerType::Company,
];
foreach (array_keys($signMap) as $sign)
{
$suffix = mb_substr($presetInfo['XML_ID'], $xmlIdLength - mb_strlen($sign) - 1);
if ($suffix === ($sign . '#'))
{
$entityTypeId = $signMap[$sign];
break;
}
}
}
if ($entityTypeId === \CCrmOwnerType::Undefined)
{
if (isset($row['CRM_ENTITY_TYPE']) && $row['CRM_ENTITY_TYPE'] > 0)
{
$entityTypeId = (int)$row['CRM_ENTITY_TYPE'];
}
if (
!(
$entityTypeId === \CCrmOwnerType::Company
|| $entityTypeId === \CCrmOwnerType::Contact
)
)
{
$entityTypeId = \CCrmOwnerType::Company;
}
}
//endregion Detect entity type
$entityTypeName = \CCrmOwnerType::ResolveName($entityTypeId);
if (
is_array($newPresetMap[$entityTypeName])
&& $newPresetMap[$entityTypeName]['IS_VALID']
&& isset($row['ID'])
&& $row['ID'] > 0
&& isset($row['CRM_FIELD_TYPE'])
&& $row['CRM_FIELD_TYPE'] > 0
&& isset($row['CRM_FIELD_CODE'])
&& is_string($row['CRM_FIELD_CODE'])
&& $row['CRM_FIELD_CODE'] !== ''
&& isset($row['SETTINGS']['RQ_NAME'])
&& isset($row['SETTINGS']['RQ_PRESET_ID'])
)
{
$crmFieldType = (int)$row['CRM_FIELD_TYPE'];
$presetId = $newPresetMap[$entityTypeName]['ID'];
$presetCountryId = $newPresetMap[$entityTypeName]['COUNTRY_ID'];
$fields = [
'SETTINGS' => $row['SETTINGS']
];
$fields['SETTINGS']['RQ_PRESET_ID'] = $presetId;
$fields['SETTINGS']['RQ_NAME'] = $newPresetMap[$entityTypeName]['NAME'];
$needUpdate = false;
if ($crmFieldType === BaseEntityMatcher::REQUISITE_FIELD_TYPE)
{
if (!isset($settingsFieldsMap[$presetId]))
{
$settingsFieldsMap[$presetId] = [];
if (is_array($newPresetMap[$entityTypeName]['SETTINGS']['FIELDS']))
{
$presetFields = $newPresetMap[$entityTypeName]['SETTINGS']['FIELDS'];
foreach ($presetFields as $presetField)
{
if (
isset($presetField['FIELD_NAME'])
&& is_string($presetField['FIELD_NAME'])
&& $presetField['FIELD_NAME'] !== ''
)
{
$settingsFieldsMap[$presetId][$presetField['FIELD_NAME']] = true;
}
}
}
}
if (isset($settingsFieldsMap[$presetId][$row['CRM_FIELD_CODE']]))
{
$needUpdate = true;
}
}
elseif ($crmFieldType === BaseEntityMatcher::BANK_DETAIL_FIELD_TYPE)
{
if (isset($bankDetailFieldsMap[$presetCountryId][$row['CRM_FIELD_CODE']]))
{
$fields['SETTINGS']['BD_NAME'] =
$bankDetail->getDefaultSectionTitle($presetCountryId)
;
$fields['SETTINGS']['BD_COUNTRY_ID'] = $presetCountryId;
$needUpdate = true;
}
}
if ($needUpdate)
{
OrderPropsMatchTable::update((int)$row['ID'], ['fields' => $fields]);
}
}
}
}
}
}
}
}