This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
khosb/modules/payment/classes/Controller/Admin/Payment.php

200 lines
5.1 KiB
PHP

<?php defined('SYSPATH') or die('No direct access allowed.');
/**
* This class provides payment capabilities.
*
* @package Payment
* @category Controllers/Admin
* @author Deon George
* @copyright (c) 2009-2013 Open Source Billing
* @license http://dev.osbill.net/license.html
*/
class Controller_Admin_Payment extends Controller_Payment {
protected $secure_actions = array(
'add'=>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;
}
}
?>