From 6e95184b0c096cedb9e4f268e789c5b61b054607 Mon Sep 17 00:00:00 2001 From: Deon George Date: Fri, 11 Oct 2013 13:08:50 +1100 Subject: [PATCH] Added Invoice/SSL download recording, other misc fixes --- application/classes/Auth/OSB.php | 4 +++ .../classes/Controller/Reseller/Charge.php | 2 +- .../email/classes/Controller/Admin/Email.php | 2 +- modules/email/classes/Controller/Email.php | 2 +- .../classes/Controller/Reseller/Invoice.php | 2 +- .../classes/Controller/User/Invoice.php | 21 +++++++++++++ modules/invoice/classes/Model/Invoice.php | 6 ++-- .../invoice/classes/Model/Invoice/Memo.php | 30 +++++++++++++++++++ .../classes/Task/Invoice/Reminddue.php | 2 +- .../classes/Task/Invoice/Remindoverdue1.php | 2 +- modules/service/classes/Model/Service.php | 5 ++-- .../service/classes/Model/Service/Memo.php | 30 +++++++++++++++++++ modules/service/views/service/user/view.php | 18 ++++++++++- modules/ssl/classes/Controller/SSL.php | 14 +++++++++ modules/ssl/classes/Controller/User/Ssl.php | 9 +++++- 15 files changed, 137 insertions(+), 12 deletions(-) create mode 100644 modules/invoice/classes/Model/Invoice/Memo.php create mode 100644 modules/service/classes/Model/Service/Memo.php create mode 100644 modules/ssl/classes/Controller/SSL.php diff --git a/application/classes/Auth/OSB.php b/application/classes/Auth/OSB.php index 2da65507..eaa05ec7 100644 --- a/application/classes/Auth/OSB.php +++ b/application/classes/Auth/OSB.php @@ -174,6 +174,10 @@ class Auth_OSB extends Auth_ORM { * @return mixed */ public function get_user($default=NULL,$tokenuser=TRUE) { + // If we are a CLI, we are not logged in + if (PHP_SAPI === 'cli') + throw new Kohana_Exception('Calling :method from the CLI is not allowed!',array(':method'=>__METHOD__)); + // Get the current user $uo = parent::get_user($default); diff --git a/modules/charge/classes/Controller/Reseller/Charge.php b/modules/charge/classes/Controller/Reseller/Charge.php index eca1fbd4..12d85100 100644 --- a/modules/charge/classes/Controller/Reseller/Charge.php +++ b/modules/charge/classes/Controller/Reseller/Charge.php @@ -148,7 +148,7 @@ $(document).ready(function() { ->title_icon('icon-th-list') ->body(Table::factory() ->page_items(50) - ->data(ORM::factory('Charge')->where_authorised('account_id',$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', diff --git a/modules/email/classes/Controller/Admin/Email.php b/modules/email/classes/Controller/Admin/Email.php index 1d227580..453c575f 100644 --- a/modules/email/classes/Controller/Admin/Email.php +++ b/modules/email/classes/Controller/Admin/Email.php @@ -9,7 +9,7 @@ * @copyright (c) 2009-2013 Open Source Billing * @license http://dev.osbill.net/license.html */ -class Controller_Admin_Email extends Controller_TemplateDefault_Admin { +class Controller_Admin_Email extends Controller_Email { protected $secure_actions = array( 'list'=>TRUE, 'templateadd'=>TRUE, diff --git a/modules/email/classes/Controller/Email.php b/modules/email/classes/Controller/Email.php index ec3f6a37..198f2211 100644 --- a/modules/email/classes/Controller/Email.php +++ b/modules/email/classes/Controller/Email.php @@ -1,7 +1,7 @@ title_icon('icon-th-list') ->body(Table::factory() ->jssort('invoices') - ->data(ORM::factory('Invoice')->where_authorised('account_id',$this->ao)->where_active()->find_all()) + ->data(ORM::factory('Invoice')->where_authorised($this->ao)->where_active()->find_all()) ->page_items(25) ->columns(array( 'id'=>'ID', diff --git a/modules/invoice/classes/Controller/User/Invoice.php b/modules/invoice/classes/Controller/User/Invoice.php index e3702507..5428bf05 100644 --- a/modules/invoice/classes/Controller/User/Invoice.php +++ b/modules/invoice/classes/Controller/User/Invoice.php @@ -22,6 +22,13 @@ class Controller_User_Invoice extends Controller_Invoice { public function action_download() { $io = ORM::factory('Invoice',$this->request->param('id')); + // Log the download + $imo = $io->invoice_memo; + $imo->invoice_id = $io->id; + $imo->account_id = $this->ao->id; + $imo->memo = 'Invoice Downloaded.'; + $imo->save(); + $this->response->body(Invoice::instance($io)->pdf()->Output(sprintf('%s.pdf',$io->refnum()),'D')); $this->response->headers(array('Content-Type' => 'application/pdf')); $this->auto_render = FALSE; @@ -83,6 +90,20 @@ class Controller_User_Invoice extends Controller_Invoice { ->title(sprintf('%s: %s - %s',_('Invoice'),$io->refnum(),$io->account->name())) ->title_icon('icon-list-alt') ->body($output); + + $x = $io->invoice_memo->find_all(); + if ($x->count()) + Block::factory() + ->title('Invoice Memos') + ->title_icon('icon-list-alt') + ->body(Table::factory() + ->data($x) + ->columns(array( + 'id'=>'ID', + 'date_orig'=>'Date', + 'account->name()'=>'Account', + 'memo'=>'Memo', + ))); } } ?> diff --git a/modules/invoice/classes/Model/Invoice.php b/modules/invoice/classes/Model/Invoice.php index 8034b62c..ab2ad844 100644 --- a/modules/invoice/classes/Model/Invoice.php +++ b/modules/invoice/classes/Model/Invoice.php @@ -16,6 +16,7 @@ class Model_Invoice extends ORM_OSB implements Cartable { protected $_has_many = array( 'invoice_item'=>array('far_key'=>'id'), 'invoice_item_tax'=>array('through'=>'invoice_item'), + 'invoice_memo'=>array('far_key'=>'id'), 'service'=>array('through'=>'invoice_item'), 'payment'=>array('through'=>'payment_item'), 'payment_item'=>array('far_key'=>'id'), @@ -190,6 +191,7 @@ class Model_Invoice extends ORM_OSB implements Cartable { return $format ? Currency::display($result) : $result; } +//ZZ /** * Return a list of valid checkout options for this invoice */ @@ -698,10 +700,10 @@ class Model_Invoice extends ORM_OSB implements Cartable { /** * Return a list of invoices that are over their due date with/without auto billing */ - public function list_overdue_billing($time=NULL,$billing=FALSE) { + public function list_overdue_billing($time=NULL,$billing=FALSE,$authorised=TRUE) { $result = array(); - foreach ($this->list_overdue($time) as $io) { + foreach ($this->list_overdue($time,$authorised) as $io) { $i = FALSE; foreach ($io->service->find_all() as $so) if (($billing AND $so->account_billing_id) OR (! $billing AND ! $so->account_billing_id)) { diff --git a/modules/invoice/classes/Model/Invoice/Memo.php b/modules/invoice/classes/Model/Invoice/Memo.php new file mode 100644 index 00000000..333aac7f --- /dev/null +++ b/modules/invoice/classes/Model/Invoice/Memo.php @@ -0,0 +1,30 @@ +array(), + ); + protected $_has_one = array( + 'account'=>array('foreign_key'=>'id'), + ); + + /** + * Filters used to format the display of values into friendlier values + */ + protected $_display_filters = array( + 'date_orig'=>array( + array('Config::datetime',array(':value')), + ), + ); +} +?> diff --git a/modules/invoice/classes/Task/Invoice/Reminddue.php b/modules/invoice/classes/Task/Invoice/Reminddue.php index d8ed2237..be786a4f 100644 --- a/modules/invoice/classes/Task/Invoice/Reminddue.php +++ b/modules/invoice/classes/Task/Invoice/Reminddue.php @@ -15,7 +15,7 @@ class Task_Invoice_Reminddue extends Minion_Task { $key = 'remind_due'; $days = ORM::factory('Invoice')->config(strtoupper($key)); - foreach (ORM::factory('Invoice')->list_due(time()+86400*$days) as $io) { + foreach (ORM::factory('Invoice')->list_overdue(time()+86400*$days,FALSE) as $io) { // @todo Use another option to supress reminders // If we have already sent a reminder, we'll skip to the next one. if ($io->remind($key) OR ($io->account->invoice_delivery != 1)) diff --git a/modules/invoice/classes/Task/Invoice/Remindoverdue1.php b/modules/invoice/classes/Task/Invoice/Remindoverdue1.php index d89c1a87..d290a7fe 100644 --- a/modules/invoice/classes/Task/Invoice/Remindoverdue1.php +++ b/modules/invoice/classes/Task/Invoice/Remindoverdue1.php @@ -27,7 +27,7 @@ class Task_Invoice_Remindoverdue1 extends Minion_Task { return; } - foreach (ORM::factory('Invoice')->list_overdue_billing(time()-86400*$days,FALSE) as $io) { + foreach (ORM::factory('Invoice')->list_overdue_billing(time()-86400*$days,FALSE,FALSE) as $io) { // If we have already sent a reminder, we'll skip to the next one. if ($io->remind($key) OR ($io->account->invoice_delivery != 1)) continue; diff --git a/modules/service/classes/Model/Service.php b/modules/service/classes/Model/Service.php index 9761ac91..e0248810 100644 --- a/modules/service/classes/Model/Service.php +++ b/modules/service/classes/Model/Service.php @@ -22,6 +22,7 @@ class Model_Service extends ORM_OSB { 'invoice_item'=>array('far_key'=>'id'), 'invoice'=>array('through'=>'invoice_item'), 'service_change'=>array('far_key'=>'id'), + 'service_memo'=>array('far_key'=>'id'), ); protected $_belongs_to = array( 'product'=>array(), @@ -292,8 +293,8 @@ class Model_Service extends ORM_OSB { public function list_byplugin($plugin) { return $this ->join('product') - ->on($this->table_name().'.site_id','=','product.site_id') // @todo This should be automatic - ->on($this->table_name().'.product_id','=','product.id') + ->on($this->table_name().'.site_id','=','product.site_id') // @todo This should be automatic + ->on($this->table_name().'.product_id','=','product.id') ->where('prod_plugin_file','=',$plugin) ->and_where('service.status','=',TRUE) ->find_all(); diff --git a/modules/service/classes/Model/Service/Memo.php b/modules/service/classes/Model/Service/Memo.php new file mode 100644 index 00000000..4fef31f7 --- /dev/null +++ b/modules/service/classes/Model/Service/Memo.php @@ -0,0 +1,30 @@ +array(), + ); + protected $_has_one = array( + 'account'=>array('foreign_key'=>'id'), + ); + + /** + * Filters used to format the display of values into friendlier values + */ + protected $_display_filters = array( + 'date_orig'=>array( + array('Config::datetime',array(':value')), + ), + ); +} +?> diff --git a/modules/service/views/service/user/view.php b/modules/service/views/service/user/view.php index 707b0ccc..5247798b 100644 --- a/modules/service/views/service/user/view.php +++ b/modules/service/views/service/user/view.php @@ -40,7 +40,7 @@ echo $o->product->feature_summary(); endif ?> - +
details('service_view'); ?> @@ -93,3 +93,19 @@ add_service($o)->render('html','body',array('noid'=>TRUE)); ?>
+ +service_memo->find_all(); if ($x->count()) : ?> +
+
+ Service Memos + data($x) + ->columns(array( + 'id'=>'ID', + 'date_orig'=>'Date', + 'account->name()'=>'Account', + 'memo'=>'Memo', + )); ?> +
+
+ diff --git a/modules/ssl/classes/Controller/SSL.php b/modules/ssl/classes/Controller/SSL.php new file mode 100644 index 00000000..6d5a8138 --- /dev/null +++ b/modules/ssl/classes/Controller/SSL.php @@ -0,0 +1,14 @@ + diff --git a/modules/ssl/classes/Controller/User/Ssl.php b/modules/ssl/classes/Controller/User/Ssl.php index e389ff3f..0cecc146 100644 --- a/modules/ssl/classes/Controller/User/Ssl.php +++ b/modules/ssl/classes/Controller/User/Ssl.php @@ -9,7 +9,7 @@ * @copyright (c) 2009-2013 Open Source Billing * @license http://dev.osbill.net/license.html */ -class Controller_User_SSL extends Controller_TemplateDefault_User { +class Controller_User_SSL extends Controller_SSL { protected $secure_actions = array( 'download'=>FALSE, ); @@ -37,6 +37,13 @@ class Controller_User_SSL extends Controller_TemplateDefault_User { return FALSE; } + // Log the download + $smo = $so->service_memo; + $smo->service_id = $so->id; + $smo->account_id = $this->ao->id; + $smo->memo = sprintf('SSL Certificate %s Downloaded.',$so->plugin()->serial()); + $smo->save(); + $file = sprintf('%s/%s.pkcs12',Kohana::$config->load('config')->tmpdir,$so->name()); openssl_pkcs12_export_to_file($so->plugin()->cert,$file,$so->plugin()->pk,$passwd,array('extracerts'=>$so->plugin()->cacerts())); $x = file_get_contents($file);