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/Payment/Bulk/Ezypay.php
2014-05-20 21:50:23 +10:00

117 lines
3.1 KiB
PHP

<?php defined('SYSPATH') or die('No direct access allowed.');
/**
* This class is for processing Ezypay payments.
*
* @package Payment
* @category Helpers
* @author Deon George
* @copyright (c) 2009-2013 Open Source Billing
* @license http://dev.osbill.net/license.html
*/
class Payment_Bulk_Ezypay {
private function file($name) {
$result = array();
// Process file
$file = preg_split("/[\r]?[\n]+/",file_get_contents($_FILES[$name]['tmp_name']));
$i = 0;
foreach ($file as $line) {
// Line 0 is our header
if ($i++ == 0 OR ! trim($line))
continue;
// Trim our whitespace on the end of the line.
$line = preg_replace("/\s+$/",'',$line);
array_push($result,explode("\t",$line));
}
return $result;
}
/**
* The input form to capture the required files
*/
public function form() {
$result = '';
$result .= Form::open(NULL,array('enctype'=>'multipart/form-data','class'=>'form-horizontal'));
$result .= View::factory('payment/admin/addbulk/ezypay');
$result .= Form::close();
return $result;
}
/**
* Process the uploaded files
*/
public function process() {
// Process payment
$payments = array();
foreach ($this->file('payment') as $line => $array) {
// Field 4 has our account reference
if (preg_match('/^'.Company::instance()->site(TRUE).'-/',$array[4]) AND $array[10] == 'Cleared') {
$aid = preg_replace('/^'.Company::instance()->site(TRUE).'-/','',$array[4]);
$po = ORM::factory('Payment');
$po->account_id = $aid;
$po->total_amt = $array[7];
$po->checkout_data = array('transid'=>$array[2].':'.$array[3]);
$po->date_payment = strtotime(str_replace('/','-',$array[8]));
$sbo = ORM::factory('Service_Billing')->where('checkout_data','=',$array[3])->find();
if (! $sbo->loaded() OR $sbo->service->account_id != $aid)
throw HTTP_Exception::factory(501,'No Service Billing Data for :aid (:pd)?',array(':aid'=>$aid,':pd'=>$array[3]));
$po->checkout_id = $sbo->checkout_id;
$payments[$array[3]] = $po;
}
}
foreach ($this->file('transaction') as $line => $array) {
// If we dont have a payment item for this fee, we'll continue.
if (! isset($payments[$array[3]]))
continue;
// Our commission fees, which appear has Type 1 or 15
if (in_array($array[9],array(1,15)))
$payments[$array[3]]->fees_amt = (float)$array[7];
}
$total = $fees = 0;
foreach ($payments as $po) {
$po->save();
if (! $po->saved())
throw HTTP_Exception::factory(501,'Failed to Save Payment for :aid (:pd)?',array(':aid'=>$po->account_id,':pd'=>$po->checkout_data['transid']));
$total += $po->total_amt;
$fees += $po->fees_amt;
}
$output = Table::factory()
->data($payments)
->columns(array(
'id'=>'ID',
'date_payment'=>'Date',
'checkout->display("name")'=>'Method',
'total_amt'=>'Amount',
'fees_amt'=>'Fees',
'account->accnum()'=>'Cust ID',
'account->name()'=>'Customer',
))
->prepend(array(
'id'=>array('url'=>URL::link('admin','payment/edit/')),
));
return View::factory('payment/admin/addbulk/ezypay_processed')
->set('table',$output)
->set('fee',$fees)
->set('total',$total);
}
}
?>