Drupal Commerce: Вариант с предоплатой заказа 50


107

Задача: разрешить пользователю во время оформления заказа выбрать вариант предоплаты (50% от стоимости заказа). Например, при продаже билетов на мероприятие. Остальная оплата будет осуществляться на месте самого мероприятия...

Сейчас покажу, как на практике можно применить новые правила, описанные в статье Учим rules работать с полем Price у заказа.

Шаг 1: Настройка интерфеса для пользователей

Необходимо добавить новое поле на форму оформления заказа (checkout). Для этого необходимо включаем модуль Commerce Fieldgroup Panes, который превращает группы полей заказа в Checkout Panes.

На странице управления полями заказа admin/commerce/config/order/fields добавляем новую группу и новое поле. Я назвал его field_payment_type (Тип оплаты):

Настройки поля field_payment_type:

На странице настроек чекаута admin/commerce/config/checkout переносим появившуюся панель из Disabled в нужный шаг:

Тут важно понимать только одно - выбор оплаты должен находится перед шагом Проверка, т.е. минимум одна перезагрузка страницы должна быть. Именно в тот момент и будет происходить пересчет общей стоимости заказа.

Результат:

Шаг 2: Пересчет стоимости заказа

Осталось выполнить пересчет стоимости заказа в момент его обновления. Это можно сделать программно (аналогично этому материалу). А можно настроить через Правила, предварительно "научив" их работать с полем Price.

На странице admin/config/workflow/rules создаем новое правило на событие "Перед сохранением commerce order".

В разделе "Условия" указываем

  1. Сущность имеет поле "field_payment_type"
  2. Сравнение данных - commerce-order:field-payment-type = 50% Предоплата 
     

В разделе "Действия" изменяем цену в 2 раза

  1. 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 - так называется мой модуль, в котором я создавал новые действия для правил

Результат

Добавить комментарий
Может быть интересно

Порядок действий для установки Solr на сервере с Centos 7

4

В данной статье будет теория про механизм, который использует модуль migrate при импорте материалов в Друпал из различных источников.

2
Те, кто использует модуль Double field могли заметить, что в текстовой области отсутствует редактор. Бывают случаи, когда для удобства наполнения он просто необходим.
1
Допустим, есть словарь с терминами (недавно с ними работал, поэтому с них и начну). У терминов есть дополнительные поля. Мы хотим получить список терминов, у которых значение поля имеет определенное значение.
1

По умолчанию при запуске команды  composer update происходит перезапись основных файлов в корне сайта (.htaccess, robots.txt). Но зачастую такое поведение мешает работе системы (если файлы отредактированы вручную, или для формирования robots.txt используется специальный модуль)

4