Користувальницькькі налаштування

Налаштування сайту


Сайдбар

Розділи

Загальний опис
Історія змін
Рекомендації щодо оновлення
Плани на майбутнє
Відомі проблеми
Онлайн демо
Люди
Трохи про безпеку

FAQ



Редагувати сайдбар

discounts

Це стара версія документу!


Знижки

Механіка знижок доступна починаючи з Ubilling 0.3.4. У версії Ubilling 1.3.4 (ага, після сотні стабільних релізів) її було вдумливо переписано, і вона більше не спирається на “додаткові поля профілю”, як це було раніше. Суть реалізації знижок, полягає в тому, що при відповідному виклику discountprocessing з Remote API відбувається наступне:

  • Видобуваються суми усіх позитивних платежів за місяць (поточний чи попередній, опційно).
  • У випадку, якщо для користувачів, що здійснили ці платежі встановлено ненульовий відсоток знижки, цей відсоток від суми всіх платежів користувача зараховується на його рахунок.

Ввімкнення та налаштування

Вся конфігурація, відбувається за допомогою кількох опцій alter.ini:

alter.ini
; Підтримку механіки знижок увімкнено?
DISCOUNTS_ENABLED=1
; якщо (чомусь?) необхідно внесення коштів знижки на рахунок як оплати а не коригуванням, 
; дана опція може приймати значення ADD
DISCOUNT_OPERATION="CORR"
; ID типу платежів, під виглядом якого вноситимуться кошти на рахунок. За замовчуванням це типу "готівка".
DISCOUNT_CASHTYPEID=1
; розкоментування цієї опції, призведе до того, що при розрахунку знижок користувачів, 
; будуть розглядатись оплати за "попередній місяць" замість "за поточний" як це є за замовчуванням.
;DISCOUNT_PREVMONTH=1

та розміщенням необхідного виклику discountprocessing в якийсь певний час, в вашому crontab-і.

У випадку, якщо ви бажаєте розраховувати знижки, по платежах за поточний місяць, в останній день місяця, ви можете зробити якось так:

59 23 * * *   /bin/ubapi "discountprocessing&lastday=1"

Що власне призведе до нарахування знижок, по платежах за поточний місяць, але тільки в 23:59 останнього дня місяця, за що відповідає параметр lastday.

Також вам може захотітись, нараховувати знижки скажімо тільки “чемним користувачам”, котрі спромоглись оплатити послуги до середини місяця, ігноруючи всі платежі після 15-го числа. В такому випадку виклик в crontab може мати наступний вигляд:

59 23 15 * *   /bin/ubapi "discountprocessing"

Ну або ж ви бажаєте нараховувати знижки по всіх платежах попереднього місяця, вночі першого числа нового місяця. В такому випадку, вам необхідно змінити чи розкоментувати відповідну опцію в значення “1”

DISCOUNT_PREVMONTH=1

Та використовувати виклик з crontab якось так:

20 1 1 * *      /bin/ubapi "discountprocessing"

Використання

Тепер, для того, щоб встановити знижку нашому абоненту в 10%, нам достатньо просто скористатись “Редагуванням користувача”

Клацнути на редагування знижки

Встановити необхідний нам відсоток

отримати очікуваний результат

та забути про це.

При наступних викликах discountprocessing з Remote API кошти будуть самі собі зараховуватись на рахунок абонента згідно нашої конфігурації та відсотків вказаних для абонента.

Слід також зауважити, що для зміни відсотку знижки абонентів, у вашого персоналу повинно бути встановленим відповідне право керувати користувацькими знижками - DISCOUNTS.

Міграція з старих знижок

У випадку, якщо ви раніше, в доісторичні часи, використовували стару механіку знижок, що спиралась на “Додаткові поля профілю” aka CF можемо тільки поспівчувати - з турботою про вас, зроблено простий One-punch скрипт для міграції отого всього мороку в нормальний сучасний вигляд. Просто, після оновлення до 1.3.4 чи вище, разочок запустіть його в “PHP консолі розробника” і все в вас буде добре ;)

    if ($ubillingConfig->getAlterParam('DISCOUNTS_ENABLED')) {
        $discountCfId = $ubillingConfig->getAlterParam('DISCOUNT_PERCENT_CFID');
        if ($discountCfId) {
            $cfDb = new nya_cfitems();
            $cfDb->where('typeid', '=', $discountCfId);
            $allOldDiscounts = $cfDb->getAll('login');
            if (!empty($allOldDiscounts)) {
                $discountsDb = new nya_discounts();
                $allDiscounts = $discountsDb->getAll('login');
                foreach ($allOldDiscounts as $eachLogin => $eachOldDiscountData) {
                    if (is_numeric($eachOldDiscountData['content'])) {
                        if (!isset($allDiscounts[$eachLogin])) {
                            $newDiscount = ubRouting::filters($eachOldDiscountData['content'], 'int');
                            $discountsDb->data('login', ubRouting::filters($eachOldDiscountData['login'], 'mres'));
                            $discountsDb->data('percent', $newDiscount);
                            $discountsDb->create();
                            show_success(__('User') . ' (' . $eachLogin . ') ' . __('Discount') .' '. $newDiscount);
                        } else {
                            show_warning(__('User') . ' (' . $eachLogin . ') ' . __('already have discount'));
                        }
                    } else {
                        show_error(__('User') . ' (' . $eachLogin . ') ' . __('have wrong discount value').' '.$newDiscount);
                    }
                }
            } else {
                show_error(__('No old discounts found'));
            }
        } else {
            show_error(__('No DISCOUNT_PERCENT_CFID option set'));
        }
    } else {
        show_error(__('Discounts') . ' ' . __('is disabled'));
    }
discounts.1672417055.txt.gz · Востаннє змінено: 2022/12/30 18:17 повз nightfly