Передплата

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

    У цьому прикладі до форми замовлення додається галочка "Передплата 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;
        }
    }

    Це все!