This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
khosb/modules/adsl/classes/Model/Service/Plugin/Adsl/Traffic.php

92 lines
2.5 KiB
PHP

<?php defined('SYSPATH') or die('No direct access allowed.');
/**
* This class supports Services Traffic for ADSL
*
* @package ADSL
* @category Models
* @author Deon George
* @copyright (c) 2009-2013 Open Source Billing
* @license http://dev.osbill.net/license.html
*/
class Model_Service_Plugin_Adsl_Traffic extends ORM_OSB {
protected $_table_name = 'service__adsl_traffic';
protected $_primary_key = 'service';
protected $_disable_wild_select = TRUE;
protected $_created_column = FALSE;
protected $_updated_column = FALSE;
protected $_has_one = array(
'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();
// We don use the "ID" field.
unset($result['id']);
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(
'base_down_peak'=>is_null($plan->base_down_peak) ? NULL : $this->down_peak,
'base_down_offpeak'=>is_null($plan->base_down_offpeak) ? NULL : $this->down_offpeak,
'base_up_peak'=>is_null($plan->base_up_peak) ? NULL : $this->up_peak,
'base_up_offpeak'=>is_null($plan->base_up_offpeak) ? NULL : $this->up_offpeak,
'extra_down_peak'=>$plan->extra_down_peak,
'extra_down_offpeak'=>$plan->extra_down_offpeak,
'extra_up_peak'=>$plan->extra_up_peak,
'extra_up_offpeak'=>$plan->extra_up_offpeak,
));
}
public function list_last() {
return $this->order_by('date','DESC')->order_by('time','DESC')->find();
}
}
?>