TRUE, 'edit'=>TRUE, 'list'=>TRUE, 'stat'=>TRUE, 'traffic'=>TRUE, ); public function action_index() { $output = ''; $output .= Form::open(URL::link('admin','adsl/traffic')); $output .= Form::select('sid',ORM::factory('ADSL_Supplier')->list_select()); $output .= Form::button('submit','Submit',array('class'=>'btn btn-primary')); $output .= Form::close(); Block::factory() ->title('Select ADSL Supplier') ->title_icon('icon-share') ->body($output); } public function action_list() { Block::factory() ->title('ADSL Plans') ->title_icon('icon-th-list') ->body(Table::factory() ->data(ORM::factory('Product_Plugin_Adsl')->find_all()) ->jssort('adsl') ->columns(array( 'id'=>'ID', 'supplier_plan->name()'=>'Plan', 'supplier_plan->display("status")'=>'Avail', 'base_down_peak'=>'PD', 'base_down_offpeak'=>'OPD', 'base_up_peak'=>'PU', 'base_up_offpeak'=>'OPU', 'extra_charged'=>'$', 'extra_down_peak'=>'EPD', 'extra_down_offpeak'=>'EOPD', 'extra_up_peak'=>'EPU', 'extra_up_offpeak'=>'EOPU', 'contract_term'=>'Cont', )) ->prepend(array( 'id'=>array('url'=>URL::link('admin','adsl/edit/')), )) ); } public function action_edit() { $apo = ORM::factory('Product_Plugin_Adsl',$this->request->param('id')); $test_result = array(); if (! $apo->loaded()) HTTP::redirect(URL::link('admin','adsl/list')); if ($_POST) { if ($apo->values($_POST)->changed() AND (! $this->save($apo))) $apo->reload(); if (isset($_POST['test'])) { $charge = isset($_POST['test']['charge']) ? $_POST['test']['charge'] : FALSE; $test_result = $apo->allowance($_POST['test'],FALSE,$charge,TRUE); } } Block::factory() ->type('form-horizontal') ->title('Update ADSL Plan') ->title_icon('icon-wrench') ->body(View::factory('adsl/admin/edit') ->set('test_result',$test_result) ->set('o',$apo)); Block::factory() ->title('Products Using this Plan') ->title_icon('icon-th-list') ->body(Table::factory() ->jssort('traffic') ->data($apo->products()) ->columns(array( 'id'=>'ID', 'title()'=>'Name', 'status'=>'Active', )) ->prepend(array( 'id'=>array('url'=>URL::link('admin','product/edit/')), )) ); } /** * Usage statistics for the previous moth */ public function action_stat() { // @todo This needs to be configurable. $traffic = array(1,2,5,10,25,50,75,100,150,200); $svs = ORM::factory('Service')->list_bylistgroup('ADSL'); $stats = array(); $output = ''; $ts = 0; foreach ($svs as $a=>$so) { // Number of services if (! isset($stats[$so->product->plugin()->supplier_plan->speed]['c'])) $stats[$so->product->plugin()->supplier_plan->speed]['c'] = 0; $stats[$so->product->plugin()->supplier_plan->speed]['c']++; $ts++; $a = 0; foreach (array_reverse($traffic) as $i) { if ($i < $so->plugin()->traffic_month(strtotime('first day of last month'),TRUE)) break; $a = $i; } if (! isset($stats[$so->product->plugin()->supplier_plan->speed]['d'][$a])) $stats[$so->product->plugin()->supplier_plan->speed]['d'][$a] = 0; $stats[$so->product->plugin()->supplier_plan->speed]['d'][$a]++; } Block::factory() ->title('ADSL Traffic Summary Stats - Last Month') ->title_icon('icon-list') ->body( View::factory('adsl/admin/stats') ->set('stats',$stats) ->set('traffic',$traffic) ->set('ts',$ts) ); } /** * Reconcile billing for an ADSL supplier */ public function action_traffic() { if (empty($_POST['sid'])) HTTP::redirect(URL::link('admin','adsl/index')); $aso = ORM::factory('ADSL_Supplier',$_POST['sid']); if (! $aso->loaded()) HTTP::redirect(URL::link('admin','adsl/index')); $t = ORM::factory('Service_Plugin_Adsl_Traffic'); $date = date('Y-m-d',time()-86400); Block::factory() ->title(sprintf('ADSL Traffic for %s',$date)) ->title_icon('icon-th-list') ->body(Table::factory() ->jssort('traffic') ->data($aso->traffic->where('date','=',$date)->find_all()) ->columns(array( 'service'=>'Service Login', 'plan->service->id'=>'Service', 'plan->service_number'=>'Service', 'plan->service->status'=>'Active', 'up_peak'=>'Up Peak', 'down_peak'=>'Down Peak', 'up_offpeak'=>'Up OffPeak', 'down_offpeak'=>'Down OffPeak', 'peer'=>'Peer', 'internal'=>'Internal', )) ->prepend(array( 'plan->service->id'=>array('url'=>URL::link('user','service/view/')), )) ); } } ?>