![]() 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/ |
<?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"); } }