Версия UTM 5 (5.2.1–007)
Возникла такая ситуация: приходит абонент и заключает договор на подключение. Абонентский отдел делает все необходимые телодвижения (в хорошем смысле этого слова:)). Абоненту подключают лимитный тарифный план с предоплаченным трафиком в 1 Гб. Все успешно. Абонент попользовался интернетом, выкачал весь предоплаченный трафик, ушел в "минус". Полез в личный кабинет и увидел, что у него осталось 220,34 Мб предоплаченного трафика. Позвонил нам - начали проверять.
Личный кабинет самописный на основе viewtopic.php?t=6460&postdays=0&postord ... a&start=15
Создавая в базе абоненту тариф, абон. отдел поставил галочки пересчета абонентской платы и предоплаченного трафика. Абонент подключался к интернету 7 марта==> ему должно было начислиться (1000/31)*25=804 Мб.
В Личном кабинете остаток предоплаченного трафика считается так:
сначала вытаскиваем все необходимые данные
Код: Выделить всё
SELECT t.name as name,psd.cost as cost,psl.discounted_in_curr_period as curr,ib.cost as cost2,tst.prepaid_units as prepaid,d.custom_prepay as custom,d.downed_as_prepaid as downed, d.qnt as qnt FROM tariffs as t,account_tariff_link as atl,service_links as sl,periodic_services_data as psd,periodic_service_links as psl,iptraffic_services_data as isd,traf_serv_tclasses as tst,iptraffic_borders as ib,iptraffic_service_links as isl, downloaded as d WHERE atl.account_id = 7198 AND atl.tariff_id = t.id AND atl.id = sl.tariff_link_id AND sl.service_id = psd.id AND sl.id = psl.id AND sl.service_id = isd.id AND isd.tst_id = tst.tst_id AND tst.borders_id = ib.borders_id AND sl.id = isl.id AND isl.downloaded_id = d.downloaded_id AND d.tclass_id=10 AND atl.is_deleted=0 AND t.is_deleted=0 AND sl.is_deleted=0 AND psd.is_deleted=0 AND psl.is_deleted=0 AND isd.is_deleted=0;
+----------------+------+------------------+-------+------------+--------+-----------+-----------+
| name | cost | curr | cost2 | prepaid | custom | downed | qnt |
+----------------+------+------------------+-------+------------+--------+-----------+-----------+
| п▓п╬я─п╬п╠п╣п╧ | 250 | 195.917264842231 | 2 | 1073741824 | 0 | 843055104 | 1047748537 |
+----------------+------+------------------+-------+------------+--------+-----------+-----------+
1 row in set (6.45 sec)
Код: Выделить всё
$ost_traffic = round(($data_table2['prepaid']+$data_table2['custom']-$data_table2['downed'])/1024/1024, 2);
Код: Выделить всё
1024+0-804=220 Мб.
Я всегда считал, что $data_table2['prepaid'] есть ни что иное, как предоплаченный трафик, который зачисляется абоненту в зависимости от тарифа и времени подключения. Если это так, то почему для этого абонента в prepaid внесено 1 Гб, а не 804 Мб????
Отчет по трафику в админке показывает:

Т.е. все верно, 804 Мб предоплаченного трафика абонент использовал и дальше сидит в инете за деньги.
При этом, если через админку посмотреть колчество оставшегося предоплаченного трафика, то оно равно 0.
Может я жестко ошибаюсь и предоплаченный трафик это не $data_table2['prepaid']??
Тогда подскажите, пожалуйста, как правильно вытащить оставшийся предоплаченный трафик!
Спасибо.