PageRenderTime 68ms CodeModel.GetById 36ms RepoModel.GetById 1ms app.codeStats 0ms

/billing/function.php

http://bios.googlecode.com/
PHP | 291 lines | 173 code | 78 blank | 40 comment | 32 complexity | a8faecbdb4a4c35b239ad1749ae83567 MD5 | raw file
Possible License(s): GPL-3.0
  1. <?php
  2. include_once('./bios-config.php');
  3. if($q=='getduration')
  4. {
  5. header('Content-type: text/xml'); #tampilkan sebagai file xml
  6. # set status old
  7. $var_refresh =mysql_result(mysql_query("SELECT setting_refresh_tmp FROM setting"),0);
  8. if($setting_status_old)
  9. {
  10. $data_status=mysql_query("SELECT client_id, client_status FROM client");
  11. while($isi_data_status=mysql_fetch_array($data_status))
  12. {
  13. $status_old = @mysql_result(mysql_query("SELECT client_status_old FROM client_status WHERE client_status_id=$isi_data_status[client_id]"),0);
  14. if($status_old != $isi_data_status[client_status] && $uid)
  15. {
  16. $sids=@mysql_result(mysql_query("SELECT sid FROM session WHERE uid='$uid'"),0);
  17. #uncomment baris dibawah ini bila ingin mengunakan fitur autoload dengan memanfaatkan flash
  18. srand((double)microtime()*1000000);
  19. $var_refresh="<object width=1 height=1><param name=movie value='loader.swf?url=$operator_location?uid=$uid&p=billing&sid=$sids&done=" . md5(uniqid(rand())) . "$isi_data_status[client_id]'><embed src='loader.swf?url=$operator_location?uid=$uid&p=billing&sid=$sids&done=" . md5(uniqid(rand())) . "#$isi_data_status[client_id]' pluginspage='http://www.macromedia.com/go/getflashplayer' type='application/x-shockwave-flash' width=1 height=1></embed></object>";
  20. #uncomment baris dibawah ini bila ingin menggunakan fitur autoload dengan javascript
  21. #fitur ini tidak digunakan, karena javascript tidak bisa meload otomatis.. :( 25 feb
  22. /*$var_refresh="<script>window.location.href=\"$operator_location?uid=$uid&p=billing&sid=$sids&done=1\"</script>";*/
  23. $var_refresh=htmlentities($var_refresh);
  24. mysql_query("UPDATE setting SET setting_refresh_tmp='$var_refresh' LIMIT 1");
  25. }
  26. mysql_query("REPLACE INTO client_status VALUES ($isi_data_status[client_id],$isi_data_status[client_status])");
  27. }
  28. }
  29. //WHERE client_id=$_REQUEST[uid] LIMIT 1
  30. $data_client=mysql_query("SELECT * FROM client ORDER BY client_ip ASC");
  31. while($isi_data_client=mysql_fetch_array($data_client))
  32. {
  33. $total_biaya = 0;
  34. extract($isi_data_client,EXTR_OVERWRITE);
  35. switch($client_status)
  36. {
  37. case 0:
  38. $time_duration=0;
  39. $hour=0;
  40. $minute=0;
  41. $second=0;
  42. break;
  43. case 1:
  44. $time_start=strtotime("$client_start");
  45. $client_end=date("Y-m-d H:i:s",mktime(gmdate("H")+$setting_timezone,gmdate("i"),gmdate("s"),gmdate("m"),gmdate("d"),gmdate("Y")));
  46. $time_end=strtotime($client_end);
  47. $time_duration=$time_end - $time_start;
  48. $hour=floor($time_duration/3600);
  49. $minute=floor(($time_duration - $hour * 3600)/60);
  50. $second=$time_duration - $hour*3600 - $minute*60;
  51. break;
  52. case 2:
  53. $time_start=strtotime("$client_start");
  54. $time_end=strtotime("$client_end");
  55. $time_duration=$time_end - $time_start;
  56. $hour=floor($time_duration/3600);
  57. $minute=floor(($time_duration - $hour * 3600)/60);
  58. $second=$time_duration - $hour*3600 - $minute*60;
  59. # untuk total biaya non internet (client non internet)
  60. if($client_id == 1)
  61. {
  62. $lapid=mysql_result(mysql_query("SELECT laporan_id FROM laporan WHERE laporan_client=1 ORDER BY laporan_id DESC LIMIT 1"),0);
  63. $total_biaya=mysql_result(mysql_query("SELECT sum(ct_jumlah*ct_harga) FROM client_tambahan WHERE ct_laporan_id=$lapid"),0);
  64. }
  65. break;
  66. }
  67. if($time_duration && $client_id <> 1)
  68. {
  69. # pre penghitungan tarif.. disini kita hitung dulu biaya dan waktu minimum..
  70. $total_biaya = 0;
  71. $zone_start=date("G",$time_start);
  72. $data_tarif=mysql_fetch_array(mysql_query("SELECT tarif_perjam,tarif_min,tarif_min_durasi FROM tarif WHERE tarif_pkl=$zone_start"));
  73. $data_tarif_lama=$data_tarif[tarif_perjam];
  74. $total_biaya += $data_tarif[tarif_min];
  75. $total_biaya_lama = $data_tarif[tarif_min];
  76. $dump_total_biaya='';
  77. $dump_total_biaya[]=$total_biaya;
  78. if($time_duration > $data_tarif[tarif_min_durasi] * 60)
  79. {
  80. $time_start = $time_start + $data_tarif[tarif_min_durasi] * 60;
  81. #ubah waktu start dan berakhir ke dalam unixstamp - tentukan jam awal nya.
  82. $scan_start=mktime(date("G",$time_start),0,0,date("n",$time_start),date("j",$time_start),date("Y",$time_start));
  83. $scan_end=mktime(date("G",$time_end),0,0,date("n",$time_end),date("j",$time_end),date("Y",$time_end));
  84. #jumlah zona tarif yang akan discan:
  85. $scan_zona = floor(($scan_end - $scan_start) / 3600) + 1;
  86. $used_duration = $data_tarif[tarif_min_durasi] * 60;
  87. #$used_duration_lama = $data_tarif[tarif_min_durasi] * 60;
  88. $used_duration_lama = $used_duration;
  89. //$used_duration_awal = $used_duration;
  90. $total_used = $used_duration; # ---> penting untuk dideklarasikan nilai 0 nya. soalnya kalau ganti jadi null alias tidak dideklarasikan, hasilnya akan beda saat menggunakan operand +=
  91. # bagian baris dalam for .. dibawah adalah bagian inti dari billing BiOS ini. Inti karena merupakan yang bertanggung jawab
  92. # dalam merumuskan hitung hitungan billing. logika sederhana, tapi implementasi dalam programming perlu waktu 2 hari 2 malem,
  93. # beberapa gelas kopi dan 1 kaleng pocari, tidur hanya 4 jam :D - 11-12 juni 2008
  94. $toggle_jam_pertama = 0;
  95. for($n=0;$n < $scan_zona; $n++)
  96. {
  97. $total_biaya2=0;
  98. $zone_start=date("G",$scan_start + $n * 3600);
  99. $zone_end=date("G",$scan_start + ($n+1) * 3600);
  100. $data_tarif=mysql_fetch_array(mysql_query("SELECT tarif_perjam,tarif_min,tarif_min_durasi FROM tarif WHERE tarif_pkl=$zone_start"));
  101. $check_time_end=mktime(date("G",$scan_start + ($n+1) * 3600),0,0,date("n",$scan_start + ($n+1) * 3600),date("j",$scan_start + ($n+1) * 3600),date("Y",$scan_start + ($n+1) * 3600));
  102. if(($time_start + ($time_duration - $total_used)) > $check_time_end)
  103. {
  104. $time_end = $check_time_end;
  105. } else
  106. {
  107. $time_end = $time_start + ($time_duration - $total_used) ;
  108. }
  109. $used_duration = $time_end - $time_start;
  110. $total_used += $used_duration;
  111. $posisi=0;
  112. #23/6/2008 patch
  113. if($data_tarif[tarif_perjam]==$data_tarif_lama && $total_used > 3600 && $toggle_jam_pertama ==0)
  114. {
  115. $toggle_jam_pertama=1;
  116. $posisi=1;
  117. $total_biaya = $data_tarif[tarif_perjam];
  118. $total_biaya += ceil(($total_used - 3600) / $setting_price_every_second) * ($data_tarif[tarif_perjam] / (3600 / $setting_price_every_second));
  119. //$a=$total_used - 3600; $b=$used_duration;
  120. $total_biaya2 = ceil(($used_duration - ($total_used - 3600)) / $setting_price_every_second) * (($data_tarif[tarif_perjam] - $total_biaya_lama) / ((3600 - $used_duration_lama) / $setting_price_every_second)) + ceil(($total_used - 3600) / $setting_price_every_second) * ($data_tarif[tarif_perjam] / (3600 / $setting_price_every_second));;
  121. # PATCH SP1 : ditambahkan n=0 dengan syarat tarif lama dan baru sama. sebelumnya tidak dicek apakah tarif lama sama dengan tarif baru, akibatnya bila berbeda, menggunakan tarif baru. seharusnya bila tarif berbeda =zona berbeda menggunakan kondisi posisi nomor 3
  122. } elseif(($data_tarif[tarif_perjam]==$data_tarif_lama && $n==0) || ($data_tarif[tarif_perjam]==$data_tarif_lama && $total_used <= 3600))
  123. {
  124. $posisi=2;
  125. $total_biaya += ceil($used_duration / $setting_price_every_second) * (($data_tarif[tarif_perjam] - $total_biaya_lama) / ((3600 - $used_duration_lama) / $setting_price_every_second));
  126. #$total_biaya2 = $total_biaya; #ditambahkan dengan total biaya yang minimum
  127. $total_biaya2 = ceil($used_duration / $setting_price_every_second) * (($data_tarif[tarif_perjam] - $total_biaya_lama) / ((3600 - $used_duration_lama) / $setting_price_every_second)); #--> tidak ditambah biaya minimum
  128. } else
  129. {
  130. $toggle_jam_pertama=1; #PATCH SP1
  131. $posisi=3;
  132. $total_biaya += ceil($used_duration / $setting_price_every_second) * ($data_tarif[tarif_perjam] / (3600 / $setting_price_every_second));
  133. $total_biaya2 = ceil($used_duration / $setting_price_every_second) * ($data_tarif[tarif_perjam] / (3600 / $setting_price_every_second));
  134. }
  135. $dump_total_biaya[]="zona: " . $zone_start . " = Rp." . ceil($total_biaya2) . " - $used_duration detik - perjam $data_tarif[tarif_perjam],pos=$posisi";
  136. $time_start = $time_end;
  137. }
  138. }
  139. # ga kepengen susah cari kembalian kan? fungsi dibawah ini terbukti sangat membantu :D
  140. if($setting_receh <= 0 ) $setting_receh = 1;
  141. $total_biaya = ceil($total_biaya / $setting_receh) * $setting_receh;
  142. }
  143. # CORE RUMUS PENGHITUNGAN BILLING - rumus kuno, yang hanya mendukung 1 model tarif dan tidak mendukung happy hours! basbang!
  144. // $price_pertime=$setting_priceperhour/(3600 / $setting_price_every_second);
  145. //$price = ceil($time_duration/ $setting_price_every_second) * $price_pertime;
  146. # 13 januari 2006
  147. # set harga minimum
  148. //if($price < $setting_minimum_price && $client_status <> 0)
  149. //{
  150. //$price = $setting_minimum_price;
  151. //}
  152. if($hour < 10) $hour="0$hour";
  153. if($minute < 10) $minute="0$minute";
  154. if($second < 10) $second="0$second";
  155. $dump_cetak = '';
  156. if($billing_debug_mode && $client_status <> 0)
  157. {
  158. foreach($dump_total_biaya as $cetak)
  159. {
  160. $dump_cetak = $dump_cetak . " | $cetak";
  161. }
  162. $dump_cetak .= " - TOTAL WAKTU=$total_used detik - Jumlah zona=$scan_zona - Selesai= $client_end";
  163. }
  164. if(!$show_second)
  165. {
  166. $second='';
  167. } else
  168. {
  169. $second = " : $second sec";
  170. }
  171. // . "$time_duration - $scan_zona - end: $zone_end - $total_used - total durasi $used_duration - lama $total_biaya_lama
  172. // . $dump_cetak . " - TOTAL=$total_used - zona=$scan_zona - $client_start
  173. $dumps.= "<client" . $client_id . ">\n";
  174. //if($client_id == "1")
  175. //{
  176. //$dumps.= "<duration></duration>\n";
  177. //} else
  178. //{
  179. $dumps.= "<duration>$hour hr : $minute min $blink_notation $second</duration>\n";
  180. //}
  181. $dumps.= "<name>$client_name</name>\n";
  182. $dumps.= "<price>". number_format(ceil($total_biaya),0, ",",".") . $dump_cetak . "</price>\n";
  183. $dumps.= "</client" . $client_id . ">\n";
  184. $dump_total_biaya='';$total_used='';$scan_zona='';$client_end='';
  185. }
  186. $billing_clock = "<setting><clock>Pkl. " . date("H:i:s - d M Y",mktime(gmdate("H")+$setting_timezone,gmdate("i"),gmdate("s"),gmdate("m"),gmdate("d"),gmdate("Y"))) . " $var_refresh</clock></setting>";
  187. #info summary
  188. #PATCH SP1
  189. $zone_summary=date("G",mktime(gmdate("H")+$setting_timezone,gmdate("i"),gmdate("s"),gmdate("m"),gmdate("d"),gmdate("Y")));
  190. $data_tarif_summary=mysql_fetch_array(mysql_query("SELECT tarif_perjam,tarif_min,tarif_min_durasi FROM tarif WHERE tarif_pkl=$zone_summary"));
  191. $summary = "<summary><tarif_perjam>" . number_format($data_tarif_summary[tarif_perjam],0, ",",".") . "</tarif_perjam><tarif_min>" . number_format($data_tarif_summary[tarif_min],0, ",",".") . "</tarif_min><tarif_min_durasi>" . number_format($data_tarif_summary[tarif_min_durasi],0, ",",".") . "</tarif_min_durasi><tarif_refresh>$setting_price_every_second</tarif_refresh></summary>";
  192. echo "<data>\n$dumps\n$billing_clock\n$summary</data>";
  193. } elseif ($q == 'cekstatus' && $uid && ($sids=@mysql_result(mysql_query("SELECT sid FROM session WHERE uid='$uid'"),0)))
  194. {
  195. header('Content-type: text/xml'); #tampilkan sebagai file xml
  196. # set status old
  197. if($setting_status_old && (date("s") % $setting_status_old))
  198. {
  199. $data_status=mysql_query("SELECT client_id, client_status FROM client");
  200. while($isi_data_status=mysql_fetch_array($data_status))
  201. {
  202. $status_old = @mysql_result(mysql_query("SELECT client_status_old FROM client_status WHERE client_status_id=$isi_data_status[client_id]"),0);
  203. if($status_old != $isi_data_status[client_status])
  204. {
  205. $var_refresh="<object width=100 height=100><param name=movie value='loader.swf?url=$operator_location?uid=$uid&p=billing&sid=$sids'><embed src='loader.swf?url=$operator_location?uid=$uid&p=billing&sid=$sids' pluginspage='http://www.macromedia.com/go/getflashplayer' type='application/x-shockwave-flash' width=100 height=100></embed></object>";
  206. $var_refresh=htmlentities($var_refresh);
  207. }
  208. mysql_query("REPLACE INTO client_status VALUES ($isi_data_status[client_id],$isi_data_status[client_status])");
  209. }
  210. }
  211. $var_refresh = "<setting><status>$var_refresh</status></setting>";
  212. echo $var_refresh;
  213. }