• Модуль: 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;
	}
}