Fixes from live website

This commit is contained in:
Deon George 2013-04-20 11:40:44 +10:00
parent 13982be9f6
commit 79c76995b9
22 changed files with 283 additions and 55 deletions

View File

@ -105,6 +105,7 @@ class Controller_Admin_Welcome extends Controller_Welcome {
)); ));
// We are a site administrator // We are a site administrator
$output = '';
if ($this->ao->rtm_id == NULL) { if ($this->ao->rtm_id == NULL) {
$rtmo = ORM::factory('RTM',array('account_id','=',$this->ao->id))->find(); $rtmo = ORM::factory('RTM',array('account_id','=',$this->ao->id))->find();
@ -116,7 +117,7 @@ class Controller_Admin_Welcome extends Controller_Welcome {
->set('o',$rtmo); ->set('o',$rtmo);
} else { } else {
$rtmo = ORM::factory('RTM',$this->ao->rmt_id); $rtmo = ORM::factory('RTM',$this->ao->rtm_id);
} }
if ($output) if ($output)

View File

@ -10,14 +10,5 @@
* @license http://dev.osbill.net/license.html * @license http://dev.osbill.net/license.html
*/ */
class Controller_TemplateDefault_User extends Controller_TemplateDefault { class Controller_TemplateDefault_User extends Controller_TemplateDefault {
public function after() {
SystemMessage::add(array(
'title'=>'Retire this class extension',
'type'=>'info',
'body'=>__METHOD__,
));
return parent::after();
}
} }
?> ?>

View File

@ -36,7 +36,7 @@ class Model_RTM extends ORM_OSB {
} }
public function customers_direct() { public function customers_direct() {
return $this->customer->where_active()->find_all(); return $this->customer->find_all();
} }
} }
?> ?>

View File

@ -0,0 +1,33 @@
<?php defined('SYSPATH') or die('No direct access allowed.');
/**
* Mark all accounts that have no outstanding invoices and active services as disabled.
*
* @package Account
* @category Tasks
* @author Deon George
* @copyright (c) 2009-2013 Open Source Billing
* @license http://dev.osbill.net/license.html
*/
class Task_Account_Complete extends Task {
protected function _execute(array $params) {
$c = 0;
$o = ORM::factory('Account')
->where_active();
foreach ($o->find_all() as $ao) {
if (count($ao->invoice->where_unprocessed()->find_all()) == 0 AND count($ao->service->where_active()->find_all()) == 0)
// @todo Cant update status=0, problem with sessions in CLI
echo $ao->id.',';
$ao->save();
if ($ao->saved())
$c++;
}
printf('%s services updated',$c);
}
}
?>

View File

@ -13,7 +13,7 @@ class Model_ADSL_Plan extends ORM_OSB {
// Relationships // Relationships
// @todo This model should probably be joined with product_plugin_adsl // @todo This model should probably be joined with product_plugin_adsl
protected $_belongs_to = array( protected $_belongs_to = array(
'adsl_supplier_plan'=>array(), 'adsl_supplier_plan'=>array('model'=>'ADSL_Supplier_Plan'),
); );
protected $_display_filters = array( protected $_display_filters = array(

View File

@ -9,10 +9,10 @@
* @copyright (c) 2009-2013 Open Source Billing * @copyright (c) 2009-2013 Open Source Billing
* @license http://dev.osbill.net/license.html * @license http://dev.osbill.net/license.html
*/ */
class Model_Adsl_Supplier extends ORM_OSB { class Model_ADSL_Supplier extends ORM_OSB {
// Relationships // Relationships
protected $_has_many = array( protected $_has_many = array(
'adsl_supplier_plan'=>array('foreign_key'=>'supplier_id','far_key'=>'id'), 'adsl_supplier_plan'=>array('model'=>'ADSL_Supplier_Plan','foreign_key'=>'supplier_id','far_key'=>'id'),
); );
protected $_updated_column = FALSE; protected $_updated_column = FALSE;

View File

@ -9,13 +9,13 @@
* @copyright (c) 2009-2013 Open Source Billing * @copyright (c) 2009-2013 Open Source Billing
* @license http://dev.osbill.net/license.html * @license http://dev.osbill.net/license.html
*/ */
class Model_Adsl_Supplier_Plan extends ORM_OSB { class Model_ADSL_Supplier_Plan extends ORM_OSB {
// Relationships // Relationships
protected $_has_many = array( protected $_has_many = array(
'adsl_plan'=>array('far_key'=>'id'), 'adsl_plan'=>array('model'=>'ADSL_Plan','far_key'=>'id'),
); );
protected $_belongs_to = array( protected $_belongs_to = array(
'adsl_supplier'=>array('foreign_key'=>'supplier_id'), 'adsl_supplier'=>array('model'=>'ADSL_Supplier','foreign_key'=>'supplier_id'),
); );
/** /**

View File

@ -13,7 +13,7 @@ class Model_Product_Plugin_Adsl extends Model_Product_Plugin {
protected $_table_name = 'adsl_plan'; protected $_table_name = 'adsl_plan';
protected $_belongs_to = array( protected $_belongs_to = array(
'adsl_supplier_plan'=>array(), 'adsl_supplier_plan'=>array('model'=>'ADSL_Supplier_Plan'),
); );
protected $_display_filters = array( protected $_display_filters = array(

View File

@ -33,7 +33,7 @@ class Service_Traffic_Adsl {
// Our DB record must be the suffix of this class name // Our DB record must be the suffix of this class name
$supplier = preg_replace('/^'.get_parent_class($this).'_/','',get_class($this)); $supplier = preg_replace('/^'.get_parent_class($this).'_/','',get_class($this));
$so = ORM::factory('Adsl_Supplier') $so = ORM::factory('ADSL_Supplier')
->where('name','=',$supplier) ->where('name','=',$supplier)
->find(); ->find();

View File

@ -10,6 +10,8 @@
* @license http://dev.osbill.net/license.html * @license http://dev.osbill.net/license.html
*/ */
class Controller_Cart extends Controller_TemplateDefault { class Controller_Cart extends Controller_TemplateDefault {
protected $auth_required = FALSE;
/** /**
* List the cart contents * List the cart contents
*/ */

View File

@ -69,7 +69,7 @@ abstract class Checkout_Plugin_Paypal extends Checkout_Plugin {
return _('Thank you!'); return _('Thank you!');
if (! $debug_mode) { if (! $debug_mode) {
$request = Request::factory(sprintf('https://%s/cgi-bin/webscr',$cno->data['test_ipn'] ? $this->url_test : $this->url_prod)) $request = Request::factory(sprintf('https://%s/cgi-bin/webscr',isset($cno->data['test_ipn']) ? $this->url_test : $this->url_prod))
->method('POST'); ->method('POST');
$request->client()->options(Arr::merge($this->curlopts,array( $request->client()->options(Arr::merge($this->curlopts,array(
@ -84,7 +84,6 @@ abstract class Checkout_Plugin_Paypal extends Checkout_Plugin {
// Verify that the IPN is for us. // Verify that the IPN is for us.
// @todo This should be in the DB. // @todo This should be in the DB.
if ($cno->data['business'] == 'deon_1260578114_biz@graytech.net.au') { if ($cno->data['business'] == 'deon_1260578114_biz@graytech.net.au') {
switch ($cno->data['payment_status']) { switch ($cno->data['payment_status']) {
case 'Completed': case 'Completed':
// Our cart items total. // Our cart items total.

View File

@ -59,7 +59,7 @@ class Controller_Checkout extends Controller_TemplateDefault {
$test_id = FALSE; $test_id = FALSE;
$co = ORM::factory('Checkout',$this->request->param('id')); $co = ORM::factory('Checkout',$this->request->param('id'));
if ((! $co->loaded() OR ! Request::current()->post()) AND ! $test_id=Kohana::$config->load('debug')->checkout_notify) if ((! $co->loaded() OR ! Request::current()->post()) AND ! ($test_id=Kohana::$config->load('debug')->checkout_notify))
throw HTTP_Exception::factory(404,'Payment not found!'); throw HTTP_Exception::factory(404,'Payment not found!');
$this->auto_render = FALSE; $this->auto_render = FALSE;

View File

@ -175,14 +175,14 @@ class Export_Quicken extends Export {
$qpo->MEMO = sprintf('Payment for invoice(s) %s (%s)',implode(':',$invoice_ids),$po->checkout->name); $qpo->MEMO = sprintf('Payment for invoice(s) %s (%s)',implode(':',$invoice_ids),$po->checkout->name);
// @todo Accounts/Payment should be configurable // @todo Accounts/Payment should be configurable
switch ($po->checkout->checkout_plugin) { switch ($po->checkout->plugin) {
// @todo this is direct debit // @todo this is direct debit
case 'MANUAL': case 'DD_EZYPAY':
$qpo->PAYMETH = 'DirectDebit'; $qpo->PAYMETH = 'DirectDebit';
$qpo->ACCNT = 'Ezypay'; $qpo->ACCNT = 'Ezypay';
break; break;
case 'REMIT_CHECK': case 'REMIT_CHEQUE':
$qpo->PAYMETH = 'Cheque'; $qpo->PAYMETH = 'Cheque';
$qpo->ACCNT = 'Undeposited Funds'; $qpo->ACCNT = 'Undeposited Funds';
break; break;
@ -192,7 +192,7 @@ class Export_Quicken extends Export {
$qpo->ACCNT = 'Bendigo Bank'; $qpo->ACCNT = 'Bendigo Bank';
break; break;
case 'PAYPAL': case 'PAYPAL_CART':
$qpo->PAYMETH = 'Paypal'; $qpo->PAYMETH = 'Paypal';
$qpo->ACCNT = 'Paypal'; $qpo->ACCNT = 'Paypal';
break; break;

View File

@ -0,0 +1,81 @@
<?php defined('SYSPATH') or die('No direct access allowed.');
/**
* This class provides CPANEL support
*
* @package Host
* @category Plugins
* @author Deon George
* @copyright (c) 2009-2013 Open Source Billing
* @license http://dev.osbill.net/license.html
*/
abstract class Host_Plugin_Cpanel extends Host_Plugin {
// Service Object
# protected $protocol = '1.6.0.0';
# protected $path = 'enterprise/control/agent.php';
# protected $packet;
# protected $xml;
# protected $_loaded = FALSE;
// Manage UI Login Attributes
protected $url = 'login';
protected $login_acnt_field = '';
protected $login_user_field = 'user';
protected $login_pass_field = 'pass';
// Our required abstract classes
public function serialize() {
return (string)$this->_object;
}
public function unserialize($s) {
$this->_object = XML::factory(NULL,NULL,$s);
}
public function __get($index) {
echo __METHOD__;die();
}
public function admin_update() {
echo __METHOD__;die();
}
public function manage_button(Model_Service_Plugin_Host $spho,$t) {
return $this->render_button($t,$spho->service_id,$spho->username_value(),substr(md5($spho->password_value()),0,8));
}
public function admin_manage_button(Model_Host_Server $hso,$t) {
return $this->render_button($t,$hso->id,substr(md5($hso->manage_username),0,8),substr(md5($hso->manage_password),0,8));
}
protected function render_button($t,$sid,$u,$p) {
$debug = FALSE;
$output = '';
$output .= Form::open(
$debug ? 'debug/site' : sprintf('%s/%s',$this->hso->manage_url,$this->url),
array('target'=>'w24','method'=>'post','id'=>sprintf('id_%s_%s',$sid,$t))
);
$output .= Form::input($this->login_user_field,$u,array('type'=>'hidden','id'=>sprintf('u_%s_%s',$sid,$t)));
$output .= Form::input($this->login_pass_field,$p,array('type'=>'hidden','id'=>sprintf('p_%s_%s',$sid,$t)));
$output .= Form::close();
$output .= Form::button('submit',_('Manage'),array('class'=>'form_button','value'=>sprintf('%s:%s',$sid,$t)));
return $output;
}
protected function init() {
echo __METHOD__;die();
}
protected function server_command(XML $xml) {
echo __METHOD__;die();
}
public function loaded() {
return $this->_loaded;
}
private function render(XML $xml) {
echo __METHOD__;die();
}
}
?>

View File

@ -0,0 +1,100 @@
<?php defined('SYSPATH') or die('No direct access allowed.');
/**
* This class provides CPANEL client support
*
* @package Host
* @category Plugins
* @author Deon George
* @copyright (c) 2009-2013 Open Source Billing
* @license http://dev.osbill.net/license.html
*/
class Host_Plugin_Cpanel_11 extends Host_Plugin_Cpanel {
# protected $protocol = '1.6.3.0';
// @todo Get these default "templates" values out of the DB
private $_template = array(
);
/**
* Get a Client Configuration
*/
public function cmd_getclient(Model_Service $so) {
throw new Kohana_Exception('Not Implemented');
}
/**
* Get a DNS Configuration
*/
public function cmd_getdns(Model_Service $so) {
throw new Kohana_Exception('Not Implemented');
}
/**
* Get Mail Configuration
*/
public function cmd_getmail(Model_Service $so) {
throw new Kohana_Exception('Not Implemented');
}
/**
* Get a Domain Configuration
*/
public function cmd_getdomain(Model_Service $so) {
throw new Kohana_Exception('Not Implemented');
}
/**
* Get Reseller
*/
public function cmd_getreseller(Model_Service $so) {
throw new Kohana_Exception('Not Implemented');
}
/**
* Get Domain Traffic
*/
public function cmd_gettraffic(Model_Service $so) {
throw new Kohana_Exception('Not Implemented');
}
/**
* Disable Mail
*/
public function cmd_disablemail(Model_Service $so) {
throw new Kohana_Exception('Not Implemented');
}
/**
* Provision a hosting service
* @todo To implement
*/
public function provision(Model_Service $so) {
throw new Kohana_Exception('Not Implemented');
}
public function add_client(Model_Service $so) {
throw new Kohana_Exception('Not Implemented');
}
public function add_dnsdata(Model_Service $so,XML $dns) {
throw new Kohana_Exception('Not Implemented');
}
public function add_domain(Model_Service $so) {
throw new Kohana_Exception('Not Implemented');
}
public function newitem(Model_Service $so,$type) {
throw new Kohana_Exception('Not Implemented');
}
public function setexpire(Model_Service $so,$date=NULL) {
throw new Kohana_Exception('Not Implemented');
}
public function setpasswd(Model_Service $so,$pw) {
throw new Kohana_Exception('Not Implemented');
}
}
?>

View File

@ -14,7 +14,6 @@ class Task_Invoice_Complete extends Task {
$c = 0; $c = 0;
$o = ORM::factory('Invoice') $o = ORM::factory('Invoice')
->where_active()
->where_unprocessed(); ->where_unprocessed();
foreach ($o->find_all() as $io) { foreach ($o->find_all() as $io) {

View File

@ -51,9 +51,6 @@ class Model_Payment extends ORM_OSB {
* @param $inv number, to allocate payment to an invoice * @param $inv number, to allocate payment to an invoice
*/ */
public function add_item($invnum) { public function add_item($invnum) {
if ($this->loaded() and ! $this->payment_items)
throw new Kohana_Exception('Need to load payment_items?');
// Find our id, if it exists // Find our id, if it exists
foreach ($this->payment_items as $pio) foreach ($this->payment_items as $pio)
if ($pio->invoice_id == $invnum) if ($pio->invoice_id == $invnum)
@ -156,6 +153,7 @@ class Model_Payment extends ORM_OSB {
/** LIST FUNCTIONS **/ /** LIST FUNCTIONS **/
public function list_unapplied() { public function list_unapplied() {
return array();
$pi = array(); $pi = array();
// @todo database suffix needs to be dynamically calculated // @todo database suffix needs to be dynamically calculated

View File

@ -181,7 +181,7 @@ class Model_Product extends ORM_OSB {
*/ */
public function availPriceGroups() { public function availPriceGroups() {
// @todo This needs to be worked out dynamically // @todo This needs to be worked out dynamically
return array(0,2); return array(0,1);
} }
/** /**

View File

@ -496,7 +496,7 @@ class Controller_Admin_Service extends Controller_TemplateDefault_Admin {
public function action_listadslbilling() { public function action_listadslbilling() {
$id = $this->request->param('id'); $id = $this->request->param('id');
$aso = ORM::factory('Adsl_Supplier',$id); $aso = ORM::factory('ADSL_Supplier',$id);
// Process upload // Process upload
// @todo This should be separated out by supplier in case each supplier has a different format // @todo This should be separated out by supplier in case each supplier has a different format
@ -616,37 +616,61 @@ class Controller_Admin_Service extends Controller_TemplateDefault_Admin {
if (! $start && preg_match('/^Item ID,/',$line)) { if (! $start && preg_match('/^Item ID,/',$line)) {
$start = true; $start = true;
continue; continue;
// Items end after "Subtotal" // Items end after "Subtotal"
} elseif ($start && ! $end && preg_match('/^Subtotal:,/',$line)) { } elseif ($start && ! $end && preg_match('/^Subtotal:,/',$line)) {
$end = true; $end = true;
continue; continue;
// If we havent started or not ended, continue // If we havent started or not ended, continue
} elseif (! $start || $end) { } elseif (! $start || $end) {
continue; continue;
} }
// @todo This is to workaround SEP2012 CSV invoice which had extra columns. $record = explode(',',$line);
if (count(explode(',',$line)) == 9)
list($id,$ref,$unknown,$unknown,$unknown,$linedata,$q,$cost,$total) = explode(',',$line);
elseif (count(explode(',',$line)) == 10)
list($id,$ref,$unknown,$unknown,$unknown,$unknown,$linedata,$q,$cost,$total) = explode(',',$line);
else
list($id,$ref,$unknown,$linedata,$q,$cost,$total) = explode(',',$line);
// Extract the phone number from the $linedata // 1 = Item ID (ignore)
@list($service,$description) = explode(':',(preg_replace('/([0-9]+)\s+-\s+(.*)$/',"$1:$2",$linedata))); // 2 = Reference ID (ignore - its not useful for us)
// 3 = Category (always appears blank)
// 4 = Item Description (has our service number, rental and excess charges description)
// 0nnnnnnnnn - Monthly Internet Charge On Plan XXXXX For billing period (dd/mm/yyyy - dd/mm/yyyy) (7 FIELDED LINES)
// 0nnnnnnnnn - Excess usage charges for March 2013 (8 FIELDED LINES)
// 5 = Quantity
// Always 1 for Plan Fees
// 0nnnnnnnnn@graytech.net.au Excess Usage y GB (for excess charges)
// 6 = Unit Price
// Always 1 for Excess Usage (probably quantity)
// 7 = Total Price
// Unit price for Excess Usage
// 8 = Total Price for Excess Usage
// If the description says Monthly Charge, we know its the monthly fee. if (! count($record) >= 7)
if (preg_match('/^Monthly Charge/',$description)) throw Kohana_Exception('Format of CSV file changed? (:record)',array(':record'=>$record));
$result[$service]['cost'] = preg_replace('/\$/','',$total);
// If the description says VISP credit, we know this is commission.
elseif (preg_match('/^VISP Credit/',$description)) if (preg_match('/Monthly Internet Charge On Plan /',$record[3])) {
$result[$service]['credit'] = preg_replace('/\$/','',$total); list($service,$description) = explode(':',(preg_replace('/([0-9]+)\s+-\s+(.*)$/',"$1:$2",$record[3])));
// If the description says Excess, we know this is excess charges. $result[$service]['cost'] = str_replace('$','',$record[6]);
elseif (preg_match('/^Excess usage/',$description))
$result[$service]['excess'] = preg_replace('/\$/','',$total); } elseif (preg_match('/VISP Credit/',$record[3])) {
else list($service,$description) = explode(':',(preg_replace('/([0-9]+)\s+-\s+(.*)$/',"$1:$2",$record[3])));
$result[$service]['info'] = $line; $result[$service]['credit'] = str_replace('$','',$record[6]);
} elseif (preg_match('/Excess usage charges for /',$record[3])) {
list($service,$description) = explode(':',(preg_replace('/([0-9]+)\s+-\s+(.*)$/',"$1:$2",$record[3])));
$result[$service]['excess'] = str_replace('$','',$record[7]);
// Ignore Payment For Invoice lines
} elseif (preg_match('/Payment For Invoice:/',$record[3])) {
} else {
try {
list($service,$description) = explode(':',(preg_replace('/([0-9]+)\s+-\s+(.*)$/',"$1:$2",$record[3])));
$result[$service]['info'] = $line;
} catch (Exception $e) {
$result['000']['info'] = $line;
}
}
} }
return $result; return $result;

View File

@ -11,7 +11,7 @@
*/ */
class Controller_Task_Service extends Controller_Task { class Controller_Task_Service extends Controller_Task {
private function _traffic_suppliers($active=FALSE) { private function _traffic_suppliers($active=FALSE) {
$suppliers = ORM::factory('Adsl_Supplier'); $suppliers = ORM::factory('ADSL_Supplier');
return $active ? $suppliers->list_active() : $suppliers->find_all(); return $active ? $suppliers->list_active() : $suppliers->find_all();
} }

View File

@ -132,13 +132,13 @@ class Model_Service_Plugin_Ssl extends Model_Service_Plugin {
} }
public function renew() { public function renew() {
$d = SSL::details($this->cert); $d = SSL::instance($this->cert);
$ssl_conf = Kohana::$config->load('ssl'); $ssl_conf = Kohana::$config->load('ssl');
// @todo change this so an admin can force this. // @todo change this so an admin can force this.
$force = TRUE; $force = TRUE;
// If our certificate is not old enough skip // If our certificate is not old enough skip
if ($d['validTo_time_t'] > time()+$ssl_conf['min_renew_days']*86400 AND ! $force) if ($d->get_valid_to() > time()+$ssl_conf['min_renew_days']*86400 AND ! $force)
return FALSE; return FALSE;
$res = openssl_csr_sign($this->csr,$this->SSL_CA->sign_cert,$this->SSL_CA->sign_pk,$this->service->product->plugin()->days,array( $res = openssl_csr_sign($this->csr,$this->SSL_CA->sign_cert,$this->SSL_CA->sign_pk,$this->service->product->plugin()->days,array(