TRUE, 'addbulk'=>TRUE, 'list'=>TRUE, 'view'=>TRUE, 'ajaxlist'=>FALSE, 'autoitemlist'=>FALSE, ); public function action_ajaxlist() { $result = array(); if (isset($_REQUEST['term']) AND trim($_REQUEST['term'])) { $result += ORM::factory('Account')->list_autocomplete($_REQUEST['term']); $result += ORM::factory('Invoice')->list_autocomplete($_REQUEST['term'],'account_id'); } $this->auto_render = FALSE; $this->response->headers('Content-Type','application/json'); $this->response->body(json_encode(array_values($result))); } public function action_autoitemlist() { // We are only available via an ajax call. if (! Request::current()->is_ajax() OR ! isset($_REQUEST['key']) OR ! trim($_REQUEST['key'])) die(); $output = View::factory($this->viewpath().'/head'); $this->auto_render = FALSE; $i = 0; $list = array(); if (isset($_REQUEST['pid'])) foreach (ORM::factory('Payment',$_REQUEST['pid'])->items() as $pio) { $output .= View::factory($this->viewpath().'/body') ->set('trc',$i++%2 ? 'odd' : 'even') ->set('pio',$pio) ->set('io',$pio->invoice); // Remember the invoices we have listed array_push($list,$pio->invoice_id); } foreach (ORM::factory('Account',$_REQUEST['key'])->invoices_due() as $io) // Only list invoices not yet listed if (! in_array($io->id,$list)) $output .= View::factory($this->viewpath().'/body') ->set('trc',$i++%2 ? 'odd' : 'even') ->set('pio',ORM::factory('Payment_Item')) ->set('io',$io); // @todo Need the JS to add up the payment allocation before submission $output .= View::factory($this->viewpath().'/foot') ->set('trc',$i++%2 ? 'odd' : 'even'); $this->response->body($output); } /** * Show a list of invoices */ public function action_list() { Block::add(array( 'title'=>_('Customer Payments'), 'body'=>Table::display( ORM::factory('Payment')->find_all(), 25, array( 'id'=>array('label'=>'ID','url'=>URL::link('admin','payment/view/')), 'date_payment'=>array('label'=>'Date'), 'account->accnum()'=>array('class'=>'right'), 'account->name()'=>array('label'=>'Account'), 'checkout->display("name")'=>array('label'=>'Method'), 'total_amt'=>array('label'=>'Total','class'=>'right'), 'balance(TRUE)'=>array('label'=>'Balance','class'=>'right'), 'invoicelist()'=>array('label'=>'Invoices'), ), array( 'page'=>TRUE, 'type'=>'select', 'form'=>URL::link('admin','payment/view'), )), )); } private function add_view($id=NULL,$output='') { $po = ORM::factory('Payment',$id); if ($_POST) { // Update our invoice payment items if (isset($_POST['payment_item']) AND count($_POST['payment_item'])) foreach ($_POST['payment_item'] as $k=>$v) $po->add_item($k)->alloc_amt = is_numeric($v) ? $v : 0; // Entry updated if ($po->values($_POST)->check() AND $po->save()) SystemMessage::add(array( 'title'=>'Payment Recorded', 'type'=>'info', 'body'=>'Payment successfully recorded.', )); } $output .= Form::open(); $output .= View::factory('payment/admin/add_view') ->set('po',$po);; $output .= Form::submit('submit','submit',array('class'=>'form_button')); $output .= Form::close(); Style::add(array( 'type'=>'stdin', 'data'=>'.ui-autocomplete-loading { background: white url("'.URL::site('media/img/ui-anim_basic_16x16.gif').'") right center no-repeat; }' )); Style::add(array( 'type'=>'file', 'data'=>'media/js/jquery.ui/css/smoothness/jquery-ui-1.8.16.custom.css', )); Script::add(array( 'type'=>'file', 'data'=>'media/js/jquery-ui-1.8.16.custom.min.js', )); Script::add(array('type'=>'stdin','data'=>' $(document).ready(function() { $("input[name=date_payment]").datepicker({ dateFormat: "@", showOtherMonths: true, selectOtherMonths: true, showButtonPanel: true, beforeShow: function(data) { if (data.value) data.value = data.value*1000; }, onClose: function(data) { $("input[name=date_payment]").val(data/1000); } }); $("input[name=account_id]").autocomplete({ source: "'.URL::link('admin','payment/ajaxlist',TRUE).'", minLength: 2, change: function(event,ui) { // Send the request and update sub category dropdown $.ajax({ type: "GET", data: "key="+$(this).val(), dataType: "html", cache: false, url: "'.URL::link('admin','payment/autoitemlist',TRUE).'", timeout: 2000, error: function(x) { alert("Failed to submit"); }, success: function(data) { $("div[id=items]").replaceWith(data); } }); } }); });' )); if ($po->loaded()) { Script::add(array('type'=>'stdin','data'=>' $(document).ready(function() { $("div[id=items]").load("'.URL::link('admin','payment/autoitemlist',TRUE).'", {key: "'.$po->account_id.'", pid: "'.$po->id.'" }); });' )); } return $output; } public function action_add() { Block::add(array( 'title'=>_('Add Payments Received'), 'body'=>$this->add_view(), )); } public function action_view() { list($id,$output) = Table::page(__METHOD__); Block::add(array( 'title'=>sprintf('%s: %s',_('View Payments Received'),$id), 'body'=>$this->add_view($id,$output), )); } public function action_addbulk() { // @todo This needs to come from the DB. $supported = array( 'ezypay'=>'Ezypay', ); $output = ''; if ($_POST AND isset($_POST['payer'])) { $c = sprintf('Payment_Bulk_%s',ucfirst($_POST['payer'])); $o = new $c(); if (! $_FILES) { $output .= $o->form(); } else { $output .= $o->process(); } // We dont know what sort of payment type yet } else { $output .= Form::open(); $output .= Form::select('payer',$supported); $output .= Form::submit('submit','submit',array('class'=>'form_button')); $output .= Form::close(); } Block::add(array( 'title'=>_('Bulk Payments Received'), 'body'=>$output, )); } } ?>