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

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


discounts

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Порівняння попередніх версій Попередня ревізія
Попередня ревізія
Наступна ревізія По сторонах наступні версії
discounts [2012/11/21 01:59]
discounts [2022/12/30 18:20]
nightfly
Рядок 1: Рядок 1:
 +====== Знижки ======
  
 +Механіка знижок доступна починаючи з Ubilling 0.3.4. У версії Ubilling 1.3.4 (ага, після сотні стабільних релізів) її було вдумливо переписано, і вона більше не спирається на "додаткові поля профілю", як це було раніше. Суть реалізації знижок, полягає в тому, що при відповідному виклику **discountprocessing** з [[remoteapi|Remote API]] відбувається наступне:
 +
 +  * Видобуваються суми усіх позитивних платежів за місяць (поточний чи попередній, опційно).
 +  * У випадку, якщо для користувачів, що здійснили ці платежі встановлено ненульовий відсоток знижки, цей відсоток від суми всіх платежів користувача зараховується на його рахунок.
 +
 +
 +====== Ввімкнення та налаштування ======
 +
 +Вся конфігурація, відбувається за допомогою кількох опцій [[alteriniconf|alter.ini]]:
 +
 +<file ini alter.ini>
 +; Підтримку механіки знижок увімкнено?
 +DISCOUNTS_ENABLED=1
 +; якщо (чомусь?) необхідно внесення коштів знижки на рахунок як оплати а не коригуванням, 
 +; дана опція може приймати значення ADD
 +DISCOUNT_OPERATION="CORR"
 +; ID типу платежів, під виглядом якого вноситимуться кошти на рахунок. За замовчуванням це типу "готівка".
 +DISCOUNT_CASHTYPEID=1
 +; розкоментування цієї опції, призведе до того, що при розрахунку знижок користувачів, 
 +; будуть розглядатись оплати за "попередній місяць" замість "за поточний" як це є за замовчуванням.
 +;DISCOUNT_PREVMONTH=1
 +</file>
 +
 +та розміщенням необхідного виклику **discountprocessing** в якийсь певний час, в вашому crontab-і.
 +
 +У випадку, якщо ви бажаєте розраховувати знижки, по платежах за поточний місяць, в останній день місяця, ви можете зробити якось так:
 +
 +<code>
 +59 23 * * *   /bin/ubapi "discountprocessing&lastday=1"
 +</code>
 +
 +Що власне призведе до нарахування знижок, по платежах за поточний місяць, але тільки в 23:59 останнього дня місяця, за що відповідає параметр **lastday**.
 +
 +Також вам може захотітись, нараховувати знижки скажімо тільки "чемним користувачам", котрі спромоглись оплатити послуги до середини місяця, ігноруючи всі платежі після 15-го числа. В такому випадку виклик в crontab може мати наступний вигляд:
 +
 +<code>
 +59 23 15 * *   /bin/ubapi "discountprocessing"
 +</code>
 +
 +Ну або ж ви бажаєте нараховувати знижки по всіх платежах попереднього місяця, вночі першого числа нового місяця. В такому випадку, вам необхідно змінити чи розкоментувати відповідну опцію в значення "1"
 +
 +<code ini>
 +DISCOUNT_PREVMONTH=1
 +</code>
 +
 +Та використовувати виклик з crontab якось так:
 +<code>
 +20 1 1 * *      /bin/ubapi "discountprocessing"
 +</code>
 +
 +====== Використання ======
 +
 +Тепер, для того, щоб встановити знижку нашому абоненту в 10%, нам достатньо просто скористатись "Редагуванням користувача"
 +
 +{{:paydiscounts0.png?500|}}
 +
 +Клацнути на редагування знижки
 +
 +{{:paydiscounts1.png?500|}}
 +
 +Встановити необхідний нам відсоток
 +
 +{{:paydiscounts2.png?500|}}
 +
 +отримати очікуваний результат
 +
 +{{:paydiscounts3.png?500|}}
 +
 +та забути про це.
 +
 +При наступних викликах discountprocessing з Remote API кошти будуть самі собі зараховуватись на рахунок абонента згідно нашої конфігурації та відсотків вказаних для абонента.
 +
 +{{:paydiscounts4.png?500|}}
 +
 +Слід також зауважити, що для зміни відсотку знижки абонентів, у вашого персоналу повинно бути встановленим відповідне право керувати користувацькими знижками - **DISCOUNTS**.
 +
 +====== Міграція з старих знижок ======
 +
 +У випадку, якщо ви раніше, в доісторичні часи, використовували стару механіку знижок, що спиралась на "Додаткові поля профілю" aka CF <del>можемо тільки поспівчувати</del> - з турботою про вас, зроблено простий [[onepunch|One-punch скрипт]] для міграції отого всього мороку в нормальний сучасний вигляд. Просто, після оновлення до 1.3.4 чи вище, разочок запустіть його в "PHP консолі розробника" і все в вас буде добре ;)
 +
 +<code 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');
 +                            $loginF = ubRouting::filters($eachOldDiscountData['login'], 'mres');
 +                            $loginF = trim($loginF);
 +                            $discountsDb->data('login', $loginF);
 +                            $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'));
 +    }
 +</code>
discounts.txt · Востаннє змінено: 2023/01/19 10:49 повз mixtery