TRUE, 'ajaxaddplugin'=>TRUE, 'edit'=>TRUE, 'listdomainservicesbydnshost'=>TRUE, 'listhostservicesbysupplier'=>TRUE, 'view'=>TRUE, ); public function action_add() { if ($this->request->post() AND $so=$this->add_edit() AND $so->loaded()) HTTP::redirect(URL::link('admin','service/edit/'.$so->id)); Script::factory() ->type('file') ->data('media/theme/bootstrap/js/bootstrap.datepicker.js'); Style::factory() ->type('file') ->data('media/theme/bootstrap/css/bootstrap.datepicker.css'); // @todo This AJAX URL should be a service one Script::factory() ->type('stdin') ->data(' $(document).ready(function() { $("#date_next_invoice_label").datepicker({ autoclose : true, todayHighlight: true, format : "dd-mm-yyyy", todayBtn : true, }).on("hide",function(ev) { $("input[name=date_next_invoice]").val(ev.date.valueOf()/1000); }); $("input[name=account_id_label]").typeahead({ minLength: 2, source: function (query,process) { search("'.URL::link('admin','payment/ajaxlist').'",query,process); }, matcher: function () { return true; }, updater: function (item) { $("input[name=account_id]").val(users[item]); // Send the request and update sub category dropdown $.ajax({ type: "GET", data: "key="+users[item], dataType: "html", cache: false, url: "'.URL::link('admin','payment/ajaxitemlist',TRUE).'", timeout: 2000, error: function(x) { alert("Failed to submit"); }, success: function(data) { $("div[id=items]").empty().append(data); } }); return item; }, }); $("select[name=product_id]").change(function() { // If we select a blank, then dont continue if (this.value == 0) return false; // Send the request and update sub category dropdown $.ajax({ type: "GET", data: "key="+$(this).val(), dataType: "html", cache: false, url: "'.URL::link('admin','service/ajaxaddplugin/',TRUE).'", timeout: 2000, error: function(x) { alert("Failed to submit"); }, success: function(data) { $("div[id=plugin]").empty().append(data); } }); }); }); '); // @todo Move this to automatically add this if a date format is used Block::factory() ->type('form-horizontal') ->title('Add/View Charge') ->title_icon('fa fa-wrench') ->body(View::factory('service/admin/add')); } public function action_ajaxaddplugin() { $po = ORM::factory('Product',$this->request->query('key')); if (! $po->loaded()) { $output = __('Unable to find product :key',array(':key'=>$this->request->query('key'))); } else { $output = $po->plugin()->render_order(); } $this->template->content = $output; } public function action_edit() { list($id,$output) = Table::page(__METHOD__); $so = $this->request->post() ? $this->add_edit($id) : ORM::factory('Service',$id); if (! $so->loaded()) HTTP::redirect('welcome/index'); Script::factory() ->type('file') ->data('media/theme/bootstrap/vendor/datepicker/js/bootstrap-datepicker.js'); Style::factory() ->type('file') ->data('media/theme/bootstrap/vendor/datepicker/css/datepicker.css'); Script::factory() ->type('stdin') ->data(' $(document).ready(function() { $("#date_next_invoice_label").datepicker({ autoclose : true, format : "dd-M-yyyy", todayBtn : true, }).on("hide",function(ev) { $("input[name=date_next_invoice]").val(ev.date.valueOf()/1000); }); $("#service_connect_date_label").datepicker({ autoclose : true, format : "dd-M-yyyy", todayBtn : true, }).on("hide",function(ev) { $("input[id=service_connect_date]").val(ev.date.valueOf()/1000); }); $("#service_contract_date_label").datepicker({ autoclose : true, format : "dd-M-yyyy", todayBtn : true, }).on("hide",function(ev) { $("input[id=service_contract_date]").val(ev.date.valueOf()/1000); }); }); '); Block::factory() ->type('form-horizontal') ->title(sprintf('%s: %s %s',_('Update Service'),$id,$so->name())) ->title_icon('fa fa-wrench') ->body(View::factory('service/admin/edit') ->set('o',$so) ->set('plugin_form',$so->plugin_edit()) ); } public function action_listdomainservicesbydnshost() { $svs = ORM::factory('Service')->list_bylistgroup('DOMAIN'); Sort::MAsort($svs,'plugin()->host,name()'); $list = array(); foreach ($svs as $so) $list[$so->plugin()->host->host_server_id][] = $so; foreach (array_keys($list) as $sid) Block::add(array( 'title'=>sprintf(_('Domain Names by DNS Host [%s]'),$sid), 'body'=>Table::display( $list[$sid], 25, array( 'id'=>array('label'=>'ID','url'=>URL::link('user','service/view/')), 'service_name()'=>array('label'=>'Details'), 'plugin()->registrar->id'=>array('label'=>'SID'), 'plugin()->registrar->name'=>array('label'=>'Supplier'), 'display("date_next_invoice")'=>array('label'=>'Next Invoice'), ), array( 'page'=>TRUE, 'type'=>'select', 'form'=>URL::link('user','service/view'), )), )); } public function action_listhostservicesbysupplier() { $svs = ORM::factory('Service')->list_bylistgroup('HOST'); Sort::MAsort($svs,'plugin()->host,name()'); $list = array(); foreach ($svs as $so) $list[$so->plugin()->host_server_id][] = $so; foreach (array_keys($list) as $sid) Block::add(array( 'title'=>sprintf(_('Hosting by Supplier %s'),$sid), 'body'=>Table::display( $list[$sid], 25, array( 'id'=>array('label'=>'ID','url'=>URL::link('user','service/view/')), 'service_name()'=>array('label'=>'Details'), 'plugin()->display("host_expire")'=>array('label'=>'Expire'), 'recur_schedule'=>array('label'=>'Billing'), 'price(TRUE,TRUE)'=>array('label'=>'Price','class'=>'right'), 'account->accnum()'=>array('label'=>'Cust ID'), 'account->name()'=>array('label'=>'Customer'), 'display("date_next_invoice")'=>array('label'=>'Next Invoice'), ), array( 'page'=>TRUE, 'type'=>'select', 'form'=>URL::link('user','service/view'), )), )); } public function action_view() { list($id,$output) = Table::page(__METHOD__); $so = ORM::factory('Service',$id); if (! $so->loaded() OR ! Auth::instance()->authorised($so->account)) throw HTTP_Exception::factory(403,'Service either doesnt exist, or you are not authorised to see it'); $doutput = $loutput = ''; $loutput .= View::factory('service/admin/view') ->set('o',$so); // Validate the transactions $bt = NULL; $pr = TRUE; // Next entry is a pro-rata foreach ($so->transactions()->where('item_type','=',0)->find_all() as $iio) { // @todo This hard coding of 3070 should be removed. // $xsid=197; // if (($iio->service_id == $xsid AND $iio->invoice_id < 3070) OR in_array($iio->id,array(960))) continue; if (! $iio->invoice->status OR $iio->void) continue; if ($iio->quantity < 0 OR $iio->price_base < 0) { $bt = $iio->date_start; $pr = TRUE; continue; } if (is_null($bt)) $bt = $iio->date_start; $a = ($iio->invoice_id > 4000 OR $iio->product->prod_plugin_file == 'ADSL') ? FALSE : TRUE; $pdata = Period::details($iio->recurring_schedule,$a ? NULL : $iio->product->price_recurr_weekday,$bt,TRUE,$iio->product->price_recurr_strict); switch ($iio->recurring_schedule) { case 1: case 2: case 4: case 5: if ($iio->date_start != $pdata['start_time']) { $doutput .= sprintf('%s: Set start_time: %s [%s]
',$iio->id,Site::Date($pdata['start_time']),$pdata['start_time']); $iio->date_start=$pdata['start_time']; } if (! $pr AND $iio->date_stop != $pdata['end_time']) { $doutput .= sprintf('%s: Set end_time: %s [%s]
',$iio->id,Site::Date($pdata['end_time']),$pdata['end_time']); $iio->date_stop = $pdata['end_time']; } $bt = ($pr ? $iio->date_stop : $pdata['end_time'])+86400; // $doutput .= sprintf('%s: BT now: %s (%s) [%s]
',$iio->id,Site::Date($bt),Site::Date($pdata['end_time']),$bt); break; default: $doutput .= sprintf('%s: %s Not handled',$iio->id,$iio->recurring_schedule); } $pr = FALSE; //$doutput .= '
'; if (($x=$this->request->query('go')) AND $x==1) $iio->save(); } if (isset($_REQUEST['go'])) HTTP::redirect(URL::link('admin','service/view/'.$so->id)); Block::add(array( 'title'=>sprintf('Transaction History for %s: %s',$so->id(),$so->name()), 'body'=>$loutput, )); Block::add(array( 'title'=>sprintf('Transaction Debug for %s: %s',$so->id(),$so->name()), 'body'=>$doutput, )); $output .= View::factory('service/user/view') ->set('o',$so); Block::add(array( 'title'=>sprintf('%s: %s',$so->id(),$so->service_name()), 'body'=>$output, )); } private function add_edit($id=NULL,$output='') { $so = ORM::factory('Service',$id); if ($_POST) { if ($so->values($this->request->post())->changed() AND ! ($this->save($so))) $so->reload(); // Do we have plugin data to save as well if ($this->request->post('plugin') AND $so->loaded()) { $x = $so->plugin(); if ($x->values(Arr::merge(array('service_id'=>$so->id),$this->request->post('plugin')))->changed()) $this->save($x); } } return $so; } } ?>