Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/mcoil.corals.io/app/Http/Controllers/Admin/Drivers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/mcoil.corals.io/app/Http/Controllers/Admin/Drivers/DriverController.php
<?php
 
namespace App\Http\Controllers\Admin\Drivers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Shop\Customers\Customer;
use App\Shop\Orders\Order;
use App\Shop\FillTanks\FillTank;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\URL;
use Validator;
use App\Shop\WebsiteSettings\WebsiteSetting;
 
class DriverController extends Controller {
    /**
     * Display a listing of the Customer.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request) {
    	$query = $request->get('q', '');
    	if ($query != '') {
    		$customer_list = Customer::where('is_driver', 1)->where('name', 'like', '%' . $query . '%')->paginate(10);
    	} else {
    		$customer_list = Customer::where('is_driver', 1)->paginate(10);
    	}
        return view('admin.driver.list', ['drivers' => $customer_list]);
    }

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

    /**
     * Store a newly created Driver in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request) {
        $email_check = Customer::where('email', $request->email)->first();
        if ($email_check) {
            return redirect()->route('admin.driver.create')->with('error','Email already exists.');
        }
        // Server Side Validation
    	$validation = Validator::make(
    	    array(
    	        'fname' 	=> $request->fname,
    	        'lname' 	=> $request->lname,
    	        'email' 	=> $request->email,
    	        'phone' 	=> $request->phone,
    	        'password' 	=> $request->password,
    	        'dl1' 	    => $request->dl1,
    	        'safepass' 	=> $request->safepass,
    	        'truckname' => $request->truckname,
    	        'truckreg' 	=> $request->truckreg,
    	    ),
    	    array(
    	        'fname' 	=> array('required'),
    	        'lname'		=> array('required'),
    	        'email'		=> array('required'),
    	        'phone'		=> array('required'),
    	        'password'	=> array('required'),
    	        'dl1'       => array('required'),
    	        'safepass'	=> array('required'),
    	        'truckname'	=> array('required'),
    	        'truckreg'	=> array('required'),
    	    )
    	);
    	$response = array();
    	if ($validation->fails()) {
    	    // Some data is not valid as per the defined rules
    		$error = $validation->errors()->first();
    	    if (isset($error) && !empty($error)) {
    	        $request->session()->flash('error', $error);
    	        return redirect()->back()->withInput();
    	    }
    	} else {
	        // The data is valid, go ahead and save it
	        $obj = new Customer();
	        $obj->name 	= $request->fname. ' '. $request->lname;
	        $obj->fname = $request->fname;
	        $obj->lname = $request->lname;
	        $obj->email = $request->email;
	        $obj->phone = $request->phone;
	        $obj->password = \Hash::make($request->password);
	        $obj->status = $request->status;
	        $obj->driver_license_1 = $request->dl1;
	        $obj->driver_license_2 = $request->dl2;
	        $obj->driver_license_3 = $request->dl3;
	        $obj->driver_license_4 = $request->dl4;
    	    $obj->safe_pass = $request->safepass;
    	    $obj->truck_name = $request->truckname;
    	    $obj->truck_registration = $request->truckreg;
	        $obj->is_driver = 1;
	        $obj->created_at= date("Y-m-d H:i:s");
	        if ($obj->save()) {
		        //$request->session()->flash('message', 'Driver added successfully.');
		        return redirect()->route('admin.driver.index')->with('message', 'Driver added successfully.');
	        } else {
	        	$request->session()->flash('error', 'Some error in adding driver.');
		        return redirect()->back()->withInput();
	        }
    	}
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id) {
        $setting = WebsiteSetting::first();
    	// Fetch the driver details
        $driver = Customer::where('id', $id)->where('is_driver',1)->first();
        // Fetch the todays orders
        $todaysDate = date('Y-m-d');
        $todayOrders = DB::table('orders')
            ->leftJoin('customers', 'customers.id','=','orders.customer_id')
            ->leftJoin('order_statuses', 'order_statuses.id','=','orders.order_status_id')
            ->leftJoin('order_product','order_product.order_id','=','orders.id')
            ->leftJoin('addresses','addresses.id','=','orders.delivery_address_id')
            ->leftJoin('products','products.id','=','order_product.product_id')
            ->select('orders.id', 'orders.delivery_date', 'orders.fill_the_tank_status', 'orders.total', 'order_statuses.name as order_status_name', 'order_statuses.color', 'customers.name', 'orders.transaction_status', 'customers.email', 'order_product.quantity', 'order_product.product_name', 'addresses.address_1', 'addresses.address_2', 'addresses.county', 'addresses.town', 'addresses.zip', 'addresses.phone', 'customers.business_account_name','products.cover','orders.order_status')
            ->where('orders.oil_type_order', 1)
            ->where('orders.driver_id', $id)
            ->where('orders.order_status', 0)
            ->where(function($query) use ($todaysDate){
                $query->where(function($query) use ($todaysDate){
                    $query->whereIn('order_statuses.name', ['pending', 'awaiting payment']);
                    $query->whereDate('orders.delivery_date', '<=', $todaysDate);
                });
                // $query->orWhere(function($query) use ($todaysDate){
                //     $query->whereIn('order_statuses.name', ['paid']);
                //     $query->whereDate('orders.delivery_date', '=', $todaysDate);
                // });
             })
            ->orderBy('id', 'DESC')
            ->get();
            $completedOrders = DB::table('orders')
            ->leftJoin('customers', 'customers.id','=','orders.customer_id')
            ->leftJoin('order_statuses', 'order_statuses.id','=','orders.order_status_id')
            ->leftJoin('order_product','order_product.order_id','=','orders.id')
            ->leftJoin('addresses','addresses.id','=','orders.delivery_address_id')
            ->leftJoin('products','products.id','=','order_product.product_id')
            ->select('orders.id', 'orders.delivery_date', 'orders.fill_the_tank_status', 'orders.total', 'order_statuses.name as order_status_name', 'order_statuses.color', 'customers.name', 'orders.transaction_status', 'customers.email', 'order_product.quantity', 'order_product.product_name', 'addresses.address_1', 'addresses.address_2', 'addresses.county', 'addresses.town', 'addresses.zip', 'addresses.phone', 'customers.business_account_name','products.cover','orders.order_status')
            ->where('orders.oil_type_order', 1)
            ->where('orders.driver_id', $id)
            ->where('orders.order_status', 1)
            ->whereDate('orders.completed_date', '=', $todaysDate)
            ->orderBy('id', 'DESC')
            ->get();
          
        $todayOrderIds = array();
        if ($todayOrders) {
        	$todayOrderArr = $todayOrders->toArray();
        	if (is_array($todayOrderArr) && count($todayOrderArr) > 0) {
        		$todayOrderIds = array_column($todayOrderArr, 'id');
        	}
        }
        $delieveredOrders = DB::table('orders')
            ->leftJoin('customers', 'customers.id','=','orders.customer_id')
            ->leftJoin('order_statuses', 'order_statuses.id','=','orders.order_status_id')
            ->leftJoin('order_product','order_product.order_id','=','orders.id')
            ->leftJoin('addresses','addresses.id','=','orders.delivery_address_id')
             ->leftJoin('products','products.id','=','order_product.product_id')
            ->select('orders.id', 'orders.delivery_date', 'orders.fill_the_tank_status', 'orders.total', 'order_statuses.name as order_status_name', 'order_statuses.color', 'customers.name', 'orders.transaction_status', 'customers.email', 'order_product.quantity', 'order_product.product_name', 'addresses.address_1', 'addresses.address_2', 'addresses.county', 'addresses.town', 'addresses.zip', 'addresses.phone','products.cover')
            ->where('orders.oil_type_order', 1)
            ->where('orders.driver_id', $id)
            ->whereIn('order_statuses.name', ['paid', 'pending', 'awaiting payment'])
            ->whereNotIn('orders.id', $todayOrderIds)
            ->where(function($query) use($todaysDate){
                $query->whereDate('orders.completed_date', '!=', $todaysDate)
                ->orWhereNull('orders.completed_date');    
            })
            
            ->orderBy('id', 'DESC')
            ->get();
            
        return view('admin.driver.show', ['driver' => $driver, 'todayOrders' => $todayOrders, 'delieveredOrders' => $delieveredOrders, 'setting' => $setting,'completedOrders'=>$completedOrders]);
    }

    /**
     * Show the form for editing the specified county.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id) {
        $driver = Customer::where('id',$id)->where('is_driver',1)->first();
        return view('admin.driver.edit',['driver'=>$driver]);
    }

    /*
     * Update the specified driver in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */ 
    public function update(Request $request, int $id) {
        $obj = Customer::find($id);
        $email_check = Customer::where('email', $request->email)->whereNotIn('id', $obj)->first();
        if (!empty($email_check)) {
            return redirect()->route('admin.driver.edit', ['driver'=>$obj])->with('error','Email already exists.');
        }
        // Server Side Validation
    	$validation = Validator::make(
    	    array(
    	        'fname' 	=> $request->fname,
    	        'lname' 	=> $request->lname,
    	        'email' 	=> $request->email,
    	        'phone' 	=> $request->phone,
    	        'dl1' 	    => $request->dl1,
    	        'safepass' 	=> $request->safepass,
    	        'truckname' => $request->truckname,
    	        'truckreg' 	=> $request->truckreg,
    	    ),
    	    array(
    	        'fname' 	=> array('required'),
    	        'lname'		=> array('required'),
    	        'email'		=> array('required'),
    	        'phone'		=> array('required'),
    	        'dl1'       => array('required'),
    	        'safepass'	=> array('required'),
    	        'truckname'	=> array('required'),
    	        'truckreg'	=> array('required'),
    	    )
    	);
    	$response = array();
    	if ($validation->fails()) {
    	    // Some data is not valid as per the defined rules
    		$error = $validation->errors()->first();
    	    if (isset($error) && !empty($error)) {
    	        $request->session()->flash('error', $error);
    	        return redirect()->back()->withInput();
    	    }
    	} else {
    	    // The data is valid, go ahead and save it
	        $obj->fname = $request->fname;
	        $obj->lname = $request->lname;
	        $obj->name = $request->fname . ' ' . $request->lname;
	        $obj->email = $request->email;
	        $obj->phone = $request->phone;
	        if ($request->password != '') {
	        	$obj->password = \Hash::make($request->password);
	        }
	        $obj->status = $request->status;
	        $obj->driver_license_1 = $request->dl1;
	        $obj->driver_license_2 = $request->dl2;
	        $obj->driver_license_3 = $request->dl3;
	        $obj->driver_license_4 = $request->dl4;
    	    $obj->safe_pass = $request->safepass;
    	    $obj->truck_name = $request->truckname;
    	    $obj->truck_registration = $request->truckreg;
	        if ($obj->save())  {
	        	return redirect()->route('admin.driver.index')->with('message', 'Driver updated successfully.');
	        } else {
	        	$request->session()->flash('error', 'Some error in updating driver.');
		        return redirect()->back()->withInput();
	        }
    	}
    }

    /**
     * Remove the specified driver from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
     public function destroy(Request $request) {
        $id = $request->row_id;
        $driver = Customer::where('id', $id)->delete();
        $request->session()->flash('message','Driver deleted.');
        return redirect()->back();
    }

    /*
     * Assign a orders to a driver.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */ 
    public function assign_driver(Request $request) {
        return view('admin.driver.assign');
    }

    public function assignedOrdersServerPagination(Request $request)
    {
        $columns = array(
            0 => 'id',
            1 => 'address',
            2 => 'delivery',
            3 => 'product',
            4 => 'quantity',
            5 => 'status',
            6 => 'driver',
            7 => 'actions'
        );

        $totalData = Order::query()->whereNotNull('driver_id')->count();
        $totalFiltered = $totalData;
        $start = $request->input('start');
        $limit = $request->input('length');
        $order = $columns[$request->input('order.0.column')];
        $dir = $request->input('order.0.dir');
        $data = [];

        $list = Order::query()->leftJoin('customers', 'customers.id', '=', 'orders.customer_id')
            ->leftJoin('customers as driver', 'driver.id', '=', 'orders.driver_id')
            ->leftJoin('order_statuses', 'order_statuses.id', '=', 'orders.order_status_id')
            ->leftJoin('order_product', 'order_product.order_id', '=', 'orders.id')
            ->leftJoin('addresses', 'addresses.id', '=', 'orders.delivery_address_id')
            ->leftJoin('products', 'products.id', '=', 'order_product.product_id')
            ->select('orders.id', 'orders.delivery_date', 'orders.fill_the_tank_status', 'orders.total', 'order_statuses.name as order_status_name', 'order_statuses.color', 'customers.name', 'orders.transaction_status', 'customers.email', 'order_product.quantity', 'order_product.product_name', 'addresses.address_1', 'addresses.address_2', 'addresses.county', 'addresses.town', 'addresses.zip', 'addresses.phone', 'driver.name as driver_name', 'driver.status', 'orders.driver_id', 'products.cover')
            ->where('orders.oil_type_order', 1)
            ->whereNotNull('driver_id');

        if (!empty($request->input('search.value'))) {
            $search = $request->input('search.value');

            $list = $list->where(function ($query) use ($search) {
                $query->where('customers.name', 'LIKE', '%' . $search . '%')
                    ->orWhere('orders.id', 'LIKE', '%' . $search . '%')
                    ->orWhere('addresses.address_1', 'LIKE', '%' . $search . '%')
                    ->orWhere('addresses.address_2', 'LIKE', '%' . $search . '%')
                    ->orWhere('order_product.product_name', 'LIKE', '%' . $search . '%')
                    ->orWhere('order_statuses.name', 'LIKE', '%' . $search . '%')
                    ->orWhere('driver.name', 'LIKE', '%' . $search . '%')
                    ->orWhere(\DB::raw("(STR_TO_DATE(orders.delivery_date,'%b %d %Y %H:%i:%s'))"), "LIKE", "%{$search}%");
            });
            $totalFiltered = $list->count();
        }

        switch ($order) {
            case 'address':
                $orderBy = 'addresses.address_1';
                break;
            case 'delivery':
                $orderBy = 'orders.delivery_date';
                break;
            case 'product':
                $orderBy = 'order_product.product_name';
                break;
            case 'driver':
                $orderBy = 'driver.name';
                break;
            case 'status':
                $orderBy = 'order_statuses.name';
                break;
            case 'actions':
                $orderBy = 'orders.id';
                break;
            default:
                $orderBy = $order;
        }

        $list = $list->offset($start)->limit($limit)->orderBy($orderBy, $dir)->get();
        if (count($list) > 0) {
            foreach ($list as $order) {

                if ($order->cover) {
                    $nestedData['product'] = "<img src='" . URL::asset('/public/storage/' . $order->cover) . "' alt=''  style='height: 15px;width: 15px; margin-right:5px' />" . $order->product_name;
                } else {
                    $nestedData['product'] = "<img src='" . url('/images/default.jpg') . "' style='height: 15px;width: 15px; margin-right:5px' alt=''/>" . $order->product_name;
                }

                switch ($order->order_status_name) {
                    case 'paid':
                        $className = 'badge-success';
                        break;
                    case 'pending':
                        $className = 'badge-warning';
                        break;
                    case 'awaiting payment':
                        $className = 'badge-awaiting';
                        break;
                    case 'error':
                        $className = 'badge-danger';
                        break;
                }
                $nestedData['status'] = "<span class='badge font-badge " . $className . "'>" . $order->order_status_name . "</span>";;

                if ($order->status == '1') {
                    $nestedData['driver'] = "<span>" . $order->driver_name . "</span>";
                } else {
                    $nestedData['driver'] = "<span class='redbg'>" . $order->driver_name . "</span>";
                }

                $actions = "<div class='btn-group'>
	    		                            <a href='" . route('admin.orders.show', $order->id) . "' class='btn btn-default'><i class='fa fa-eye'></i> View</a>
	    		                            <a href='javascript:;' class='btn btn-dark unassign-driver' data-id='" . $order->id . "'><i class='fa fa-user'></i> Unassign</a>
                                           </div>";

                $nestedData['id'] = $order->id;
                $nestedData['address'] = $order->address_1 . ($order->address_2 ? ', ' . $order->address_2 : '') . ($order->town ? ', ' . $order->town : '') . ($order->county ? ', ' . $order->county : '');
                $nestedData['delivery'] = date('d/m/Y', strtotime($order->delivery_date));
                $nestedData['total'] = $totalData;
                $nestedData['quantity'] = $order->quantity ?? ('Fill the Tank');
                $nestedData['actions'] = $actions;

                $data[] = $nestedData;
            }
        }

        $json_data = array(
            "draw" => intval($request->input('draw')),
            "recordsTotal" => intval($totalData),
            "recordsFiltered" => intval($totalFiltered),
            "data" => $data
        );

        echo json_encode($json_data);
    }

    public function unassignedOrdersServerPagination(Request $request)
    {
        $columns = array(
            0 => 'id',
            1 => 'address',
            2 => 'delivery',
            3 => 'product',
            4 => 'quantity',
            5 => 'status',
            6 => 'driver',
            7 => 'actions'
        );

        $totalData = Order::query()->whereNull('driver_id')->count();
        $totalFiltered = $totalData;
        $start = $request->input('start');
        $limit = $request->input('length');
        $order = $columns[$request->input('order.0.column')];
        $dir = $request->input('order.0.dir');
        $data = [];

        $list = Order::query()->leftJoin('customers', 'customers.id', '=', 'orders.customer_id')
            ->leftJoin('customers as driver', 'driver.id', '=', 'orders.driver_id')
            ->leftJoin('order_statuses', 'order_statuses.id', '=', 'orders.order_status_id')
            ->leftJoin('order_product', 'order_product.order_id', '=', 'orders.id')
            ->leftJoin('addresses', 'addresses.id', '=', 'orders.delivery_address_id')
            ->leftJoin('products', 'products.id', '=', 'order_product.product_id')
            ->select('orders.id', 'orders.delivery_date', 'orders.fill_the_tank_status', 'orders.total', 'order_statuses.name as order_status_name', 'order_statuses.color', 'customers.name', 'orders.transaction_status', 'customers.email', 'order_product.quantity', 'order_product.product_name', 'addresses.address_1', 'addresses.address_2', 'addresses.county', 'addresses.town', 'addresses.zip', 'addresses.phone', 'driver.name as driver_name', 'driver.status', 'orders.driver_id', 'products.cover')
            ->where('orders.oil_type_order', 1)
            ->whereNull('driver_id');

        if (!empty($request->input('search.value'))) {
            $search = $request->input('search.value');

            $list = $list->where(function ($query) use ($search) {
                $query->Where('orders.id', 'LIKE', '%' . $search . '%')
                    ->orWhere('addresses.address_1', 'LIKE', '%' . $search . '%')
                    ->orWhere('addresses.address_2', 'LIKE', '%' . $search . '%')
                    ->orWhere('order_product.product_name', 'LIKE', '%' . $search . '%')
                    ->orWhere('order_statuses.name', 'LIKE', '%' . $search . '%')
                    ->orWhere(\DB::raw("(STR_TO_DATE(orders.delivery_date,'%b %d %Y %H:%i:%s'))"), "LIKE", "%{$search}%");
            });
            $totalFiltered = $list->count();
        }

        switch ($order) {
            case 'address':
                $orderBy = 'addresses.address_1';
                break;
            case 'delivery':
                $orderBy = 'orders.delivery_date';
                break;
            case 'product':
                $orderBy = 'order_product.product_name';
                break;
            case 'driver':
                $orderBy = 'driver.name';
                break;
            case 'status':
                $orderBy = 'order_statuses.name';
                break;
            case 'actions':
                $orderBy = 'orders.id';
                break;
            default:
                $orderBy = $order;
        }

        $list = $list->offset($start)->limit($limit)->orderBy($orderBy, $dir)->get();

        if (count($list) > 0) {
            foreach ($list as $order) {

                if ($order->cover) {
                    $nestedData['product'] = "<img src='" . URL::asset('/public/storage/' . $order->cover) . "' alt=''  style='height: 15px;width: 15px; margin-right:5px' />" . $order->product_name;
                } else {
                    $nestedData['product'] = "<img src='" . url('/images/default.jpg') . "' style='height: 15px;width: 15px; margin-right:5px' alt=''/>" . $order->product_name;
                }

                switch ($order->order_status_name) {
                    case 'paid':
                        $className = 'badge-success';
                        break;
                    case 'pending':
                        $className = 'badge-warning';
                        break;
                    case 'awaiting payment':
                        $className = 'badge-awaiting';
                        break;
                    case 'error':
                        $className = 'badge-danger';
                        break;
                }
                $nestedData['status'] = "<span class='badge font-badge " . $className . "'>" . $order->order_status_name . "</span>";;

                if ($order->status == '1') {
                    $nestedData['driver'] = "<span>" . $order->driver_name . "</span>";
                } else {
                    $nestedData['driver'] = "<span class='redbg'>" . $order->driver_name . "</span>";
                }

                $actions = "<div class='btn-group'>
	    		                            <a href='" . route('admin.orders.show', $order->id) . "' class='btn btn-default'><i class='fa fa-eye'></i> View</a>
	    		                            <a href='#' class='btn btn-dark assign_order' data-id='" . $order->id . "'><i class='fa fa-user'></i> Assign</a>
                                           </div>";

                $nestedData['id'] = $order->id;
                $nestedData['address'] = $order->address_1 . ($order->address_2 ? ', ' . $order->address_2 : '') . ($order->town ? ', ' . $order->town : '') . ($order->county ? ', ' . $order->county : '');
                $nestedData['delivery'] = date('d/m/Y', strtotime($order->delivery_date));
                $nestedData['total'] = $totalData;
                $nestedData['quantity'] = $order->quantity ?? ('Fill the Tank');
                $nestedData['actions'] = $actions;

                $data[] = $nestedData;
            }
        }

        $json_data = array(
            "draw" => intval($request->input('draw')),
            "recordsTotal" => intval($totalData),
            "recordsFiltered" => intval($totalFiltered),
            "data" => $data
        );

        echo json_encode($json_data);
    }

    public function alldriver(Request $request) {
        $customer_list = Customer::where('is_driver', 1)->where('status',1)->orderBy('name', 'asc')->get();
        $output="<option value=''>Select Driver</option>";
        foreach($customer_list as $driver){
            $output .="<option value='".$driver->id."'>".$driver->name."</option>";
        }
        echo json_encode($output);
    }

    public function assign_order(Request $request) {
        $order_id = $request->popup_order_id;
        $driver_id = $request->popup_driver_id;
        $order_data = Order::find($order_id);
        $order_data->driver_id = $driver_id;
        $order_data->save();
        echo json_encode("saved");
    }
    
    public function filltank_price() {
        $fill_tank_data = FillTank::find(1);
        return view('admin.filltank.price',['fill_tank_data'=>$fill_tank_data]);
    }

    public function filltank_price_update(Request $request) {
        $fill_tank_data        = FillTank::find(1);
        $fill_tank_data->price = $request->price;
        $fill_tank_data->quantity = $request->quantity;
        $fill_tank_data->save();
        return redirect()->route('admin.filltank.price')->with('message',"Price updated.");
    }

    public function unassignDriver(Request $request) {
        $order_id = $request->id;
        $order_data = Order::find($order_id);
        $order_data->driver_id = null;
        $order_data->save();
        echo json_encode("saved");
    }
}

Spamworldpro Mini