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/PayoutController___17022020.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use DB;
use Session;
use Mail;
use PDF;

class PayoutController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('admin');
    }
    /**
     * Dashboard.
     *
     * @param  \App\Provider  $provider
     * @return \Illuminate\Http\Response
     */
    /**
     * Check Login.
     */
    public function checkLogin()
    {
        if (!Session::get('login_admin_59ba36addc2b2f9401580f014c7f58ea4e30989d')) {
            return view('admin.login');
        }
    }
    /**
     * 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')
                )
                ->join('providers as p', 'f.id', '=', 'p.fleet')
                ->join('user_requests as ur', function ($join) {
                    $join->on('p.id', '=', 'ur.provider_id')
                        ->where([
                            ['ur.payOutStatus', '=', 'pending'],
                            ['ur.paid', '=', 1],
                        ]);
                })
                ->join('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')
                )
                ->join('providers as p', 'f.id', '=', 'p.fleet')
                ->join('user_requests as ur', function ($join) {
                    $join->on('p.id', '=', 'ur.provider_id')
                        ->where([
                            ['ur.payOutStatus', '=', 'pending'],
                            ['ur.paid', '=', 1],
                        ]);
                })
                ->join('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 (!empty($details)) {
            foreach ($details as $summary) {
                $details = '<div class="companyDetails">
                                    <span class="" data-check="' . $summary->fleetId . '">
                                        <i class="fa fa-plus"></i>
                                    </span>
                                </div>';
                $total = 0;
                $payOut = 0;
                $percentage = 0;
                if ($summary->total != '' || $summary->total != 0) {
                    $total = $summary->total;
                    $payOut = $summary->total;
                }
                if ($total != 0 && ($summary->fleet_percentage != '' || $summary->fleet_percentage != 0)) {
                    $percentage = (($summary->total * $summary->fleet_percentage) / 100);
                    $payOut = $summary->total - $percentage;
                }
                $nestedData['id'] = $start;
                $nestedData['company'] = $summary->company;
                $nestedData['fleetName'] = $summary->fleetName;
                $nestedData['total'] = $total;
                $nestedData['fleetPercentage'] = $percentage;
                $nestedData['payout'] = $payOut;
                $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
    */
    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')
            )
            ->join('provider_services as ps', 'p.id', '=', 'ps.provider_id')
            ->join('fleets as f', 'f.id', '=', 'p.fleet')
            ->join('user_requests as ur', 'ur.provider_id', '=', 'p.id')
            ->join('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();
        $data = array();
        $html = '<form class="form-horizontal" enctype="multipart/form-data" role="form" id="driverPayOutForm">
                    <table class="table table-striped table-bordered no-footer dtr-inline">
                        <thead>
                            <tr>
                                <th></th>
                                <th>Driver Name</th>
                                <th>Certificate No</th>
                                <th>Taxi No.</th>
                                <th>Total</th>
                                <th>Commission</th>
                                <th>Payout</th>
                            </tr>
                        </thead>
                        <tbody>';
        if (!empty($details)) {
            $fleetId = '';
            $fleetName = '';
            foreach ($details as $det) {
                $fleetId = $det->fleetId;
                $fleetName = $det->fleetName;
                $total = 0;
                $payOut = 0;
                $percentage = 0;
                if ($det->total != '' || $det->total != 0) {
                    $total = $det->total;
                    $payOut = $det->total;
                }
                if ($total != 0 && ($det->fleet_percentage != '' || $det->fleet_percentage != 0)) {
                    $percentage = (($det->total * $det->fleet_percentage) / 100);
                    $payOut = $det->total - $percentage;
                }
                $checkBox = '<input class="form-control appTripPayOutCheckBox" type="checkbox" data-provider="' . $det->providerId . '" data-taxi="' . $det->service_number . '" data-total="' . $det->total . '" data-percent="' . $percentage . '" data-payout="' . $payOut . '" value="" name="idProvider[]">
                            <input type="hidden" name="providerTotal[' . $det->providerId . ']" value="' . $total . '">
                            <input type="hidden" name="providerPercent[' . $det->providerId . ']" value="' . $percentage . '">
                            <input type="hidden" name="providerPayout[' . $det->providerId . ']" value="' . $payOut . '">
                            <input type="hidden" name="providerName[' . $det->providerId . ']" value="' . $det->first_name . ' ' . $det->last_name . '">';
                $html .= '  <tr>
                                <td>' . $checkBox . '</td>
                                <td>' . $det->first_name . ' ' . $det->last_name . '</td>
                                <td>' . $det->certificate_number . '</td>
                                <td>' . $det->service_number . '</td>
                                <td>' . $total . '</td>
                                <td>' . $percentage . '</td>
                                <td>' . $payOut . '</td>
                            </tr>';
            }
            $html .=    '</tbody>
                    </table>
                    <div style="text-align: center;">
                        <div class="col-xs-2">
                            <b>Total : </b>
                        </div>
                        <div class="col-xs-2 totalDiv">0</div>
                        <div class="col-xs-2">
                            <b>Percentage : </b>
                        </div>
                        <div class="col-xs-2 totalPercent">0</div>
                        <div class="col-xs-2">
                            <b>Payout Total : </b>
                        </div>
                        <div class="col-xs-2 totalPayout">0</div>
                        <input type="hidden" id="totalPayment" name="totalPayment" value="0">
                        <input type="hidden" id="totalPercent" name="totalPercent" value="0">
                        <input type="hidden" id="totalPayout" name="totalPayout" 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>';
        } else {
            $html .= '<tr><td colspan="6" style="text-align: center;">No Details Found</td></tr>
            </tbody>
            </table>
            </form>
            ';
        }
        print $html;
    }
    /*
    * App Trip Company Cab Payout
    */
    public function tripCabPayout(Request $request)
    {
        $providerTotal      = $request->input('providerTotal');
        $providerPercent    = $request->input('providerPercent');
        $providerPayout     = $request->input('providerPayout');
        $providerName       = $request->input('providerName');
        $fleetName          = $request->input('fleetName');
        $fleetId            = $request->input('fleetId');
        $payoutAppTrip      = array(
            "fleet_id"          => $fleetId,
            "total_amount"      => $request->input('totalPayment'),
            "total_commission"  => $request->input('totalPercent'),
            "total_payout"      => $request->input('totalPayout')
        );
        $payoutAppTripId = DB::table('payout_app_trip')->insertGetId($payoutAppTrip);
        $transactionId = $this->getTransactionId($payoutAppTripId);
        DB::table('payout_app_trip')
            ->where([
                ['id', '=', $payoutAppTripId],
            ])
            ->update(array('transaction_id' => $transactionId));
        $this->insertLog('payout_log', 'App Trip Payout', 'App Trip Payout Done for ' . $fleetName . '. Transaction id ' . $transactionId);
        $idProvider = $request->input('idProvider');
        if (!empty($idProvider)) {
            foreach ($idProvider as $providerId) {
                $payoutAppTripDetails = array();
                $payoutAppTripDetails = array(
                    "payout_app_trip_id"    => $payoutAppTripId,
                    "provider_id"           => $providerId,
                    "transaction_id"        => $transactionId,
                    "total_amount"          => $providerTotal[$providerId],
                    "percent_amount"        => $providerPercent[$providerId],
                    "payout_amount"         => $providerPayout[$providerId],
                );
                DB::table('payout_app_trip_details')->insert($payoutAppTripDetails);
                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);
            }
        }
    }
    /*
    * App Trip Payout Report
    */
    public function appTripPayoutReport(Request $request)
    {
        $this->checkLogin();
        return view('admin.payout.app-trip-report');
    }
    /*
    * App Trip Payout Report List
    */
    public function appTripPayoutReportList(Request $request)
    {
        $this->checkLogin();
        if (empty($request->input('search.value'))) {
            $details = DB::table('payout_app_trip as pat')
                ->select(
                    'pat.id as payoutId',
                    'pat.fleet_id as fleetId',
                    'pat.transaction_id',
                    'pat.total_amount',
                    'pat.total_commission',
                    'pat.total_payout',
                    'pat.created_at',
                    'f.name as fleetName',
                    'f.company as fleetCompany'
                )
                ->join('fleets as f', 'f.id', '=', 'pat.fleet_id')
                ->orderBy('pat.id', 'desc')
                ->get();
        } else {
            $search = $request->input('search.value');
            $details = DB::table('payout_app_trip as pat')
                ->select(
                    'pat.id as payoutId',
                    'pat.fleet_id as fleetId',
                    'pat.transaction_id',
                    'pat.total_amount',
                    'pat.total_commission',
                    'pat.total_payout',
                    'pat.created_at',
                    'f.name as fleetName',
                    'f.company as fleetCompany'
                )
                ->join('fleets as f', 'f.id', '=', 'pat.fleet_id')
                ->orderBy('pat.id', 'desc')
                ->where('f.name', 'LIKE', "%{$search}%")
                ->orWhere('pat.transaction_id', 'LIKE', "%{$search}%")
                ->orWhere('pat.total_amount', 'LIKE', "%{$search}%")
                ->orWhere('pat.total_commission', 'LIKE', "%{$search}%")
                ->orWhere('pat.total_payout', 'LIKE', "%{$search}%")
                ->orWhere('f.company', 'LIKE', "%{$search}%")
                ->get();
        }
        $data = array();
        $start = 1;
        if (!empty($details)) {
            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" 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['total'] = '$' . $summary->total_amount;
                $nestedData['commission'] = '$' . $summary->total_commission;
                $nestedData['payout'] = '$' . $summary->total_payout;
                $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);
    }
    /*
    * App Trip Payout Report List Details
    */
    public function appTripPayoutDetails(Request $request)
    {
        $this->checkLogin();
        $details = DB::table('payout_app_trip_details as patd')
            ->select(
                'patd.total_amount as totalAmount',
                'patd.percent_amount as percentAmount',
                'patd.payout_amount as payoutAmount',
                'patd.created_at as createdAt',
                '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', '=', 'patd.provider_id')
            ->join('provider_services as ps', 'p.id', '=', 'ps.provider_id')
            ->where('patd.payout_app_trip_id', '=', $request->input('payOutId'))
            ->orderBy('patd.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>Certificate</th>
                            <th>Total</th>
                            <th>Commission</th>
                            <th>Payout</th>
                        </tr>
                    </thead>
                    <tbody>';
        if (!empty($details)) {
            foreach ($details as $det) {
                $html .= '  <tr>
                                <td>' . $det->firstName . ' ' . $det->lastName . '</td>
                                <td>' . $det->serviceNumber . '</td>
                                <td>' . $det->certificateNumber . '</td>
                                <td>$' . $det->totalAmount . '</td>
                                <td>$' . $det->percentAmount . '</td>
                                <td>$' . $det->payoutAmount . '</td>
                            </tr>';
            }
            $html .=    '</tbody>
                    </table>';
        } else {
            $html .= '<tr><td colspan="6" style="text-align: center;">No Details Found !!!</td></tr>
            </tbody>
            </table>';
        }
        print $html;
    }
    /*
    * Genarate App Trip Payout Receipt
    */
    public function generateReceipt(Request $request)
    {
        $transId = Session::get('transId');
        Session::forget('transId');
        $payOut = DB::table('payout_app_trip as pat')
            ->select(
                'pat.total_amount',
                'pat.total_commission',
                'pat.total_payout',
                'pat.created_at',
                'f.name as fleetName',
                'f.company as fleetCompany',
                'f.email as fleetEmail'
            )
            ->join('fleets as f', 'f.id', '=', 'pat.fleet_id')
            ->where('pat.transaction_id', '=', $transId)
            ->orderBy('pat.id', 'asc')
            ->first();

        $payOutDetails = DB::table('payout_app_trip_details as patd')
            ->select(
                'patd.total_amount',
                'patd.percent_amount',
                'patd.payout_amount',
                'p.first_name as providerFirstName',
                'p.last_name as providerLastName',
                'ps.service_number',
                'ps.certificate_number'
            )
            ->join('providers as p', 'p.id', '=', 'patd.provider_id')
            ->join('provider_services as ps', 'p.id', '=', 'ps.provider_id')
            ->where('patd.transaction_id', '=', $transId)
            ->orderBy('patd.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
    */
    public function saveReceiptId(Request $request)
    {
        Session::put('transId', $request->input('payOutId'));
        print url('/admin/generate-receipt');
    }
    /**
     * Cab Charge Payout List
     */
    public function GetCabChargePayout(Request $request)
    {
        $this->checkLogin();
        return view('admin.payout.cab-charge');
    }
    /**
     * Cab Charge Make Payout
     */
    public function cabChargePayout(Request $request)
    {
        $this->checkLogin();
        $postData = $request->input('idPayOut');
        if (!empty($postData)) {
            foreach ($postData as $val) {
                if ($val != '') {
                    $res = explode('~', $val);
                    $summaryId = $res[0];
                    $taxi = $res[1];
                    $updateArray = array();
                    $transId = 'PB' . time();
                    $updateArray = array(
                        'isPayOut' => 1,
                        'transactionId' => $transId,
                        'updated_at' => date('Y-m-d H:i:s')
                    );
                    $details = DB::table('payout_summary as rs')
                        ->select('rs.id', 'rs.process_date', 'rs.pay_period')
                        ->join('payout_summary_details as rsd', 'rs.id', '=', 'rsd.ride_summary_id')
                        ->where([
                            ['rsd.ride_summary_id', '=', $summaryId],
                            ['rsd.taxi', '=', $taxi],
                        ])
                        ->get();
                    DB::table('payout_summary_details')
                        ->where([
                            ['payout_summary_id', '=', $summaryId],
                            ['taxi', '=', $taxi],
                        ])
                        ->update($updateArray);
                    $this->insertLog('payout_log', 'payout', 'Full Payout Done For Taxi ' . $taxi . ' of Process Date ' . $details[0]->process_date . ' & Pay Period ' . $details[0]->pay_period . '. Transaction Id ' . $transId);
                }
            }
            $status = 'ok';
        } else {
            $status = 'notok';
        }
        print $status;
    }
    /**
     * Transaction List
     */
    public function transactionList(Request $request)
    {
        $this->checkLogin();
        return view('admin.payout.transaction-list');
    }
    /**
     * Transaction List Details
     */
    public function transactionListDetails(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', 'rs.isPayOut', 'rs.transactionId')
                ->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', 'rs.isPayOut', 'rs.transactionId')
                ->orderBy('rs.process_date', 'desc')
                ->get();
        }
        $data = array();
        $start = 1;
        if (!empty($summary_details)) {
            foreach ($summary_details as $summary) {
                $details = '<div class="payOutDetails">
                                <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'] = $summary->taxi_total;
                $nestedData['shift_total'] = $summary->shift_total;
                $nestedData['charge'] = $summary->charge;
                $nestedData['payment_total'] = $summary->payment_total;
                $nestedData['eftpos'] = $summary->eftpos;
                $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 Trasanction List Id
     */
    public function moreListDetails(Request $request)
    {
        $this->checkLogin();
        if ($request->input('cabCharge')) {
            $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('rsd.ride_summary_id', $request->input('summaryId'))
                ->groupBy('taxi')
                ->orderBy('rsd.id', 'ASC')
                ->get();
        } else {
            $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('rsd.ride_summary_id', $request->input('summaryId'))
                ->orderBy('rsd.id', 'ASC')
                ->get();
        }
        $html = '';
        if (!empty($details)) {
            $start = 1;
            $html = '<form class="form-horizontal" enctype="multipart/form-data" role="form" id="fullPayOutForm">
                    <table class="table table-striped table-bordered no-footer dtr-inline">
                        <thead>
                            <tr>';
            if ($request->input('cabCharge')) {
                $html .=            '<th></th>';
            }
            $html .=            '<th>Taxi</th>
                                <th>Driver Id</th>
                                <th>Driver Name</th>
                                <th>Taxi Total</th>
                                <th>Shift Total</th>';
            if ($request->input('cabCharge')) {
                $html .=        '<th>Status</th>
                                <th>Transaction Id</th>
                                <th>Details</th>';
            }
            $html .=            '</tr>
                        </thead>
                        <tbody>';
            foreach ($details as $det) {
                $cabCharge = '';
                $transactionId = '';
                $formDiv = '';
                if ($det->isPayOut == '0') {
                    $isPayOut = '<span style="color: red;">Pending</span>';
                    $cabCharge = '<input class="form-control payOutCheckBox" type="checkbox" data-summary="' . $det->ride_summary_id . '" data-taxi="' . $det->taxi . '" value="" name="idPayOut[]">';
                    $formDiv = '    <div style="text-align: center;">
                                        <div class="form-group row" >
                                            <div class="col-xs-6">
                                                <button type="submit" name="submit" class="btn btn-success payOutBtn" disabled="disabled"> <i class="fa fa-check"></i>Make Payout</button>
                                            </div>
                                        </div>
                                    </div>
                                </form>';
                } else {
                    $isPayOut = '<span style="color: green;">Done</span>';
                    $transactionId = $det->transactionId;
                }
                $details = '<div class="payOutDriverDetails">
                                <span class="" data-summary-id="' . $det->ride_summary_id . '" data-taxi="' . $det->taxi . '">
                                    <i class="fa fa-plus"></i>
                                </span>
                            </div>';
                $html .= '<tr class="taxiDetails' . $det->taxi . '">';
                if ($request->input('cabCharge')) {
                    $html .= '<td>' . $cabCharge . '</td>';
                }
                $html .=    '<td>' . $det->taxi . '</td>
                            <td>' . $det->driver_id . '</td>
                            <td>' . $det->first_name . ' ' . $det->last_name . '</td>
                            <td>' . $det->taxi_total . '</td>
                            <td>' . $det->shift_total . '</td>';
                if ($request->input('cabCharge')) {
                    $html .= '<td>' . $isPayOut . '</td>
                            <td>' . $transactionId . '</td>
                            <td>' . $details . '</td>';
                }
                $html .=    '</tr>';
                $start++;
            }
            $html .= '  </tbody>
                    </table>';
            if ($request->input('cabCharge')) {
                $html .= $formDiv;
            }
            print $html;
        }
    }
    /**
     * More Taxi Details For Payout
     */
    public function moreTaxiDetails(Request $request)
    {
        $this->checkLogin();
        $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();
        $html = '';
        if (!empty($details)) {
            $start = 1;
            $html = '<table class="table table-striped table-bordered no-footer dtr-inline">
                        <thead>
                            <tr>';
            $html .=            '<th>#</th>
                                <th>Taxi</th>
                                <th>Driver Id</th>
                                <th>Driver Name</th>
                                <th>Charge</th>
                                <th>Total</th>
                                <th>Date</th>
                            </tr>
                        </thead>
                        <tbody>';
            foreach ($details as $det) {
                $html .= '  <tr>
                                <td>' . $start . '</td>
                                <td>' . $det->taxi . '</td>
                                <td>' . $det->driver_id . '</td>
                                <td>' . $det->first_name . ' ' . $det->last_name . '</td>
                                <td>' . $det->charge . '</td>
                                <td>' . $det->eftpos . '</td>
                                <td>' . date_format(date_create($det->date), 'd-m-Y') . ' ' . $det->time . '</td>
                            </tr>';
                $start++;
            }
            $html .= '  </tbody>
                    </table>';
            print $html;
        }
    }
    /**
     * 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 (count($check) > 0) {
                        $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 (count($check) > 0) {
                        $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('providers')
                                ->select('providers.id')
                                ->join('provider_services', 'provider_services.provider_id', '=', 'providers.id')
                                ->where([
                                    ['provider_services.service_number', '=', $dataArr[$j]['Taxi_No']],
                                ])
                                ->get();
                            $detailsArray['driver_id'] = $driverId[0]->id;
                            $detailsArray['date'] = date_format(date_create(str_replace('/', '-', $dataArr[$j]['Trip_Date'])), 'Y-m-d');
                            $detailsArray['time'] = date('H:i:s');
                            $detailsArray['description'] = 'Eftpos';
                            $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 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')
            ->select('payout_log.type', 'payout_log.description', 'payout_log.file', 'payout_log.created_at', 'admins.name')
            ->join('admins', 'admins.id', '=', 'payout_log.uploaded_by_id')
            ->orderBy('payout_log.id', 'desc')
            ->get();
        $data = array();
        $start = 1;
        if (!empty($logs)) {
            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
     */
    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);
    }
}