Услуги по формуле: відмінності між версіями

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку
 
(Не показано одну проміжну версію цього користувача)
Рядок 52: Рядок 52:
==Сложные формулы==
==Сложные формулы==


Если любое поле из _cars1_a, _cars1_b ненулевое, то результат = {_cars1_a}*150 + {_cars1_b}*75. Иначе = {_cars1_a_last}*150 + {_cars1_b_last}*75
Если любое поле из _cars_a, _cars_b ненулевое, то результат = {_cars_a}*150 + {_cars_b}*75. Иначе = {_cars_a_last}*150 + {_cars_b_last}*75
<pre>
<pre>
{_cars1_a} || {_cars1_b} ? {_cars1_a}*150 + {_cars1_b}*75 : {_cars1_a_last}*150 + {_cars1_b_last}*75
{_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)