Предоплата

Пример реализации плагина для частичной оплаты заказов (предоплаты)

В этом примере в форму заказа добавляется галочка "Предоплата 50%". Если она отмечена покупателем, первый платеж будет уменьшаться наполовину.

Первым делом скопируйте код формы заказа из файла assets/plugins/commerce/templates/front/order_form.tpl в чанк, добавьте в него следующий код:

<div class="form-group">
    <label><input type="checkbox" name="partial" value="1" [+c.partial+] onchange="Commerce.updateOrderData($(this.form))">
        Предоплата 50%
    </label>
</div>

В коде выше Commerce.updateOrderData($(this.form)) означает, что при каждом изменении значения данного поля на сервер будут отправляться данные формы.

Добавьте параметр formTpl с именем нового чанка к вызову сниппета Order.

Далее создайте плагин:

switch ($modx->event->name) {
    case 'OnBeforePaymentCreate': {
        $processor = ci()->commerce->loadProcessor();
        $data = $processor->getRawData();

        // получаем уже оплаченную сумму по этому заказу
        $paid = $processor->getOrderPaymentsAmount($params['order_id']);

        // если платежей по заказу не было, и галочка предоплаты отмечена,
        // уменьшаем сумму платежа наполовину
        if (!$paid && !empty($data['partial'])) {
            $params['amount'] = floor($params['amount'] * 0.5);
        }
        break;
    }
}

Это всё!