Свой шаблон генерации номера заказа

Алексей Будагов,
Свой шаблон генерации номера заказа

Стандартные варианты не очень хороши, так как присутствуют символы отличные от цифр (0-9), а без шаблона каждый будет знать кол-во заказов в магазине. Я решил немного персонализировать номер заказа, используя только цифры.

Как сделать?

Для начала добавляем новый вариант шаблона в выпадающий список в настройках модуля (событие OnBuildAccountNumberTemplateList)

EventManager::getInstance()->addEventHandler('sale', 'OnBuildAccountNumberTemplateList',  "addAccountNumberTemplate");

/**
 * Добавляет новый шаблон генерации номера заказа
 */
function addAccountNumberTemplate ()
{
	return array(
		'CODE' => 'cnt-orders-on-user',
		'NAME' => 'Год № ID (7000312)'
	);
}

Далее добавляем скрипт для формирования нового номера шаблона (событие OnBeforeOrderAccountNumberSet)

EventManager::getInstance()->addEventHandler('sale', 'OnBeforeOrderAccountNumberSet', "genOrderNumber");

/**
 * Формирует новый номер заказа
 * по шаблону:
 * (последняя цифра года)(четырехзначный номер заказа с самого начала)(номер покупателя)
 */
function genOrderNumber($orderId, $type){

	\Bitrix\Main\Loader::includeModule('sale');

	if ($type == 'cnt-orders-on-user' && $orderId > 0) {
		$order = \Bitrix\Sale\Order::load($orderId);
		$userId = $order->getUserId();

		$dbOrders = \Bitrix\Sale\Order::getList(array(
			'filter' => array('USER_ID' => $userId),
			'group' => array('COUNT' => 'USER_ID'),
			'select' => array('CNT'),
		 	'runtime' => array(
		        	new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(*)')
			)
		));
		if ($arOrders = $dbOrders->fetch()) {
			$cnt = sprintf("%04d", $arOrders['CNT']);
		} else {
			$cnt = '0001';
		}

		return date('y'){1}.$cnt.$userId;
	}

	return false;
}

И в конце, в настройках модуля необходимо выбрать новый шаблон и проверить работу скрипта. Готово.

Получится примерно так: "Вы оформили заказ №700061" (2017 год, 6 по счету заказ у пользователя с ID = 1)

Опубликовано 14 Сентября 2017 | Обновлено 21 Сентября 2017
делаюИМ, интернет-магазин

Возврат к списку

Комментарии
Алексей Будагов
Алексей Будагов
8 Мар 2018
Прежде чем использовать шаблон номера заказа, дважды подумайте. В будущем столкнетесь с множеством проблем, например, с системами оплаты, доставки и т.п. Некоторые из них не умеют работать с заказами использующими шаблон номера.