Перейти к содержимому
Калькуляторы

Вопрос спецам по Lanbilling'y переход с 1.9 до 2.0

@Andrei Ну я вам про них и говорил, собственно. php там не место, нужен xml с шаблоном + sql с запросами, concat и post по желанию.

А подключаемых отчетов уже много лет как нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

26 минут назад, dereiff сказал:

нужен xml с шаблоном + sql с запросами, concat и post по желанию.

Есть какое-то описание процесса? Дали ссылку вот на такое описание - https://www.lanbilling.ru/neworders.html

Много непонятного, часть ссылок битые, проще наверное взять что-то из комплекта поставки и пытаться его править.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

14 часов назад, Andrei сказал:

Есть какое-то описание процесса? Дали ссылку вот на такое описание - https://www.lanbilling.ru/neworders.html

Много непонятного, часть ссылок битые, проще наверное взять что-то из комплекта поставки и пытаться его править.

Это описание того, как редактировать xml. Попробуйте для начала почитать раздел "Шаблоны отчетных документов" из документации. Возможно тогда станет понятнее

Если кратко, то отчет в биллинге это XML, который в конечном итоге станет документов MS Word или MS Excel, в редком случае некоторые отчеты из поставки это html. Внутри себя XML содержит как минимум пару указателей (как вариант <!-- begin_services --> и <!-- end_services -->) между которыми описывается структура которая должна повторяться в итоговом документе, например - строка в таблице.  Аналогичные указатели есть в sql файле - он описывает как из БД выбирать данные и заполнять ими ту самую строку в таблице.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В прошлых версиях биллинга рекомендовали все делать через API, теперь опять вернулись к тому, от чего ушли - к прямым sql-запросам. :)

Простейший отчет сделал

sql:


<!-- begin_services ---:begin_cursor:%amount%,%prom_date%,%number%,%FIO%,@dtfrom:select p.amount, p.prom_date, agr.number, concat(a.abonent_surname,' ',a.abonent_name,' ',a.abonent_patronymic) as FIO from promise_payments as p, agreements as agr, accounts as a where agr.agrm_id=p.agrm_id and agr.uid=a.uid and date(p.prom_date)>=@dtfrom and date(p.prom_date)<=@dtto;
<!-- end_services -->:end_cursor

Но в браузере результат красиво не отображается.

Попробовал сделать шаблон xsl и поставил ссылку на него из xml, но красивой таблицы так и не получилось

xml:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<?xml-stylesheet type='text/xsl' href='promise_payments.xsl'?>

<payments>

<!-- begin_services -->
<payment>
<amount>%amount%</amount>
<prom_date>%prom_date%</prom_date>
<number>%number%</number>
<FIO>%FIO%</FIO>
</payment>
<!-- end_services -->

</payments>

 

xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<table border="1">
  <tr bgcolor="#CCCCCC">
    <td align="center"><strong>Сумма</strong></td>
    <td align="center"><strong>Дата</strong></td>
    <td align="center"><strong>Договор</strong></td>
    <td align="center"><strong>ФИО</strong></td>
  </tr>
  <xsl:for-each select="payments/payment">
  <tr bgcolor="#F5F5F5">
    <td><xsl:value-of select="amount"/></td>
    <td><xsl:value-of select="prom_date"/></td>
    <td><xsl:value-of select="number"/></td>
    <td><xsl:value-of select="FIO"/></td>
  </tr>
  </xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

18 часов назад, Andrei сказал:

В прошлых версиях биллинга рекомендовали все делать через API, теперь опять вернулись к тому, от чего ушли - к прямым sql-запросам. :)

Ничего не поменялось, хотите изменять данные или сопрягать информационные системы - используйте API. Шаблонные отчеты изначально делались через sql.

 

Если хотите отображение в браузере - рисуйте сразу html структуру, зачем xml? xml нужен если на выходе хотите получить MS Word или MS Excel документ

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

11 часов назад, dereiff сказал:

Шаблонные отчеты изначально делались через sql.

У меня в прошлых версиях ЛБ пользовательские отчеты были на php через API.

 

11 часов назад, dereiff сказал:

Если хотите отображение в браузере - рисуйте сразу html структуру, зачем xml?

xml - типовая штука, на сколько я понял доку и примеры из комплекта поставки.

html тоже есть, видел, переделал, простейший рабочий вариант:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
<TITLE></TITLE>
</HEAD>

<BODY TEXT="#000000">
<table border="1">
<tr><td>Сумма</td><td>Дата</td><td>Договор</td><td>ФИО</td></tr>
<!-- begin_services --><tr><td>%amount%</td><td>%prom_date%</td><td>%number%</td><td align=left>%FIO%</td></tr>
<!-- end_services -->
</table>
</BODY>
</HTML>

Заголовок таблицы с переменными @dtto и @dtfrom, которые передаются в скрипт, можно сделать добавив перед началом курсора в sql-файл псевдо-sql-запросы  вида:

%datefrom%:select @dtfrom
%dateto%:select @dtto

 

Ну и xml я так и не победил.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите, а вот в ЛанБиллинге обычные тарифы с месячной арендой - для них списание 1-ого числа в 0:00

 

Неужели реально нельзя это поменять, чтобы списание было не ночью а днём ? Или ещё лучше например 3-его числа каждого месяца, напр в 10 утра ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

5 часов назад, Urs_ak сказал:

Неужели реально нельзя это поменять, чтобы списание было не ночью а днём ? Или ещё лучше например 3-его числа каждого месяца, напр в 10 утра ?

ИМХО, это логика зашита в биллинг жестко и не меняется через настройки.

 

Вопрос про личный кабинет.

В /etc/lanbilling/phpclient/client/connection.ini есть настройки указателей на страницы, на которые абонент из личного кабинета будет перенаправляться при выборе определенного действия.
Например, если абонент хочет подключить себе телефон, то вот тут надо поправить url на свой:

[connection/telephony]
url = 'http://sencha.com'
description = 'Описание страницы подключения к телефонии'
text = 'Подключение к телефонии'


Вопрос - каким образом на эту стороннюю страницу передается текущий контекст из личного кабинета, например логин абонента, или его id в биллинге, или номер его договора?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

21 минуту назад, Andrei сказал:

ИМХО, это логика зашита в биллинг жестко и не меняется через настройки.

Жалко. Мой домашний провайдер списывает 7-ого числа, правда тоже ночью.

 

21 минуту назад, Andrei сказал:

Вопрос - каким образом на эту стороннюю страницу передается текущий контекст из личного кабинета, например логин абонента, или его id в биллинге, или номер его договора?

Я не знаю :)

А на самой странице через php $_SERVER['REMOTE_ADDR'] и далее запрос к mysql не катит ?

 

Мы вот начинающие пользователи LanBilling'а, уже хотим сделать чтобы абоненты сами себе тыкали "Обещанный платёж" на странице блокировки, без захода в ЛК

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

4 часа назад, Urs_ak сказал:

А на самой странице через php $_SERVER['REMOTE_ADDR'] и далее запрос к mysql не катит ?

Это как?

 

4 часа назад, Urs_ak сказал:

уже хотим сделать чтобы абоненты сами себе тыкали "Обещанный платёж" на странице блокировки, без захода в ЛК

Определять абонента будете только по логину? Как будете потом подтверждать, что именно этот абонент сам себе назначил "Обещанный платеж", а не кто-то другой, узнавший логин абонента, загнал его баланс в минус?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2 часа назад, Andrei сказал:

Это как?

Определять абонента будете только по логину? Как будете потом подтверждать, что именно этот абонент сам себе назначил "Обещанный платеж", а не кто-то другой, узнавший логин абонента, загнал его баланс в минус?

По IP абонента. У меня есть уже наброски.

 

Абонент заходит на веб-страничку в сети провайдера, соотв. мы узнаём в php из переменной $_SERVER['REMOTE_ADDR']  его адрес.

Далее мы коннектимся на php к базе и по ip получаем что хотим, например agrm_id (пример sql-запросау меня есть).

Далее мы вызываем из php, API ланбиллинга и кладём пользователю с agrp_id нужную сумму, сумму тоже берём по API. Как работать с API через php я недавно разобрался.

 

Ну вот  - пользователь видит на странице "дай денег" кнопку "Отложенный платёж (3 суток)", нажимает его и ему врубается интернет.

 

P.S. У нас мы сделали что у абонента ip не меняется, т.е. при блокировке тот же ip

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

27 минут назад, Urs_ak сказал:

Абонент заходит на веб-страничку в сети провайдера, соотв. мы узнаём в php из переменной $_SERVER['REMOTE_ADDR']  его адрес.

Не наш случай, у нас есть НАТ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Зачем клиента гнать на внутренний сервис через НАТ? НАТ'у больше заняться нечем? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

14 часов назад, vop сказал:

Зачем клиента гнать на внутренний сервис через НАТ?

Потому что pppoe, и пока клиент не авторизуется у него вообще адресов нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

9 hours ago, Andrei said:

Потому что pppoe, и пока клиент не авторизуется у него вообще адресов нет.

Как бы уже вопрос не о том, но у вас клиенты с отрицательным балансом не могут авторизоваться? За что их так жестоко? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

4 часа назад, vop сказал:

у вас клиенты с отрицательным балансом не могут авторизоваться? За что их так жестоко? :)

Конечно могут, им выдаются адреса из гостевой сети, из которой им показывают страницу "дай денег".

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

19 hours ago, Andrei said:

Конечно могут, им выдаются адреса из гостевой сети, из которой им показывают страницу "дай денег".

Ясненько. Хотя, как по мне, игры с гостевыми сетями нужны исключительно в случае неизвестных клиентов. А если клиент у вас известен, и может быть идентифицирован, то не совсем понятно, зачем гостевые сети использовать. Например, возможность беспарольной кнопки "заплачу завтра" уже теряются (ведь пароль уже предъявлен при подключении).

 

Ну то уже каждый выбирает так, как ему лучше. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2 часа назад, vop сказал:

А если клиент у вас известен, и может быть идентифицирован, то не совсем понятно, зачем гостевые сети использовать. Например, возможность беспарольной кнопки "заплачу завтра" уже теряются (ведь пароль уже предъявлен при подключении)

Возможность не теряется. В остальном - не понял логики.

Собственно хочется вернуться к заданному вопросу - добавлению в личный кабинет доп.интеграций. Не изучать же ради это Yii Framework. Я посмотрел бегло доки на него - вещь интересная, но на изучение уйдет куча времени и результат будет "из пушки по воробьям". Неужели никто ничего не допиливает в функционале личного кабинета?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

20.01.2020 17:14:28.632695 WARNING  LWP9006 [src/radius.cpp:2230] IP 10.10.15.39 is already used for vg_id = 0

Кто нибудь сталкивался с чем то подобным? Выдача адресов статическая, PPPoE.

 

Пока что наблюдается только на одной подсети. Гостевых сетей нет.

 

LANBilling 2.0 RADIUS DialUP 27.0 (May  7 2019 15:27:28) rev #e6b722cf

 

Изменено пользователем hsvt

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что бы не создавать новую тему. Сейчас версия 1.9 hf4. Есть лицензия на 2 версию. Сейчас тихонечко переношу данные скриптами в 2.0.23. Вроде все тихонечко получается. И тут вопрос по телефонии. Используется у нас Астериск и Си2000. 1.9 Все хорошо загружает парсит корректно претензий нет. В 2.0 Там агент теперь LBphone. Перенес телефонный каталог с которым сейчас все хорошо работает и тарифы телефонии. Настроил перенес все учетные записи под этого агента. Настроил парсеры. (Подкрутил конфиг парсера астериска). Ну и попробовал загрузить телефонию. Из csv астериска всего 3 вызова. Файлы si2000 парсит с ошибками типа

Цитата

05.02.2020 23:19:19 WARNING LWP1807 [phonecalc.cpp:932:CalculateCall]   Call tel00420200122:1153 is not calculated. Cannot find vgroups for numbers, numfrom: XXXXXXXXXX[], numto: XXXXXXXXXXX[2-57-0-1-28] (Как я понял в квадратных скобках это транки)

Ну и входящие в исходящие переместил. Кто нибудь сталкивался с таким?

Цитата

 

LANBilling 2.0 Phone Agent build 23.1 (Jun 25 2019 10:23:50), rev #3b90596e

LANBilling 2.0 Core Server build 23.1 (Jun 25 2019 10:43:11), rev #3ed264ee

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не находит учётки к кому привязаны номера/транки 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

22 часа назад, arhead сказал:

Сейчас версия 1.9 hf4. Есть лицензия на 2 версию. Сейчас тихонечко переношу данные скриптами в 2.0.23

Зачем же вы некрофилией занимаетесь? Возьмите вместо 2.0.23 актуальную версию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

11 часов назад, alvisid сказал:

Не находит учётки к кому привязаны номера/транки 

Привязка есть. Он ругается где транк пустой или есть. В 1.9 Нормально же все в себя воспринимает.

1 час назад, dereiff сказал:

Зачем же вы некрофилией занимаетесь? Возьмите вместо 2.0.23 актуальную версию.

Успел только этот дистр урвать когда поддержка была

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поддержка там стоит минимум - на время обновления она однозначно нужна. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Стоит 30я сборка ЛБ от 11.11.2019
Где теперь ЛБ хранит активные pppoe-сессии, юзеров авторизованных через радиус-агента?

mysql> select * from sessionsradius;
Empty set (0.00 sec)

Раньше проверял наличие дублирующихся и залипших сессий вот так:

select inet_ntoa( assigned_ip ), session_id, count(*) cnt  from sessionsradius group by assigned_ip having cnt > 1;

Теперь эта конструкция не работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.