• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/requisite/conversion/psrequisiteconverter.php
  • Класс: Bitrix\Crm\Requisite\Conversion\PSRequisiteConverter
  • Вызов: PSRequisiteConverter::parsePaySystemData
static function parsePaySystemData()
{
	if (self::$paySystemData === null)
	{
		$arCrmPt = \CCrmPaySystem::getPersonTypeIDs();
		$arCrmPtIDs = array_values($arCrmPt);
		$dbPaySystems = \CSalePaySystem::GetList(
			array('ID' => 'asc'),
			array(
				"PERSON_TYPE_ID" => $arCrmPtIDs,
				"!ID" => \Bitrix\Sale\PaySystem\Manager::getInnerPaySystemId()
			)
		);

		$convMap = null;
		$ruAccNumDefValue = $enAccNumDefValue = null;
		self::$paySystemData = array();
		while ($arPaySys = $dbPaySystems->Fetch())
		{
			if (isset($arPaySys['PSA_ACTION_FILE']))
			{
				$matches = array();
				$curPsLocalization = '';
				$psType = '';
				if (preg_match('/(bill|quote)(_\w+)*$/i'.BX_UTF_PCRE_MODIFIER, $arPaySys['PSA_ACTION_FILE'], $matches))
				{
					$psType = $matches[1];
					if (count($matches) === 2 && $psType === 'bill')
					{
						$curPsLocalization = 'ru';
					}
					else if (count($matches) === 3 && mb_strlen($matches[2]) > 2)
					{
						$curPsLocalization = mb_substr($matches[2], 1, 2);
					}
				}
				$origPsaParams = \CSalePaySystemAction::UnSerializeParams($arPaySys['PSA_PARAMS']);
				if (!empty($curPsLocalization)
					&& in_array($curPsLocalization, array('ru', 'de', 'en', 'la', 'ua'), true)
					&& is_array($origPsaParams) && !empty($origPsaParams)
				)
				{
					$presetCountryId = \CCrmPaySystem::getPresetCountryIdByPS($psType, $curPsLocalization);
					if ($convMap === null)
						$convMap = self::getConvMap();
					if (is_array($convMap) && $presetCountryId > 0
						&& (EntityPreset::isUTFMode() || $presetCountryId === EntityPreset::getCurrentCountryId())
						&& isset($convMap[$psType][$curPsLocalization][$presetCountryId])
					)
					{
						// prepare params
						$allParamsEmpty = 'Y';
						$hasCompanyParams = 'N';
						$hasRequisiteParams = 'N';
						$hasBankDetailParams = 'N';
						$psaParams = array();
						foreach ($origPsaParams as $paramName => $paramInfo)
						{
							if (isset($convMap[$psType][$curPsLocalization][$presetCountryId][$paramName])
								&& is_array($paramInfo) && (!isset($paramInfo['TYPE']) || empty($paramInfo['TYPE']))
								&& (!isset($paramInfo['VALUE']) || !is_array($paramInfo['VALUE']))
							)
							{
								$value = trim(strval(isset($paramInfo['VALUE']) ? $paramInfo['VALUE'] : ''));

								// bank account number default value as empty
								if ($ruAccNumDefValue === null)
								{
									$ruAccNumDefValue = '';
									$messages = Loc::loadLanguageFile(__FILE__, 'ru');
									if (!empty($messages) && isset($messages['CRM_PS_RQ_CONV_ACC_NUM_DEF_VAL']))
										$ruAccNumDefValue = $messages['CRM_PS_RQ_CONV_ACC_NUM_DEF_VAL'];
								}
								if ($enAccNumDefValue === null)
								{
									$enAccNumDefValue = '';
									$messages = Loc::loadLanguageFile(__FILE__, 'en');
									if (!empty($messages) && isset($messages['CRM_PS_RQ_CONV_ACC_NUM_DEF_VAL']))
										$enAccNumDefValue = $messages['CRM_PS_RQ_CONV_ACC_NUM_DEF_VAL'];
								}
								if (($paramName === 'SELLER_RS' || $paramName === 'SELLER_COMPANY_BANK_ACCOUNT')
									&& ($value === $ruAccNumDefValue || $value === $enAccNumDefValue)
								)
								{
									$value = '';
								}

								if (!empty($value))
									$allParamsEmpty = 'N';

								$convInfo = $convMap[$psType][$curPsLocalization][$presetCountryId][$paramName];
								if (isset($convInfo['MAX_LENGTH']) && mb_strlen($value) <= $convInfo['MAX_LENGTH'])
								{
									if (!empty($value) && isset($convInfo['ENTITY_ABBR']))
									{
										switch ($convInfo['ENTITY_ABBR'])
										{
											case 'CO':
											case 'CO.MF':
												$hasCompanyParams = 'Y';
												break;
											case 'RQ':
												$hasRequisiteParams = 'Y';
												break;
											case 'BD':
												$hasBankDetailParams = 'Y';
												break;
										}
									}
									$convInfo['VALUE'] = $value;
									$psaParams[$paramName] = $convInfo;
								}
							}
						}

						if (!empty($psaParams))
						{
							self::$paySystemData[$arPaySys['ID']] = array(
								'PS_ID' => $arPaySys['ID'],
								'PSA_ID' => $arPaySys['PSA_ID'],
								'PS_TYPE' => $psType,
								'PSA_PERSON_TYPE_ID' => $arPaySys['PSA_PERSON_TYPE_ID'],
								'PS_NAME' => $arPaySys['NAME'],
								'PS_LOCALIZATION' => $curPsLocalization,
								'PRESET_COUNTRY_ID' => $presetCountryId,
								'PSA_PARAMS_ORIG' => $origPsaParams,
								'PSA_PARAMS' => $psaParams,
								'PSA_PARAMS_ALL_EMPTY' => $allParamsEmpty,
								'PSA_PARAMS_HAS_CO' => $hasCompanyParams,
								'PSA_PARAMS_HAS_RQ' => $hasRequisiteParams,
								'PSA_PARAMS_HAS_BD' => $hasBankDetailParams
							);
						}
					}
				}
			}
		}
	}

	self::updateProgressData(array('PS_COUNT' => count(self::$paySystemData)));
}