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

namespace App\Http\Controllers\Resource;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\ModelNotFoundException;

use DB;
use Exception;
use Setting;
use Storage;
use Mail;
use Twilio;
use \Carbon\Carbon;
use App\Provider;
use App\UserRequestPayment;
use App\UserRequests;
use App\Helpers\Helper;
use App\ProviderDevice;
use App\ProviderService;
use App\ProviderApplication;

class ProviderResource extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        $AllProviders = Provider::with('service', 'accepted', 'cancelled')
            ->orderBy('id', 'DESC');

        if (request()->has('fleet')) {
            $providers = $AllProviders->where('fleet', $request->fleet)->get();
            $fleet = $request->fleet;
        } else {
            $providers = $AllProviders->get();
            $fleet = '';
        }

        return view('admin.providers.index', compact('providers', 'fleet'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('admin.providers.create');
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function provider_row(Request $request)
    {

        $columns = array(
            0 => 'id',
            1 => 'full_name',
            2 => 'email',
            3 => 'mobile',
            4 => 'total_requests',
            5 => 'accepted_requests',
            6 => 'cancelled_requests',
            7 => 'documents',
            8 => 'action',
        );

        $AllProviders = Provider::with('service', 'totalrequest', 'accepted', 'cancelled');

        if (request()->has('fleet')) {
            $providerslist = $AllProviders->where('fleet', $request->fleet);
        } else {
            $providerslist = $AllProviders;
        }

        $totalData = $providerslist->count();
        $totalFiltered = $totalData;

        $limit = $request->input('length');
        $start = $request->input('start');
        $order = $columns[$request->input('order.0.column')];
        $dir = $request->input('order.0.dir');

        if (empty($request->input('search.value'))) {
            $providers = $providerslist->offset($start)
                ->limit($limit)
                ->orderBy('id', 'desc')
                ->get();
        } else {
            $search = $request->input('search.value');

            $providers =  $providerslist->where('first_name', 'LIKE', "%{$search}%")
                ->orWhere('last_name', 'LIKE', "%{$search}%")
                ->orWhere('email', 'LIKE', "%{$search}%")
                ->orWhere('mobile', 'LIKE', "%{$search}%")
                ->offset($start)
                ->limit($limit)
                ->orderBy('id', 'desc')
                ->get();

            $totalFiltered = $providerslist->where('first_name', 'LIKE', "%{$search}%")
                ->orWhere('last_name', 'LIKE', "%{$search}%")
                ->orWhere('email', 'LIKE', "%{$search}%")
                ->orWhere('mobile', 'LIKE', "%{$search}%")
                ->count();
        }

        $data = array();
        if (!empty($providers)) {
            foreach ($providers as $index => $provider) {
                if ($provider->first_name != '') {
                    $first_name = $provider->first_name;
                } else {
                    $first_name = "";
                }
                if ($provider->last_name != '') {
                    $last_name = $provider->last_name;
                } else {
                    $last_name = "";
                }
                if ($provider->email != '') {
                    $email = $provider->email;
                } else {
                    $email = "";
                }
                if ($provider->mobile != '') {
                    $mobile = $provider->mobile;
                } else {
                    $mobile = "";
                }

                if ($provider->pending_documents() > 0 || $provider->service == null) {
                    $documents = '<a class="btn btn-danger btn-rounded btn-block label-right waves-effect waves-light" href="' . route('admin.provider.document.index', $provider->id) . '">' . trans("admin.member.attention") . '<span class="btn-label">' . $provider->pending_documents() . '</span></a>';
                } else {
                    $documents = '<a class="btn btn-success btn-rounded btn-block waves-effect waves-light" href="' . route('admin.provider.document.index', $provider->id) . '">' . trans("admin.member.all_set") . '</a>';
                }
                if ($provider->status == 'approved') {
                    $enable = '<a class="btn btn-danger btn-rounded btn-block waves-effect waves-light" href="' . route('admin.provider.disapprove', $provider->id) . '">' . trans("admin.member.disable") . '</a>';
                } else {
                    $enable = '<a class="btn btn-success btn-rounded btn-block waves-effect waves-light" href="' . route('admin.provider.approve', $provider->id) . '">' . trans("admin.member.enable") . '</a>';
                }
                $button = '<button type="button" 
                                    class="btn btn-info btn-rounded btn-block dropdown-toggle"
                                    data-toggle="dropdown">Action
                                    <span class="caret"></span>
                                </button>
                        <ul class="dropdown-menu">
                                    <li>
                                        <a href="' . route('admin.provider.request', $provider->id) . '" class="btn btn-default"><i class="fa fa-search"></i> ' . trans("admin.member.history") . '</a>
                                    </li>
                                    <li>
                                        <a href="' . route('admin.provider.statement', $provider->id) . '" class="btn btn-default"><i class="fa fa-account"></i> ' . trans("admin.member.statement") . '</a>
                                    </li>
                                    <li>
                                        <a href="' . route('admin.provider.edit', $provider->id) . '" class="btn btn-default"><i class="fa fa-pencil"></i> ' . trans("admin.member.edit") . '</a>
                                    </li>
                                    <li>
                                        <form action="' . route('admin.provider.logout', $provider->id) . '" method="POST">
                                            ' . csrf_field() . '
                                            <input type="hidden" name="_method" value="POST">
                                            <button class="btn btn-default look-a-log" onclick="return confirm(`Do you want to logout this provider?`)"><i class="fa fa-sign-out"></i> ' . trans("admin.member.logout") . '</button>
                                        </form>
                                    </li>
                                    <li>
                                        <form action="' . route('admin.provider.destroy', $provider->id) . '" method="POST">
                                            ' . csrf_field() . '
                                            <input type="hidden" name="_method" value="DELETE">
                                            <button class="btn btn-default look-a-like" onclick="return confirm(`Are you sure?`)"><i class="fa fa-trash"></i> ' . trans("admin.member.delete") . '</button>
                                        </form>
                                    </li>
                                </ul>';
                $action = '<div class="input-group-btn">' . $enable . $button . '</div>';

                $nestedData['id'] = $start + 1;
                $nestedData['full_name'] = $first_name . '' . $last_name;
                $nestedData['email'] =  $email;
                $nestedData['mobile'] = $mobile;
                $nestedData['total_requests'] = $provider->totalrequest->count();
                $nestedData['accepted_requests'] = $provider->accepted->count();
                $nestedData['cancelled_requests'] = $provider->cancelled->count();
                $nestedData['documents'] = $documents;
                $nestedData['action'] = $action;
                $data[] = $nestedData;
                $start++;
            }
        }
        $json_data = array(
            "draw"            => intval($request->input('draw')),
            "recordsTotal"    => intval($totalData),
            "recordsFiltered" => intval($totalFiltered),
            "data"            => $data
        );

        echo json_encode($json_data);
    }
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function track(Request $request)
    {
        $AllProviders = Provider::with('service')
            ->orderBy('id', 'DESC');

        if (request()->has('fleet')) {
            $providers = $AllProviders->where('fleet', $request->fleet)->get();
            $fleet = $request->fleet;
        } else {
            $providers = $AllProviders->get();
            $fleet = '';
        }

        return view('admin.providers.track', compact('providers', 'fleet'));
    }
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function track_row(Request $request)
    {

        $columns = array(
            0 => 'id',
            1 => 'full_name',
            2 => 'mobile',
            3 => 'last_login',
            4 => 'last_logout',
            5 => 'login_status',
        );

        $AllProviders = Provider::with('service');

        if (request()->has('fleet')) {
            $providerslist = $AllProviders->where('fleet', $request->fleet);
        } else {
            $providerslist = $AllProviders;
        }

        $totalData = $providerslist->count();
        $totalFiltered = $totalData;

        $limit = $request->input('length');
        $start = $request->input('start');
        $order = $columns[$request->input('order.0.column')];
        $dir = $request->input('order.0.dir');

        if (empty($request->input('search.value'))) {
            $providers = $providerslist->offset($start)
                ->limit($limit)
                ->orderBy('id', 'desc')
                ->get();
        } else {
            $search = $request->input('search.value');

            $providers =  $providerslist->where('first_name', 'LIKE', "%{$search}%")
                ->orWhere('last_name', 'LIKE', "%{$search}%")
                ->orWhere('mobile', 'LIKE', "%{$search}%")
                ->offset($start)
                ->limit($limit)
                ->orderBy('id', 'desc')
                ->get();

            $totalFiltered = $providerslist->where('first_name', 'LIKE', "%{$search}%")
                ->orWhere('last_name', 'LIKE', "%{$search}%")
                ->orWhere('mobile', 'LIKE', "%{$search}%")
                ->count();
        }

        $data = array();
        if (!empty($providers)) {
            foreach ($providers as $index => $provider) {
                if ($provider->first_name != '') {
                    $first_name = $provider->first_name;
                } else {
                    $first_name = "";
                }
                if ($provider->last_name != '') {
                    $last_name = $provider->last_name;
                } else {
                    $last_name = "";
                }

                if ($provider->mobile != '') {
                    $mobile = $provider->mobile;
                } else {
                    $mobile = "";
                }
                if ($provider->login_at != '') {
                    $login_at = $provider->login_at;
                } else {
                    $login_at = "";
                }
                if ($provider->logout_at != '') {
                    $logout_at = $provider->logout_at;
                } else {
                    $logout_at = "";
                }
                if ($provider->service) {
                    if ($provider->login_status == 1) {
                        $login_status = '<label class="btn btn-sm btn-rounded  btn-primary waves-effect waves-light">' . trans("admin.member.yes") . '</label>';
                    } else {
                        $login_status = '<label class="btn btn-rounded btn-sm btn-warning waves-effect waves-light">' . trans("admin.member.no") . '</label>';
                    }
                } else {
                    $login_status = '<label class="btn btn-rounded btn-sm btn-warning waves-effect waves-light">' . trans("admin.member.no") . '</label>';
                }

                $nestedData['id'] = $start + 1;
                $nestedData['full_name'] = $first_name . '' . $last_name;
                $nestedData['mobile'] = $mobile;
                $nestedData['last_login'] = $login_at;
                $nestedData['last_logout'] = $logout_at;
                $nestedData['login_status'] = $login_status;
                $data[] = $nestedData;
                $start++;
            }
        }
        $json_data = array(
            "draw"            => intval($request->input('draw')),
            "recordsTotal"    => intval($totalData),
            "recordsFiltered" => intval($totalFiltered),
            "data"            => $data
        );

        echo json_encode($json_data);
    }
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {

        $this->validate($request, [
            'first_name' => 'required|max:255',
            'last_name' => 'required|max:255',
            'email' => 'required|unique:providers,email|email|max:255',
            'mobile' => 'digits_between:6,13',
            'avatar' => 'mimes:jpeg,jpg,bmp,png|max:5242880',
            'password' => 'required|min:6|confirmed',
        ]);

        try {

            $provider = $request->all();

            $provider['password'] = bcrypt($request->password);
            $provider['mobile'] = Setting::get('country_code', '+91') . $request->mobile;
            if ($request->hasFile('avatar')) {
                $provider['avatar'] = $request->avatar->store('provider/profile');
            }

            $provider = Provider::create($provider);

            return back()->with('flash_success', 'Provider Details Saved Successfully');
        } catch (Exception $e) {
            return back()->with('flash_error', 'Provider Not Found');
        }
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Provider  $provider
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        try {
            $provider = Provider::findOrFail($id);
            return view('admin.providers.provider-details', compact('provider'));
        } catch (ModelNotFoundException $e) {
            return $e;
        }
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Provider  $provider
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        try {
            $provider = Provider::findOrFail($id);
            $fleets = DB::table('fleets as f')
                ->select(
                    'f.id as fleetId',
                    'f.name as fleetName',
                    'f.company'
                )
                ->orderBy('f.id')
                ->get();
            return view('admin.providers.edit', compact('provider', 'fleets'));
        } catch (ModelNotFoundException $e) {
            return $e;
        }
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Provider  $provider
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $this->validate($request, [
            'first_name' => 'required|max:255',
            'last_name' => 'required|max:255',
            'mobile' => 'digits_between:6,13',
            'avatar' => 'mimes:jpeg,jpg,bmp,png|max:5242880',
            'fleet_id' => 'required',
        ]);
        try {
            $provider = Provider::findOrFail($id);
            if ($request->hasFile('avatar')) {
                if ($provider->avatar) {
                    Storage::delete($provider->avatar);
                }
                $provider->avatar = $request->avatar->store('provider/profile');
            }
            $provider->first_name = $request->first_name;
            $provider->last_name = $request->last_name;
            $provider->printer_no = $request->printer_no;
            $provider->fleet = $request->fleet_id;
            $provider->mobile = Setting::get('country_code', '+91') . $request->mobile;
            $provider->save();

            return redirect()->route('admin.provider.index')->with('flash_success', 'Provider Updated Successfully');
        } catch (ModelNotFoundException $e) {
            return back()->with('flash_error', 'Provider Not Found');
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Provider  $provider
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {

        try {
            Provider::find($id)->delete();
            return back()->with('message', 'Provider deleted successfully');
        } catch (Exception $e) {
            return back()->with('flash_error', 'Provider Not Found');
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Provider  $provider
     * @return \Illuminate\Http\Response
     */
    public function approve($id)
    {
        try {
            $Provider = Provider::findOrFail($id);
            if ($Provider->service) {

                if ($Provider->service->license_status == 2) {
                    return redirect()->route('admin.provider.document.index', $id)->with('flash_error', "Driver License certificate Expired");
                }
                if ($Provider->service->insurance_status == 2) {
                    return redirect()->route('admin.provider.document.index', $id)->with('flash_error', "Driver Insurance certificate Expired");
                }

                $Provider->update(['status' => 'approved']);

                //sms and email----------------
                $user = Provider::with('service')->findOrFail($id);
                if (Setting::get('mail_enable', 0) == 1) {
                    Mail::send('emails.driver-approved', ['user' => $user], function ($message) use ($user) {
                        $message->to($user->email, $user->first_name)->subject(config('app.name') . ' Request Approval');
                    });
                }
                if (Setting::get('sms_enable', 0) == 1) {
                    $mobile = $user->mobile;
                    $message = 'You have become the authorised driver of ' . config('app.name') . ' Name:' . $user->first_name . ' ' . $user->first_name . ', Phone:' . $user->mobile . ', Service Number:' . $user->service->service_number . ', Service Model:' . $user->service->service_model . '. Regards ' . config('app.name');
                    try {
                        Twilio::message($mobile, $message);
                    } catch (\Services_Twilio_RestException $e) {
                        //return $e->getMessage();  
                    }
                }
                //---------------------

                return back()->with('flash_success', "Provider Approved");
            } else {
                return redirect()->route('admin.provider.document.index', $id)->with('flash_error', "Provider has not been assigned a service type!");
            }
        } catch (ModelNotFoundException $e) {
            return back()->with('flash_error', "Something went wrong! Please try again later.");
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Provider  $provider
     * @return \Illuminate\Http\Response
     */
    public function disapprove($id)
    {

        Provider::where('id', $id)->update(['status' => 'banned']);
        return back()->with('flash_success', "Provider Disapproved");
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Provider  $provider
     * @return \Illuminate\Http\Response
     */
    public function request($id)
    {

        try {
            $requests = UserRequests::where('user_requests.provider_id', $id)
                ->RequestHistory()
                ->get();
            $user_id = '';
            $provider_id = $id;
            return view('admin.request.index', compact('requests', 'user_id', 'provider_id'));
        } catch (Exception $e) {
            return back()->with('flash_error', 'Something Went Wrong!');
        }
    }

    /**
     * account statements.
     *
     * @param  \App\Provider  $provider
     * @return \Illuminate\Http\Response
     */
    public function statement($id)
    {

        try {

            $Provider = Provider::find($id);
            $providerid = $id;
            $Joined = $Provider->created_at ? '- Joined ' . $Provider->created_at->diffForHumans() : '';
            $page = $Provider->first_name . "'s Overall Statement " . $Joined;
            return view('admin.providers.provider-content', compact('page', 'providerid'));
        } catch (Exception $e) {
            return back()->with('flash_error', 'Something Went Wrong!');
        }
    }
    /**
     * provider base statements rows.
     *
     * @param  \App\Provider  $provider
     * @return \Illuminate\Http\Response
     */
    public function provider_content(Request $request)
    {
        $columns = array(
            0 => 'id',
            1 => 'booking_id',
            2 => 's_address',
            3 => 'd_address',
            4 => 'detail',
            5 => 'created_at',
            6 => 'status',
            7 => 'payment_mode',
            8 => 'total',
            9 => 'commission',
            10 => 'earned',
        );
        $fromdate = '';
        $todate = Carbon::now();
        $payment_type = '';
        $tripstatus = '';
        $id = $request->providerid;

        if ($request->fromdate != '') {
            $fromdate = Helper::date_formatter($request->fromdate);
        }
        if ($request->todate != '') {
            $todate = Helper::date_formatter($request->todate);
        }
        if ($request->has('payment')) {
            $payment_type = $request->payment;
        }
        if ($request->has('tripstatus')) {
            $tripstatus = $request->tripstatus;
        }
        $main_detail = UserRequests::with('payment')
            ->where('provider_id', $id)
            ->where('created_at', '>=', $fromdate)
            ->where('created_at', '<', $todate)
            ->where('status', 'LIKE', '%' . $tripstatus . '%')
            ->where('payment_mode', 'LIKE', '%' . $payment_type . '%');

        $cancel_rides = UserRequests::where('status', 'CANCELLED')
            ->where('provider_id', $id)
            ->where('created_at', '>=', $fromdate)
            ->where('created_at', '<', $todate)
            ->where('status', 'LIKE', '%' . $tripstatus . '%')
            ->where('payment_mode', 'LIKE', '%' . $payment_type . '%');

        $revenue = UserRequestPayment::whereHas('request', function ($query) use ($id) {
            $query->where('provider_id', $id);
        })->select(\DB::raw(
            'SUM(total) as overall, SUM(commision) as commission'
        ))->where('created_at', '>=', $fromdate)
            ->where('created_at', '<', $todate)->get();

        $total_cancel = $cancel_rides->count();
        $total_revenue = currency($revenue[0]->overall);
        $total_commission = currency($revenue[0]->commission);
        $totalData = $main_detail->count();
        $totalFiltered = $totalData;

        $limit = $request->input('length');
        $start = $request->input('start');
        $order = $columns[$request->input('order.0.column')];
        $dir = $request->input('order.0.dir');

        if (empty($request->input('search.value'))) {
            $rides = $main_detail
                ->offset($start)
                ->limit($limit)
                ->orderBy('id', 'desc')
                ->get();
        } else {
            $search = $request->input('search.value');

            $rides =  $main_detail
                ->where('booking_id', 'LIKE', "%{$search}%")
                ->orWhere('s_address', 'LIKE', "%{$search}%")
                ->orWhere('d_address', 'LIKE', "%{$search}%")
                ->orWhere('created_at', 'LIKE', "%{$search}%")
                ->offset($start)
                ->limit($limit)
                ->orderBy('id', 'desc')
                ->get();

            $totalFiltered = $main_detail
                ->where('booking_id', 'LIKE', "%{$search}%")
                ->orWhere('s_address', 'LIKE', "%{$search}%")
                ->orWhere('d_address', 'LIKE', "%{$search}%")
                ->orWhere('created_at', 'LIKE', "%{$search}%")
                ->count();
        }

        $data = array();
        if (!empty($rides)) {
            foreach ($rides as $index => $ride) {
                $view =  route('admin.requests.show', $ride->id);
                if ($ride->s_address != '') {
                    $s_address = $ride->s_address;
                } else {
                    $s_address = "Not Provided";
                }
                if ($ride->d_address != '') {
                    $d_address = $ride->d_address;
                } else {
                    $d_address = "Not Provided";
                }
                if ($ride->status != 'CANCELLED') {
                    $detail = '<a class="text-primary" href="' . $view . '"><div class="label label-table label-info">' . trans("admin.member.view") . '</div></a>';
                } else {
                    $detail = '<span>' . trans("admin.member.no_details_found") . '</span>';
                }
                if ($ride->status == "COMPLETED") {
                    $status = '<span class="label label-table label-success">' . $ride->status . '</span>';
                } elseif ($ride->status == "CANCELLED") {
                    $status = '<span class="label label-table label-danger">' . $ride->status . '</span>';
                } else {
                    $status = '<span class="label label-table label-primary">' . $ride->status . '</span>';
                }

                $nestedData['id'] = $start + 1;
                $nestedData['booking_id'] = $ride->booking_id;
                $nestedData['s_address'] =  $s_address;
                $nestedData['d_address'] =  $d_address;
                $nestedData['detail'] = $detail;
                $nestedData['created_at'] = date('d M Y', strtotime($ride->created_at));
                $nestedData['status'] = $status;
                $nestedData['payment_mode'] = $ride->payment_mode;
                $nestedData['total'] = currency($ride->payment['total']);
                $nestedData['commission'] = currency($ride->payment['commision']);
                $nestedData['earned'] = currency($ride->payment['total'] - $ride->payment['commision']);
                $data[] = $nestedData;
                $start++;
            }
        }
        $percentage = 0.00;
        if ($total_cancel != 0) {
            $percentage = round($total_cancel / $totalFiltered, 2);
        }
        $json_data = array(
            "draw"            => intval($request->input('draw')),
            "recordsTotal"    => intval($totalData),
            "recordsFiltered" => intval($totalFiltered),
            "data"            => $data,
            "cancel_rides"    => $total_cancel,
            "revenue"         => $total_revenue,
            "commission"      => $total_commission,
            "percentage"      => $percentage
        );

        echo json_encode($json_data);
    }
    public function Accountstatement($id)
    {

        try {

            $Provider = Provider::find($id);
            $providerid = $id;
            $Joined = $Provider->created_at ? '- Joined ' . $Provider->created_at->diffForHumans() : '';
            $page = $Provider->first_name . "'s Overall Statement " . $Joined;
            return view('account.providers.provider-content', compact('page', 'providerid'));
        } catch (Exception $e) {
            return back()->with('flash_error', 'Something Went Wrong!');
        }
    }
    /**
     * provider base statements rows.
     *
     * @param  \App\Provider  $provider
     * @return \Illuminate\Http\Response
     */
    public function account_content(Request $request)
    {
        $columns = array(
            0 => 'id',
            1 => 'booking_id',
            2 => 's_address',
            3 => 'd_address',
            4 => 'detail',
            5 => 'created_at',
            6 => 'status',
            7 => 'payment_mode',
            8 => 'total',
            9 => 'commission',
            10 => 'earned',
        );
        $fromdate = '';
        $todate = Carbon::now();
        $payment_type = '';
        $tripstatus = '';
        $id = $request->providerid;

        if ($request->fromdate != '') {
            $fromdate = Helper::date_formatter($request->fromdate);
        }
        if ($request->todate != '') {
            $todate = Helper::date_formatter($request->todate);
        }
        if ($request->has('payment')) {
            $payment_type = $request->payment;
        }
        if ($request->has('tripstatus')) {
            $tripstatus = $request->tripstatus;
        }
        $main_detail = UserRequests::with('payment')
            ->where('provider_id', $id)
            ->where('created_at', '>=', $fromdate)
            ->where('created_at', '<', $todate)
            ->where('status', 'LIKE', '%' . $tripstatus . '%')
            ->where('payment_mode', 'LIKE', '%' . $payment_type . '%');

        $cancel_rides = UserRequests::where('status', 'CANCELLED')
            ->where('provider_id', $id)
            ->where('created_at', '>=', $fromdate)
            ->where('created_at', '<', $todate)
            ->where('status', 'LIKE', '%' . $tripstatus . '%')
            ->where('payment_mode', 'LIKE', '%' . $payment_type . '%');

        $revenue = UserRequestPayment::whereHas('request', function ($query) use ($id) {
            $query->where('provider_id', $id);
        })->select(\DB::raw(
            'SUM(total) as overall, SUM(commision) as commission'
        ))->where('created_at', '>=', $fromdate)
            ->where('created_at', '<', $todate)->get();

        $total_cancel = $cancel_rides->count();
        $total_revenue = currency($revenue[0]->overall);
        $total_commission = currency($revenue[0]->commission);
        $totalData = $main_detail->count();
        $totalFiltered = $totalData;

        $limit = $request->input('length');
        $start = $request->input('start');
        $order = $columns[$request->input('order.0.column')];
        $dir = $request->input('order.0.dir');

        if (empty($request->input('search.value'))) {
            $rides = $main_detail
                ->offset($start)
                ->limit($limit)
                ->orderBy('id', 'desc')
                ->get();
        } else {
            $search = $request->input('search.value');

            $rides =  $main_detail
                ->where('booking_id', 'LIKE', "%{$search}%")
                ->orWhere('s_address', 'LIKE', "%{$search}%")
                ->orWhere('d_address', 'LIKE', "%{$search}%")
                ->orWhere('created_at', 'LIKE', "%{$search}%")
                ->offset($start)
                ->limit($limit)
                ->orderBy('id', 'desc')
                ->get();

            $totalFiltered = $main_detail
                ->where('booking_id', 'LIKE', "%{$search}%")
                ->orWhere('s_address', 'LIKE', "%{$search}%")
                ->orWhere('d_address', 'LIKE', "%{$search}%")
                ->orWhere('created_at', 'LIKE', "%{$search}%")
                ->count();
        }

        $data = array();
        if (!empty($rides)) {
            foreach ($rides as $index => $ride) {
                $view =  route('account.requests.show', $ride->id);
                if ($ride->s_address != '') {
                    $s_address = $ride->s_address;
                } else {
                    $s_address = "Not Provided";
                }
                if ($ride->d_address != '') {
                    $d_address = $ride->d_address;
                } else {
                    $d_address = "Not Provided";
                }
                if ($ride->status != 'CANCELLED') {
                    $detail = '<a class="text-primary" href="' . $view . '"><div class="label label-table label-info">' . trans("admin.member.view") . '</div></a>';
                } else {
                    $detail = '<span>' . trans("admin.member.no_details_found") . '</span>';
                }
                if ($ride->status == "COMPLETED") {
                    $status = '<span class="label label-table label-success">' . $ride->status . '</span>';
                } elseif ($ride->status == "CANCELLED") {
                    $status = '<span class="label label-table label-danger">' . $ride->status . '</span>';
                } else {
                    $status = '<span class="label label-table label-primary">' . $ride->status . '</span>';
                }

                $nestedData['id'] = $start + 1;
                $nestedData['booking_id'] = $ride->booking_id;
                $nestedData['s_address'] =  $s_address;
                $nestedData['d_address'] =  $d_address;
                $nestedData['detail'] = $detail;
                $nestedData['created_at'] = date('d-m-Y', strtotime($ride->created_at));
                $nestedData['status'] = $status;
                $nestedData['payment_mode'] = $ride->payment_mode;
                $nestedData['total'] = currency($ride->payment['total']);
                $nestedData['commission'] = currency($ride->payment['commision']);
                $nestedData['earned'] = currency($ride->payment['total'] - $ride->payment['commision']);
                $data[] = $nestedData;
                $start++;
            }
        }
        $percentage = 0.00;
        if ($total_cancel != 0) {
            $percentage = round($total_cancel / $totalFiltered, 2);
        }
        $json_data = array(
            "draw"            => intval($request->input('draw')),
            "recordsTotal"    => intval($totalData),
            "recordsFiltered" => intval($totalFiltered),
            "data"            => $data,
            "cancel_rides"    => $total_cancel,
            "revenue"         => $total_revenue,
            "commission"      => $total_commission,
            "percentage"      => $percentage
        );

        echo json_encode($json_data);
    }
    public function logout($id)
    {
        try {
            ProviderDevice::where('provider_id', $id)->update(['udid' => '', 'token' => '']);
            ProviderService::where('provider_id', $id)->update(['status' => 'offline']);
            return back()->with('flash_success', 'Provider Logged out successfully');
        } catch (Exception $e) {
            return back()->with('flash_error', 'Something Went Wrong!');
        }
    }
    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Provider  $provider
     * @return \Illuminate\Http\Response
     */
    public function application($id)
    {

        try {
            $Provider = Provider::findOrFail($id);
            $ProviderApplication = ProviderApplication::where('provider_id', $id)->first();
            return view('admin.providers.document.application', compact('Provider', 'ProviderApplication'));
        } catch (Exception $e) {
            return back()->with('flash_error', 'Something Went Wrong!');
        }
    }
}