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

238 lines
6.4 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_TemplateDefault_Admin {
protected $secure_actions = array(
'add'=>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'=>'js/jquery.ui/css/smoothness/jquery-ui-1.8.16.custom.css',
));
Script::add(array(
'type'=>'file',
'data'=>'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,
));
}
}
?>