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

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

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

Стандартные варианты не очень хороши, так как присутствуют символы отличные от цифр (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
делаюИМ, интернет-магазин
Поделиться
Похожие статьи
Свой обработчик для службы доставки
Расчет стоимости доставки курьером по своей формуле.
Читать дальше » 0
Алексей,
Как сделать ИМ дружелюбнее. E-mail уведомления
Наверно это касается всех интернет-магазинов на 1С-Битрикс. Делаешь заказ и понеслось: заказ оформле...
Читать дальше » 0
Алексей,
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
Алексей
8 мар 2018
Прежде чем использовать шаблон номера заказа, дважды подумайте. В будущем столкнетесь с множеством проблем, например, с системами оплаты, доставки и т.п. Некоторые из них не умеют работать с заказами использующими шаблон номера.
Стандартные варианты не очень хороши, так как присутствуют символы отличные от цифр (0-9), а без шаблона каждый будет знать кол-во заказов в магазине. Я решил немного персонализировать номер заказа, используя только цифры.