HEX
Server: Apache/2.4.41 (Amazon) OpenSSL/1.0.2k-fips PHP/5.6.40
System: Linux ip-172-31-40-18 4.14.146-93.123.amzn1.x86_64 #1 SMP Tue Sep 24 00:45:23 UTC 2019 x86_64
User: apache (48)
PHP: 5.6.40
Disabled: NONE
Upload Files
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);
    }
}