Конструктор отчетов

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (1)

просмотр истории страницы
and a.parent_id not in (244,4,2)
{code}
# h5. Отчёт по объёмам потребленного трафика посуточно и остатка/превышения ежедневных и ежемесячных лимитов (если они есть) за указанный период
Для работы отчета необходимо включить опцию "*Сохранять движения всего трафика*" в [настройках оператора связи|CarbonBilling:Глобальные настройки биллинга и оператора]
{code}/*
1) Получаем абонента, дни когда был расход и по каким услугам - select from abonents join (select distinct from arch_account_stack join usluga)
2) Присоединяем данные по расходу трафика (вх/исх отдельно) - left join down left join upl
2.1) Берем данные из arch_account_stack, группируя по услугам и датам
2.2) Считаем сумму по трафику за сутки, попутно вычисляя остаток/превышение суточного лимита (если есть)
3) Считаем итого за месяц по каждой услуге из тех же самых данных - union all select...
3.1) в присоединенных данных по трафику добавляем колонку с месячным лимитом, с помощью этого вычисляем остаток/превышение за месяц
*/
select
dates.aasdate "Период",
dates.aasusluga "Услуга",
coalesce(cast(round(down.mbsum) as varchar(32)),'') "Входящий МБ",
down.limitleft as "Лимит ВХ",
coalesce(cast(round(upl.mbsum) as varchar(32)),'') "Исходящий МБ",
upl.limitleft as "Лимит ИСХ"
from
abonents a
join
(select distinct
aaasss.abonent_id as abon,
aasu.name as aasusluga,
cast(cast(aaasss.CHANGE_BALANCE_TIME as date) as varchar(32)) as aasdate
from
arch_account_stack aaasss
join usluga aasu on aaasss.usluga_id=aasu.id
where
aaasss.abonent_id= ':Abonent_ID$'
and aaasss.CHANGE_BALANCE_TIME between ':1-date_start|date$' and ':2-date_end|date$ 23:59:59') dates on dates.abon=a.id
left join
(select
aas.abonent_id as abon,
cast(cast(aas.CHANGE_BALANCE_TIME as date) as varchar(32)) as den,
u.name as usl,
coalesce(cast(u.max_mb_in_d as varchar(32)) || 'МБ','') as lim,
sum(aas.v) as mbsum,
coalesce(
iif(
sum(aas.v)<=u.max_mb_in_d and u.max_mb_in_d is not null,
'Остаток ' || cast(round(u.max_mb_in_d-sum(aas.v)) as varchar(32)) || 'МБ',
'Превышение ' || cast(round(sum(aas.v)-u.max_mb_in_d) as varchar(32)) || 'МБ'
),
''
) as limitleft
from
arch_account_stack aas
join usluga u on aas.usluga_id=u.id
where
aas.Abonent_ID = ':Abonent_ID$'
and aas.ttype=2
and aas.credit=0
and v_type_id=1
and aas.CHANGE_BALANCE_TIME between ':1-date_start|date$' and ':2-date_end|date$ 23:59:59'
group by
aas.abonent_id,u.name,cast(aas.CHANGE_BALANCE_TIME as date),max_mb_in_d) down on dates.aasdate=down.den and dates.aasusluga=down.usl
left join
(select
aas.abonent_id as abon,
cast(cast(aas.CHANGE_BALANCE_TIME as date) as varchar(32)) as den,
u.name as usl,
coalesce(cast(u.max_mb_out_d as varchar(32)) || 'МБ','') as lim,
sum(aas.v) as mbsum,
coalesce(
iif(
sum(aas.v)<=u.max_mb_out_d and u.max_mb_out_d is not null,
'Остаток ' || cast(round(u.max_mb_out_d-sum(aas.v)) as varchar(32)) || 'МБ',
'Превышение ' || cast(round(sum(aas.v)-u.max_mb_out_d) as varchar(32)) || 'МБ'
),
''
) as limitleft
from
arch_account_stack aas
join usluga u on aas.usluga_id=u.id
where
aas.Abonent_ID = ':Abonent_ID$'
and aas.ttype=2
and aas.credit=0
and v_type_id=2
and aas.CHANGE_BALANCE_TIME between ':1-date_start|date$' and ':2-date_end|date$ 23:59:59'
group by
aas.abonent_id,u.name,cast(aas.CHANGE_BALANCE_TIME as date),max_mb_out_d) upl on dates.aasdate=upl.den and dates.aasusluga=upl.usl
where
a.id= ':Abonent_ID$'
and (upl.mbsum is not null or down.mbsum is not null)
union all
select
extract(year from cast(dates.aasdate as timestamp)) ||'-'|| extract(month from cast(dates.aasdate as timestamp)),
dates.aasusluga,
coalesce(cast(round(sum(down.mbsum)) as varchar(32)),''),
coalesce(
iif(
sum(down.mbsum)<=down.limm and down.limm is not null,
'Остаток ' || cast(round(down.limm-sum(down.mbsum)) as varchar(32)) || 'МБ',
'Превышение ' || cast(round(sum(down.mbsum)-down.limm) as varchar(32)) || 'МБ'
),
''
),
coalesce(cast(round(sum(upl.mbsum)) as varchar(32)),''),

coalesce(
iif(
sum(upl.mbsum)<=upl.limm and upl.limm is not null,
'Остаток ' || cast(round(upl.limm-sum(upl.mbsum)) as varchar(32)) || 'МБ',
'Превышение ' || cast(round(sum(upl.mbsum)-upl.limm) as varchar(32)) || 'МБ'
),
''
)
from
abonents a
join
(select distinct
aaasss.abonent_id as abon,
aasu.name as aasusluga,
cast(cast(aaasss.CHANGE_BALANCE_TIME as date) as varchar(32)) as aasdate
from
arch_account_stack aaasss
join usluga aasu on aaasss.usluga_id=aasu.id
where
aaasss.abonent_id= ':Abonent_ID$'
and aaasss.CHANGE_BALANCE_TIME between ':1-date_start|date$' and ':2-date_end|date$ 23:59:59') dates on dates.abon=a.id

left join
(select
aas.abonent_id as abon,
cast(cast(aas.CHANGE_BALANCE_TIME as date) as varchar(32)) as den,
u.name as usl,
u.max_mb_in_d as limd,
u.max_mb_in_m as limm,
sum(aas.v) as mbsum,
coalesce(
iif(
sum(aas.v)<=u.max_mb_in_d and u.max_mb_in_d is not null,
'Остаток ' || cast(round(u.max_mb_in_d-sum(aas.v)) as varchar(32)) || 'МБ',
'Превышение ' || cast(round(sum(aas.v)-u.max_mb_in_d) as varchar(32)) || 'МБ'
),
''
) as limitleft
from
arch_account_stack aas
join usluga u on aas.usluga_id=u.id
where
aas.Abonent_ID = ':Abonent_ID$'
and aas.ttype=2
and aas.credit=0
and v_type_id=1
and aas.CHANGE_BALANCE_TIME between ':1-date_start|date$' and ':2-date_end|date$ 23:59:59'
group by
aas.abonent_id,u.name,cast(aas.CHANGE_BALANCE_TIME as date),max_mb_in_d,max_mb_in_m) down on dates.aasdate=down.den and dates.aasusluga=down.usl
left join
(select
aas.abonent_id as abon,
cast(cast(aas.CHANGE_BALANCE_TIME as date) as varchar(32)) as den,
u.name as usl,
u.max_mb_in_d as limd,
u.max_mb_in_m as limm,
sum(aas.v) as mbsum,
coalesce(
iif(
sum(aas.v)<=u.max_mb_in_d and u.max_mb_in_d is not null,
'Остаток ' || cast(round(u.max_mb_in_d-sum(aas.v)) as varchar(32)) || 'МБ',
'Превышение ' || cast(round(sum(aas.v)-u.max_mb_in_d) as varchar(32)) || 'МБ'
),
''
) as limitleft
from
arch_account_stack aas
join usluga u on aas.usluga_id=u.id
where
aas.Abonent_ID = ':Abonent_ID$'
and aas.ttype=2
and aas.credit=0
and v_type_id=2
and aas.CHANGE_BALANCE_TIME between ':1-date_start|date$' and ':2-date_end|date$ 23:59:59'
group by
aas.abonent_id,u.name,cast(aas.CHANGE_BALANCE_TIME as date),max_mb_in_d,max_mb_in_m) upl on dates.aasdate=upl.den and dates.aasusluga=upl.usl
where
a.id= ':Abonent_ID$'
and (upl.mbsum is not null or down.mbsum is not null)
group by
1,2,down.limm,upl.limm
order by
1,2{code}
Шаблон для [размещения в личном кабинете|CarbonBilling:Отчёты в личном кабинете]
{code}<form class="form-inline" method="post" action="" role="form">
<?$this->module_token()?>
<div class="form-group">
<legend><h2>Трафик за выбранный период</h2></legend>
<label for="1-date_start">C:</label><input class="datepicker" id="1-date_start" name="1-date_start|date" type="text" />
<label for="2-date_end">По:</label><input class="datepicker" id="2-date_end" name="2-date_end|date" type="text" />
</div>
<br />
<button type="submit" class="btn btn-success">Выполнить</button>
</form>{code}