Предоплата

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

    В этом примере в форму заказа добавляется галочка "Предоплата 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;
        }
    }

    Это всё!