File: //var/www/html/punjabcabs/app/Http/Controllers/ApiPayoutController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Mail;
use DB;
use Log;
use Auth;
use Hash;
use Storage;
use Setting;
use Exception;
use Notification;
use Twilio;
use Carbon\Carbon;
use App\Http\Controllers\SendPushNotification;
use App\Notifications\ResetPasswordOTP;
use App\Helpers\Helper;
use Validator;
use App\Card;
use App\User;
use App\Provider;
use App\ContactList;
use App\Complaint;
use App\Settings;
use App\Promocode;
use App\ServiceType;
use App\UserRequests;
use App\RequestFilter;
use App\PromocodeUsage;
use App\ProviderService;
use App\UserRequestRating;
use App\Http\Controllers\ProviderResources\TripController;
class ApiPayoutController extends Controller
{
public function __construct()
{
$this->middleware('admin');
}
/**
* Check Login.
*/
public function checkLogin()
{
if (!Session::get('login_admin_59ba36addc2b2f9401580f014c7f58ea4e30989d')) {
return FALSE;
} else {
return TRUE;
}
}
/**
* Test API
*/
public function testApi()
{
if ($this->checkLogin()) {
try {
$user = array(
"test" => "Test Data",
);
return response()->json($user);
} catch (Exception $e) {
return response()->json(['error' => trans('api.something_went_wrong')], 500);
}
} else {
return response()->json(['error' => 'Admin needs to Login !!!'], 500);
}
}
/**
* Get Transaction Id
*/
public function getTransactionId($id)
{
switch (strlen($id)) {
case '1':
$id = '000000' . $id;
break;
case '2':
$id = '00000' . $id;
break;
case '3':
$id = '0000' . $id;
break;
case '4':
$id = '000' . $id;
break;
case '5':
$id = '00' . $id;
break;
case '6':
$id = '0' . $id;
break;
default:
$id = $id;
break;
}
return 'PJCB-' . $id;
}
/*
* App Trip Payout
*/
public function GetAppTripPayout(Request $request)
{
$this->checkLogin();
return view('admin.payout.app-trip');
}
/*
* App Trip Company List
*/
public function tripCompanyList(Request $request)
{
$this->checkLogin();
if (empty($request->input('search.value'))) {
$details = DB::table('fleets as f')
->select(
'f.id as fleetId',
'f.name as fleetName',
'f.company',
'f.fleet_percentage',
DB::raw('SUM(urp.total) as total'),
DB::raw('SUM(urp.sro_fare) as totalSroFare'),
DB::raw('SUM(urp.transaction_fare) as totalTransactionFare')
)
->leftJoin('providers as p', 'f.id', '=', 'p.fleet')
->leftJoin('user_requests as ur', function ($join) {
$join->on('p.id', '=', 'ur.provider_id')
->where(array(
"ur.payOutStatus" => "pending",
"ur.paid" => 1
));
})
->leftJoin('user_request_payments as urp', 'urp.request_id', '=', 'ur.id')
->groupBy('f.id')
->get();
} else {
$search = $request->input('search.value');
$details = DB::table('fleets as f')
->select(
'f.id as fleetId',
'f.name as fleetName',
'f.company',
'f.fleet_percentage',
DB::raw('SUM(urp.total) as total'),
DB::raw('SUM(urp.sro_fare) as totalSroFare'),
DB::raw('SUM(urp.transaction_fare) as totalTransactionFare')
)
->leftJoin('providers as p', 'f.id', '=', 'p.fleet')
->leftJoin('user_requests as ur', function ($join) {
$join->on('p.id', '=', 'ur.provider_id')
->where(array(
"ur.payOutStatus" => "pending",
"ur.paid" => 1
));
})
->leftJoin('user_request_payments as urp', 'urp.request_id', '=', 'ur.id')
->where('f.name', 'LIKE', "%{$search}%")
->orWhere('f.company', 'LIKE', "%{$search}%")
->groupBy('f.id')
->get();
}
$data = array();
$start = 1;
if ($details->isNotEmpty()) {
foreach ($details as $summary) {
$cabChargeDetails = array();
$cabChargeDetails = DB::table('payout_summary_details as psd')
->select(
DB::raw('SUM(psd.charge) as total_charge'),
DB::raw('SUM(psd.eftpos) as total_eftpos')
)
->join('providers as p', 'p.id', '=', 'psd.driver_id')
->join('fleets as f', 'f.id', '=', 'p.fleet')
->where([
['psd.isPayOut', '=', 0],
['p.fleet', '=', $summary->fleetId],
])
->first();
$details = '<div class="companyDetails">
<span class="" data-check="' . $summary->fleetId . '">
<i class="fa fa-plus"></i>
</span>
</div>';
$total = 0;
$payOut = 0;
$commission = 0;
$subTotal = 0;
if ($summary->total != '' || $summary->total != 0) {
$total = $summary->total;
$subTotal = $summary->total - $summary->totalSroFare - $summary->totalTransactionFare;
$payOut = $subTotal;
}
if ($total != 0 && ($summary->fleet_percentage != '' || $summary->fleet_percentage != 0)) {
$commission = (($subTotal * $summary->fleet_percentage) / 100);
$payOut = $subTotal - $commission;
}
$total += $cabChargeDetails->total_charge + $cabChargeDetails->total_eftpos;
$payOut += $cabChargeDetails->total_charge + $cabChargeDetails->total_eftpos;
$subTotal += $cabChargeDetails->total_charge + $cabChargeDetails->total_eftpos;
$nestedData['id'] = $start;
$nestedData['company'] = $summary->company;
$nestedData['fleetName'] = $summary->fleetName;
$nestedData['total'] = '$' . number_format((float) $total, 2, '.', '');
$nestedData['totalSroFare'] = '$' . number_format((float) $summary->totalSroFare, 2, '.', '');
$nestedData['totalTransactionFare'] = '$' . number_format((float) $summary->totalTransactionFare, 2, '.', '');
$nestedData['subTotal'] = '$' . number_format((float) $subTotal, 2, '.', '');
$nestedData['fleetPercentage'] = '$' . number_format((float) $commission, 2, '.', '');
$nestedData['payout'] = '$' . number_format((float) $payOut, 2, '.', '');
$nestedData['details'] = $details;
$nestedData['fleetId'] = $summary->fleetId;
$data[] = $nestedData;
$start++;
}
}
$json_data = array(
"draw" => intval($request->input('draw')),
"recordsTotal" => intval($start - 1),
"recordsFiltered" => intval($start - 1),
"data" => $data
);
print json_encode($json_data);
}
/*
* App Trip Company Cab List With App Trip & Cab Charge
*/
public function tripCompanyCabList(Request $request)
{
$this->checkLogin();
$details = DB::table('providers as p')
->select(
'p.id as providerId',
'p.first_name',
'p.last_name',
'ps.service_number',
'ps.certificate_number',
'f.fleet_percentage',
'f.id as fleetId',
'f.company as fleetName',
DB::raw('SUM(urp.total) as total'),
DB::raw('SUM(urp.sro_fare) as totalSroFare'),
DB::raw('SUM(urp.transaction_fare) as totalTransactionFare')
)
->leftJoin('provider_services as ps', 'p.id', '=', 'ps.provider_id')
->leftJoin('fleets as f', 'f.id', '=', 'p.fleet')
->leftJoin('user_requests as ur', 'ur.provider_id', '=', 'p.id')
->leftJoin('user_request_payments as urp', 'urp.request_id', '=', 'ur.id')
->where([
['ur.paid', '=', 1],
['p.fleet', '=', $request->input('fleetId')],
['ur.payOutStatus', '=', 'pending'],
])
->groupBy('p.id')
->get();
$html = '<form class="form-horizontal" enctype="multipart/form-data" role="form" id="driverPayOutForm">
<div style="text-align: center;"><h2>App Trip Payout</h2></div>
<table class="table table-striped table-bordered no-footer dtr-inline" style="margin: 30px 0;">
<thead>
<tr>
<th></th>
<th>Driver Name</th>
<th>DC</th>
<th>Taxi No.</th>
<th>Total</th>
<th>Levi Fare</th>
<th>Card Transaction Fare</th>
<th>Sub Total</th>
<th>Commission</th>
<th>Payout</th>
<th>Details</th>
</tr>
</thead>
<tbody>';
$fleetId = '';
$fleetName = '';
if ($details->isNotEmpty()) {
foreach ($details as $det) {
$fleetId = $det->fleetId;
$fleetName = $det->fleetName;
$total = 0;
$payOut = 0;
$commission = 0;
$subTotal = 0;
if ($det->total != '' || $det->total != 0) {
$total = $det->total;
$subTotal = $det->total - $det->totalSroFare - $det->totalTransactionFare;
$payOut = $subTotal;
}
if ($total != 0 && ($det->fleet_percentage != '' || $det->fleet_percentage != 0)) {
$commission = (($subTotal * $det->fleet_percentage) / 100);
$payOut = $subTotal - $commission;
}
$detApp = '<div class="appTripDetails">
<span class="" data-check="' . $det->providerId . '">
<i class="fa fa-plus"></i>
</span>
</div>';
$checkBox = '<input class="form-control appTripPayOutCheckBox" type="checkbox" data-provider="' . $det->providerId . '" data-taxi="' . $det->service_number . '" data-total="' . number_format((float) $total, 2, '.', '') . '" data-subTotal="' . number_format((float) $subTotal, 2, '.', '') . '" data-sro="' . number_format((float) $det->totalSroFare, 2, '.', '') . '" data-trans-fare="' . number_format((float) $det->totalTransactionFare, 2, '.', '') . '" data-percent="' . number_format((float) $commission, 2, '.', '') . '" data-payout="' . number_format((float) $payOut, 2, '.', '') . '" value="" name="idProvider[]">
<input type="hidden" name="providerTotal[' . $det->providerId . ']" value="' . number_format((float) $total, 2, '.', '') . '">
<input type="hidden" name="providerPercent[' . $det->providerId . ']" value="' . number_format((float) $commission, 2, '.', '') . '">
<input type="hidden" name="providerPayout[' . $det->providerId . ']" value="' . number_format((float) $payOut, 2, '.', '') . '">
<input type="hidden" name="providerSubTotal[' . $det->providerId . ']" value="' . number_format((float) $subTotal, 2, '.', '') . '">
<input type="hidden" name="providerSro[' . $det->providerId . ']" value="' . number_format((float) $det->totalSroFare, 2, '.', '') . '">
<input type="hidden" name="providerTransFare[' . $det->providerId . ']" value="' . number_format((float) $det->totalTransactionFare, 2, '.', '') . '">
<input type="hidden" name="providerName[' . $det->providerId . ']" value="' . $det->first_name . ' ' . $det->last_name . '">';
$html .= ' <tr class="appTripRow' . $det->providerId . '">
<td>' . $checkBox . '</td>
<td>' . $det->first_name . ' ' . $det->last_name . '</td>
<td>' . $det->certificate_number . '</td>
<td>' . $det->service_number . '</td>
<td>$' . number_format((float) $total, 2, '.', '') . '</td>
<td>$' . number_format((float) $det->totalSroFare, 2, '.', '') . '</td>
<td>$' . number_format((float) $det->totalTransactionFare, 2, '.', '') . '</td>
<td>$' . number_format((float) $subTotal, 2, '.', '') . '</td>
<td>$' . number_format((float) $commission, 2, '.', '') . '</td>
<td>$' . number_format((float) $payOut, 2, '.', '') . '</td>
<td>' . $detApp . '</td>
</tr>';
}
$html .= '</tbody>
</table>';
} else {
$html .= '<tr><td colspan="11" style="text-align: center;">No Details Found</td></tr>
</tbody>
</table>
';
}
//For Cab Charge
$cabChargeDetails = DB::table('payout_summary_details as psd')
->select(
'psd.ride_summary_id as summaryId',
'psd.driver_id',
'psd.taxi_total',
'psd.shift_total',
'psd.isPayOut',
'psd.transactionId',
DB::raw('SUM(psd.charge) as total_charge'),
DB::raw('SUM(psd.eftpos) as total_eftpos'),
'p.first_name',
'p.last_name',
'ps.service_number',
'ps.certificate_number'
)
->join('providers as p', 'p.id', '=', 'psd.driver_id')
->join('provider_services as ps', 'p.id', '=', 'ps.provider_id')
->join('fleets as f', 'f.id', '=', 'p.fleet')
->where([
['psd.isPayOut', '=', 0],
['p.fleet', '=', $request->input('fleetId')],
])
->groupBy('psd.driver_id')
->get();
$html .= '<div style="text-align: center;"><h2>Cab Charge Payout</h2></div>
<table class="table table-striped table-bordered no-footer dtr-inline" style="margin: 30px 0;">
<thead>
<tr>
<th></th>
<th>Driver Name</th>
<th>DC</th>
<th>Taxi No.</th>
<th>Total</th>
<th>Commission</th>
<th>Payout</th>
<th>Details</th>
</tr>
</thead>
<tbody>';
if ($cabChargeDetails->isNotEmpty()) {
foreach ($cabChargeDetails as $val) {
$cabChargePay = number_format((float) ($val->total_eftpos + $val->total_charge), 2, '.', '');
$checkBoxTwo = '<input class="form-control cabChargePayOutCheckBox" type="checkbox" data-driver="' . $val->driver_id . '" data-total="' . number_format((float) $cabChargePay, 2, '.', '') . '" data-percent="0.00" data-payout="' . number_format((float) $cabChargePay, 2, '.', '') . '" value="" name="idDriver[]">
<input type="hidden" name="driverTotal[' . $val->driver_id . ']" value="' . number_format((float) $cabChargePay, 2, '.', '') . '">
<input type="hidden" name="driverPercent[' . $val->driver_id . ']" value="0.00">
<input type="hidden" name="driverPayout[' . $val->driver_id . ']" value="' . number_format((float) $cabChargePay, 2, '.', '') . '">
<input type="hidden" name="driverName[' . $val->driver_id . ']" value="' . $val->first_name . ' ' . $val->last_name . '">
<input type="hidden" name="driverSubTotal[' . $val->driver_id . ']" value="' . number_format((float) $cabChargePay, 2, '.', '') . '">
<input type="hidden" name="driverSro[' . $val->driver_id . ']" value="0.00">
<input type="hidden" name="driverTransFare[' . $val->driver_id . ']" value="0.00">';
$detCab = '<div class="cabChargeDetails">
<span class="" data-check="' . $val->driver_id . '">
<i class="fa fa-plus"></i>
</span>
</div>';
$html .= '<tr class="cabChargeRow' . $val->driver_id . '">
<td>' . $checkBoxTwo . '</td>
<td>' . $val->first_name . ' ' . $val->last_name . '</td>
<td>' . $val->certificate_number . '</td>
<td>' . $val->service_number . '</td>
<td>$' . $cabChargePay . '</td>
<td>$0.00</td>
<td>$' . $cabChargePay . '</td>
<td>' . $detCab . '</td>
</tr>';
}
$html .= '</tbody></table>';
} else {
$html .= '<tr><td colspan="8" style="text-align: center;">No Details Found</td></tr>
</tbody>
</table>
';
}
$html .= '<div style="text-align: center;">
<div class="col-xs-1">
<b>Total</b>
</div>
<div class="col-xs-1 totalDiv">0</div>
<div class="col-xs-1">
<b>Lib</b>
</div>
<div class="col-xs-1 totalLib">0</div>
<div class="col-xs-1">
<b>Transaction</b>
</div>
<div class="col-xs-1 totalTrans">0</div>
<div class="col-xs-1">
<b>Sub Total</b>
</div>
<div class="col-xs-1 totalSub">0</div>
<div class="col-xs-1">
<b>Comission </b>
</div>
<div class="col-xs-1 totalPercent">0</div>
<div class="col-xs-1">
<b>Payout</b>
</div>
<div class="col-xs-1 totalPayout">0</div>
<input type="hidden" id="totalValue" name="totalValue" value="0">
<input type="hidden" id="totalSro" name="totalSro" value="0">
<input type="hidden" id="totalTransFare" name="totalTransFare" value="0">
<input type="hidden" id="totalPayout" name="totalPayout" value="0">
<input type="hidden" id="totalPayment" name="totalPayment" value="0">
<input type="hidden" id="totalPercent" name="totalPercent" value="0">
<input type="hidden" name="fleetId" value="' . $fleetId . '">
<input type="hidden" name="fleetName" value="' . $fleetName . '">
<div class="col-xs-12" style="margin-top: 3%;">
<button type="submit" name="submit" class="btn btn-success payOutBtn" disabled="disabled"><i class="fa fa-check"></i> Make Payout</button>
</div>
</div>
</form>';
print $html;
}
/*
* App Trip Details List of Each Provider
*/
public function appTripDetailsByProvider(Request $request)
{
$this->checkLogin();
$details = DB::table('user_requests as ur')
->select(
'ur.booking_id',
'ur.created_at',
'urp.total',
'urp.sro_fare',
'urp.transaction_fare'
)
->join('user_request_payments as urp', 'ur.id', '=', 'urp.request_id')
->where([
['ur.payOutStatus', '=', 'pending'],
['ur.paid', '=', 1],
['ur.provider_id', '=', $request->input('providerId')],
])
->orderBy('ur.id', 'desc')
->get();
$html = '<table class="table table-striped table-bordered no-footer dtr-inline">
<thead>
<tr>
<th>#</th>
<th>Booking Id</th>
<th>Amount</th>
<th>Levi Fare</th>
<th>Card Transaction Fare</th>
<th>Total</th>
<th>Date</th>
</tr>
</thead>
<tbody>';
if ($details->isNotEmpty()) {
$cnt = 1;
foreach ($details as $det) {
$html .= ' <tr>
<td>' . $cnt . '</td>
<td>' . $det->booking_id . '</td>
<td>$' . number_format((float) $det->total, 2, '.', '') . '</td>
<td>$' . number_format((float) $det->sro_fare, 2, '.', '') . '</td>
<td>$' . number_format((float) $det->transaction_fare, 2, '.', '') . '</td>
<td>$' . number_format((float) ($det->total - ($det->sro_fare + $det->transaction_fare)), 2, '.', '') . '</td>
<td>' . date_format(date_create($det->created_at), 'd-m-Y') . '</td>
</tr>';
$cnt++;
}
$html .= '</tbody></table>';
} else {
$html .= '<tr><td colspan="4">No Details Found !!!</td></tr></tbody></table>';
}
print $html;
}
/*
* Cab Charge Details List of Each Provider
*/
public function cabChargeDetailsByProvider(Request $request)
{
$this->checkLogin();
$details = DB::table('payout_summary_details as psd')
->select(
'psd.date',
'psd.charge',
'psd.eftpos',
'psd.date',
'psd.time',
'psd.description',
'p.first_name',
'p.last_name',
'ps.service_number',
'ps.certificate_number'
)
->join('providers as p', 'p.id', '=', 'psd.driver_id')
->join('provider_services as ps', 'p.id', '=', 'ps.provider_id')
->where([
['psd.isPayOut', '=', 0],
['psd.driver_id', '=', $request->input('driverId')],
])
->orderBy('psd.id', 'desc')
->get();
$html = '<table class="table table-striped table-bordered no-footer dtr-inline">
<thead>
<tr>
<th>#</th>
<th>Driver</th>
<th>Taxi</th>
<th>DC</th>
<th>Description</th>
<th>Charge</th>
<th>EFTPOS</th>
<th>Date</th>
</tr>
</thead>
<tbody>';
if ($details->isNotEmpty()) {
$cnt = 1;
foreach ($details as $det) {
$html .= ' <tr>
<td>' . $cnt . '</td>
<td>' . $det->first_name . ' ' . $det->last_name . '</td>
<td>' . $det->service_number . '</td>
<td>' . $det->certificate_number . '</td>
<td>' . $det->description . '</td>
<td>$' . number_format((float) $det->charge, 2, '.', '') . '</td>
<td>$' . number_format((float) $det->eftpos, 2, '.', '') . '</td>
<td>' . date_format(date_create($det->date), 'd-m-Y') . ' ' . $det->time . '</td>
</tr>';
$cnt++;
}
$html .= '</tbody></table>';
} else {
$html .= '<tr><td colspan="8">No Details Found !!!</td></tr></tbody></table>';
}
print $html;
}
/*
* Trip Company Cab Payout
*/
public function tripCabPayout(Request $request)
{
// echo '<pre>';
// print_r($request->input());
// die;
$providerTotal = $request->input('providerTotal');
$providerSro = $request->input('providerSro');
$providerTransFare = $request->input('providerTransFare');
$providerSubTotal = $request->input('providerSubTotal');
$providerCommission = $request->input('providerPercent');
$providerPayout = $request->input('providerPayout');
$providerName = $request->input('providerName');
$driverTotal = $request->input('driverTotal');
$driverSro = $request->input('driverSro');
$driverTransFare = $request->input('driverTransFare');
$driverSubTotal = $request->input('driverSubTotal');
$driverCommission = $request->input('driverPercent');
$driverPayout = $request->input('driverPayout');
$driverName = $request->input('driverName');
$fleetName = $request->input('fleetName');
$fleetId = $request->input('fleetId');
$payout = array(
"fleet_id" => $fleetId,
"total_value" => $request->input('totalValue'),
"total_sro" => $request->input('totalSro'),
"total_transaction_fare" => $request->input('totalTransFare'),
"total_amount" => $request->input('totalPayment'),
"total_commission" => $request->input('totalPercent'),
"total_payout" => $request->input('totalPayout')
);
$payOutId = DB::table('payout')->insertGetId($payout);
$transactionId = $this->getTransactionId($payOutId);
DB::table('payout')
->where([
['id', '=', $payOutId],
])
->update(array('transaction_id' => $transactionId));
$this->insertLog('payout_log', 'Payout', 'Payout Done for ' . $fleetName . '. Transaction id ' . $transactionId);
if ($request->input('idProvider')) {
$idProvider = $request->input('idProvider');
foreach ($idProvider as $providerId) {
$payoutDetails = array();
$payoutDetails = array(
"payout_id" => $payOutId,
"payout_type" => 'App Trip',
"provider_id" => $providerId,
"transaction_id" => $transactionId,
"total_value" => $providerTotal[$providerId],
"total_sro" => $providerSro[$providerId],
"total_transaction_fare" => $providerTransFare[$providerId],
"total_amount" => $providerSubTotal[$providerId],
"total_commission" => $providerCommission[$providerId],
"total_payout" => $providerPayout[$providerId],
);
DB::table('payout_details')->insert($payoutDetails);
DB::table('user_requests')
->where([
['provider_id', '=', $providerId],
['paid', '=', 1],
['payOutStatus', '=', 'pending'],
])
->update(array('payOutStatus' => 'completed', 'transactionId' => $transactionId));
$this->insertLog('payout_log', 'App Trip Payout Details', 'App Trip Payout Done for Provider ' . $providerName[$providerId] . '. Transaction id ' . $transactionId);
}
}
if ($request->input('idDriver')) {
$idDriver = $request->input('idDriver');
foreach ($idDriver as $driverId) {
$driverName = $request->input('driverName');
$payoutDetails = array();
$driverTotal = $request->input('driverTotal');
$driverSro = $request->input('driverSro');
$driverTransFare = $request->input('driverTransFare');
$driverSubTotal = $request->input('driverSubTotal');
$driverCommission = $request->input('driverPercent');
$driverPayout = $request->input('driverPayout');
$driverName = $request->input('driverName');
$payoutDetails = array(
"payout_id" => $payOutId,
"payout_type" => 'Cab Charge',
"provider_id" => $driverId,
"transaction_id" => $transactionId,
"total_value" => $driverTotal[$driverId],
"total_sro" => $driverSro[$driverId],
"total_transaction_fare" => $driverTransFare[$driverId],
"total_amount" => $driverSubTotal[$driverId],
"total_commission" => $driverCommission[$driverId],
"total_payout" => $driverPayout[$driverId],
);
DB::table('payout_details')->insert($payoutDetails);
DB::table('payout_summary_details')
->where([
['driver_id', '=', $driverId],
['isPayOut', '=', 0],
])
->update(array('isPayOut' => 1, 'transactionId' => $transactionId, 'updated_at' => date('Y-m-d H:i:s')));
$this->insertLog('payout_log', 'Cab Charge Payout Details', 'Cab Charge Payout Done for Provider ' . $driverName[$driverId] . '. Transaction id ' . $transactionId);
}
}
}
/*
* Trip Payout Report
*/
public function appTripPayoutReport(Request $request)
{
$this->checkLogin();
return view('admin.payout.app-trip-report');
}
/*
* Trip Payout Report List
*/
public function appTripPayoutReportList(Request $request)
{
$this->checkLogin();
if (empty($request->input('search.value'))) {
$details = DB::table('payout as po')
->select(
'po.id as payoutId',
'po.fleet_id as fleetId',
'po.transaction_id',
'po.total_value',
'po.total_sro',
'po.total_transaction_fare',
'po.total_amount',
'po.total_commission',
'po.total_payout',
'po.created_at',
'f.name as fleetName',
'f.company as fleetCompany'
)
->join('fleets as f', 'f.id', '=', 'po.fleet_id')
->orderBy('po.id', 'desc')
->get();
} else {
$search = $request->input('search.value');
$details = DB::table('payout as po')
->select(
'po.id as payoutId',
'po.fleet_id as fleetId',
'po.transaction_id',
'po.total_value',
'po.total_sro',
'po.total_transaction_fare',
'po.total_amount',
'po.total_commission',
'po.created_at',
'f.name as fleetName',
'f.company as fleetCompany'
)
->join('fleets as f', 'f.id', '=', 'po.fleet_id')
->orderBy('po.id', 'desc')
->where('f.name', 'LIKE', "%{$search}%")
->orWhere('po.transaction_id', 'LIKE', "%{$search}%")
->orWhere('po.total_amount', 'LIKE', "%{$search}%")
->orWhere('po.total_commission', 'LIKE', "%{$search}%")
->orWhere('po.total_payout', 'LIKE', "%{$search}%")
->orWhere('f.company', 'LIKE', "%{$search}%")
->get();
}
$data = array();
$start = 1;
if ($details->isNotEmpty()) {
foreach ($details as $summary) {
$details = '<div class="payOutDetails">
<span class="" data-check="' . $summary->payoutId . '">
<i class="fa fa-plus"></i>
</span>
</div>';
$print = '<div class="printReceipt">
<span data-check="' . $summary->transaction_id . '">
<i class="fa fa-file-pdf-o" aria-hidden="true"></i>
<i class="fa fa-circle-o-notch fa-spin loader-spin-' . $summary->transaction_id . '" style="font-size:14px; color:#a377b1; display:none;"></i>
</span>
</div>';
$nestedData['id'] = $start;
$nestedData['transaction_id'] = $summary->transaction_id;
$nestedData['fleetCompany'] = $summary->fleetCompany;
$nestedData['fleetName'] = $summary->fleetName;
$nestedData['totalVal'] = '$' . number_format((float) $summary->total_value, 2, '.', '');
$nestedData['totalSro'] = '$' . number_format((float) $summary->total_sro, 2, '.', '');
$nestedData['totalTrans'] = '$' . number_format((float) $summary->total_transaction_fare, 2, '.', '');
$nestedData['totalAmount'] = '$' . number_format((float) $summary->total_amount, 2, '.', '');
$nestedData['totalCommission'] = '$' . number_format((float) $summary->total_commission, 2, '.', '');
$nestedData['totalPayout'] = '$' . number_format((float) $summary->total_payout, 2, '.', '');
$nestedData['details'] = $details;
$nestedData['date'] = date_format(date_create($summary->created_at), 'd-m-Y');
$nestedData['payoutId'] = $summary->payoutId;
$nestedData['print'] = $print;
$data[] = $nestedData;
$start++;
}
}
$json_data = array(
"draw" => intval($request->input('draw')),
"recordsTotal" => intval($start - 1),
"recordsFiltered" => intval($start - 1),
"data" => $data
);
print json_encode($json_data);
}
/*
* Trip Payout Report List Details
*/
public function appTripPayoutDetails(Request $request)
{
$this->checkLogin();
$details = DB::table('payout_details as pd')
->select(
'pd.total_value as totalValue',
'pd.total_sro as totalSro',
'pd.total_transaction_fare as totalTransactionFare',
'pd.total_amount as totalAmount',
'pd.total_commission as totalCommission',
'pd.total_payout as totalPayout',
'pd.created_at as createdAt',
'pd.payout_type as payoutType',
'p.first_name as firstName',
'p.last_name as lastName',
'ps.service_number as serviceNumber',
'ps.certificate_number as certificateNumber'
)
->join('providers as p', 'p.id', '=', 'pd.provider_id')
->join('provider_services as ps', 'p.id', '=', 'ps.provider_id')
->where('pd.payout_id', '=', $request->input('payOutId'))
->orderBy('pd.id', 'asc')
->get();
$html = '<table class="table table-striped table-bordered no-footer dtr-inline">
<thead>
<tr>
<th>Driver Name</th>
<th>Taxi No.</th>
<th>DC</th>
<th>Payout Type</th>
<th>Value</th>
<th>Lib</th>
<th>Transaction</th>
<th>Total</th>
<th>Commission</th>
<th>Payout</th>
</tr>
</thead>
<tbody>';
if ($details->isNotEmpty()) {
foreach ($details as $det) {
$html .= ' <tr>
<td>' . $det->firstName . ' ' . $det->lastName . '</td>
<td>' . $det->serviceNumber . '</td>
<td>' . $det->certificateNumber . '</td>
<td>' . $det->payoutType . '</td>
<td>$' . number_format((float) $det->totalValue, 2, '.', '') . '</td>
<td>$' . number_format((float) $det->totalSro, 2, '.', '') . '</td>
<td>$' . number_format((float) $det->totalTransactionFare, 2, '.', '') . '</td>
<td>$' . number_format((float) $det->totalAmount, 2, '.', '') . '</td>
<td>$' . number_format((float) $det->totalCommission, 2, '.', '') . '</td>
<td>$' . number_format((float) $det->totalPayout, 2, '.', '') . '</td>
</tr>';
}
$html .= '</tbody>
</table>';
} else {
$html .= '<tr><td colspan="10" style="text-align: center;">No Details Found !!!</td></tr>
</tbody>
</table>';
}
print $html;
}
/*
* Genarate Trip Payout Receipt
*/
public function generateReceipt(Request $request)
{
$transId = Session::get('transId');
Session::forget('transId');
$payOut = DB::table('payout as po')
->select(
'po.total_value',
'po.total_sro',
'po.total_transaction_fare',
'po.total_amount',
'po.total_commission',
'po.total_payout',
'po.created_at',
'f.name as fleetName',
'f.company as fleetCompany',
'f.email as fleetEmail'
)
->join('fleets as f', 'f.id', '=', 'po.fleet_id')
->where('po.transaction_id', '=', $transId)
->orderBy('po.id', 'asc')
->first();
$payOutDetails = DB::table('payout_details as pd')
->select(
'pd.total_value',
'pd.total_sro',
'pd.total_transaction_fare',
'pd.total_amount',
'pd.total_commission',
'pd.total_payout',
'pd.payout_type',
'p.first_name as providerFirstName',
'p.last_name as providerLastName',
'ps.service_number',
'ps.certificate_number'
)
->join('providers as p', 'p.id', '=', 'pd.provider_id')
->join('provider_services as ps', 'p.id', '=', 'ps.provider_id')
->where('pd.transaction_id', '=', $transId)
->orderBy('pd.id', 'asc')
->get();
//return view('admin.payout.app-trip-receipt', compact('payOut', 'payOutDetails', 'transId'));
$pdfName = $transId . '.pdf';
$pdf = \PDF::loadView('admin.payout.app-trip-receipt', compact('payOut', 'payOutDetails', 'transId'));
return $pdf->download($pdfName);
echo "<script>window.close();</script>";
}
/*
* Save Receipt Transaction Id in Session for Generate Receipt
*/
public function saveReceiptId(Request $request)
{
Session::put('transId', $request->input('payOutId'));
print url('/admin/generate-receipt');
}
/**
* Cab Charge List - Process Datewise
*/
public function cabCharge(Request $request)
{
$this->checkLogin();
return view('admin.payout.cab-charge');
}
/**
* Cab Charge List - Taxiwise
*/
public function taxiCabCharge(Request $request)
{
$this->checkLogin();
return view('admin.payout.cab-charge-taxi');
}
/**
* Cab Charge List Details - Date Wise
*/
public function cabChargeListDetails(Request $request)
{
$this->checkLogin();
if (empty($request->input('search.value'))) {
$summary_details = DB::table('payout_summary as rs')
->select(
'rs.id as ride_id',
'rs.process_date',
'rs.pay_period',
'rs.charge',
'rs.taxi_total',
'rs.shift_total',
'rs.payment_total',
'rs.eftpos'
)
->orderBy('rs.process_date', 'desc')
->get();
} else {
$search = $request->input('search.value');
$summary_details = DB::table('payout_summary as rs')
->where('rs.process_date', 'LIKE', "%{$search}%")
->orWhere('rs.pay_period', 'LIKE', "%{$search}%")
->orWhere('rs.charge', 'LIKE', "%{$search}%")
->orWhere('rs.taxi_total', 'LIKE', "%{$search}%")
->orWhere('rs.shift_total', 'LIKE', "%{$search}%")
->orWhere('rs.payment_total', 'LIKE', "%{$search}%")
->orWhere('rs.eftpos', 'LIKE', "%{$search}%")
->orWhere('rs.transactionId', 'LIKE', "%{$search}%")
->select(
'rs.id as ride_id',
'rs.process_date',
'rs.pay_period',
'rs.charge',
'rs.taxi_total',
'rs.shift_total',
'rs.payment_total',
'rs.eftpos'
)
->orderBy('rs.process_date', 'desc')
->get();
}
$data = array();
$start = 1;
if ($summary_details->isNotEmpty()) {
foreach ($summary_details as $summary) {
$details = '<div class="cabDetails">
<span class="" data-check="' . $summary->ride_id . '">
<i class="fa fa-plus"></i>
</span>
</div>';
if ($request->input('cabCharge')) {
$cabCharge = '';
$transactionId = '';
if ($summary->isPayOut == '0') {
$isPayOut = '<span style="color: red;">Pending</span>';
$cabCharge = '<input class="form-control payOutCheckBox" type="checkbox" value="' . $summary->ride_id . '" name="idPayOut[]">';
} else {
$isPayOut = '<span style="color: green;">Done</span>';
$transactionId = $summary->transactionId;
}
$nestedData['cabCharge'] = $cabCharge;
$nestedData['isPayOut'] = $isPayOut;
$nestedData['transactionId'] = $transactionId;
}
$nestedData['id'] = $start;
$nestedData['process_date'] = date_format(date_create($summary->process_date), 'd-m-Y');
$nestedData['pay_period'] = $summary->pay_period;
$nestedData['taxi_total'] = '$' . number_format((float) $summary->taxi_total, 2, '.', '');
$nestedData['shift_total'] = '$' . number_format((float) $summary->shift_total, 2, '.', '');
$nestedData['charge'] = '$' . number_format((float) $summary->charge, 2, '.', '');
$nestedData['payment_total'] = '$' . number_format((float) $summary->payment_total, 2, '.', '');
$nestedData['eftpos'] = '$' . number_format((float) $summary->eftpos, 2, '.', '');
$nestedData['details'] = $details;
$nestedData['ride_id'] = $summary->ride_id;
$data[] = $nestedData;
$start++;
}
}
$json_data = array(
"draw" => intval($request->input('draw')),
"recordsTotal" => intval($start - 1),
"recordsFiltered" => intval($start - 1),
"data" => $data
);
print json_encode($json_data);
}
/**
* Get More Details of Cab Charge List
*/
public function moreCabChargeListDetails(Request $request)
{
$this->checkLogin();
if ($request->input('cabCharge')) {
$details = DB::table('payout_summary_details as psd')
->select(
'psd.*',
'p.first_name',
'p.last_name',
'ps.service_number',
'ps.certificate_number'
)
->join('providers as p', 'p.id', '=', 'psd.driver_id')
->join('provider_services as ps', 'p.id', '=', 'ps.provider_id')
->where('psd.ride_summary_id', $request->input('summaryId'))
->groupBy('taxi')
->orderBy('psd.id', 'ASC')
->get();
} else {
$details = DB::table('payout_summary_details as psd')
->select(
'psd.*',
'p.first_name',
'p.last_name',
'ps.service_number',
'ps.certificate_number'
)
->join('providers as p', 'p.id', '=', 'psd.driver_id')
->join('provider_services as ps', 'p.id', '=', 'ps.provider_id')
->where('psd.ride_summary_id', $request->input('summaryId'))
->orderBy('psd.id', 'ASC')
->get();
}
$html = '';
if ($details->isNotEmpty()) {
$start = 1;
$html = '<table class="table table-striped table-bordered no-footer dtr-inline">
<thead>
<tr>
<th>Driver Name</th>
<th>Taxi</th>
<th>DC</th>';
if ($request->input('cabCharge')) {
$html .= '<th>Taxi Total</th>
<th>Shift Total</th>
<th>Payout Status</th>
<th>Transaction Id</th>
<th>Details</th>';
} else {
$html .= '<th>Description</th>
<th>Charge</th>
<th>Eftpos</th>
<th>Payout Status</th>
<th>Transaction Id</th>
<th>Date</th>';
}
$html .= '</tr>
</thead>
<tbody>';
foreach ($details as $det) {
if ($det->isPayOut == '0') {
$isPayOut = '<span style="color: red;">Pending</span>';
} else {
$isPayOut = '<span style="color: green;">Done</span>';
}
if ($det->charge == '' || $det->charge == NULL) {
$charge = '0.00';
} else {
$charge = $det->charge;
}
if ($det->eftpos == '' || $det->eftpos == NULL) {
$eftpos = '0.00';
} else {
$eftpos = $det->eftpos;
}
$html .= '<tr class="taxiDetails' . $det->taxi . '">';
$html .= '<td>' . $det->first_name . ' ' . $det->last_name . '</td>
<td>' . $det->taxi . '</td>
<td>' . $det->certificate_number . '</td>';
if ($request->input('cabCharge')) {
$details = '<div class="cabDriverDetails">
<span class="" data-summary-id="' . $det->ride_summary_id . '" data-taxi="' . $det->taxi . '">
<i class="fa fa-plus"></i>
</span>
</div>';
$html .= '<td>$' . number_format((float) $det->taxi_total, 2, '.', '') . '</td>
<td>$' . number_format((float) $det->shift_total, 2, '.', '') . '</td>
<td>' . $isPayOut . '</td>
<td>' . $det->transactionId . '</td>
<td>' . $details . '</td>';
} else {
$html .= '<td>' . $det->description . '</td>
<td>$' . number_format((float) $charge, 2, '.', '') . '</td>
<td>$' . number_format((float) $eftpos, 2, '.', '') . '</td>
<td>' . $isPayOut . '</td>
<td>' . $det->transactionId . '</td>
<td>' . date_format(date_create($det->date), 'd-m-Y') . ' ' . $det->time . '</td>';
}
$html .= '</tr>';
$start++;
}
$html .= ' </tbody>
</table>';
print $html;
}
}
/**
* Get More Details of Cab Charge Driver List
*/
public function moreTaxiDetails(Request $request)
{
$this->checkLogin();
if (!$request->input('driverId')) {
$details = DB::table('payout_summary_details as rsd')
->select('rsd.*', 'p.first_name', 'p.last_name')
->join('providers as p', 'p.id', '=', 'rsd.driver_id')
->where([
['ride_summary_id', '=', $request->input('summaryId')],
['taxi', '=', $request->input('taxi')],
])
->orderBy('rsd.id', 'ASC')
->get();
} else {
$details = DB::table('payout_summary_details as psd')
->select(
'psd.description',
'psd.charge',
'psd.eftpos',
'psd.isPayOut',
'psd.transactionId',
'psd.date',
'psd.time'
)
->where([
['psd.driver_id', '=', $request->input('driverId')]
])
->orderBy('psd.id', 'DESC')
->get();
}
$html = '<table class="table table-striped table-bordered no-footer dtr-inline">
<thead>
<tr>
<th>#</th>
<th>Description</th>
<th>Charge</th>
<th>Eftpos</th>
<th>Payout Status</th>
<th>Transaction Id</th>
<th>Date</th>
</tr>
</thead>
<tbody>';
if ($details->isNotEmpty()) {
$start = 1;
foreach ($details as $det) {
if ($det->charge == '' || $det->charge == NULL) {
$charge = '0.00';
} else {
$charge = $det->charge;
}
if ($det->eftpos == '' || $det->eftpos == NULL) {
$eftpos = '0.00';
} else {
$eftpos = $det->eftpos;
}
if ($det->isPayOut == 0) {
$status = '<span style="color: red;">Pending</span>';
} else {
$status = '<span style="color: green;">Done</span>';
}
$html .= ' <tr>
<td>' . $start . '</td>
<td>' . $det->description . '</td>
<td>$' . number_format((float) $charge, 2, '.', '') . '</td>
<td>$' . number_format((float) $eftpos, 2, '.', '') . '</td>
<td>' . $status . '</td>
<td>' . $det->transactionId . '</td>
<td>' . date_format(date_create($det->date), 'd-m-Y') . ' ' . $det->time . '</td>
</tr>';
$start++;
}
$html .= ' </tbody>
</table>';
print $html;
}
}
/**
* Cab Charge List Details - Taxi Wise
*/
public function cabChargeListTaxiWise(Request $request)
{
$this->checkLogin();
if (empty($request->input('search.value'))) {
$summary_details = DB::table('payout_summary_details as psd')
->select(
'psd.driver_id',
DB::raw('SUM(psd.charge) as charge'),
DB::raw('SUM(psd.eftpos) as eftpos'),
'p.first_name',
'p.last_name',
'ps.service_number',
'ps.certificate_number',
'f.company'
)
->join('providers as p', 'p.id', '=', 'psd.driver_id')
->join('provider_services as ps', 'p.id', '=', 'ps.provider_id')
->join('fleets as f', 'p.fleet', '=', 'f.id')
->groupBy('psd.driver_id')
->get();
} else {
$search = $request->input('search.value');
$summary_details = DB::table('payout_summary_details as psd')
->where('p.first_name', 'LIKE', "%{$search}%")
->orWhere('p.last_name', 'LIKE', "%{$search}%")
->orWhere('ps.service_number', 'LIKE', "%{$search}%")
->orWhere('ps.certificate_number', 'LIKE', "%{$search}%")
->orWhere('f.company', 'LIKE', "%{$search}%")
->select(
'psd.driver_id',
DB::raw('SUM(urp.charge) as charge'),
DB::raw('SUM(urp.eftpos) as eftpos'),
'p.first_name',
'p.last_name',
'ps.service_number',
'ps.certificate_number',
'f.company'
)
->join('providers as p', 'p.id', '=', 'psd.driver_id')
->join('provider_services as ps', 'p.id', '=', 'ps.provider_id')
->join('fleets as f', 'p.fleet', '=', 'f.id')
->groupBy('psd.driver_id')
->get();
}
$data = array();
$start = 1;
if ($summary_details->isNotEmpty()) {
foreach ($summary_details as $summary) {
$details = '<div class="cabDetails">
<span class="" data-check="' . $summary->driver_id . '">
<i class="fa fa-plus"></i>
</span>
</div>';
$nestedData['count'] = $start;
$nestedData['charge'] = '$' . number_format((float) $summary->charge, 2, '.', '');
$nestedData['eftpos'] = '$' . number_format((float) $summary->eftpos, 2, '.', '');
$nestedData['name'] = $summary->first_name . ' ' . $summary->last_name;
$nestedData['service_number'] = $summary->service_number;
$nestedData['dc'] = $summary->certificate_number;
$nestedData['company'] = $summary->company;
$nestedData['details'] = $details;
$nestedData['driver_id'] = $summary->driver_id;
$data[] = $nestedData;
$start++;
}
}
$json_data = array(
"draw" => intval($request->input('draw')),
"recordsTotal" => intval($start - 1),
"recordsFiltered" => intval($start - 1),
"data" => $data
);
print json_encode($json_data);
}
/**
* Transaction List
*/
public function transactionList(Request $request)
{
$this->checkLogin();
return view('admin.payout.transaction-list');
}
/**
* Add CSV.
*/
public function addCSV(Request $request)
{
$this->checkLogin();
//dd(session()->all());
if (Session::has('message')) {
$message = Session::get('message');
$color = Session::get('color');
Session::forget('message');
Session::forget('color');
} else {
$message = "";
$color = "";
}
return view('admin.payout.add-csv', compact('message', 'color'));
}
/**
* Upload CSV.
*/
public function uploadCSV(Request $request)
{
$this->checkLogin();
if ($request->input()) {
$file = $request->file('csv_file');
// echo 'File Name: ' . $file->getClientOriginalName();
// echo 'File Extension: ' . $file->getClientOriginalExtension();
$destinationPath = public_path('csv');
if (!file_exists($destinationPath)) {
mkdir($destinationPath, 0777, true);
}
$file_name = time() . strtolower(trim($file->getClientOriginalName()));
$file->move($destinationPath, $file_name);
$csv = public_path('csv/' . $file_name);
$condition = 'first';
$dataArr = $this->csvToArray($condition, $csv);
if ($dataArr[0][0] == 'Taxi_No') {
$condition = 'second';
$dataArr = $this->csvToArray($condition, $csv);
}
$firstArray = array();
//dd($dataArr);
$process_date = '';
$payPeriod = '';
$taxiTotal = 0;
$shiftTotal = 0;
if (!empty($dataArr)) {
//if (array_key_exists("Process Date", $dataArr[0])) {
if ($condition == 'first') {
for ($i = 0; $i < 4; $i++) {
if ($i == 0 || $i == 1 || $i == 2) {
if ($dataArr[$i][0] == 'Process Date') {
$firstArray['process_date'] = date_format(date_create(str_replace('/', '-', $dataArr[$i][2])), 'Y-m-d');
$process_date = date_format(date_create(str_replace('/', '-', $dataArr[$i][2])), 'Y-m-d');
} else if ($dataArr[$i][0] == 'Pay Period') {
$firstArray['pay_period'] = $dataArr[$i][2];
$payPeriod = $dataArr[$i][2];
} else if ($dataArr[$i][0] == 'Pay Run') {
$firstArray['pay_run'] = $dataArr[$i][2];
}
if ($dataArr[$i][4] != '' && $dataArr[$i][4] == 'Account Name') {
$firstArray['account_name'] = $dataArr[$i][6];
} else if ($dataArr[$i][4] != '' && $dataArr[$i][4] == 'Account Number ') {
$firstArray['account_no'] = $dataArr[$i][6];
}
}
if ($i == 3) {
$firstArray['payment_total'] = $dataArr[$i]['Payment Total'];
$firstArray['taxi_total'] = $dataArr[$i]['Taxi Total'];
$firstArray['shift_total'] = $dataArr[$i]['Shift Total'];
$firstArray['charge'] = $dataArr[$i]['CHARGE'];
$firstArray['eftpos'] = $dataArr[$i]['EFTPOS'];
$firstArray['i_hail'] = $dataArr[$i]['iHail'];
$firstArray['e_ticket'] = $dataArr[$i]['ETICKET'];
}
}
//DB::enableQueryLog();
$check = DB::table('payout_summary')
->select('id')
->where([
['process_date', '=', $process_date],
['pay_period', '=', $payPeriod],
])
->get();
// dd(
// DB::getQueryLog()
// );
// DB::disableQueryLog();
if ($check->isNotEmpty()) {
$message = "CSV of this date has already been uploaded !!!";
$color = "red";
} else {
$this->insertLog('payout_log', 'upload', 'csv uploaded', $file_name);
$summary_id = DB::table('payout_summary')->insertGetId($firstArray);
for ($j = 4; $j < count($dataArr); $j++) {
if ($dataArr[$j]['Tag'] == 'T') {
$taxiTotal = $dataArr[$j]['Taxi Total'];
} else if ($dataArr[$j]['Tag'] == 'S') {
$shiftTotal = $dataArr[$j]['Shift Total'];
} else if ($dataArr[$j]['Tag'] == 'D') {
$detailsArray = array();
if ($dataArr[$j]['Driver ID'] != '') {
$driverId = $dataArr[$j]['Driver ID'];
} else {
$drverId = DB::table('providers')
->select('providers.id')
->join('provider_services', 'provider_services.provider_id', '=', 'providers.id')
->where([
['provider_services.service_number', '=', $dataArr[$j]['Taxi']],
])
->get();
$driverId = $drverId[0]->id;
}
$detailsArray['ride_summary_id'] = $summary_id;
$detailsArray['tag'] = $dataArr[$j]['Tag'];
$detailsArray['taxi'] = $dataArr[$j]['Taxi'];
$detailsArray['terminal_id'] = $dataArr[$j]['Terminal ID'];
$detailsArray['driver_id'] = $driverId;
$detailsArray['reference'] = $dataArr[$j]['Reference'];
$detailsArray['date'] = date_format(date_create(str_replace('/', '-', $dataArr[$j]['Date'])), 'Y-m-d');
$detailsArray['time'] = $dataArr[$j]['Time'];
$detailsArray['description'] = $dataArr[$j]['Description'];
$detailsArray['taxi_total'] = $taxiTotal;
$detailsArray['shift_total'] = $shiftTotal;
$detailsArray['charge'] = $dataArr[$j]['CHARGE'];
$detailsArray['eftpos'] = $dataArr[$j]['EFTPOS'];
$detailsArray['i_hail'] = $dataArr[$j]['iHail'];
$detailsArray['e_ticket'] = $dataArr[$j]['ETICKET'];
DB::table('payout_summary_details')->insert($detailsArray);
}
}
$message = "CSV uploaded successfully !!!";
$color = "green";
}
} else {
$processDate = date_format(date_create(str_replace('/', '-', $dataArr[0]['Trip_Date'])), 'Y-m-d');
$check = DB::table('payout_summary')
->select('id')
->where([
['process_date', '=', $processDate],
['pay_period', '=', 'Govt'],
])
->get();
if ($check->isNotEmpty()) {
$message = "CSV of this date has already been uploaded !!!";
$color = "red";
} else {
$this->insertLog('payout_log', 'upload', 'csv uploaded', $file_name);
$paymentTotal = str_replace('$', '', $dataArr[0]['$Total']);
$firstArray['process_date'] = $processDate;
$firstArray['account_name'] = 'PUNJAB CABS';
$firstArray['pay_period'] = 'Govt';
$firstArray['account_no'] = '38814';
$firstArray['payment_total'] = $paymentTotal;
$firstArray['taxi_total'] = $paymentTotal;
$firstArray['shift_total'] = $paymentTotal;
$summary_id = DB::table('payout_summary')->insertGetId($firstArray);
for ($j = 3; $j < count($dataArr); $j++) {
$detailsArray = array();
$detailsArray['ride_summary_id'] = $summary_id;
$detailsArray['tag'] = 'D';
$detailsArray['taxi'] = $dataArr[$j]['Taxi_No'];
$driverId = DB::table('provider_services as ps')
->select('ps.provider_id')
->where('ps.service_number', '=', $dataArr[$j]['Taxi_No'])
->first();
$detailsArray['driver_id'] = $driverId->provider_id;
$detailsArray['date'] = date_format(date_create(str_replace('/', '-', $dataArr[$j]['Trip_Date'])), 'Y-m-d');
$detailsArray['time'] = date('H:i:s');
$detailsArray['description'] = $dataArr[$j]['Type'];
$detailsArray['taxi_total'] = str_replace('$', '', $dataArr[$j]['$Total']);
$detailsArray['shift_total'] = str_replace('$', '', $dataArr[$j]['$Total']);
$detailsArray['eftpos'] = str_replace('$', '', $dataArr[$j]['$Total']);
DB::table('payout_summary_details')->insert($detailsArray);
}
$message = "CSV uploaded successfully !!!";
$color = "green";
}
}
} else {
$message = "CSV is blank !!!";
$color = "red";
}
Session::put('message', $message);
Session::put('color', $color);
return redirect()->route('admin.add-csv');
}
}
/**
* Function to Parse CSV into Array
*/
public function csvToArray($type = '', $filename = '', $delimiter = ',')
{
if (!file_exists($filename) || !is_readable($filename))
return false;
$header = array();
$data = array();
if (($handle = fopen($filename, 'r')) !== false) {
$i = 1;
while (($row = fgetcsv($handle, 1000, $delimiter)) !== false) {
if ($type == 'first') {
if ($i > 3) {
if (empty($header)) {
$header = $row;
} else {
if (count($row) == 18) {
array_pop($row);
}
$data[] = array_combine($header, $row);
}
} else {
$data[] = $row;
}
} else {
if (empty($header)) {
$header = $row;
} else {
$data[] = array_combine($header, $row);
}
}
$i++;
}
fclose($handle);
}
return $data;
}
/**
* Payout Log
*/
public function payoutLog(Request $request)
{
$this->checkLogin();
return view('admin.payout.log');
}
/**
* Payout Log Details
*/
public function payoutLogDetails(Request $request)
{
$this->checkLogin();
$logs = DB::table('payout_log as pl')
->select(
'pl.type',
'pl.description',
'pl.file',
'pl.created_at',
'a.name'
)
->join('admins as a', 'a.id', '=', 'pl.uploaded_by_id')
->orderBy('pl.id', 'desc')
->get();
$data = array();
$start = 1;
if ($logs->isNotEmpty()) {
foreach ($logs as $log) {
if ($log->file != '') {
$filePath = '<a href="' . url('/') . '/public/csv/' . $log->file . '">' . $log->file . '</a>';
} else {
$filePath = '';
}
$nestedData['id'] = $start;
$nestedData['type'] = $log->type;
$nestedData['description'] = $log->description;
$nestedData['file'] = $filePath;
$nestedData['created_at'] = date_format(date_create($log->created_at), 'd-m-Y H:i:s A');
$nestedData['name'] = $log->name;
$data[] = $nestedData;
$start++;
}
}
$json_data = array(
"draw" => intval($request->input('draw')),
"recordsTotal" => intval($start - 1),
"recordsFiltered" => intval($start - 1),
"data" => $data
);
print json_encode($json_data);
}
/**
* Insert Log for Payout related things
*/
public function insertLog($dbTable = '', $type = '', $desc = '', $file = '')
{
$log = array(
"type" => $type,
"description" => $desc,
"file" => $file,
"uploaded_by_id" => Session::get('login_admin_59ba36addc2b2f9401580f014c7f58ea4e30989d'),
);
DB::table($dbTable)->insert($log);
}
}