Услуги по формуле: відмінності між версіями
Sv (обговорення | внесок) мНемає опису редагування |
Sv (обговорення | внесок) |
||
(Не показано 5 проміжних версій цього користувача) | |||
Рядок 23: | Рядок 23: | ||
</pre> | </pre> | ||
Тогда комментарий у платежа будет: | |||
<pre> | <pre> | ||
До вас 150 метров * 10 грн/метр + у вас (7 - 2) роутеров * 15 грн/роутер | До вас 150 метров * 10 грн/метр + у вас (7 - 2) роутеров * 15 грн/роутер | ||
Рядок 39: | Рядок 39: | ||
==sql после подключения услуги== | ==sql после подключения услуги== | ||
Имеется возможность после успешного подключения услуги | Имеется возможность после успешного подключения услуги выполнить любой sql. Естественно, данный sql должен быть каким-то образом связан с данным абонентом. Поэтому в шаблон sql необходимо добавить <nowiki>[[WHERE]]</nowiki>. Например: | ||
<pre> | <pre> | ||
Рядок 48: | Рядок 48: | ||
<pre> | <pre> | ||
UPDATE data0 d SET _cars_last = _cars, _cars='0' WHERE d.uid = 123 | UPDATE data0 d SET _cars_last = _cars, _cars='0' WHERE d.uid = 123 | ||
</pre> | |||
==Сложные формулы== | |||
Если любое поле из _cars_a, _cars_b ненулевое, то результат = {_cars_a}*150 + {_cars_b}*75. Иначе = {_cars_a_last}*150 + {_cars_b_last}*75 | |||
<pre> | |||
{_cars_a} || {_cars_b} ? {_cars_a}*150 + {_cars_b}*75 : {_cars_a_last}*150 + {_cars_b_last}*75 | |||
</pre> | |||
В этом случае комметарий к платежу: | |||
<pre> | |||
EVAL[({_cars_a} || {_cars_b} ? {_cars_a} : {_cars_a_last})] автомобилей * 130 грн/авто + | |||
EVAL[({_cars_a} || {_cars_b} ? {_cars_b} : {_cars_b_last})] автомобилей * 75 грн/авто | |||
</pre> | |||
И sql: | |||
<pre> | |||
UPDATE data0 d SET | |||
_cars_a_last = _cars_a, _cars_b_last = _cars_b, _cars_a='0', _cars_b = '0' | |||
[[WHERE]] AND (_cars_a > 0 OR _cars_b > 0) | |||
</pre> | </pre> |
Поточна версія на 15:27, 4 травня 2023
Модуль «Услуги по формуле» это тип услуг, в котором стомость нефиксированная и вычисляется по формуле, в которой могут быть задействованы дополнительные поля учетной записи абонента.
К примеру (абстрактный пример только для демонстрации возможностей):
расстояние до абонента в метрах * 10 грн/метр + (количество роутеров - количество в резерве) * 15 грн/роутер
Допустим, эти данные сохраняются в таких полях:
- расстояние до абонента в метрах: _distance
- количество роутеров: _routers
- количество роутеров в резерве: _reserve_routers
Таким образом, в услуге данная формула будет записана так:
_distance * 10 + (_routers - _reserve_routers) * 15
Также в услуге есть возможность указать шаблон комментария к платежу-списанию за услугу, например:
До вас _distance метров * 10 грн/метр + у вас (_routers - _reserve_routers) роутеров * 15 грн/роутер
Тогда комментарий у платежа будет:
До вас 150 метров * 10 грн/метр + у вас (7 - 2) роутеров * 15 грн/роутер
В этом комментарии смущает "7 - 2", почему бы не написать сразу 5? Для этого в шаблоне необходимо использовать EVAL[..]:
До вас _distance метров * 10 грн/метр + у вас EVAL[(_routers - _reserve_routers)] роутеров * 15 грн/роутер
И результат будет таким:
До вас 150 метров * 10 грн/метр + у вас 5 роутеров * 15 грн/роутер
sql после подключения услуги
Имеется возможность после успешного подключения услуги выполнить любой sql. Естественно, данный sql должен быть каким-то образом связан с данным абонентом. Поэтому в шаблон sql необходимо добавить [[WHERE]]. Например:
UPDATE data0 d SET _cars_last = _cars, _cars='0' [[WHERE]]
Этот шаблон будет преобразован к такому sql:
UPDATE data0 d SET _cars_last = _cars, _cars='0' WHERE d.uid = 123
Сложные формулы
Если любое поле из _cars_a, _cars_b ненулевое, то результат = {_cars_a}*150 + {_cars_b}*75. Иначе = {_cars_a_last}*150 + {_cars_b_last}*75
{_cars_a} || {_cars_b} ? {_cars_a}*150 + {_cars_b}*75 : {_cars_a_last}*150 + {_cars_b_last}*75
В этом случае комметарий к платежу:
EVAL[({_cars_a} || {_cars_b} ? {_cars_a} : {_cars_a_last})] автомобилей * 130 грн/авто + EVAL[({_cars_a} || {_cars_b} ? {_cars_b} : {_cars_b_last})] автомобилей * 75 грн/авто
И sql:
UPDATE data0 d SET _cars_a_last = _cars_a, _cars_b_last = _cars_b, _cars_a='0', _cars_b = '0' [[WHERE]] AND (_cars_a > 0 OR _cars_b > 0)