207 lines
5.3 KiB
PHP
207 lines
5.3 KiB
PHP
<?php defined('SYSPATH') or die('No direct access allowed.');
|
|
|
|
/**
|
|
* This class provides Admin ADSL functions
|
|
*
|
|
* @package ADSL
|
|
* @category Controllers/Admin
|
|
* @author Deon George
|
|
* @copyright (c) 2009-2013 Open Source Billing
|
|
* @license http://dev.osbill.net/license.html
|
|
*/
|
|
class Controller_Admin_Adsl extends Controller_Adsl {
|
|
protected $secure_actions = array(
|
|
'index'=>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) {
|
|
// Entry updated
|
|
if ($apo->values($_POST)->check() AND $apo->changed()) {
|
|
try {
|
|
if ($apo->save())
|
|
SystemMessage::factory()
|
|
->title('Record updated')
|
|
->type('success')
|
|
->body(_('Your Charge record has been recorded/updated.'));
|
|
|
|
} catch (ORM_Validation_Exception $e) {
|
|
$errors = $e->errors('models');
|
|
|
|
SystemMessage::factory()
|
|
->title('Record NOT updated')
|
|
->type('error')
|
|
->body(join('<br/>',array_values($errors)));
|
|
|
|
$sco->reload();
|
|
}
|
|
}
|
|
|
|
if (isset($_POST['test'])) {
|
|
$charge = isset($_POST['test']['charge']) ? $_POST['test']['charge'] : FALSE;
|
|
$test_result = $apo->allowance($_POST['test'],FALSE,$charge,1000);
|
|
}
|
|
}
|
|
|
|
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()->find_all())
|
|
->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(1000,2000,5000,10000,25000,50000,75000,100000);
|
|
|
|
$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('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/')),
|
|
))
|
|
);
|
|
}
|
|
}
|
|
?>
|