Improvements to traffic collection, zero record ignore, some fixes to order_by

This commit is contained in:
Deon George 2013-10-14 11:26:08 +11:00
parent 335e8e65bd
commit c347032497
6 changed files with 94 additions and 4 deletions

View File

@ -37,7 +37,7 @@ class Controller_Admin_Module_Method extends Controller_Admin_Module {
->type('success')
->body(_('Method record has been added.'));
HTTP::redirect(URL::link('admin','/module/edit/'.$mo->id));
HTTP::redirect(URL::link('admin','module/edit/'.$mo->id));
}
Block::factory()
@ -98,6 +98,8 @@ class Controller_Admin_Module_Method extends Controller_Admin_Module {
->body(sprintf(_('Unable to save Group Method for method %s and group %s'),$mmo->name,$go->name));
}
}
HTTP::redirect(URL::link('admin','module/edit/'.$mmo->module_id));
}
Block::factory()

View File

@ -21,6 +21,15 @@ class Model_Service_Plugin_Adsl_Traffic extends ORM_OSB {
'plan'=>array('model'=>'Service_Plugin_Adsl','foreign_key'=>'service_username','far_key'=>'service'),
);
private $metrics = array(
'up_peak',
'up_offpeak',
'down_peak',
'down_offpeak',
'peer',
'internal',
);
public function rules() {
$result = parent::rules();
@ -30,6 +39,37 @@ class Model_Service_Plugin_Adsl_Traffic extends ORM_OSB {
return $result;
}
public function save(Validation $validation = NULL) {
// If all our values are zero/NULL, we'll ignore if our previous one was.
if ($this->total() !== 0)
return parent::save($validation);
$l = ORM::factory($this->_object_name)->where('service','=',$this->service)->where('supplier_id','=',$this->supplier_id)->list_last();
if ($l->total() !== 0)
return parent::save($validation);
// Fake our save, since the previous value is 0.
$this->_loaded = $this->_saved = TRUE;
$this->_changed = array();
$this->_original_values = $this->_object;
return $this;
}
public function total() {
$result = 0;
foreach ($this->metrics as $metric) {
if (is_null($this->$metric))
$this->$metric = 0;
$result += $this->$metric;
}
return $result;
}
public function traffic(Model_Product_Plugin_Adsl $plan) {
// Roll up the charges according to the product plan configuration
return ADSL::allowance(array(
@ -43,5 +83,9 @@ class Model_Service_Plugin_Adsl_Traffic extends ORM_OSB {
'extra_up_offpeak'=>$plan->extra_up_offpeak,
));
}
public function list_last() {
return $this->order_by('date','DESC')->order_by('time','DESC')->find();
}
}
?>

View File

@ -0,0 +1,44 @@
<?php defined('SYSPATH') or die('No direct access allowed.');
/**
* Trim ADSL Traffic Records, truncating any zeros
*
* @package ADSL
* @category Tasks
* @author Deon George
* @copyright (c) 2009-2013 Open Source Billing
* @license http://dev.osbill.net/license.html
*/
class Task_Adsl_Traffictrim extends Task_Adsl_Trafficget {
protected function _execute(array $params) {
$t = ORM::factory('Service_Plugin_Adsl_Traffic')
->select('service,supplier_id')
->group_by('service,supplier_id');
foreach ($t->find_all() as $group) {
$zerorow = FALSE;
foreach (ORM::factory('Service_Plugin_Adsl_Traffic')->where('service','=',$group->service)->where('supplier_id','=',$group->supplier_id)->order_by('date')->order_by('time')->find_all() as $spato)
if ($spato->total() === 0) {
if ($zerorow) {
// Cant use delete(), as our primary key is not used in this table.
$db = DB::query(Database::DELETE,DB::delete($spato->table_name())
->where('service','=',$group->service)
->where('supplier_id','=',$group->supplier_id)
->where('date','=',$spato->date)
->where('time','=',$spato->time));
$db->execute();
}
$zerorow = TRUE;
} else
$zerorow = FALSE;
// An attempt to free some memory.
$spato = NULL;
}
}
}
?>

View File

@ -148,7 +148,7 @@ $(document).ready(function() {
->title_icon('icon-th-list')
->body(Table::factory()
->page_items(50)
->data(ORM::factory('Charge')->where_authorised($this->ao)->where('void','is',NULL)->order_by('id DESC')->find_all())
->data(ORM::factory('Charge')->where_authorised($this->ao)->where('void','is',NULL)->order_by('id','DESC')->find_all())
->columns(array(
'id'=>'ID',
'date_charge'=>'Date',

View File

@ -11,7 +11,7 @@
*/
class Task_Invoice_Listoverdue extends Minion_Task {
protected function _execute(array $params) {
$overdue = ORM::factory('Invoice')->list_overdue();
$overdue = ORM::factory('Invoice')->list_overdue(NULL,FALSE);
$rtms = $invoices = array();
foreach ($overdue as $io)

View File

@ -156,7 +156,7 @@ $(document).ready(function() {
* Show a list of products
*/
public function action_list() {
$products = ($x=$this->request->param('id')) ? ORM::factory('Product_Category',$x)->products() : ORM::factory('Product')->order_by('status DESC,prod_plugin_file')->find_all();
$products = ($x=$this->request->param('id')) ? ORM::factory('Product_Category',$x)->products() : ORM::factory('Product')->order_by('status','DESC')->order_by('prod_plugin_file')->find_all();
Block::factory()
->title(_('Products'))