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