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 = $po->loaded() ? 'Payment: '.$po->refnum(TRUE) : 'A|Payment Add'; 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); $v = str_replace(',','',$v); $pio->alloc_amt = is_numeric($v) ? $v : 0; } $this->save($po); } 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; } } ?>