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