Добавление собственных отчетов

Материал из ISPWiki

Перейти к: навигация, поиск

Для того чтобы добавить собственный отчет достаточно создать xml-документ с описанием: элементов интерфейса отчета, sql-запроса и текстовыми сообщениями на разных языках. Структуру отчетов, которые уже есть в биллинге, Вы можете посмотреть в файле etc/billmgr.xml. Наименование метадаты, описывающей отчет, начинается с префикса "report2.".

Содержание

Пример отчета

Ниже приведены 2 примера отчета, который показывает, какой доход приносит каждый сервер.

Для того, чтобы отчет появился в интерфейсе биллинга, необходимо создать файл /usr/local/ispmgr/etc/billmgr_mod_report2incomeserver.xml со следующем содержанием:

Пример для версии Standart, Advanced:

<?xml version="1.0" encoding="UTF-8"?>
<mgrdata>
	<metadata name="report2.incomeserver" type="report" level="7" group="mygroup" firstrun="no">
	<text name="title"/>
	<form>
		<period/>
	</form>
	<band name="project" headcolor="#f4d0bc" psort="date">
		<query>select s.id as id, s.name as name, sum(e.amount) as amount from server s left join item i on s.id=i.server left join item ia on i.id = ia.parent or 
ia.id=i.id left join expense e on e.item = ia.id  where e.cdate between '[[periodstart]]' and '[[periodend]]' group by s.id</query>
		<diagram label="name" data="amount" type="line"/>
			<col name="id" type="data" total="count" sort="digit"/>
			<col name="name" type="data" sort="alpha"/>
			<col name="amount" type="data" total="sum" sort="digit" sorted="desc"/>
	</band>
	</metadata>
	<lang name="ru">
		<messages name="report2.incomeserver">
			<msg name="amount">Доход</msg>
			<msg name="title">Отчет по доходу с сервера</msg>
			<msg name="id">Код</msg>
			<msg name="name">Наименование</msg>
		</messages>
		<messages name="reportlist">
			<msg name="name_incomeserver">Доход с сервера</msg>
			<msg name="name_mygroup">Мои отчеты</msg>
		</messages>
	</lang>
</mgrdata>

Пример для версии Corporate:

<?xml version="1.0" encoding="UTF-8"?>
<mgrdata>
	<metadata name="report2.incomeserver" type="report" level="6 7" group="mygroup" firstrun="no">
	<text name="title"/>
	<form>
		<period/>
	</form>
	<band dist="3" name="project" headcolor="#f4d0bc" psort="date">
	  		<query>select id, name from project where account=[[ses.account]]<nowiki></query>
 	  		<col name="name" type="data"/>
 	  		<band name="income" headcolor="#333333">
 		  		<query>select s.id as id, s.name as name, ifnull(sum((select sum(e.amount) from expense e where e.item=ia.id and e.cdate between 
 '<nowiki>[[periodstart]]' and '[[periodend]]')), 0) as amount from server s, item i, item ia, pricelist pl where (i.id = ia.parent or ia.id=i.id) and s.id=i.server and 
pl.id=i.price and pl.project=[[project.id]] group by s.id order by amount desc</query>
				<diagram label="name" data="amount" type="histogram"/>
				<col name="id" type="data" total="count" sort="digit"/>
				<col name="name" type="data" sort="alpha"/>
				<col name="amount" type="data" total="sum" sort="digit" sorted="desc"/>
			</band>
	  </band>
	</metadata>
	<lang name="ru">
		<messages name="report2.incomeserver">
			<msg name="amount">Доход</msg>
			<msg name="title">Отчет по доходу с сервера</msg>
			<msg name="id">Код</msg>
			<msg name="name">Наименование</msg>
		</messages>
		<messages name="reportlist">
			<msg name="name_incomeserver">Доход с сервера</msg>
			<msg name="name_mygroup">Мои отчеты</msg>
		</messages>
	</lang>
</mgrdata>

Далее необходимо перезапустить биллинг (killall billmgr).

Структура XML

Атрибуты тэга metadata

name - наименование, всегда должно начинаться с префикса report2.
type - обязательный параметр, всегда равен 'report'.
level - уровень доступа, который должен иметь пользователь, чтобы увидеть этот отчет. Перечисляется через пробел: '6 7'
group - группа, в которой будет отображаться отчет. Существующие группы: finance, marketing, promotion, support. Можно указать свою группу.
firstrun - отчет не будет выполняться при первом открытии. Опция полезна, если формирование отчета происходит долго, и необходимо сначала выбрать параметры, по которым будет сформирован отчет.

<text name="title"/> - Выводит заголовок отчета

Тэг form

Описывает поля формы.

Для того, чтобы на форме отображался диапазон дат, необходимо добавить тэг <period/>.
Если вам нужны дополнительные поля, то существует два элемента формы: input, select

Элемент input

Атрибуты:
name - наименование параметра, используется в sql запросе.
type - возможные значения: text, checkbox.
date - если задано, к полю будет прикреплена кнопка вызова календаря. Только для type="text".
default - значение по умолчанию. Только для type="text".

Элемент select

Атрибуты:
name - наименование параметра, используется в sql запросе элемента query.
query - sql запрос, заполняющий текущий элемент значениями: Например: "select u.id, u.name from user u where isgroup=1 and account=[[ses.account]]" - выборка всех отделов.
any - добавление дополнительного значения: "Любой".
values - список значений текущего элемента, через запятую. Например: "today,currentmonth,currentyear,lastday,lastmonth,lastyear,other,nodate".
default - значение по умолчанию.

В элементе select можно использовать тэг if, который позволяет скрывать определенные поля при определенном значение этого элемента.
Например:

<select name="period"  values="today,currentmonth,currentyear,lastday,lastmonth,lastyear,other,nodate" default="lastday">
	<if value="other" show="'startd','endd'"/>
</select>
<input type="text" name="periodstart" date="yes" id="startd"/>
<input type="text" name="periodend" date="yes" id="endd"/>

Элемент if

Атрибуты:

value - если значение элемента select равно этому значению, то будут показаны элементы, перечисленные в атрибуте show
show - список id элементов, которые необходимо отобразить
hide - список id элементов, которые необходимо спрятать

Элемент band

Интерфейс вывода данных описывается с помощью элемента band. Структура XML band:

<band>
	<query/>
	<diagram/>
	<col/>
	[[<band>]]
</band>

Как видно из структуры, элемент band может быть вложен в другой band. Из вложенного band можно обращаться к данным родителя, в sql запросе. Более наглядно разберем на примере ниже.

Атрибуты:

name - наименование, используется в sql запросе.
headcolor - цвет заголовка
handrep - модуль обработки, используется, если невозможно с помощью sql запроса вычислить нужные данные. Скрипт должен лежать в папке /usr/local/ispmgr/sbin. В данном руководстве мы не будем рассматривать этот параметр.

Элемент query

Содержит sql-запрос, по которому выводится информация. В запросе необходимо использовать псевдонимы для столбцов, чтобы привязать их к элементу col. Например, "s.name as name" будет привязан к столбцу "<col name="name" ...".

В sql запросе можно использовать параметры с формы отчета, а так же если query расположен во вложенном band, значения band, расположенном на уровень выше. Имена параметров должны стоять в двойных квадратных скобках. Например:

.....
<form>
	<input name="testinput" type="text"/>
</form>
<band name="project">
	<query>select id , name from project where account = [[ses.account]]</query>
	<col name="name" type="data"/>
	<band name="testdata">
		<query>
			select .... from ... where param=[[testinput]] and project=[[project.id]]
		</query>
.....

Элемент diagram

атрибут type

Тип графика. Возможные значения: line, histogram, pie.

атрибут data

Из какой колонки взять данные для круговой диаграммы (только для type="pie").

атрибут label

Из какой колонки взять подпись к значениям.

элемент line

Один или несколько таких элементов описывают данные, которые должны быть отображены на графике.

атрибут data

Содержит имя колонки, из которой необходимо брать значения для графика.

Например:

<diagram label="cname" type="histogram">
	<line data="amount"/>
	<line data="icnt"/>
</diagram>


Элемент col

атрибут name

Имя колонки. Должно иметь уникальное значение в пределах одного metadata. Необходимо для привязки к столбцам запроса из элемента query.

атрибут type

Тип данных в колонке. Может принимать значения data (данные от sql запроса), msg (показ сообщения, соответствующего переданному значению от запроса).

атрибут sort

Задаёт тип сортировки данных в колонке. Возможные значения: alpha (алфавитная сортировка), digit (сортировка в порядке числового возрастания)

атрибут sorted

если sorted="yes", таблица по умолчанию отсортирована по этой колонке. sorted="desc" отсортировано в обратном порядке.

атрибут total

Считает итоговое значение. Возможные значения: sum - сумма; count - количество строк; avg - среднее значение.

Была ли эта информация полезной? Да | Нет
Личные инструменты