TRUE, 'addbulk'=>TRUE, 'ajaxitemlist'=>TRUE, 'ajaxlist'=>TRUE, 'edit'=>TRUE, ); public function action_add() { Block::factory() ->type('form-horizontal') ->title('Add/View Payment') ->title_icon($this->icon) ->body($this->add_edit()); } public function action_addbulk() { $output = ''; if ($this->request->post() AND $this->request->post('payer')) { $c = Kohana::classname('Payment_Bulk_'.$this->request->post('payer')); $o = new $c(); $output .= (! $_FILES) ? $o->form() : $o->process(); // We dont know what sort of payment type yet } else { $output .= Form::open(); $output .= Form::select('payer',$this->templates()); $output .= Form::button('submit','Submit',array('class'=>'btn btn-primary')); $output .= Form::close(); } Block::factory() ->title('Bulk Payments Received') ->title_icon('icon-share') ->body($output); } /** * Return rendered invoices paid by this payment, and outstanding invoices */ public function action_ajaxitemlist() { $invoices = array(); // Get our invoices paid by this payment ID $po = ORM::factory('Payment',$this->request->post('pid')); // Get all our other outstanding invoices foreach (ORM::factory('Account',$this->request->post('key'))->invoices_due() as $io) { $pio = $po->payment_item; $pio->invoice_id = $io->id; $po->add_item($pio); } $this->response->body(View::factory('payment/admin/ajaxitemlist') ->set('o',$po)); } public function action_ajaxlist() { $result = array(); if ($this->request->query('term')) { $result = Arr::merge($result,ORM::factory('Account')->list_autocomplete($this->request->query('term'),'id','id',array('ACC %s: %s'=>array('id','name()')))); $result = Arr::merge($result,ORM::factory('Invoice')->list_autocomplete($this->request->query('term'),'id','account_id',array('INV %s: %s'=>array('id','account->name()')))); } $this->response->headers('Content-Type','application/json'); $this->response->body(json_encode(array_values($result))); } public function action_edit() { list($id,$output) = Table::page(__METHOD__); Block::factory() ->type('form-horizontal') ->title(sprintf('%s: %s',_('View Payments Received'),$id)) ->title_icon($this->icon) ->body($this->add_edit($id,$output)); } private function add_edit($id=NULL,$output='') { $po = ORM::factory('Payment',$id); $this->meta->title = 'Payment: '.$po->refnum(TRUE); if ($this->request->post()) { $po->values($this->request->post()); // Update our invoice payment items if (is_array($this->request->post('payment_item')) AND count($this->request->post('payment_item'))) foreach ($this->request->post('payment_item') as $k=>$v) { $pio = $po->payment_item; $pio->invoice_id = $k; $pio = $po->add_item($pio); $pio->alloc_amt = is_numeric($v) ? $v : 0; } $this->save($po); } Script::factory() ->type('file') ->data('media/theme/bootstrap/js/bootstrap.datepicker.js'); Style::factory() ->type('file') ->data('media/theme/bootstrap/css/bootstrap.datepicker.css'); Script::factory() ->type('stdin') ->data(' $(document).ready(function() { $("#date_payment_label").datepicker({ autoclose : true, todayHighlight: true, endDate : new Date(), format : "dd-mm-yyyy", todayBtn : true, }).on("hide",function(ev) { $("input[name=date_payment]").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; }, }); }); '); if ($po->loaded()) Script::factory() ->type('stdin') ->data(' $(document).ready(function() { $("div[id=items]").load("'.URL::link('admin','payment/ajaxitemlist',TRUE).'", {key: "'.$po->account_id.'", pid: "'.$po->id.'" }); }); '); return View::factory('payment/admin/add_edit') ->set('o',$po); } /** * List our availale Buik Payment Methods */ private function templates() { $template_path = 'classes/Payment/Bulk'; $result = array(); foreach (Kohana::list_files($template_path) as $file => $path) { $file = strtoupper(preg_replace('/.php$/','',str_replace($template_path.'/','',$file))); $result[$file] = $file; } return $result; } } ?>