- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/requisite/conversion/psrequisiteconverter.php
- Класс: Bitrix\Crm\Requisite\Conversion\PSRequisiteConverter
- Вызов: PSRequisiteConverter::makeConvPresets
static function makeConvPresets()
{
if (self::$convPresets === null)
{
$presetData = array();
$maxSort = null;
$sortIndex = 0;
$currentCountryId = EntityPreset::getCurrentCountryId();
$psData = self::$paySystemData;
if (is_array($psData) || !empty($psData))
{
$preset = new EntityPreset();
foreach ($psData as $psInfo)
{
$presetCountryId = isset($psInfo['PRESET_COUNTRY_ID']) ? (int)$psInfo['PRESET_COUNTRY_ID'] : 0;
if ($presetCountryId > 0
&& in_array($presetCountryId, EntityRequisite::getAllowedRqFieldCountries(), true))
{
if (!isset($presetData[$presetCountryId]))
{
$countryCode = EntityPreset::getCountryCodeById($presetCountryId);
if (!empty($countryCode))
{
$presetXmlId = '#CRM_REQUISITE_PRESET_'.$countryCode.'_SELLER#';
// load existing preset
$res = $preset->getList(
array(
'filter' => array('=XML_ID' => $presetXmlId),
'select' => array(
'ID',
'ENTITY_TYPE_ID',
'COUNTRY_ID',
'NAME',
'ACTIVE',
'XML_ID',
'SORT',
'SETTINGS'
),
'limit' => 1
)
);
if ($row = $res->fetch())
{
if (is_array($row))
$presetData[$presetCountryId] = $row;
}
unset($res, $row);
if (!isset($presetData[$presetCountryId]))
{
// prepare new preset
$prefix = '#CRM_REQUISITE_PRESET_DEF_';
$postfix = $countryCode === 'RU' ? '_COMPANY#' : '_LEGALENTITY#';
$fixedPresetXmlId = $prefix.$countryCode.$postfix;
$presetFields = null;
foreach (EntityRequisite::getFixedPresetList() as $presetInfo)
{
if (isset($presetInfo['XML_ID']) && $presetInfo['XML_ID'] === $fixedPresetXmlId)
{
$presetFields = $presetInfo;
break;
}
}
if (is_array($presetFields))
{
unset($presetFields['ID']);
$presetFields['NAME'] = GetMessage('CRM_PS_RQ_CONV_PRESET_NAME').
($presetCountryId === $currentCountryId ? '' : " ($countryCode)");
$presetFields['XML_ID'] = $presetXmlId;
if ($maxSort === null)
{
$res = $preset->getList(
array(
'order' => array('SORT' => 'DESC', 'ID' => 'DESC'),
'select' => array('ID', 'SORT'),
'limit' => 1
)
);
if ($row = $res->fetch())
{
if (is_array($row) && isset($row['SORT']))
$maxSort = (int)$row['SORT'];
}
if ($maxSort === null || $maxSort < 0)
$maxSort = 500;
unset($res, $row);
}
$presetFields['SORT'] = $maxSort + ($sortIndex += 10);
$presetData[$presetCountryId] = $presetFields;
}
}
}
}
$presetModified = false;
if (is_array($presetData[$presetCountryId]) && is_array($presetData[$presetCountryId]['SETTINGS']))
{
$presetFields = $presetData[$presetCountryId];
// add fields
$maxFieldSort = $sort = 0;
$fieldsOfPreset = array();
foreach ($preset->settingsGetFields($presetFields['SETTINGS']) as $fieldInfo)
{
if (isset($fieldInfo['FIELD_NAME']))
$fieldsOfPreset[$fieldInfo['FIELD_NAME']] = true;
$sort = isset($fieldInfo['SORT']) ? (int)$fieldInfo['SORT'] : 0;
if ($sort > $maxFieldSort)
$maxFieldSort = $sort;
}
$sort = $maxFieldSort;
unset($maxFieldSort);
// verify company name exists
if (!isset($fieldsOfPreset['RQ_COMPANY_NAME']))
{
$preset->settingsAddField($presetFields['SETTINGS'], array(
'FIELD_NAME' => 'RQ_COMPANY_NAME',
'FIELD_TITLE' => '',
'IN_SHORT_LIST' => 'N',
'SORT' => $sort += 10
));
$presetModified = true;
}
foreach ($psInfo['PSA_PARAMS'] as $paramInfo)
{
if ($paramInfo['ENTITY_ABBR'] === 'RQ'
&& !isset($fieldsOfPreset[$paramInfo['FIELD_NAME']]))
{
$preset->settingsAddField($presetFields['SETTINGS'], array(
'FIELD_NAME' => $paramInfo['FIELD_NAME'],
'FIELD_TITLE' => '',
'IN_SHORT_LIST' => 'N',
'SORT' => $sort += 10
));
$presetModified = true;
}
}
// add/update preset
if (isset($presetFields['ID']))
{
if ($presetModified)
$preset->update((int)$presetFields['ID'], $presetFields);
}
else
{
$result = $preset->add($presetFields);
if ($result->isSuccess())
$presetData[$presetCountryId]['ID'] = $result->getId();
}
}
}
}
}
self::$convPresets = $presetData;
}
}