- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/integration/numerator/accountnumbercompatibilitymanager.php
- Класс: BitrixSaleIntegrationNumeratorAccountNumberCompatibilityManager
- Вызов: AccountNumberCompatibilityManager::updateAccountNumberType
static function updateAccountNumberType(Event $event)
{
$result = new EventResult();
$numeratorFields = $event->getParameter("fields");
if ($numeratorFields['TYPE'] === Registry::REGISTRY_TYPE_ORDER)
{
$numberTemplate = isset($numeratorFields['TEMPLATE']) ? $numeratorFields['TEMPLATE'] : '';
$settings = Json::decode($numeratorFields['SETTINGS']);
if ($numberTemplate)
{
$type = '';
switch ($numberTemplate)
{
case '{NUMBER}':
$settingsSequent = $settings[SequentNumberGenerator::getType()];
if (isset($settingsSequent['step']) && ($settingsSequent['step'] == 1)
&&
key_exists('periodicBy', $settingsSequent) && ($settingsSequent['periodicBy'] == null)
)
{
$type = 'NUMBER';
}
break;
case '{PREFIX}{ORDER_ID}':
$type = 'PREFIX';
break;
case '{RANDOM}':
$type = 'RANDOM';
break;
case '{USER_ID_ORDERS_COUNT}':
$type = 'USER';
break;
case '{DAY}{MONTH}{YEAR} / {NUMBER}':
$settingsSequent = $settings[SequentNumberGenerator::getType()];
if (isset($settingsSequent['step']) && $settingsSequent['step'] == 1
&&
key_exists('periodicBy', $settingsSequent) && $settingsSequent['periodicBy'] == SequentNumberGenerator::DAY
)
{
$type = 'DATE';
}
break;
case '{MONTH}{YEAR} / {NUMBER}':
$settingsSequent = $settings[SequentNumberGenerator::getType()];
if (isset($settingsSequent['step']) && $settingsSequent['step'] == 1
&&
key_exists('periodicBy', $settingsSequent) && $settingsSequent['periodicBy'] == SequentNumberGenerator::MONTH
)
{
$type = 'DATE';
}
break;
case '{YEAR} / {NUMBER}':
$settingsSequent = $settings[SequentNumberGenerator::getType()];
if (isset($settingsSequent['step']) && $settingsSequent['step'] == 1
&&
key_exists('periodicBy', $settingsSequent) && $settingsSequent['periodicBy'] == SequentNumberGenerator::YEAR
)
{
$type = 'DATE';
}
break;
default:
if (!$type)
{
// check if template is a custom type - it should contain only custom word
$isStartIsUserDefinedPattern = strncmp($numberTemplate, NumberGenerator::USER_DEFINED_SYMBOL_START, mb_strlen(NumberGenerator::USER_DEFINED_SYMBOL_START)) === 0;
$isEndIsUserDefinedPattern = mb_substr($numberTemplate, -mb_strlen(NumberGenerator::USER_DEFINED_SYMBOL_END)) === NumberGenerator::USER_DEFINED_SYMBOL_END;
if ($isStartIsUserDefinedPattern && $isEndIsUserDefinedPattern)
{
$type = mb_substr(mb_substr($numberTemplate, mb_strlen(NumberGenerator::USER_DEFINED_SYMBOL_START)), 0, -mb_strlen(NumberGenerator::USER_DEFINED_SYMBOL_END));
}
}
break;
}
Option::set("sale", "account_number_template", $type);
}
}
return $result;
}