Задача: разрешить пользователю во время оформления заказа выбрать вариант предоплаты (50% от стоимости заказа). Например, при продаже билетов на мероприятие. Остальная оплата будет осуществляться на месте самого мероприятия...
Сейчас покажу, как на практике можно применить новые правила, описанные в статье Учим rules работать с полем Price у заказа.
Шаг 1: Настройка интерфеса для пользователей
Необходимо добавить новое поле на форму оформления заказа (checkout). Для этого необходимо включаем модуль Commerce Fieldgroup Panes, который превращает группы полей заказа в Checkout Panes.
На странице управления полями заказа admin/commerce/config/order/fields добавляем новую группу и новое поле. Я назвал его field_payment_type (Тип оплаты):
На странице настроек чекаута admin/commerce/config/checkout переносим появившуюся панель из Disabled в нужный шаг:
Тут важно понимать только одно - выбор оплаты должен находится перед шагом Проверка, т.е. минимум одна перезагрузка страницы должна быть. Именно в тот момент и будет происходить пересчет общей стоимости заказа.
Шаг 2: Пересчет стоимости заказа
Осталось выполнить пересчет стоимости заказа в момент его обновления. Это можно сделать программно (аналогично этому материалу). А можно настроить через Правила, предварительно "научив" их работать с полем Price.
На странице admin/config/workflow/rules создаем новое правило на событие "Перед сохранением commerce order".
В разделе "Условия" указываем
- Сущность имеет поле "field_payment_type"
- Сравнение данных - commerce-order:field-payment-type = 50% Предоплата
В разделе "Действия" изменяем цену в 2 раза
- Multiply the order price by some amount 0.5
Вот так выглядит данное правило "изнутри":
{ "rules_type_payment" : {
"LABEL" : "50% - Type payment",
"PLUGIN" : "reaction rule",
"ACTIVE" : false,
"OWNER" : "rules",
"TAGS" : [ "frantsuzzz" ],
"REQUIRES" : [ "rules", "frz_tweaks", "entity" ],
"ON" : { "commerce_order_presave" : [] },
"IF" : [
{ "entity_has_field" : { "entity" : [ "commerce-order" ], "field" : "field_payment_type" } },
{ "data_is" : { "data" : [ "commerce-order:field-payment-type" ], "value" : "1" } }
],
"DO" : [
{ "frz_tweaks_commerce_order_price_multiply" : {
"commerce_order" : [ "commerce_order" ],
"amount" : "0.5",
"component_name" : "discount",
"round_mode" : "1"
}
}
]
}
}
//frz_tweaks - так называется мой модуль, в котором я создавал новые действия для правил
- 09.02.2017
- 107 просмотров