[text] AdminController

Viewer

copydownloadembedprintName: AdminController
  1. <?php
  2.  
  3. namespace App\Http\Controllers;
  4.  
  5. use App\AcceptDelivery;
  6. use App\Addon;
  7. use App\AddonCategory;
  8. use App\DeliveryGuyDetail;
  9. use App\Helpers\TranslationHelper;
  10. use App\Http\Middleware\SCLC;
  11. use App\Http\Middleware\SCLCC;
  12. use App\Http\Middleware\SelfHelpM;
  13. use App\Item;
  14. use App\ItemCategory;
  15. use App\Order;
  16. use App\Orderstatus;
  17. use App\Page;
  18. use App\PaymentGateway;
  19. use App\PopularGeoPlace;
  20. use App\PromoSlider;
  21. use App\PushNotify;
  22. use App\Restaurant;
  23. use App\RestaurantCategory;
  24. use App\RestaurantPayout;
  25. use App\Setting;
  26. use App\Slide;
  27. use App\Sms;
  28. use App\SmsGateway;
  29. use App\StorePayoutDetail;
  30. use App\Translation;
  31. use App\User;
  32. use Artisan;
  33. use Auth;
  34. use Bavix\Wallet\Models\Transaction;
  35. use Carbon\Carbon;
  36. use DotenvEditor;
  37. use Exception;
  38. use Illuminate\Http\Request;
  39. use Illuminate\Support\Collection;
  40. use Illuminate\Support\Facades\DB;
  41. use Illuminate\Support\Facades\File;
  42. use Illuminate\Support\Facades\Gate;
  43. use Illuminate\Support\Facades\Schema;
  44. use Illuminate\Support\Str;
  45. use Image;
  46. use Ixudra\Curl\Facades\Curl;
  47. use Omnipay\Omnipay;
  48. use OneSignal;
  49. use Spatie\Permission\Models\Permission;
  50. use Spatie\Permission\Models\Role;
  51. use Spatie\Permission\PermissionRegistrar;
  52. use Yajra\DataTables\DataTables;
  53.  
  54. class AdminController extends Controller
  55. {
  56.     /**
  57.      * @return mixed
  58.      */
  59.     public function dashboard(Request $request)
  60.     {
  61.         $displayUsers = User::count();
  62.  
  63.         $displayRestaurants = Restaurant::count();
  64.  
  65.         $displaySales = Order::where('orderstatus_id', 5)->get();
  66.         $displayEarnings = $displaySales;
  67.  
  68.         $displaySales = count($displaySales);
  69.  
  70.         $total = 0;
  71.         foreach ($displayEarnings as $de) {
  72.             $total += $de->total;
  73.         }
  74.         $displayEarnings = $total;
  75.  
  76.         $orders = Order::orderBy('id', 'DESC')->with('orderstatus', 'restaurant')->take(10)->get();
  77.  
  78.         $users = User::orderBy('id', 'DESC')->with('roles')->take(9)->get();
  79.  
  80.         $todaysDate = Carbon::now()->format('Y-m-d');
  81.  
  82.         $orderStatusesName = '[';
  83.  
  84.         $orderStatuses = Orderstatus::get(['name'])
  85.             ->pluck('name')
  86.             ->toArray();
  87.         foreach ($orderStatuses as $key => $value) {
  88.             $orderStatusesName .= "'" . $value . "', ";
  89.         }
  90.         $orderStatusesName = rtrim($orderStatusesName, ' ,');
  91.         $orderStatusesName = $orderStatusesName . ']';
  92.  
  93.         $ifAnyOrders = Order::count();
  94.         if ($ifAnyOrders == 0) {
  95.             $ifAnyOrders = false;
  96.         } else {
  97.             $ifAnyOrders = true;
  98.         }
  99.  
  100.         $orderStatusOrders = Order::select('orderstatus_id', DB::raw('count(*) as total'))
  101.             ->groupBy('orderstatus_id')
  102.             ->pluck('total', 'orderstatus_id')->all();
  103.  
  104.         $orderStatusesData = '[';
  105.         foreach ($orderStatusOrders as $key => $value) {
  106.             if ($key == 1) {
  107.                 $orderStatusesData .= '{value:' . $value . ", name:'Order Placed'}, ";
  108.             }
  109.             if ($key == 2) {
  110.                 $orderStatusesData .= '{value:' . $value . ", name:'Preparing Order'}, ";
  111.             }
  112.             if ($key == 3) {
  113.                 $orderStatusesData .= '{value:' . $value . ", name:'Delivery Guy Assigned'}, ";
  114.             }
  115.             if ($key == 4) {
  116.                 $orderStatusesData .= '{value:' . $value . ", name:'Order Picked Up'}, ";
  117.             }
  118.             if ($key == 5) {
  119.                 $orderStatusesData .= '{value:' . $value . ", name:'Delivered'}, ";
  120.             }
  121.             if ($key == 6) {
  122.                 $orderStatusesData .= '{value:' . $value . ", name:'Canceled'}, ";
  123.             }
  124.             if ($key == 7) {
  125.                 $orderStatusesData .= '{value:' . $value . ", name:'Ready For Pick Up'}, ";
  126.             }
  127.             if ($key == 8) {
  128.                 $orderStatusesData .= '{value:' . $value . ", name:'Awaiting Payment'}, ";
  129.             }
  130.             if ($key == 9) {
  131.                 $orderStatusesData .= '{value:' . $value . ", name:'Payment Failed'}, ";
  132.             }
  133.         }
  134.         $orderStatusesData = rtrim($orderStatusesData, ',');
  135.         $orderStatusesData .= ']';
  136.  
  137.         return view('admin.dashboard', array(
  138.             'displayUsers' => $displayUsers,
  139.             'displayRestaurants' => $displayRestaurants,
  140.             'displaySales' => $displaySales,
  141.             'displayEarnings' => number_format((float) $displayEarnings, 2, '.', ''),
  142.             'orders' => $orders,
  143.             'users' => $users,
  144.             'todaysDate' => $todaysDate,
  145.             'orderStatusesName' => $orderStatusesName,
  146.             'orderStatusesData' => $orderStatusesData,
  147.             'ifAnyOrders' => $ifAnyOrders,
  148.         ));
  149.     }
  150.  
  151.     public function manager()
  152.     {
  153.         return view('admin.manager');
  154.     }
  155.  
  156.     public function users()
  157.     {
  158.         $roles = Role::all()->except(1);
  159.         return view('admin.users', array(
  160.             'roles' => $roles,
  161.         ));
  162.     }
  163.  
  164.     /**
  165.      * @param Request $request
  166.      */
  167.     public function saveNewUser(Request $request)
  168.     {
  169.         try {
  170.             $user = User::create([
  171.                 'name' => $request->name,
  172.                 'email' => $request->email,
  173.                 'phone' => $request->phone,
  174.                 'delivery_pin' => strtoupper(str_random(5)),
  175.                 'password' => \Hash::make($request->password),
  176.             ]);
  177.  
  178.             if ($request->has('role')) {
  179.                 $user->assignRole($request->role);
  180.             }
  181.  
  182.             if ($user->hasRole('Delivery Guy')) {
  183.  
  184.                 $deliveryGuyDetails = new DeliveryGuyDetail();
  185.                 $deliveryGuyDetails->name = $request->delivery_name;
  186.                 $deliveryGuyDetails->age = $request->delivery_age;
  187.                 if ($request->hasFile('delivery_photo')) {
  188.                     $photo = $request->file('delivery_photo');
  189.                     $filename = time() . str_random(10) . '.' . strtolower($photo->getClientOriginalExtension());
  190.                     Image::make($photo)->resize(250, 250)->save(base_path('/assets/img/delivery/' . $filename));
  191.                     $deliveryGuyDetails->photo = $filename;
  192.                 }
  193.                 $deliveryGuyDetails->description = $request->delivery_description;
  194.                 $deliveryGuyDetails->vehicle_number = $request->delivery_vehicle_number;
  195.                 if ($request->delivery_commission_rate != null) {
  196.                     $deliveryGuyDetails->commission_rate = $request->delivery_commission_rate;
  197.                 }
  198.                 if ($request->tip_commission_rate != null) {
  199.                     $deliveryGuyDetails->tip_commission_rate = $request->tip_commission_rate;
  200.                 }
  201.                 $deliveryGuyDetails->save();
  202.                 $user->delivery_guy_detail_id = $deliveryGuyDetails->id;
  203.                 $user->save();
  204.  
  205.             }
  206.  
  207.             return redirect()->back()->with(['success' => 'User Created']);
  208.         } catch (\Illuminate\Database\QueryException $qe) {
  209.             return redirect()->back()->with(['message' => $qe->getMessage()]);
  210.         } catch (Exception $e) {
  211.             return redirect()->back()->with(['message' => $e->getMessage()]);
  212.         } catch (\Throwable $th) {
  213.             return redirect()->back()->with(['message' => $th]);
  214.         }
  215.     }
  216.  
  217.     /**
  218.      * @param $id
  219.      */
  220.     public function getEditUser($id)
  221.     {
  222.         $user = User::where('id', $id)->with('orders')->first();
  223.         $roles = Role::all()->except(1);
  224.  
  225.         // dd($user->delivery_guy_detail);
  226.         return view('admin.editUser', array(
  227.             'orders' => $user->orders,
  228.             'user' => $user,
  229.             'roles' => $roles,
  230.         ));
  231.     }
  232.  
  233.     /**
  234.      * @param Request $request
  235.      */
  236.     public function updateUser(Request $request)
  237.     {
  238.         // dd($request->all());
  239.         $user = User::where('id', $request->id)->first();
  240.         try {
  241.             $user->name = $request->name;
  242.             $user->email = $request->email;
  243.             $user->phone = $request->phone;
  244.             if ($request->has('password') && $request->password != null) {
  245.                 $user->password = \Hash::make($request->password);
  246.             }
  247.             if ($request->roles != null) {
  248.                 $user->syncRoles($request->roles);
  249.             }
  250.             $user->save();
  251.  
  252.             if ($user->hasRole('Delivery Guy')) {
  253.  
  254.                 if ($user->delivery_guy_detail == null) {
  255.  
  256.                     $deliveryGuyDetails = new DeliveryGuyDetail();
  257.                     $deliveryGuyDetails->name = $request->delivery_name;
  258.                     $deliveryGuyDetails->age = $request->delivery_age;
  259.                     if ($request->hasFile('delivery_photo')) {
  260.                         $photo = $request->file('delivery_photo');
  261.                         $filename = time() . str_random(10) . '.' . strtolower($photo->getClientOriginalExtension());
  262.                         Image::make($photo)->resize(250, 250)->save(base_path('/assets/img/delivery/' . $filename));
  263.                         $deliveryGuyDetails->photo = $filename;
  264.                     }
  265.                     $deliveryGuyDetails->description = $request->delivery_description;
  266.                     $deliveryGuyDetails->vehicle_number = $request->delivery_vehicle_number;
  267.  
  268.                     if ($request->delivery_commission_rate != null) {
  269.                         $deliveryGuyDetails->commission_rate = $request->delivery_commission_rate;
  270.                     }
  271.  
  272.                     if ($request->tip_commission_rate != null) {
  273.                         $deliveryGuyDetails->tip_commission_rate = $request->tip_commission_rate;
  274.                     }
  275.  
  276.                     if ($request->is_notifiable == 'true') {
  277.                         $deliveryGuyDetails->is_notifiable = true;
  278.                     } else {
  279.                         $deliveryGuyDetails->is_notifiable = false;
  280.                     }
  281.  
  282.                     if ($request->max_accept_delivery_limit != null) {
  283.                         $deliveryGuyDetails->max_accept_delivery_limit = $request->max_accept_delivery_limit;
  284.                     }
  285.  
  286.                     $deliveryGuyDetails->save();
  287.                     $user->delivery_guy_detail_id = $deliveryGuyDetails->id;
  288.                     $user->save();
  289.                 } else {
  290.                     $user->delivery_guy_detail->name = $request->delivery_name;
  291.                     $user->delivery_guy_detail->age = $request->delivery_age;
  292.                     if ($request->hasFile('delivery_photo')) {
  293.                         $photo = $request->file('delivery_photo');
  294.                         $filename = time() . str_random(10) . '.' . strtolower($photo->getClientOriginalExtension());
  295.                         Image::make($photo)->resize(250, 250)->save(base_path('/assets/img/delivery/' . $filename));
  296.                         $user->delivery_guy_detail->photo = $filename;
  297.                     }
  298.                     $user->delivery_guy_detail->description = $request->delivery_description;
  299.                     $user->delivery_guy_detail->vehicle_number = $request->delivery_vehicle_number;
  300.                     if ($request->delivery_commission_rate != null) {
  301.                         $user->delivery_guy_detail->commission_rate = $request->delivery_commission_rate;
  302.                     }
  303.                     if ($request->tip_commission_rate != null) {
  304.                         $user->delivery_guy_detail->tip_commission_rate = $request->tip_commission_rate;
  305.                     }
  306.                     if ($request->is_notifiable == 'true') {
  307.                         $user->delivery_guy_detail->is_notifiable = true;
  308.                     } else {
  309.                         $user->delivery_guy_detail->is_notifiable = false;
  310.                     }
  311.  
  312.                     if ($request->max_accept_delivery_limit != null) {
  313.                         $user->delivery_guy_detail->max_accept_delivery_limit = $request->max_accept_delivery_limit;
  314.                     }
  315.  
  316.                     $user->delivery_guy_detail->save();
  317.                 }
  318.             }
  319.  
  320.             return redirect(route('admin.get.editUser', $user->id) . $request->window_redirect_hash)->with(['success' => 'User Updated']);
  321.         } catch (\Illuminate\Database\QueryException $qe) {
  322.             return redirect()->back()->with(['message' => $qe->getMessage()]);
  323.         } catch (Exception $e) {
  324.             return redirect()->back()->with(['message' => $e->getMessage()]);
  325.         } catch (\Throwable $th) {
  326.             return redirect()->back()->with(['message' => $th]);
  327.         }
  328.     }
  329.  
  330.     /**
  331.      * @param $id
  332.      */
  333.     public function banUser($id)
  334.     {
  335.         $user = User::where('id', $id)->firstOrFail();
  336.         $user->toggleActive()->save();
  337.         return redirect()->back()->with(['success' => 'Operation Successful']);
  338.     }
  339.  
  340.     public function manageDeliveryGuys()
  341.     {
  342.         return view('admin.manageDeliveryGuys');
  343.     }
  344.  
  345.     /**
  346.      * @param $id
  347.      */
  348.     public function getManageDeliveryGuysRestaurants($id)
  349.     {
  350.         $user = User::where('id', $id)->first();
  351.         if ($user->hasRole('Delivery Guy')) {
  352.             $userRestaurants = $user->restaurants;
  353.             $userRestaurantsIds = $user->restaurants->pluck('id')->toArray();
  354.  
  355.             $allRestaurants = Restaurant::get();
  356.  
  357.             return view('admin.manageDeliveryGuysRestaurants', array(
  358.                 'user' => $user,
  359.                 'userRestaurants' => $userRestaurants,
  360.                 'allRestaurants' => $allRestaurants,
  361.                 'userRestaurantsIds' => $userRestaurantsIds,
  362.             ));
  363.         }
  364.     }
  365.  
  366.     /**
  367.      * @param Request $request
  368.      */
  369.     public function updateDeliveryGuysRestaurants(Request $request)
  370.     {
  371.         $user = User::where('id', $request->id)->first();
  372.         $user->restaurants()->sync($request->user_restaurants);
  373.         $user->save();
  374.         return redirect()->back()->with(['success' => 'Delivery Guy Updated']);
  375.     }
  376.  
  377.     public function manageRestaurantOwners()
  378.     {
  379.         $users = User::role('Store Owner')->orderBy('id', 'DESC')->with('roles')->paginate(20);
  380.         $count = $users->total();
  381.  
  382.         return view('admin.manageRestaurantOwners', array(
  383.             'users' => $users,
  384.             'count' => $count,
  385.         ));
  386.     }
  387.  
  388.     /**
  389.      * @param $id
  390.      */
  391.     public function getManageRestaurantOwnersRestaurants($id)
  392.     {
  393.         $user = User::where('id', $id)->first();
  394.         if ($user->hasRole('Store Owner')) {
  395.             $userRestaurants = $user->restaurants;
  396.             $userRestaurantsIds = $user->restaurants->pluck('id')->toArray();
  397.             $allRestaurants = Restaurant::get();
  398.  
  399.             return view('admin.manageRestaurantOwnersRestaurants', array(
  400.                 'user' => $user,
  401.                 'userRestaurants' => $userRestaurants,
  402.                 'allRestaurants' => $allRestaurants,
  403.                 'userRestaurantsIds' => $userRestaurantsIds,
  404.             ));
  405.         }
  406.     }
  407.  
  408.     /**
  409.      * @param Request $request
  410.      */
  411.     public function updateManageRestaurantOwnersRestaurants(Request $request)
  412.     {
  413.         $user = User::where('id', $request->id)->first();
  414.         $user->restaurants()->sync($request->user_restaurants);
  415.         $user->save();
  416.         return redirect()->back()->with(['success' => 'Store Owner Updated']);
  417.     }
  418.  
  419.     public function orders()
  420.     {
  421.         return view('admin.orders');
  422.     }
  423.  
  424.     /**
  425.      * @param $order_id
  426.      */
  427.     public function viewOrder($order_id)
  428.     {
  429.         $order = Order::where('unique_order_id', $order_id)->with('orderitems.order_item_addons')->first();
  430.         $users = User::role('Delivery Guy')->get();
  431.         if ($order) {
  432.             return view('admin.viewOrder', array(
  433.                 'order' => $order,
  434.                 'users' => $users,
  435.             ));
  436.         } else {
  437.             return redirect()->route('admin.orders');
  438.         }
  439.     }
  440.     /**
  441.      * @param $order_id
  442.      */
  443.     public function printThermalBill($order_id)
  444.     {
  445.         $order = Order::where('unique_order_id', $order_id)->with('orderitems.order_item_addons')->first();
  446.         $users = User::role('Delivery Guy')->get();
  447.         if ($order) {
  448.             return view('admin.printOrder', array(
  449.                 'order' => $order,
  450.                 'users' => $users,
  451.             ));
  452.         } else {
  453.             return redirect()->route('admin.orders');
  454.         }
  455.     }
  456.  
  457.     public function sliders()
  458.     {
  459.         $sliders = PromoSlider::orderBy('id', 'DESC')->with('slides')->get();
  460.         $count = count($sliders);
  461.         return view('admin.sliders', array(
  462.             'sliders' => $sliders,
  463.             'count' => $count,
  464.         ));
  465.     }
  466.  
  467.     /**
  468.      * @param $id
  469.      */
  470.     public function getEditSlider($id)
  471.     {
  472.         $restaurants = Restaurant::with('items')->get();
  473.         $slider = PromoSlider::where('id', $id)->with('slides')->firstOrFail();
  474.         $slides = $slider->slides;
  475.         foreach ($slides as $slide) {
  476.             if ($slide->model == null) {
  477.                 $link = 'Not Linked';
  478.             }
  479.             if ($slide->model == 1) {
  480.                 $slideRestaurant = $slide->restaurant;
  481.                 if ($slideRestaurant) {
  482.                     $link = 'Linked to: ' . $slideRestaurant->name;
  483.                 } else {
  484.                     $link = 'Not Linked';
  485.                 }
  486.             }
  487.  
  488.             if ($slide->model == 2) {
  489.                 $slideItem = $slide->item;
  490.                 if ($slideItem) {
  491.                     $link = 'Linked to item: ' . $slideItem->name . ' from Store: ' . $slideItem->restaurant->name;
  492.                 } else {
  493.                     $link = 'Not Linked';
  494.                 }
  495.             }
  496.  
  497.             if ($slide->model == 3) {
  498.                 if ($slide->url != null) {
  499.                     $link = 'Linked to: ' . $slide->url;
  500.                 } else {
  501.                     $link = 'Not Linked';
  502.                 }
  503.             }
  504.  
  505.             $slide->link = $link;
  506.         }
  507.         if ($slider) {
  508.             return view('admin.editSlider', array(
  509.                 'restaurants' => $restaurants,
  510.                 'slider' => $slider,
  511.                 'slides' => $slides,
  512.             ));
  513.         } else {
  514.             return redirect()->route('admin.sliders');
  515.         }
  516.     }
  517.  
  518.     /**
  519.      * @param Request $request
  520.      */
  521.     public function updateSlider(Request $request)
  522.     {
  523.         $slider = PromoSlider::where('id', $request->id)->first();
  524.         $slider->name = $request->name;
  525.         $slider->position_id = $request->position_id;
  526.         $slider->size = $request->size;
  527.  
  528.         $slider->save();
  529.  
  530.         return redirect()->back()->with(['success' => 'Slider Updated']);
  531.  
  532.     }
  533.  
  534.     /**
  535.      * @param Request $request
  536.      */
  537.     public function createSlider(Request $request)
  538.     {
  539.         $sliderCount = PromoSlider::where('is_active', 1)->count();
  540.  
  541.         if ($sliderCount >= 2) {
  542.             return redirect()->back()->with(['message' => 'Only two sliders can be created. Disbale or delete some Sliders to create more.']);
  543.         }
  544.  
  545.         $slider = new PromoSlider();
  546.         $slider->name = $request->name;
  547.         $slider->location_id = '0';
  548.         $slider->position_id = $request->position_id;
  549.         $slider->size = $request->size;
  550.         $slider->save();
  551.         return redirect()->back()->with(['success' => 'New Slider Created']);
  552.     }
  553.  
  554.     /**
  555.      * @param $id
  556.      */
  557.     public function disableSlider($id)
  558.     {
  559.         $slider = PromoSlider::where('id', $id)->first();
  560.         if ($slider) {
  561.             $slider->toggleActive()->save();
  562.             return redirect()->back()->with(['success' => 'Operation Successful']);
  563.         } else {
  564.             return redirect()->route('admin.sliders');
  565.         }
  566.     }
  567.  
  568.     /**
  569.      * @param $id
  570.      */
  571.     public function deleteSlider($id)
  572.     {
  573.         $slider = PromoSlider::where('id', $id)->first();
  574.         if ($slider) {
  575.             $slides = $slider->slides;
  576.             foreach ($slides as $slide) {
  577.                 $slide->delete();
  578.             }
  579.             $slider->delete();
  580.             return redirect()->route('admin.sliders')->with(['success' => 'Operation Successful']);
  581.         } else {
  582.             return redirect()->route('admin.sliders');
  583.         }
  584.     }
  585.  
  586.     /**
  587.      * @param Request $request
  588.      */
  589.     public function saveSlide(Request $request)
  590.     {
  591.         $url = url('/');
  592.         $url = substr($url, 0, strrpos($url, '/')); //this will give url without " / "
  593.  
  594.         $slide = new Slide();
  595.         $slide->promo_slider_id = $request->promo_slider_id;
  596.         $slide->name = $request->name;
  597.         $slide->url = $request->url;
  598.  
  599.         $image = $request->file('image');
  600.         $rand_name = time() . str_random(10);
  601.         $filename = $rand_name . '.' . $image->getClientOriginalExtension();
  602.  
  603.         Image::make($image)
  604.             ->resize(384, 384)
  605.             ->save(base_path('assets/img/slider/' . $filename));
  606.         $slide->image = '/assets/img/slider/' . $filename;
  607.  
  608.         $slide->model = $request->model;
  609.         $slide->restaurant_id = $request->restaurant_id;
  610.         $slide->item_id = $request->item_id;
  611.         $slide->url = $request->customUrl;
  612.  
  613.         if ($request->customUrl != null) {
  614.             if ($request->is_locationset == 'true') {
  615.                 $slide->is_locationset = true;
  616.             } else {
  617.                 $slide->is_locationset = false;
  618.             }
  619.  
  620.             $slide->latitude = $request->latitude;
  621.             $slide->longitude = $request->longitude;
  622.             $slide->radius = $request->radius;
  623.  
  624.         }
  625.  
  626.         $slide->save();
  627.  
  628.         return redirect()->back()->with(['success' => 'New Slide Created']);
  629.     }
  630.  
  631.     /**
  632.      * @param $id
  633.      */
  634.     public function editSlide($id)
  635.     {
  636.         $slide = Slide::where('id', $id)->with('promo_slider')->first();
  637.  
  638.         if ($slide) {
  639.             if ($slide->model == null) {
  640.                 $link = null;
  641.             }
  642.             if ($slide->model == 1) {
  643.                 $slideRestaurant = $slide->restaurant;
  644.                 if ($slideRestaurant) {
  645.                     $link = '<b>Store - </b>' . $slideRestaurant->name;
  646.                 } else {
  647.                     $link = null;
  648.                 }
  649.             }
  650.  
  651.             if ($slide->model == 2) {
  652.                 $slideItem = $slide->item;
  653.                 if ($slideItem) {
  654.                     $link = '<b>Item - </b>' . $slideItem->name . '<br><b> From Store - </b>' . $slideItem->restaurant->name;
  655.                 } else {
  656.                     $link = null;
  657.                 }
  658.             }
  659.  
  660.             if ($slide->model == 3) {
  661.                 if ($slide->url != null) {
  662.                     $link = '<b>Custom URL - </b>' . $slide->url;
  663.                 } else {
  664.                     $link = null;
  665.                 }
  666.             }
  667.  
  668.             $restaurants = Restaurant::with('items')->get();
  669.             return view('admin.editSlide', array(
  670.                 'slide' => $slide,
  671.                 'restaurants' => $restaurants,
  672.                 'link' => $link,
  673.             ));
  674.         } else {
  675.             return redirect()->route('admin.sliders')->with(['message' => 'Slide Not Found']);
  676.         }
  677.     }
  678.  
  679.     /**
  680.      * @param Request $request
  681.      */
  682.     public function updateSlide(Request $request)
  683.     {
  684.         // dd($request->all());
  685.         $slide = Slide::where('id', $request->id)->first();
  686.         if ($slide) {
  687.             $slide->name = $request->name;
  688.  
  689.             if ($request->hasFile('image')) {
  690.  
  691.                 $image = $request->file('image');
  692.                 $rand_name = time() . str_random(10);
  693.                 $filename = $rand_name . '.' . $image->getClientOriginalExtension();
  694.                 Image::make($image)
  695.                     ->resize(384, 384)
  696.                     ->save(base_path('assets/img/slider/' . $filename));
  697.                 $slide->image = '/assets/img/slider/' . $filename;
  698.             }
  699.  
  700.             if ($request->model != null) {
  701.                 $slide->model = $request->model;
  702.                 $slide->restaurant_id = $request->restaurant_id;
  703.                 $slide->item_id = $request->item_id;
  704.                 $slide->url = $request->customUrl;
  705.  
  706.                 if ($request->customUrl != null) {
  707.                     if ($request->is_locationset == 'true') {
  708.                         $slide->is_locationset = true;
  709.                     } else {
  710.                         $slide->is_locationset = false;
  711.                     }
  712.  
  713.                     $slide->latitude = $request->latitude;
  714.                     $slide->longitude = $request->longitude;
  715.                     $slide->radius = $request->radius;
  716.  
  717.                 }
  718.             }
  719.  
  720.             $slide->save();
  721.             return redirect()->back()->with(['success' => 'Slide Updated']);
  722.         } else {
  723.             return redirect()->route('admin.sliders')->with(['message' => 'Slide Not Found']);
  724.         }
  725.     }
  726.  
  727.     /**
  728.      * @param Request $request
  729.      */
  730.     public function updateSlidePosition(Request $request)
  731.     {
  732.         Slide::setNewOrder($request->newOrder);
  733.         Artisan::call('cache:clear');
  734.         return response()->json(['success' => true]);
  735.     }
  736.  
  737.     /**
  738.      * @param $id
  739.      */
  740.     public function deleteSlide($id)
  741.     {
  742.         $slide = Slide::where('id', $id)->first();
  743.         if ($slide) {
  744.             $slide->delete();
  745.             return redirect()->back()->with(['success' => 'Deleted']);
  746.         } else {
  747.             return redirect()->route('admin.sliders');
  748.         }
  749.     }
  750.  
  751.     /**
  752.      * @param $id
  753.      */
  754.     public function disableSlide($id)
  755.     {
  756.         $slide = Slide::where('id', $id)->first();
  757.         if ($slide) {
  758.             $slide->toggleActive()->save();
  759.             return redirect()->back()->with(['success' => 'Operation Successful']);
  760.         } else {
  761.             return redirect()->route('admin.sliders');
  762.         }
  763.     }
  764.  
  765.     public function restaurants()
  766.     {
  767.  
  768.         $dapCheck = false;
  769.         if (\Module::find('DeliveryAreaPro') && \Module::find('DeliveryAreaPro')->isEnabled()) {
  770.             $restaurants = Restaurant::where('is_accepted', '1')->with('users.roles', 'delivery_areas')->ordered()->paginate(20);
  771.             $count = $restaurants->total();
  772.             $dapCheck = true;
  773.         } else {
  774.             $restaurants = Restaurant::where('is_accepted', '1')->with('users.roles')->ordered()->paginate(20);
  775.             $count = $restaurants->total();
  776.         }
  777.  
  778.         return view('admin.restaurants', array(
  779.             'restaurants' => $restaurants,
  780.             'count' => $count,
  781.             'dapCheck' => $dapCheck,
  782.         ));
  783.     }
  784.  
  785.     public function sortStores()
  786.     {
  787.         $restaurants = Restaurant::where('is_accepted', '1')->with('users.roles')->ordered()->get();
  788.         $count = $restaurants->count();
  789.  
  790.         $dapCheck = false;
  791.         if (\Module::find('DeliveryAreaPro') && \Module::find('DeliveryAreaPro')->isEnabled()) {
  792.             $dapCheck = true;
  793.         }
  794.  
  795.         return view('admin.sortStores', array(
  796.             'restaurants' => $restaurants,
  797.             'count' => $count,
  798.             'dapCheck' => $dapCheck,
  799.         ));
  800.     }
  801.  
  802.     /**
  803.      * @param Request $request
  804.      */
  805.     public function updateStorePosition(Request $request)
  806.     {
  807.         Restaurant::setNewOrder($request->newOrder);
  808.         Artisan::call('cache:clear');
  809.         return response()->json(['success' => true]);
  810.     }
  811.  
  812.     /**
  813.      * @param $restaurant_id
  814.      */
  815.     public function sortMenusAndItems($restaurant_id)
  816.     {
  817.  
  818.         $restaurant = Restaurant::where('id', $restaurant_id)->firstOrFail();
  819.  
  820.         $items = Item::where('restaurant_id', $restaurant_id)
  821.             ->join('item_categories', function ($join) {
  822.                 $join->on('items.item_category_id', '=', 'item_categories.id');
  823.             })
  824.             ->orderBy('item_categories.order_column', 'asc')
  825.             ->with('addon_categories')
  826.             ->ordered()
  827.             ->get(array('items.*', 'item_categories.name as category_name'));
  828.  
  829.         $itemsArr = [];
  830.         foreach ($items as $item) {
  831.             $itemsArr[$item['category_name']][] = $item;
  832.         }
  833.  
  834.         // dd($itemsArr);
  835.         $itemCategories = ItemCategory::whereHas('items', function ($query) use ($restaurant_id) {
  836.             return $query->where('restaurant_id', $restaurant_id);
  837.         })->ordered()->get();
  838.  
  839.         $count = 0;
  840.  
  841.         return view('admin.sortMenusAndItemsForStore', array(
  842.             'restaurant' => $restaurant,
  843.             'items' => $itemsArr,
  844.             'itemCategories' => $itemCategories,
  845.             'count' => $count,
  846.         ));
  847.     }
  848.  
  849.     /**
  850.      * @param Request $request
  851.      */
  852.     public function updateItemPositionForStore(Request $request)
  853.     {
  854.         Item::setNewOrder($request->newOrder);
  855.         Artisan::call('cache:clear');
  856.         return response()->json(['success' => true]);
  857.     }
  858.  
  859.     /**
  860.      * @param Request $request
  861.      */
  862.     public function updateMenuCategoriesPositionForStore(Request $request)
  863.     {
  864.         ItemCategory::setNewOrder($request->newOrder);
  865.         Artisan::call('cache:clear');
  866.         return response()->json(['success' => true]);
  867.     }
  868.  
  869.     public function pendingAcceptance()
  870.     {
  871.         $count = Restaurant::count();
  872.         $restaurants = Restaurant::orderBy('id', 'DESC')->where('is_accepted', '0')->with('users.roles')->paginate(10000);
  873.         $count = count($restaurants);
  874.  
  875.         $dapCheck = false;
  876.         if (\Module::find('DeliveryAreaPro') && \Module::find('DeliveryAreaPro')->isEnabled()) {
  877.             $dapCheck = true;
  878.         }
  879.  
  880.         return view('admin.restaurants', array(
  881.             'restaurants' => $restaurants,
  882.             'count' => $count,
  883.             'dapCheck' => $dapCheck,
  884.         ));
  885.     }
  886.  
  887.     /**
  888.      * @param $id
  889.      */
  890.     public function acceptRestaurant($id)
  891.     {
  892.         $restaurant = Restaurant::where('id', $id)->first();
  893.         if ($restaurant) {
  894.             $restaurant->toggleAcceptance()->save();
  895.             return redirect()->back()->with(['success' => 'Operation Successful']);
  896.         } else {
  897.             return redirect()->route('admin.restaurants');
  898.         }
  899.     }
  900.  
  901.     /**
  902.      * @param Request $request
  903.      */
  904.     public function searchRestaurants(Request $request)
  905.     {
  906.         $query = $request['query'];
  907.  
  908.         $restaurants = Restaurant::where('name', 'LIKE', '%' . $query . '%')
  909.             ->orWhere('sku', 'LIKE', '%' . $query . '%')->with('users.roles')->paginate(20);
  910.  
  911.         $count = $restaurants->total();
  912.  
  913.         $dapCheck = false;
  914.         if (\Module::find('DeliveryAreaPro') && \Module::find('DeliveryAreaPro')->isEnabled()) {
  915.             $dapCheck = true;
  916.         }
  917.  
  918.         return view('admin.restaurants', array(
  919.             'restaurants' => $restaurants,
  920.             'query' => $query,
  921.             'count' => $count,
  922.             'dapCheck' => $dapCheck,
  923.         ));
  924.     }
  925.  
  926.     /**
  927.      * @param $id
  928.      */
  929.     public function disableRestaurant($id)
  930.     {
  931.         $restaurant = Restaurant::where('id', $id)->first();
  932.         if ($restaurant) {
  933.             $restaurant->is_schedulable = false;
  934.             $restaurant->toggleActive();
  935.             $restaurant->save();
  936.             return redirect()->back()->with(['success' => 'Operation Successful']);
  937.         } else {
  938.             return redirect()->route('admin.restaurants');
  939.         }
  940.     }
  941.  
  942.     /**
  943.      * @param $id
  944.      */
  945.     public function deleteRestaurant($id)
  946.     {
  947.         $restaurant = Restaurant::where('id', $id)->first();
  948.         if ($restaurant) {
  949.             $items = $restaurant->items;
  950.             foreach ($items as $item) {
  951.                 $item->delete();
  952.             }
  953.             $restaurant->delete();
  954.             return redirect()->route('admin.restaurants');
  955.         } else {
  956.             return redirect()->route('admin.restaurants');
  957.         }
  958.     }
  959.  
  960.     /**
  961.      * @param Request $request
  962.      */
  963.     public function saveNewRestaurant(Request $request)
  964.     {
  965.         $restaurant = new Restaurant();
  966.  
  967.         $restaurant->name = $request->name;
  968.         $restaurant->description = $request->description;
  969.                
  970. // @author Josimar-Brasil Permission Dashboard
  971.         if ($request->is_change_status == 'true') {
  972.             $restaurant->is_change_status = true;
  973.         } else {
  974.             $restaurant->is_change_status = false;
  975.         }
  976. //End
  977.  
  978.         $image = $request->file('image');
  979.         $rand_name = time() . str_random(10);
  980.         $filename = $rand_name . '.jpg';
  981.         Image::make($image)
  982.             ->resize(160, 117)
  983.             ->save(base_path('assets/img/restaurants/' . $filename), config('appSettings.uploadImageQuality '), 'jpg');
  984.         $restaurant->image = '/assets/img/restaurants/' . $filename;
  985.  
  986.         $restaurant->rating = $request->rating;
  987.         $restaurant->delivery_time = $request->delivery_time;
  988.         $restaurant->price_range = $request->price_range;
  989.  
  990.         if ($request->is_pureveg == 'true') {
  991.             $restaurant->is_pureveg = true;
  992.         } else {
  993.             $restaurant->is_pureveg = false;
  994.         }
  995.  
  996.         if ($request->is_featured == 'true') {
  997.             $restaurant->is_featured = true;
  998.         } else {
  999.             $restaurant->is_featured = false;
  1000.         }
  1001.  
  1002.         $restaurant->slug = str_slug($request->name) . '-' . str_random(15);
  1003.         $restaurant->certificate = $request->certificate;
  1004.  
  1005.         $restaurant->address = $request->address;
  1006.         $restaurant->pincode = $request->pincode;
  1007.         $restaurant->landmark = $request->landmark;
  1008.         $restaurant->latitude = $request->latitude;
  1009.         $restaurant->longitude = $request->longitude;
  1010.  
  1011.         $restaurant->restaurant_charges = $request->restaurant_charges;
  1012.         $restaurant->delivery_charges = $request->delivery_charges;
  1013.         $restaurant->commission_rate = $request->commission_rate;
  1014.  
  1015.         if ($request->has('delivery_type')) {
  1016.             $restaurant->delivery_type = $request->delivery_type;
  1017.         }
  1018.  
  1019.         if ($request->delivery_charge_type == 'FIXED') {
  1020.             $restaurant->delivery_charge_type = 'FIXED';
  1021.             $restaurant->delivery_charges = $request->delivery_charges;
  1022.         }
  1023.         if ($request->delivery_charge_type == 'DYNAMIC') {
  1024.             $restaurant->delivery_charge_type = 'DYNAMIC';
  1025.             $restaurant->base_delivery_charge = $request->base_delivery_charge;
  1026.             $restaurant->base_delivery_distance = $request->base_delivery_distance;
  1027.             $restaurant->extra_delivery_charge = $request->extra_delivery_charge;
  1028.             $restaurant->extra_delivery_distance = $request->extra_delivery_distance;
  1029.         }
  1030.         if ($request->delivery_radius != null) {
  1031.             $restaurant->delivery_radius = $request->delivery_radius;
  1032.         }
  1033.  
  1034.         $restaurant->sku = time() . str_random(10);
  1035.         $restaurant->is_active = 0;
  1036.         $restaurant->is_accepted = 1;
  1037.  
  1038.         $restaurant->min_order_price = $request->min_order_price;
  1039.  
  1040.         try {
  1041.             $restaurant->save();
  1042.             return redirect()->back()->with(['success' => 'Restaurant Saved']);
  1043.         } catch (\Illuminate\Database\QueryException $qe) {
  1044.             return redirect()->back()->with(['message' => $qe->getMessage()]);
  1045.         } catch (Exception $e) {
  1046.             return redirect()->back()->with(['message' => $e->getMessage()]);
  1047.         } catch (\Throwable $th) {
  1048.             return redirect()->back()->with(['message' => $th]);
  1049.         }
  1050.     }
  1051.  
  1052.     /**
  1053.      * @param $id
  1054.      */
  1055.     public function getRestaurantItems($id)
  1056.     {
  1057.         $items = Item::where('restaurant_id', $id)->orderBy('id', 'DESC')->with('item_category', 'restaurant')->paginate(20);
  1058.         $count = $items->total();
  1059.  
  1060.         $restaurants = Restaurant::all();
  1061.         $itemCategories = ItemCategory::where('is_enabled', '1')->get();
  1062.         $addonCategories = AddonCategory::all();
  1063.  
  1064.         return view('admin.items', array(
  1065.             'items' => $items,
  1066.             'count' => $count,
  1067.             'restaurants' => $restaurants,
  1068.             'itemCategories' => $itemCategories,
  1069.             'addonCategories' => $addonCategories,
  1070.             'restaurant_id' => $id,
  1071.         ));
  1072.  
  1073.     }
  1074.  
  1075.     /**
  1076.      * @param $id
  1077.      */
  1078.     public function getEditRestaurant($id)
  1079.     {
  1080.         $restaurant = Restaurant::where('id', $id)->with('users.roles', 'delivery_areas')->ordered()->first();
  1081.         $restaurantCategories = RestaurantCategory::where('is_active', '1')->get();
  1082.  
  1083.         $dapCheck = false;
  1084.         if (\Module::find('DeliveryAreaPro') && \Module::find('DeliveryAreaPro')->isEnabled()) {
  1085.             $dapCheck = true;
  1086.         }
  1087.  
  1088.         $adminPaymentGateways = PaymentGateway::where('is_active', '1')->get();
  1089.  
  1090.         $payoutData = StorePayoutDetail::where('restaurant_id', $id)->first();
  1091.         if ($payoutData) {
  1092.             $payoutData = json_decode($payoutData->data);
  1093.         } else {
  1094.             $payoutData = null;
  1095.         }
  1096.  
  1097.         return view('admin.editRestaurant', array(
  1098.             'restaurant' => $restaurant,
  1099.             'restaurantCategories' => $restaurantCategories,
  1100.             'schedule_data' => json_decode($restaurant->schedule_data),
  1101.             'dapCheck' => $dapCheck,
  1102.             'adminPaymentGateways' => $adminPaymentGateways,
  1103.             'payoutData' => $payoutData,
  1104.         ));
  1105.     }
  1106.  
  1107.     /**
  1108.      * @param Request $request
  1109.      */
  1110.     public function updateRestaurant(Request $request)
  1111.     {
  1112.         // dd($request->all());
  1113.         $restaurant = Restaurant::where('id', $request->id)->first();
  1114.  
  1115.         if ($restaurant) {
  1116.             $restaurant->name = $request->name;
  1117.             $restaurant->description = $request->description;
  1118.                        
  1119.                                             // @author Josimar-Brasil Permission Dasboard
  1120.             if ($request->is_change_status == 'true') {
  1121.                 $restaurant->is_change_status = true;
  1122.             } else {
  1123.                 $restaurant->is_change_status = false;
  1124.             }
  1125.             //End
  1126.  
  1127.             if ($request->image == null) {
  1128.                 $restaurant->image = $request->old_image;
  1129.             } else {
  1130.  
  1131.                 $image = $request->file('image');
  1132.                 $rand_name = time() . str_random(10);
  1133.                 $filename = $rand_name . '.jpg';
  1134.                 Image::make($image)
  1135.                     ->resize(160, 117)
  1136.                     ->save(base_path('assets/img/restaurants/' . $filename), config('appSettings.uploadImageQuality '), 'jpg');
  1137.                 $restaurant->image = '/assets/img/restaurants/' . $filename;
  1138.  
  1139.             }
  1140.  
  1141.             $restaurant->rating = $request->rating;
  1142.             $restaurant->delivery_time = $request->delivery_time;
  1143.             $restaurant->price_range = $request->price_range;
  1144.  
  1145.             if ($request->is_pureveg == 'true') {
  1146.                 $restaurant->is_pureveg = true;
  1147.             } else {
  1148.                 $restaurant->is_pureveg = false;
  1149.             }
  1150.  
  1151.             if ($request->is_featured == 'true') {
  1152.                 $restaurant->is_featured = true;
  1153.             } else {
  1154.                 $restaurant->is_featured = false;
  1155.             }
  1156.  
  1157.             $restaurant->certificate = $request->certificate;
  1158.  
  1159.             $restaurant->address = $request->address;
  1160.             $restaurant->pincode = $request->pincode;
  1161.             $restaurant->landmark = $request->landmark;
  1162.             $restaurant->latitude = $request->latitude;
  1163.             $restaurant->longitude = $request->longitude;
  1164.  
  1165.             $restaurant->restaurant_charges = $request->restaurant_charges;
  1166.             $restaurant->delivery_charges = $request->delivery_charges;
  1167.             $restaurant->commission_rate = $request->commission_rate;
  1168.  
  1169.             if ($request->has('delivery_type')) {
  1170.                 $restaurant->delivery_type = $request->delivery_type;
  1171.             }
  1172.  
  1173.             if ($request->delivery_charge_type == 'FIXED') {
  1174.                 $restaurant->delivery_charge_type = 'FIXED';
  1175.                 $restaurant->delivery_charges = $request->delivery_charges;
  1176.             }
  1177.             if ($request->delivery_charge_type == 'DYNAMIC') {
  1178.                 $restaurant->delivery_charge_type = 'DYNAMIC';
  1179.                 $restaurant->base_delivery_charge = $request->base_delivery_charge;
  1180.                 $restaurant->base_delivery_distance = $request->base_delivery_distance;
  1181.                 $restaurant->extra_delivery_charge = $request->extra_delivery_charge;
  1182.                 $restaurant->extra_delivery_distance = $request->extra_delivery_distance;
  1183.             }
  1184.             if ($request->delivery_radius != null) {
  1185.                 $restaurant->delivery_radius = $request->delivery_radius;
  1186.             }
  1187.  
  1188.             $restaurant->min_order_price = $request->min_order_price;
  1189.  
  1190.             if ($request->is_schedulable == 'true') {
  1191.                 $restaurant->is_schedulable = true;
  1192.             } else {
  1193.                 $restaurant->is_schedulable = false;
  1194.             }
  1195.  
  1196.             if ($request->is_notifiable == 'true') {
  1197.                 $restaurant->is_notifiable = true;
  1198.             } else {
  1199.                 $restaurant->is_notifiable = false;
  1200.             }
  1201.  
  1202.             if ($request->auto_acceptable == 'true') {
  1203.                 $restaurant->auto_acceptable = true;
  1204.             } else {
  1205.                 $restaurant->auto_acceptable = false;
  1206.             }
  1207.  
  1208.             $restaurant->custom_message = $request->custom_message;
  1209.  
  1210.             try {
  1211.                 if (isset($request->restaurant_category_restaurant)) {
  1212.                     $restaurant->restaurant_categories()->sync($request->restaurant_category_restaurant);
  1213.                 }
  1214.  
  1215.                 if ($request->store_payment_gateways == null) {
  1216.                     $restaurant->payment_gateways()->sync($request->store_payment_gateways);
  1217.                 }
  1218.  
  1219.                 if (isset($request->store_payment_gateways)) {
  1220.                     $restaurant->payment_gateways()->sync($request->store_payment_gateways);
  1221.                 }
  1222.  
  1223.                 $restaurant->save();
  1224.  
  1225.                 try {
  1226.  
  1227.                     $restaurant->slug = Str::slug($request->store_url);
  1228.                     $restaurant->save();
  1229.  
  1230.                 } catch (\Illuminate\Database\QueryException $qe) {
  1231.                     $errorCode = $qe->errorInfo[1];
  1232.                     if ($errorCode == 1062) {
  1233.                         return redirect()->back()->with(['message' => 'URL should be unique, it should not match with other store URLs']);
  1234.                     }
  1235.                     return redirect()->back()->with(['message' => $qe->getMessage()]);
  1236.                 }
  1237.                 // dd('here');
  1238.                 // return redirect()->back()->with(['success' => 'Store Updated']);
  1239.                 return redirect(route('admin.get.editRestaurant', $restaurant->id) . $request->window_redirect_hash)->with(['success' => 'Store Updated']);
  1240.             } catch (\Illuminate\Database\QueryException $qe) {
  1241.                 return redirect()->back()->with(['message' => $qe->getMessage()]);
  1242.             } catch (Exception $e) {
  1243.                 return redirect()->back()->with(['message' => $e->getMessage()]);
  1244.             } catch (\Throwable $th) {
  1245.                 return redirect()->back()->with(['message' => $th]);
  1246.             }
  1247.         }
  1248.     }
  1249.  
  1250.     /**
  1251.      * @param Request $request
  1252.      */
  1253.     public function updateSlug(Request $request)
  1254.     {
  1255.         $restaurant = Restaurant::where('id', $request->id)->firstOrFail();
  1256.  
  1257.         try {
  1258.  
  1259.             $restaurant->slug = Str::slug($request->store_url);
  1260.             $restaurant->save();
  1261.             return redirect()->back()->with(['success' => 'URL Updated']);
  1262.  
  1263.         } catch (\Illuminate\Database\QueryException $qe) {
  1264.             $errorCode = $qe->errorInfo[1];
  1265.             if ($errorCode == 1062) {
  1266.                 return redirect()->back()->with(['message' => 'URL should be unique, it should not match with other store URLs']);
  1267.             }
  1268.             return redirect()->back()->with(['message' => $qe->getMessage()]);
  1269.         } catch (Exception $e) {
  1270.             return redirect()->back()->with(['message' => $e->getMessage()]);
  1271.         } catch (\Throwable $th) {
  1272.             return redirect()->back()->with(['message' => $th]);
  1273.         }
  1274.  
  1275.     }
  1276.  
  1277.     public function items()
  1278.     {
  1279.         $items = Item::orderBy('id', 'DESC')->with('item_category', 'restaurant')->paginate(20);
  1280.         $count = $items->total();
  1281.  
  1282.         $restaurants = Restaurant::all();
  1283.         $itemCategories = ItemCategory::where('is_enabled', '1')->get();
  1284.         $addonCategories = AddonCategory::all();
  1285.  
  1286.         return view('admin.items', array(
  1287.             'items' => $items,
  1288.             'count' => $count,
  1289.             'restaurants' => $restaurants,
  1290.             'itemCategories' => $itemCategories,
  1291.             'addonCategories' => $addonCategories,
  1292.         ));
  1293.     }
  1294.  
  1295.     /**
  1296.      * @param Request $request
  1297.      */
  1298.     public function searchItems(Request $request)
  1299.     {
  1300.         $query = $request['query'];
  1301.  
  1302.         if ($request->has('restaurant_id')) {
  1303.             $items = Item::where('restaurant_id', $request->restaurant_id)
  1304.                 ->where('name', 'LIKE', '%' . $query . '%')
  1305.                 ->with('item_category', 'restaurant')
  1306.                 ->paginate(20);
  1307.         } else {
  1308.             $items = Item::where('name', 'LIKE', '%' . $query . '%')
  1309.                 ->with('item_category', 'restaurant')
  1310.                 ->paginate(20);
  1311.         }
  1312.  
  1313.         $count = $items->total();
  1314.  
  1315.         $restaurants = Restaurant::get();
  1316.         $itemCategories = ItemCategory::where('is_enabled', '1')->get();
  1317.         $addonCategories = AddonCategory::all();
  1318.  
  1319.         return view('admin.items', array(
  1320.             'items' => $items,
  1321.             'count' => $count,
  1322.             'restaurants' => $restaurants,
  1323.             'query' => $query,
  1324.             'itemCategories' => $itemCategories,
  1325.             'addonCategories' => $addonCategories,
  1326.         ));
  1327.     }
  1328.  
  1329.     /**
  1330.      * @param Request $request
  1331.      */
  1332.     public function saveNewItem(Request $request)
  1333.     {
  1334.         // dd($request->all());
  1335.  
  1336.         $item = new Item();
  1337.  
  1338.         $item->name = $request->name;
  1339.         $item->price = $request->price;
  1340.         $item->old_price = $request->old_price == null ? 0 : $request->old_price;
  1341.         $item->restaurant_id = $request->restaurant_id;
  1342.         $item->item_category_id = $request->item_category_id;
  1343.  
  1344.         if ($request->hasFile('image')) {
  1345.             $image = $request->file('image');
  1346.             $rand_name = time() . str_random(10);
  1347.             $filename = $rand_name . '.jpg';
  1348.             Image::make($image)
  1349.                 ->resize(486, 355)
  1350.                 ->save(base_path('assets/img/items/' . $filename), config('appSettings.uploadImageQuality '), 'jpg');
  1351.             $item->image = '/assets/img/items/' . $filename;
  1352.         }
  1353.  
  1354.         if ($request->is_recommended == 'true') {
  1355.             $item->is_recommended = true;
  1356.         } else {
  1357.             $item->is_recommended = false;
  1358.         }
  1359.  
  1360.         if ($request->is_popular == 'true') {
  1361.             $item->is_popular = true;
  1362.         } else {
  1363.             $item->is_popular = false;
  1364.         }
  1365.  
  1366.         if ($request->is_new == 'true') {
  1367.             $item->is_new = true;
  1368.         } else {
  1369.             $item->is_new = false;
  1370.         }
  1371.  
  1372.         if ($request->is_veg == 'veg') {
  1373.             $item->is_veg = true;
  1374.         } elseif ($request->is_veg == 'nonveg') {
  1375.             $item->is_veg = false;
  1376.         } else {
  1377.             $item->is_veg = null;
  1378.         }
  1379.  
  1380.         $item->desc = $request->desc;
  1381.  
  1382.         try {
  1383.             $item->save();
  1384.             if (isset($request->addon_category_item)) {
  1385.                 $item->addon_categories()->sync($request->addon_category_item);
  1386.             }
  1387.             return redirect()->back()->with(['success' => 'Item Saved']);
  1388.         } catch (\Illuminate\Database\QueryException $qe) {
  1389.             return redirect()->back()->with(['message' => $qe->getMessage()]);
  1390.         } catch (Exception $e) {
  1391.             return redirect()->back()->with(['message' => $e->getMessage()]);
  1392.         } catch (\Throwable $th) {
  1393.             return redirect()->back()->with(['message' => $th]);
  1394.         }
  1395.  
  1396.     }
  1397.  
  1398.     /**
  1399.      * @param $id
  1400.      */
  1401.     public function getEditItem($id)
  1402.     {
  1403.         $item = Item::where('id', $id)->first();
  1404.         $restaurants = Restaurant::get();
  1405.         $itemCategories = ItemCategory::where('is_enabled', '1')->get();
  1406.         $addonCategories = AddonCategory::all();
  1407.  
  1408.         return view('admin.editItem', array(
  1409.             'item' => $item,
  1410.             'restaurants' => $restaurants,
  1411.             'itemCategories' => $itemCategories,
  1412.             'addonCategories' => $addonCategories,
  1413.         ));
  1414.     }
  1415.  
  1416.     /**
  1417.      * @param $id
  1418.      */
  1419.     public function disableItem($id)
  1420.     {
  1421.         $item = Item::where('id', $id)->first();
  1422.         if ($item) {
  1423.             $item->toggleActive()->save();
  1424.             if (\Illuminate\Support\Facades\Request::ajax()) {
  1425.                 return response()->json(['success' => true]);
  1426.             }
  1427.             return redirect()->back()->with(['success' => 'Operation Successful']);
  1428.         } else {
  1429.             return redirect()->route('admin.items');
  1430.         }
  1431.     }
  1432.  
  1433.     /**
  1434.      * @param Request $request
  1435.      */
  1436.     public function updateItem(Request $request)
  1437.     {
  1438.         // dd($request->all());
  1439.         $item = Item::where('id', $request->id)->first();
  1440.  
  1441.         if ($item) {
  1442.  
  1443.             $item->name = $request->name;
  1444.             $item->restaurant_id = $request->restaurant_id;
  1445.             $item->item_category_id = $request->item_category_id;
  1446.  
  1447.             if ($request->image == null) {
  1448.                 $item->image = $request->old_image;
  1449.             } else {
  1450.                 $image = $request->file('image');
  1451.                 $rand_name = time() . str_random(10);
  1452.                 $filename = $rand_name . '.jpg';
  1453.                 Image::make($image)
  1454.                     ->resize(486, 355)
  1455.                     ->save(base_path('assets/img/items/' . $filename), config('appSettings.uploadImageQuality '), 'jpg');
  1456.                 $item->image = '/assets/img/items/' . $filename;
  1457.             }
  1458.  
  1459.             $item->price = $request->price;
  1460.             $item->old_price = $request->old_price == null ? 0 : $request->old_price;
  1461.  
  1462.             if ($request->is_recommended == 'true') {
  1463.                 $item->is_recommended = true;
  1464.             } else {
  1465.                 $item->is_recommended = false;
  1466.             }
  1467.  
  1468.             if ($request->is_popular == 'true') {
  1469.                 $item->is_popular = true;
  1470.             } else {
  1471.                 $item->is_popular = false;
  1472.             }
  1473.  
  1474.             if ($request->is_new == 'true') {
  1475.                 $item->is_new = true;
  1476.             } else {
  1477.                 $item->is_new = false;
  1478.             }
  1479.  
  1480.             if ($request->is_veg == 'veg') {
  1481.                 $item->is_veg = true;
  1482.             } elseif ($request->is_veg == 'nonveg') {
  1483.                 $item->is_veg = false;
  1484.             } else {
  1485.                 $item->is_veg = null;
  1486.             }
  1487.  
  1488.             $item->desc = $request->desc;
  1489.  
  1490.             try {
  1491.                 $item->save();
  1492.  
  1493.                 if ($request->addon_category_item == null) {
  1494.                     $item->addon_categories()->sync($request->addon_category_item);
  1495.                 }
  1496.  
  1497.                 if (isset($request->addon_category_item)) {
  1498.                     $item->addon_categories()->sync($request->addon_category_item);
  1499.                 }
  1500.  
  1501.                 return redirect()->back()->with(['success' => 'Item Updated']);
  1502.  
  1503.             } catch (\Illuminate\Database\QueryException $qe) {
  1504.                 return redirect()->back()->with(['message' => $qe->getMessage()]);
  1505.             } catch (Exception $e) {
  1506.                 return redirect()->back()->with(['message' => $e->getMessage()]);
  1507.             } catch (\Throwable $th) {
  1508.                 return redirect()->back()->with(['message' => $th]);
  1509.             }
  1510.         }
  1511.     }
  1512.  
  1513.     public function addonCategories()
  1514.     {
  1515.         $addonCategories = AddonCategory::orderBy('id', 'DESC')->paginate(20);
  1516.         $addonCategories->loadCount('addons');
  1517.  
  1518.         $count = $addonCategories->total();
  1519.  
  1520.         return view('admin.addonCategories', array(
  1521.             'addonCategories' => $addonCategories,
  1522.             'count' => $count,
  1523.         ));
  1524.     }
  1525.  
  1526.     /**
  1527.      * @param Request $request
  1528.      */
  1529.     public function searchAddonCategories(Request $request)
  1530.     {
  1531.         $query = $request['query'];
  1532.  
  1533.         $addonCategories = AddonCategory::where('name', 'LIKE', '%' . $query . '%')->paginate(20);
  1534.         $addonCategories->loadCount('addons');
  1535.  
  1536.         $count = $addonCategories->total();
  1537.  
  1538.         return view('admin.addonCategories', array(
  1539.             'addonCategories' => $addonCategories,
  1540.             'count' => $count,
  1541.         ));
  1542.     }
  1543.  
  1544.     /**
  1545.      * @param Request $request
  1546.      */
  1547.     public function saveNewAddonCategory(Request $request)
  1548.     {
  1549.         $addonCategory = new AddonCategory();
  1550.  
  1551.         $addonCategory->name = $request->name;
  1552.         $addonCategory->type = $request->type;
  1553.         $addonCategory->description = $request->description;
  1554.         $addonCategory->user_id = Auth::user()->id;
  1555.  
  1556.         try {
  1557.             $addonCategory->save();
  1558.             if ($request->has('addon_names')) {
  1559.                 foreach ($request->addon_names as $key => $addon_name) {
  1560.                     $addon = new Addon();
  1561.                     $addon->name = $addon_name;
  1562.                     $addon->price = $request->addon_prices[$key];
  1563.                     $addon->user_id = Auth::user()->id;
  1564.                     $addon->addon_category_id = $addonCategory->id;
  1565.                     $addon->save();
  1566.                 }
  1567.             }
  1568.             return redirect()->route('admin.editAddonCategory', $addonCategory->id)->with(['success' => 'Addon Category Saved']);
  1569.         } catch (\Illuminate\Database\QueryException $qe) {
  1570.             return redirect()->back()->with(['message' => $qe->getMessage()]);
  1571.         } catch (Exception $e) {
  1572.             return redirect()->back()->with(['message' => $e->getMessage()]);
  1573.         } catch (\Throwable $th) {
  1574.             return redirect()->back()->with(['message' => $th]);
  1575.         }
  1576.     }
  1577.  
  1578.     public function newAddonCategory()
  1579.     {
  1580.         return view('admin.newAddonCategory');
  1581.     }
  1582.  
  1583.     /**
  1584.      * @param $id
  1585.      */
  1586.     public function deleteAddon($id)
  1587.     {
  1588.         $addon = Addon::find($id);
  1589.         $addon->delete();
  1590.  
  1591.         return redirect()->back()->with(['success' => 'Addon Deleted']);
  1592.     }
  1593.  
  1594.     /**
  1595.      * @param $id
  1596.      */
  1597.     public function getEditAddonCategory($id)
  1598.     {
  1599.         $addonCategory = AddonCategory::where('id', $id)->with('addons')->first();
  1600.  
  1601.         return view('admin.editAddonCategory', array(
  1602.             'addonCategory' => $addonCategory,
  1603.             'addons' => $addonCategory->addons,
  1604.         ));
  1605.  
  1606.     }
  1607.  
  1608.     /**
  1609.      * @param Request $request
  1610.      */
  1611.     public function updateAddonCategory(Request $request)
  1612.     {
  1613.         // dd($request->all());
  1614.         $addonCategory = AddonCategory::where('id', $request->id)->first();
  1615.  
  1616.         if ($addonCategory) {
  1617.  
  1618.             $addonCategory->name = $request->name;
  1619.             $addonCategory->type = $request->type;
  1620.             $addonCategory->description = $request->description;
  1621.  
  1622.             try {
  1623.                 $addonCategory->save();
  1624.                 $addons_old = $request->input('addon_old');
  1625.                 if ($request->has('addon_old')) {
  1626.                     foreach ($addons_old as $ad) {
  1627.                         $addon_old_update = Addon::find($ad['id']);
  1628.                         $addon_old_update->name = $ad['name'];
  1629.                         $addon_old_update->price = $ad['price'];
  1630.                         $addon_old_update->user_id = Auth::user()->id;
  1631.                         $addon_old_update->save();
  1632.                     }
  1633.                 }
  1634.  
  1635.                 if ($request->addon_names) {
  1636.                     foreach ($request->addon_names as $key => $addon_name) {
  1637.                         $addon = new Addon();
  1638.                         $addon->name = $addon_name;
  1639.                         $addon->price = $request->addon_prices[$key];
  1640.                         $addon->addon_category_id = $addonCategory->id;
  1641.                         $addon->user_id = Auth::user()->id;
  1642.                         $addon->save();
  1643.                     }
  1644.                 }
  1645.  
  1646.                 return redirect()->back()->with(['success' => 'Addon Category Updated']);
  1647.             } catch (\Illuminate\Database\QueryException $qe) {
  1648.                 return redirect()->back()->with(['message' => $qe->getMessage()]);
  1649.             } catch (Exception $e) {
  1650.                 return redirect()->back()->with(['message' => $e->getMessage()]);
  1651.             } catch (\Throwable $th) {
  1652.                 return redirect()->back()->with(['message' => $th]);
  1653.             }
  1654.         }
  1655.     }
  1656.  
  1657.     public function addons()
  1658.     {
  1659.  
  1660.         $addons = Addon::orderBy('id', 'DESC')->with('addon_category')->paginate(20);
  1661.         $count = $addons->total();
  1662.  
  1663.         $addonCategories = AddonCategory::all();
  1664.  
  1665.         return view('admin.addons', array(
  1666.             'addons' => $addons,
  1667.             'count' => $count,
  1668.             'addonCategories' => $addonCategories,
  1669.         ));
  1670.     }
  1671.  
  1672.     /**
  1673.      * @param Request $request
  1674.      */
  1675.     public function searchAddons(Request $request)
  1676.     {
  1677.         $query = $request['query'];
  1678.  
  1679.         $addons = Addon::where('name', 'LIKE', '%' . $query . '%')->with('addon_category')->paginate(20);
  1680.  
  1681.         $count = $addons->total();
  1682.  
  1683.         $addonCategories = AddonCategory::all();
  1684.  
  1685.         return view('admin.addons', array(
  1686.             'addons' => $addons,
  1687.             'count' => $count,
  1688.             'addonCategories' => $addonCategories,
  1689.         ));
  1690.     }
  1691.  
  1692.     /**
  1693.      * @param Request $request
  1694.      */
  1695.     public function saveNewAddon(Request $request)
  1696.     {
  1697.         // dd($request->all());
  1698.         $addon = new Addon();
  1699.  
  1700.         $addon->name = $request->name;
  1701.         $addon->price = $request->price;
  1702.         $addon->user_id = Auth::user()->id;
  1703.         $addon->addon_category_id = $request->addon_category_id;
  1704.  
  1705.         try {
  1706.             $addon->save();
  1707.             return redirect()->back()->with(['success' => 'Addon Saved']);
  1708.         } catch (\Illuminate\Database\QueryException $qe) {
  1709.             return redirect()->back()->with(['message' => $qe->getMessage()]);
  1710.         } catch (Exception $e) {
  1711.             return redirect()->back()->with(['message' => $e->getMessage()]);
  1712.         } catch (\Throwable $th) {
  1713.             return redirect()->back()->with(['message' => $th]);
  1714.         }
  1715.  
  1716.     }
  1717.  
  1718.     /**
  1719.      * @param $id
  1720.      */
  1721.     public function getEditAddon($id)
  1722.     {
  1723.         $addon = Addon::where('id', $id)->first();
  1724.         $addonCategories = AddonCategory::all();
  1725.         return view('admin.editAddon', array(
  1726.             'addon' => $addon,
  1727.             'addonCategories' => $addonCategories,
  1728.         ));
  1729.     }
  1730.  
  1731.     /**
  1732.      * @param Request $request
  1733.      */
  1734.     public function updateAddon(Request $request)
  1735.     {
  1736.         $addon = Addon::where('id', $request->id)->first();
  1737.  
  1738.         if ($addon) {
  1739.  
  1740.             $addon->name = $request->name;
  1741.             $addon->price = $request->price;
  1742.             $addon->addon_category_id = $request->addon_category_id;
  1743.  
  1744.             try {
  1745.                 $addon->save();
  1746.                 return redirect()->back()->with(['success' => 'Addon Updated']);
  1747.             } catch (\Illuminate\Database\QueryException $qe) {
  1748.                 return redirect()->back()->with(['message' => $qe->getMessage()]);
  1749.             } catch (Exception $e) {
  1750.                 return redirect()->back()->with(['message' => $e->getMessage()]);
  1751.             } catch (\Throwable $th) {
  1752.                 return redirect()->back()->with(['message' => $th]);
  1753.             }
  1754.         }
  1755.     }
  1756.  
  1757.     /**
  1758.      * @param $id
  1759.      */
  1760.     public function disableAddon($id)
  1761.     {
  1762.         $addon = Addon::where('id', $id)->firstOrFail();
  1763.         if ($addon) {
  1764.             $addon->toggleActive()->save();
  1765.             return redirect()->back()->with(['success' => 'Operation Successful']);
  1766.         } else {
  1767.             return redirect()->back()->with(['message' => 'Something Went Wrong']);
  1768.         }
  1769.     }
  1770.  
  1771.     /**
  1772.      * @param $id
  1773.      */
  1774.     public function addonsOfAddonCategory($id)
  1775.     {
  1776.         $addons = Addon::orderBy('id', 'DESC')->where('addon_category_id', $id)->with('addon_category')->paginate(20);
  1777.         $count = $addons->total();
  1778.         $addonCategories = AddonCategory::all();
  1779.  
  1780.         return view('admin.addons', array(
  1781.             'addons' => $addons,
  1782.             'count' => $count,
  1783.             'addonCategories' => $addonCategories,
  1784.         ));
  1785.     }
  1786.  
  1787.     public function itemcategories()
  1788.     {
  1789.         $itemCategories = ItemCategory::orderBy('id', 'DESC')->with('user')->get();
  1790.         $itemCategories->loadCount('items');
  1791.  
  1792.         $count = count($itemCategories);
  1793.  
  1794.         return view('admin.itemcategories', array(
  1795.             'itemCategories' => $itemCategories,
  1796.             'count' => $count,
  1797.         ));
  1798.     }
  1799.  
  1800.     /**
  1801.      * @param Request $request
  1802.      */
  1803.     public function createItemCategory(Request $request)
  1804.     {
  1805.         $itemCategory = new ItemCategory();
  1806.  
  1807.         $itemCategory->name = $request->name;
  1808.         $itemCategory->user_id = Auth::user()->id;
  1809.  
  1810.         try {
  1811.             $itemCategory->save();
  1812.             return redirect()->back()->with(['success' => 'Category Created']);
  1813.         } catch (\Illuminate\Database\QueryException $qe) {
  1814.             return redirect()->back()->with(['message' => $qe->getMessage()]);
  1815.         } catch (Exception $e) {
  1816.             return redirect()->back()->with(['message' => $e->getMessage()]);
  1817.         } catch (\Throwable $th) {
  1818.             return redirect()->back()->with(['message' => $th]);
  1819.         }
  1820.     }
  1821.  
  1822.     /**
  1823.      * @param $id
  1824.      */
  1825.     public function disableCategory($id)
  1826.     {
  1827.         $itemCategory = ItemCategory::where('id', $id)->first();
  1828.         if ($itemCategory) {
  1829.             $itemCategory->toggleEnable()->save();
  1830.             if (\Illuminate\Support\Facades\Request::ajax()) {
  1831.                 return response()->json(['success' => true]);
  1832.             }
  1833.             return redirect()->back()->with(['success' => 'Operation Successful']);
  1834.         } else {
  1835.             return redirect()->route('admin.itemcategories');
  1836.         }
  1837.     }
  1838.  
  1839.     /**
  1840.      * @param Request $request
  1841.      */
  1842.     public function updateItemCategory(Request $request)
  1843.     {
  1844.         $itemCategory = ItemCategory::where('id', $request->id)->firstOrFail();
  1845.         $itemCategory->name = $request->name;
  1846.         $itemCategory->save();
  1847.         return redirect()->back()->with(['success' => 'Operation Successful']);
  1848.     }
  1849.  
  1850.     public function pages()
  1851.     {
  1852.         $pages = Page::all();
  1853.         return view('admin.pages', array(
  1854.             'pages' => $pages,
  1855.         ));
  1856.     }
  1857.  
  1858.     /**
  1859.      * @param Request $request
  1860.      */
  1861.     public function saveNewPage(Request $request)
  1862.     {
  1863.         $page = new Page();
  1864.         $page->name = $request->name;
  1865.         $page->slug = Str::slug($request->slug, '-');
  1866.         $page->body = $request->body;
  1867.  
  1868.         try {
  1869.             $page->save();
  1870.             return redirect()->back()->with(['success' => 'New Page Created']);
  1871.         } catch (\Illuminate\Database\QueryException $qe) {
  1872.             return redirect()->back()->with(['message' => $qe->getMessage()]);
  1873.         } catch (Exception $e) {
  1874.             return redirect()->back()->with(['message' => $e->getMessage()]);
  1875.         } catch (\Throwable $th) {
  1876.             return redirect()->back()->with(['message' => $th]);
  1877.         }
  1878.     }
  1879.  
  1880.     /**
  1881.      * @param $id
  1882.      */
  1883.     public function getEditPage($id)
  1884.     {
  1885.         $page = Page::where('id', $id)->first();
  1886.  
  1887.         if ($page) {
  1888.             return view('admin.editPage', array(
  1889.                 'page' => $page,
  1890.             ));
  1891.         } else {
  1892.             return redirect()->route('admin.pages');
  1893.         }
  1894.     }
  1895.  
  1896.     /**
  1897.      * @param Request $request
  1898.      */
  1899.     public function updatePage(Request $request)
  1900.     {
  1901.         $page = Page::where('id', $request->id)->first();
  1902.  
  1903.         if ($page) {
  1904.             $page->name = $request->name;
  1905.             $page->slug = Str::slug($request->slug, '-');
  1906.             $page->body = $request->body;
  1907.             try {
  1908.                 $page->save();
  1909.                 return redirect()->back()->with(['success' => 'Page Updated']);
  1910.             } catch (\Illuminate\Database\QueryException $qe) {
  1911.                 return redirect()->back()->with(['message' => $qe->getMessage()]);
  1912.             } catch (Exception $e) {
  1913.                 return redirect()->back()->with(['message' => $e->getMessage()]);
  1914.             } catch (\Throwable $th) {
  1915.                 return redirect()->back()->with(['message' => $th]);
  1916.             }
  1917.         } else {
  1918.             return redirect()->route('admin.pages');
  1919.         }
  1920.     }
  1921.  
  1922.     /**
  1923.      * @param $id
  1924.      */
  1925.     public function deletePage($id)
  1926.     {
  1927.         $page = Page::where('id', $id)->first();
  1928.         if ($page) {
  1929.             $page->delete();
  1930.             return redirect()->back()->with(['success' => 'Deleted']);
  1931.         } else {
  1932.             return redirect()->route('admin.pages');
  1933.         }
  1934.     }
  1935.  
  1936.     public function restaurantpayouts()
  1937.     {
  1938.         $count = RestaurantPayout::count();
  1939.  
  1940.         $restaurantPayouts = RestaurantPayout::orderBy('id', 'DESC')->paginate(20);
  1941.  
  1942.         return view('admin.restaurantPayouts', array(
  1943.             'restaurantPayouts' => $restaurantPayouts,
  1944.             'count' => $count,
  1945.         ));
  1946.     }
  1947.  
  1948.     /**
  1949.      * @param $id
  1950.      */
  1951.     public function viewRestaurantPayout($id)
  1952.     {
  1953.         $restaurantPayout = RestaurantPayout::where('id', $id)->first();
  1954.  
  1955.         if ($restaurantPayout) {
  1956.  
  1957.             $payoutData = StorePayoutDetail::where('restaurant_id', $restaurantPayout->restaurant->id)->first();
  1958.             if ($payoutData) {
  1959.                 $payoutData = json_decode($payoutData->data);
  1960.             } else {
  1961.                 $payoutData = null;
  1962.             }
  1963.  
  1964.             return view('admin.viewRestaurantPayout', array(
  1965.                 'restaurantPayout' => $restaurantPayout,
  1966.                 'payoutData' => $payoutData,
  1967.             ));
  1968.         }
  1969.     }
  1970.  
  1971.     /**
  1972.      * @param Request $request
  1973.      */
  1974.     public function updateRestaurantPayout(Request $request)
  1975.     {
  1976.         $restaurantPayout = RestaurantPayout::where('id', $request->id)->first();
  1977.  
  1978.         if ($restaurantPayout) {
  1979.             $restaurantPayout->status = $request->status;
  1980.             $restaurantPayout->transaction_mode = $request->transaction_mode;
  1981.             $restaurantPayout->transaction_id = $request->transaction_id;
  1982.             $restaurantPayout->message = $request->message;
  1983.             try {
  1984.                 $restaurantPayout->save();
  1985.                 return redirect()->back()->with(['success' => 'Restaurant Payout Updated']);
  1986.             } catch (\Illuminate\Database\QueryException $qe) {
  1987.                 return redirect()->back()->with(['message' => $qe->getMessage()]);
  1988.             } catch (Exception $e) {
  1989.                 return redirect()->back()->with(['message' => $e->getMessage()]);
  1990.             } catch (\Throwable $th) {
  1991.                 return redirect()->back()->with(['message' => $th]);
  1992.             }
  1993.  
  1994.         }
  1995.     }
  1996.  
  1997.     public function fixUpdateIssues()
  1998.     {
  1999.         try {
  2000.  
  2001.             $duplicates = AcceptDelivery::whereIn('order_id', function ($query) {
  2002.                 $query->select('order_id')->from('accept_deliveries')->groupBy('order_id')->havingRaw('count(*) > 1');
  2003.             })->get();
  2004.  
  2005.             foreach ($duplicates as $duplicate) {
  2006.  
  2007.                 if ($duplicate->is_completed == 0 && ($duplicate->order->orderstatus_id == 5 || $duplicate->order->orderstatus_id == 6)) {
  2008.                     //just delete
  2009.                     $duplicate->delete(); //delete the duplicate entry in db
  2010.                 }
  2011.  
  2012.                 if ($duplicate->is_completed == 0 && $duplicate->order->orderstatus_id == 3) {
  2013.                     //delete and change orderstatus to 2
  2014.                     $duplicate->order->orderstatus_id = 2; //change order status to not delivery assigned
  2015.                     $duplicate->order->save(); //save the order
  2016.                     $duplicate->delete(); //delete the duplicate entry in db
  2017.                 }
  2018.  
  2019.             }
  2020.  
  2021.             // ** MIGRATE ** //
  2022.             //first migrate the db if any new db are avaliable...
  2023.             Artisan::call('migrate', [
  2024.                 '--force' => true,
  2025.             ]);
  2026.             // ** MIGRATE END ** //
  2027.  
  2028.             // ** SETTINGS ** //
  2029.             $data = file_get_contents(storage_path('data/data.json'));
  2030.             $data = json_decode($data);
  2031.             $dbSet = [];
  2032.             foreach ($data as $s) {
  2033.                 //check if the setting key already exists, if exists, do nothing..
  2034.                 $settingAlreadyExists = Setting::where('key', $s->key)->first();
  2035.                 //else create an array of settings which doesnt exists...
  2036.                 if (!$settingAlreadyExists) {
  2037.                     $dbSet[] = [
  2038.                         'key' => $s->key,
  2039.                         'value' => $s->value,
  2040.                     ];
  2041.                 }
  2042.             }
  2043.             //insert new settings keys into settings table.
  2044.             DB::table('settings')->insert($dbSet);
  2045.             // ** SETTINGS END ** //
  2046.  
  2047.             // ** PAYMENTGATEWAYS ** //
  2048.             // check if paystack is installed
  2049.             $hasPayStack = PaymentGateway::where('name', 'PayStack')->first();
  2050.             if (!$hasPayStack) {
  2051.                 //if not, then install new payment gateway "PayStack"
  2052.                 $payStackPaymentGateway = new PaymentGateway();
  2053.                 $payStackPaymentGateway->name = 'PayStack';
  2054.                 $payStackPaymentGateway->description = 'PayStack Payment Gateway';
  2055.                 $payStackPaymentGateway->is_active = 0;
  2056.                 $payStackPaymentGateway->save();
  2057.             }
  2058.             // check if razorpay is installed
  2059.             $hasRazorPay = PaymentGateway::where('name', 'Razorpay')->first();
  2060.             if (!$hasRazorPay) {
  2061.                 //if not, then install new payment gateway "Razorpay"
  2062.                 $razorPayPaymentGateway = new PaymentGateway();
  2063.                 $razorPayPaymentGateway->name = 'Razorpay';
  2064.                 $razorPayPaymentGateway->description = 'Razorpay Payment Gateway';
  2065.                 $razorPayPaymentGateway->is_active = 0;
  2066.                 $razorPayPaymentGateway->save();
  2067.             }
  2068.             // ** END PAYMENTGATEWAYS ** //
  2069.  
  2070.             $hasPayMongo = PaymentGateway::where('name', 'PayMongo')->first();
  2071.             if (!$hasPayMongo) {
  2072.                 //if not, then install new payment gateway "PayMongo"
  2073.                 $payMongoPaymentGateway = new PaymentGateway();
  2074.                 $payMongoPaymentGateway->name = 'PayMongo';
  2075.                 $payMongoPaymentGateway->description = 'PayMongo Payment Gateway';
  2076.                 $payMongoPaymentGateway->is_active = 0;
  2077.                 $payMongoPaymentGateway->save();
  2078.             }
  2079.  
  2080.             $hasMercadoPago = PaymentGateway::where('name', 'MercadoPago')->first();
  2081.             if (!$hasMercadoPago) {
  2082.                 //if not, then install new payment gateway "MercadoPago"
  2083.                 $mercadoPagoPaymentGateway = new PaymentGateway();
  2084.                 $mercadoPagoPaymentGateway->name = 'MercadoPago';
  2085.                 $mercadoPagoPaymentGateway->description = 'MercadoPago Payment Gateway';
  2086.                 $mercadoPagoPaymentGateway->is_active = 0;
  2087.                 $mercadoPagoPaymentGateway->save();
  2088.             }
  2089.  
  2090.             $hasPaytm = PaymentGateway::where('name', 'Paytm')->first();
  2091.             if (!$hasPaytm) {
  2092.                 //if not, then install new payment gateway "MercadoPago"
  2093.                 $paytmPaymentGateway = new PaymentGateway();
  2094.                 $paytmPaymentGateway->name = 'Paytm';
  2095.                 $paytmPaymentGateway->description = 'Paytm Payment Gateway';
  2096.                 $paytmPaymentGateway->is_active = 0;
  2097.                 $paytmPaymentGateway->save();
  2098.             }
  2099.  
  2100.             $hasFlutterwave = PaymentGateway::where('name', 'Flutterwave')->first();
  2101.             if (!$hasFlutterwave) {
  2102.                 $flutterwavePaymentGateway = new PaymentGateway();
  2103.                 $flutterwavePaymentGateway->name = 'Flutterwave';
  2104.                 $flutterwavePaymentGateway->description = 'Flutterwave Payment Gateway';
  2105.                 $flutterwavePaymentGateway->is_active = 0;
  2106.                 $flutterwavePaymentGateway->save();
  2107.             }
  2108.  
  2109.             $hasMsg91 = SmsGateway::where('gateway_name', 'MSG91')->first();
  2110.             if (!$hasMsg91) {
  2111.                 //if not, then install new sms gateway gateway "MSG91"
  2112.                 $msg91Gateway = new SmsGateway();
  2113.                 $msg91Gateway->gateway_name = 'MSG91';
  2114.                 $msg91Gateway->save();
  2115.             }
  2116.  
  2117.             $hasTwilio = SmsGateway::where('gateway_name', 'TWILIO')->first();
  2118.             if (!$hasTwilio) {
  2119.                 //if not, then install new sms gateway gateway "TWILIO"
  2120.                 $twilioGateway = new SmsGateway();
  2121.                 $twilioGateway->gateway_name = 'TWILIO';
  2122.                 $twilioGateway->save();
  2123.             }
  2124.  
  2125.             // ** ORDERSTATUS ** //
  2126.             DB::table('orderstatuses')->truncate();
  2127.             DB::statement("INSERT INTO `orderstatuses` (`id`, `name`) VALUES (1, 'Order Placed'), (2, 'Preparing Order'), (3, 'Delivery Guy Assigned'), (4, 'Order Picked Up'), (5, 'Delivered'), (6, 'Canceled'), (7, 'Ready For Pick Up'), (8, 'Awaiting Payment'), (9, 'Payment Failed')");
  2128.  
  2129.             /* Save new keys for translations languages */
  2130.             $langData = file_get_contents(storage_path('language/english.json'));
  2131.             $a1 = json_decode($langData, true);
  2132.  
  2133.             $translations = Translation::all();
  2134.  
  2135.             foreach ($translations as $translation) {
  2136.                 //get the existing data of a translated language
  2137.                 $a2 = json_decode($translation->data, true);
  2138.  
  2139.                 //get the difference between the master file and the existing translation, and get the non-existing key
  2140.                 $diff = array_diff_key($a1, $a2);
  2141.  
  2142.                 //merge the non existing keys with the existing translation
  2143.                 $merged = array_merge($a2, $diff);
  2144.  
  2145.                 //save the translation
  2146.                 $translation->data = json_encode($merged);
  2147.                 $translation->save();
  2148.             }
  2149.  
  2150.             /* Create Permissions */
  2151.             Schema::disableForeignKeyConstraints();
  2152.             DB::table('permissions')->truncate();
  2153.             Schema::enableForeignKeyConstraints();
  2154.  
  2155.             app(PermissionRegistrar::class)->forgetCachedPermissions();
  2156.  
  2157.             Permission::create(['name' => 'dashboard_view', 'readable_name' => 'View Admin Dashboard']);
  2158.  
  2159.             Permission::create(['name' => 'stores_view', 'readable_name' => 'View Stores']);
  2160.             Permission::create(['name' => 'stores_edit', 'readable_name' => 'Edit Stores']);
  2161.             Permission::create(['name' => 'stores_sort', 'readable_name' => 'Sort Stores']);
  2162.             Permission::create(['name' => 'approve_stores', 'readable_name' => 'Approve Pending Stores']);
  2163.             Permission::create(['name' => 'stores_add', 'readable_name' => 'Add Store']);
  2164.             Permission::create(['name' => 'login_as_store_owner', 'readable_name' => 'Login as Store Owner']);
  2165.  
  2166.             Permission::create(['name' => 'addon_categories_view', 'readable_name' => 'View Addon Categories']);
  2167.             Permission::create(['name' => 'addon_categories_edit', 'readable_name' => 'Edit Addon Categories']);
  2168.             Permission::create(['name' => 'addon_categories_add', 'readable_name' => 'Add Addon Category']);
  2169.  
  2170.             Permission::create(['name' => 'addons_view', 'readable_name' => 'View Addons']);
  2171.             Permission::create(['name' => 'addons_edit', 'readable_name' => 'Edit Addons']);
  2172.             Permission::create(['name' => 'addons_add', 'readable_name' => 'Add Addon']);
  2173.             Permission::create(['name' => 'addons_actions', 'readable_name' => 'Addon Actions']);
  2174.  
  2175.             Permission::create(['name' => 'menu_categories_view', 'readable_name' => 'View Menu Categories']);
  2176.             Permission::create(['name' => 'menu_categories_edit', 'readable_name' => 'Edit Menu Categories']);
  2177.             Permission::create(['name' => 'menu_categories_add', 'readable_name' => 'Add Menu Category']);
  2178.             Permission::create(['name' => 'menu_categories_actions', 'readable_name' => 'Menu Category Actions']);
  2179.  
  2180.             Permission::create(['name' => 'items_view', 'readable_name' => 'View Items']);
  2181.             Permission::create(['name' => 'items_edit', 'readable_name' => 'Edit Items']);
  2182.             Permission::create(['name' => 'items_add', 'readable_name' => 'Add Item']);
  2183.             Permission::create(['name' => 'items_actions', 'readable_name' => 'Item Actions']);
  2184.  
  2185.             Permission::create(['name' => 'all_users_view', 'readable_name' => 'View All Users']);
  2186.             Permission::create(['name' => 'all_users_edit', 'readable_name' => 'Edit All Users']);
  2187.             Permission::create(['name' => 'all_users_wallet', 'readable_name' => 'Users Wallet Transactions']);
  2188.  
  2189.             Permission::create(['name' => 'delivery_guys_view', 'readable_name' => 'View Delivery Guy Users']);
  2190.             Permission::create(['name' => 'delivery_guys_manage_stores', 'readable_name' => 'Manage Delivery Guy Stores']);
  2191.  
  2192.             Permission::create(['name' => 'store_owners_view', 'readable_name' => 'View Store Owner Users']);
  2193.             Permission::create(['name' => 'store_owners_manage_stores', 'readable_name' => 'Manage Store Owner Stores']);
  2194.  
  2195.             Permission::create(['name' => 'order_view', 'readable_name' => 'View Orders']);
  2196.             Permission::create(['name' => 'order_actions', 'readable_name' => 'Order Actions']);
  2197.  
  2198.             Permission::create(['name' => 'promo_sliders_manage', 'readable_name' => 'Manage Promo Sliders']);
  2199.             Permission::create(['name' => 'store_category_sliders_manage', 'readable_name' => 'Manage Category Sliders']);
  2200.             Permission::create(['name' => 'coupons_manage', 'readable_name' => 'Manage Coupons']);
  2201.             Permission::create(['name' => 'pages_manage', 'readable_name' => 'Manage Pages']);
  2202.             Permission::create(['name' => 'popular_location_manage', 'readable_name' => 'Manage Popular Geo Locations']);
  2203.             Permission::create(['name' => 'send_notification_manage', 'readable_name' => 'Send Notifications']);
  2204.             Permission::create(['name' => 'store_payouts_manage', 'readable_name' => 'Manage Store Payouts']);
  2205.             Permission::create(['name' => 'translations_manage', 'readable_name' => 'Manage Translations']);
  2206.             Permission::create(['name' => 'delivery_collection_manage', 'readable_name' => 'Manage Delivery Collection']);
  2207.             Permission::create(['name' => 'delivery_collection_logs_view', 'readable_name' => 'View Delivery Collection Logs']);
  2208.             Permission::create(['name' => 'wallet_transactions_view', 'readable_name' => 'View Wallet Transactions']);
  2209.             Permission::create(['name' => 'reports_view', 'readable_name' => 'View Reports']);
  2210.  
  2211.             Permission::create(['name' => 'settings_manage', 'readable_name' => 'Manage Settings']);
  2212.  
  2213.             $user = User::where('id', '1')->first();
  2214.             $user->givePermissionTo(Permission::all());
  2215.             /* END Create Permission and add all permissions to Admin */
  2216.  
  2217.             /* END Save new keys for translations languages */
  2218.             /** CLEAR LARAVEL CACHES **/
  2219.             Artisan::call('cache:clear');
  2220.             Artisan::call('view:clear');
  2221.             /** END CLEAR LARAVEL CACHES **/
  2222.  
  2223.             return redirect()->back()->with(['success' => 'Operation Successful']);
  2224.         } catch (\Illuminate\Database\QueryException $qe) {
  2225.             return redirect()->back()->with(['message' => $qe->getMessage()]);
  2226.         } catch (Exception $e) {
  2227.             return redirect()->back()->with(['message' => $e->getMessage()]);
  2228.         } catch (\Throwable $th) {
  2229.             return redirect()->back()->with(['message' => $th]);
  2230.         }
  2231.  
  2232.     }
  2233.  
  2234.     /**
  2235.      * @param Request $request
  2236.      */
  2237.     public function addMoneyToWallet(Request $request)
  2238.     {
  2239.         $user = User::where('id', $request->user_id)->first();
  2240.  
  2241.         if ($user) {
  2242.             try {
  2243.                 $user->deposit($request->add_amount * 100, ['description' => $request->add_amount_description]);
  2244.  
  2245.                 $alert = new PushNotify();
  2246.                 $alert->sendWalletAlert($request->user_id, $request->add_amount, $request->add_amount_description, $type = 'deposit');
  2247.  
  2248.                 return redirect()->back()->with(['success' => config('appSettings.walletName') . ' Updated']);
  2249.             } catch (\Illuminate\Database\QueryException $qe) {
  2250.                 return redirect()->back()->with(['message' => $qe->getMessage()]);
  2251.             } catch (Exception $e) {
  2252.                 return redirect()->back()->with(['message' => $e->getMessage()]);
  2253.             } catch (\Throwable $th) {
  2254.                 return redirect()->back()->with(['message' => $th]);
  2255.             }
  2256.         }
  2257.     }
  2258.  
  2259.     /**
  2260.      * @param Request $request
  2261.      */
  2262.     public function substractMoneyFromWallet(Request $request)
  2263.     {
  2264.         $user = User::where('id', $request->user_id)->first();
  2265.  
  2266.         if ($user) {
  2267.             if ($user->balanceFloat * 100 >= $request->substract_amount * 100) {
  2268.                 try {
  2269.                     $user->withdraw($request->substract_amount * 100, ['description' => $request->substract_amount_description]);
  2270.  
  2271.                     $alert = new PushNotify();
  2272.                     $alert->sendWalletAlert($request->user_id, $request->substract_amount, $request->substract_amount_description, $type = 'withdraw');
  2273.  
  2274.                     return redirect()->back()->with(['success' => config('appSettings.walletName') . ' Updated']);
  2275.                 } catch (\Illuminate\Database\QueryException $qe) {
  2276.                     return redirect()->back()->with(['message' => $qe->getMessage()]);
  2277.                 } catch (Exception $e) {
  2278.                     return redirect()->back()->with(['message' => $e->getMessage()]);
  2279.                 } catch (\Throwable $th) {
  2280.                     return redirect()->back()->with(['message' => $th]);
  2281.                 }
  2282.             } else {
  2283.                 return redirect()->back()->with(['message' => 'Substract amount is less that the user balance amount.']);
  2284.             }
  2285.  
  2286.         }
  2287.     }
  2288.  
  2289.     public function walletTransactions()
  2290.     {
  2291.         $count = $transactions = Transaction::count();
  2292.  
  2293.         $transactions = Transaction::orderBy('id', 'DESC')->paginate(20);
  2294.  
  2295.         return view('admin.viewAllWalletTransactions', array(
  2296.             'transactions' => $transactions,
  2297.             'count' => $count,
  2298.         ));
  2299.  
  2300.     }
  2301.  
  2302.     /**
  2303.      * @param Request $request
  2304.      */
  2305.     public function searchWalletTransactions(Request $request)
  2306.     {
  2307.         $query = $request['query'];
  2308.  
  2309.         $transactions = Transaction::where('uuid', 'LIKE', '%' . $query . '%')
  2310.             ->paginate(20);
  2311.  
  2312.         $count = $transactions->total();
  2313.  
  2314.         return view('admin.viewAllWalletTransactions', array(
  2315.             'transactions' => $transactions,
  2316.             'query' => $query,
  2317.             'count' => $count,
  2318.         ));
  2319.     }
  2320.  
  2321.     /**
  2322.      * @param Request $request
  2323.      * @param TranslationHelper $translationHelper
  2324.      */
  2325.     public function cancelOrderFromAdmin(Request $request, TranslationHelper $translationHelper)
  2326.     {
  2327.         $keys = ['orderRefundWalletComment', 'orderPartialRefundWalletComment'];
  2328.         $translationData = $translationHelper->getDefaultLanguageValuesForKeys($keys);
  2329.  
  2330.         $order = Order::where('id', $request->order_id)->first();
  2331.  
  2332.         $user = User::where('id', $order->user_id)->first();
  2333.  
  2334.         try {
  2335.             if ($order->orderstatus_id != 5 || $order->orderstatus_id != 6) {
  2336.                 //5 = completed, 6 = canceled
  2337.  
  2338.                 //check refund type
  2339.  
  2340.                 // if refund_type === NOREFUND -> refund the wallet amount if present.
  2341.                 if ($request->refund_type == 'NOREFUND' && $order->wallet_amount != null) {
  2342.                     $user->deposit($order->wallet_amount * 100, ['description' => $translationData->orderRefundWalletComment . $order->unique_order_id]);
  2343.                 }
  2344.  
  2345.                 //give full refund, even if not paid with wallet
  2346.                 if ($request->refund_type == 'FULL') {
  2347.                     $user->deposit($order->total * 100, ['description' => $translationData->orderRefundWalletComment . $order->unique_order_id]);
  2348.                 }
  2349.  
  2350.                 //give half refund, even if not paid with wallet
  2351.                 if ($request->refund_type == 'HALF') {
  2352.                     $user->deposit($order->total / 2 * 100, ['description' => $translationData->orderPartialRefundWalletComment . $order->unique_order_id]);
  2353.                 }
  2354.  
  2355.                 //cancel order
  2356.                 $order->orderstatus_id = 6; //6 means canceled..
  2357.                 $order->save();
  2358.  
  2359.                 //throw notification to user
  2360.                 if (config('appSettings.enablePushNotificationOrders') == 'true') {
  2361.                     $notify = new PushNotify();
  2362.                     $notify->sendPushNotification('6', $order->user_id, $order->unique_order_id);
  2363.                 }
  2364.  
  2365.                 return redirect()->back()->with(['success' => 'Operation Successful']);
  2366.             }
  2367.         } catch (\Illuminate\Database\QueryException $qe) {
  2368.             return redirect()->back()->with(['message' => $qe->getMessage()]);
  2369.         } catch (Exception $e) {
  2370.             return redirect()->back()->with(['message' => $e->getMessage()]);
  2371.         } catch (\Throwable $th) {
  2372.             return redirect()->back()->with(['message' => $th]);
  2373.         }
  2374.  
  2375.     }
  2376.  
  2377.     /**
  2378.      * @param Request $request
  2379.      */
  2380.     public function acceptOrderFromAdmin(Request $request)
  2381.     {
  2382.  
  2383.         $order = Order::where('id', $request->id)->first();
  2384.  
  2385.         if ($order->orderstatus_id == '1') {
  2386.             $order->orderstatus_id = 2;
  2387.             $order->save();
  2388.  
  2389.             $restaurant = Restaurant::where('id', $order->restaurant_id)->first();
  2390.             if ($restaurant) {
  2391.  
  2392.                 // Send SMS Notification to Delivery Guy
  2393.                 if (config('appSettings.smsDeliveryNotify') == 'true') {
  2394.                     //get restaurant
  2395.  
  2396.                     //get all pivot users of restaurant (delivery guy/ res owners)
  2397.                     $pivotUsers = $restaurant->users()
  2398.                         ->wherePivot('restaurant_id', $order->restaurant_id)
  2399.                         ->get();
  2400.                     //filter only res owner and send notification.
  2401.                     foreach ($pivotUsers as $pU) {
  2402.                         if ($pU->hasRole('Delivery Guy')) {
  2403.                             //send Notification to Delivery Guy
  2404.                             $message = config('appSettings.defaultSmsDeliveryMsg');
  2405.                             $otp = null;
  2406.                             $smsnotify = new Sms();
  2407.                             $smsnotify->processSmsAction('OD_NOTIFY', $pU->phone, $otp, $message);
  2408.                         }
  2409.                     }
  2410.  
  2411.                 }
  2412.                 // END Send SMS Notification to Delivery Guy
  2413.  
  2414.                 // Send Push Notification to Delivery Guy
  2415.                 if (config('appSettings.enablePushNotificationOrders') == 'true') {
  2416.                     //get restaurant
  2417.                     $restaurant = Restaurant::where('id', $order->restaurant_id)->first();
  2418.  
  2419.                     //get all pivot users of restaurant (delivery guy/ res owners)
  2420.                     $pivotUsers = $restaurant->users()
  2421.                         ->wherePivot('restaurant_id', $order->restaurant_id)
  2422.                         ->get();
  2423.                     //filter only res owner and send notification.
  2424.                     foreach ($pivotUsers as $pU) {
  2425.                         if ($pU->hasRole('Delivery Guy')) {
  2426.                             //send Notification to Res Owner
  2427.                             $notify = new PushNotify();
  2428.                             $notify->sendPushNotification('TO_DELIVERY', $pU->id, $order->unique_order_id);
  2429.                         }
  2430.                     }
  2431.                 }
  2432.                 // END Send Push Notification to Delivery Guy
  2433.             }
  2434.  
  2435.             return redirect()->back()->with(array('success' => 'Order Accepted'));
  2436.         } else {
  2437.             return redirect()->back()->with(array('message' => 'Something went wrong.'));
  2438.         }
  2439.     }
  2440.  
  2441.     /**
  2442.      * @param Request $request
  2443.      */
  2444.     public function assignDeliveryFromAdmin(Request $request)
  2445.     {
  2446.         try {
  2447.             $assignment = new AcceptDelivery;
  2448.             $assignment->order_id = $request->order_id;
  2449.             $assignment->user_id = $request->user_id;
  2450.             $assignment->customer_id = $request->customer_id;
  2451.             $assignment->is_complete = 0;
  2452.             $assignment->created_at = Carbon::now();
  2453.             $assignment->updated_at = Carbon::now();
  2454.             $assignment->save();
  2455.  
  2456.             $order = Order::where('id', $request->order_id)->first();
  2457.             $order->orderstatus_id = 3;
  2458.             $order->save();
  2459.  
  2460.             $restaurant = Restaurant::where('id', $order->restaurant_id)->first();
  2461.             if ($restaurant) {
  2462.  
  2463.                 // Send SMS Notification to Delivery Guy
  2464.                 if (config('appSettings.smsDeliveryNotify') == 'true') {
  2465.                     //get restaurant
  2466.  
  2467.                     //get all pivot users of restaurant (delivery guy/ res owners)
  2468.                     $pivotUsers = $restaurant->users()
  2469.                         ->wherePivot('restaurant_id', $order->restaurant_id)
  2470.                         ->get();
  2471.                     //filter only res owner and send notification.
  2472.                     foreach ($pivotUsers as $pU) {
  2473.                         if ($pU->hasRole('Delivery Guy')) {
  2474.                             //send Notification to Delivery Guy
  2475.                             $message = config('appSettings.defaultSmsDeliveryMsg');
  2476.                             $otp = null;
  2477.                             $smsnotify = new Sms();
  2478.                             $smsnotify->processSmsAction('OD_NOTIFY', $pU->phone, $otp, $message);
  2479.                         }
  2480.                     }
  2481.  
  2482.                 }
  2483.                 // END Send SMS Notification to Delivery Guy
  2484.  
  2485.                 // Send Push Notification to Delivery Guy
  2486.                 if (config('appSettings.enablePushNotificationOrders') == 'true') {
  2487.                     //get restaurant
  2488.                     $restaurant = Restaurant::where('id', $order->restaurant_id)->first();
  2489.  
  2490.                     //get all pivot users of restaurant (delivery guy/ res owners)
  2491.                     $pivotUsers = $restaurant->users()
  2492.                         ->wherePivot('restaurant_id', $order->restaurant_id)
  2493.                         ->get();
  2494.                     //filter only res owner and send notification.
  2495.                     foreach ($pivotUsers as $pU) {
  2496.                         if ($pU->hasRole('Delivery Guy')) {
  2497.                             //send Notification to Res Owner
  2498.                             $notify = new PushNotify();
  2499.                             $notify->sendPushNotification('TO_DELIVERY', $pU->id, $order->unique_order_id);
  2500.                         }
  2501.                     }
  2502.                 }
  2503.                 // END Send Push Notification to Delivery Guy
  2504.             }
  2505.  
  2506.             return redirect()->back()->with(array('success' => 'Order Assigned'));
  2507.         } catch (Illuminate\Database\QueryException $e) {
  2508.             $errorCode = $e->errorInfo[1];
  2509.             if ($errorCode == 1062) {
  2510.                 return redirect()->back()->with(array('message' => 'Something Went Wrong'));
  2511.             }
  2512.         }
  2513.     }
  2514.  
  2515.     /**
  2516.      * @param Request $request
  2517.      */
  2518.     public function reAssignDeliveryFromAdmin(Request $request)
  2519.     {
  2520.  
  2521.         $assignment = AcceptDelivery::where('order_id', $request->order_id)->first();
  2522.         $assignment->user_id = $request->user_id;
  2523.         $assignment->is_complete = 0;
  2524.         $assignment->updated_at = Carbon::now();
  2525.         $assignment->save();
  2526.  
  2527.         return redirect()->back()->with(array('success' => 'Order reassigned successfully'));
  2528.     }
  2529.  
  2530.     public function popularGeoLocations()
  2531.     {
  2532.         $locations = PopularGeoPlace::orderBy('id', 'DESC')->paginate(20);
  2533.         $locationsAll = PopularGeoPlace::all();
  2534.         $count = count($locationsAll);
  2535.         return view('admin.popularGeoLocations', array(
  2536.             'locations' => $locations,
  2537.             'count' => $count,
  2538.         ));
  2539.     }
  2540.  
  2541.     /**
  2542.      * @param Request $request
  2543.      */
  2544.     public function saveNewPopularGeoLocation(Request $request)
  2545.     {
  2546.  
  2547.         // dd($request->all());
  2548.         $location = new PopularGeoPlace();
  2549.  
  2550.         $location->name = $request->name;
  2551.  
  2552.         $location->latitude = $request->latitude;
  2553.         $location->longitude = $request->longitude;
  2554.  
  2555.         if ($request->is_active == 'true') {
  2556.             $location->is_active = true;
  2557.         } else {
  2558.             $location->is_active = false;
  2559.         }
  2560.  
  2561.         try {
  2562.             $location->save();
  2563.             return redirect()->back()->with(['success' => 'Location Saved']);
  2564.         } catch (\Illuminate\Database\QueryException $qe) {
  2565.             return redirect()->back()->with(['message' => $qe->getMessage()]);
  2566.         } catch (Exception $e) {
  2567.             return redirect()->back()->with(['message' => $e->getMessage()]);
  2568.         } catch (\Throwable $th) {
  2569.             return redirect()->back()->with(['message' => $th]);
  2570.         }
  2571.     }
  2572.  
  2573.     /**
  2574.      * @param $id
  2575.      */
  2576.     public function disablePopularGeoLocation($id)
  2577.     {
  2578.         $location = PopularGeoPlace::where('id', $id)->first();
  2579.         if ($location) {
  2580.             $location->toggleActive()->save();
  2581.             return redirect()->back()->with(['success' => 'Location Disabled']);
  2582.         } else {
  2583.             return redirect()->route('admin.popularGeoLocations');
  2584.         }
  2585.     }
  2586.  
  2587.     /**
  2588.      * @param $id
  2589.      */
  2590.     public function deletePopularGeoLocation($id)
  2591.     {
  2592.         $location = PopularGeoPlace::where('id', $id)->first();
  2593.  
  2594.         if ($location) {
  2595.             $location->delete();
  2596.  
  2597.             return redirect()->route('admin.popularGeoLocations')->with(['success' => 'Location Deleted']);
  2598.         } else {
  2599.             return redirect()->route('admin.popularGeoLocations');
  2600.         }
  2601.     }
  2602.  
  2603.     public function translations()
  2604.     {
  2605.         $translations = Translation::orderBy('id', 'DESC')->get();
  2606.         $count = count($translations);
  2607.  
  2608.         return view('admin.translations', array(
  2609.             'translations' => $translations,
  2610.             'count' => $count,
  2611.         ));
  2612.     }
  2613.  
  2614.     public function newTranslation()
  2615.     {
  2616.         return view('admin.newTranslation');
  2617.     }
  2618.  
  2619.     /**
  2620.      * @param Request $request
  2621.      */
  2622.     public function saveNewTranslation(Request $request)
  2623.     {
  2624.         // dd($request->all());
  2625.         // dd(json_encode($request->except(['language_name'])));
  2626.  
  2627.         $translation = new Translation();
  2628.  
  2629.         $translation->language_name = $request->language_name;
  2630.         $translation->data = json_encode($request->except(['language_name', '_token']));
  2631.  
  2632.         try {
  2633.             $translation->save();
  2634.             return redirect()->route('admin.translations')->with(['success' => 'Translation Created']);
  2635.         } catch (\Illuminate\Database\QueryException $qe) {
  2636.             return redirect()->back()->with(['message' => $qe->getMessage()]);
  2637.         } catch (Exception $e) {
  2638.             return redirect()->back()->with(['message' => $e->getMessage()]);
  2639.         } catch (\Throwable $th) {
  2640.             return redirect()->back()->with(['message' => $th]);
  2641.         }
  2642.     }
  2643.  
  2644.     /**
  2645.      * @param $id
  2646.      */
  2647.     public function editTranslation($id)
  2648.     {
  2649.  
  2650.         $translation = Translation::where('id', $id)->first();
  2651.         // dd(json_decode($translation->data));
  2652.  
  2653.         if ($translation) {
  2654.             return view('admin.editTranslation', array(
  2655.                 'translation_id' => $translation->id,
  2656.                 'language_name' => $translation->language_name,
  2657.                 'data' => json_decode($translation->data),
  2658.             ));
  2659.         } else {
  2660.             return redirect()->route('admin.translations')->with(['message' => 'Translation Not Found']);
  2661.         }
  2662.  
  2663.     }
  2664.  
  2665.     /**
  2666.      * @param Request $request
  2667.      */
  2668.     public function updateTranslation(Request $request)
  2669.     {
  2670.         $translation = Translation::where('id', $request->translation_id)->first();
  2671.  
  2672.         $translation->language_name = $request->language_name;
  2673.         $translation->data = json_encode($request->except(['translation_id', 'language_name', '_token']));
  2674.  
  2675.         try {
  2676.             $translation->save();
  2677.             return redirect()->back()->with(['success' => 'Translation Updated']);
  2678.         } catch (\Illuminate\Database\QueryException $qe) {
  2679.             return redirect()->back()->with(['message' => $qe->getMessage()]);
  2680.         } catch (Exception $e) {
  2681.             return redirect()->back()->with(['message' => $e->getMessage()]);
  2682.         } catch (\Throwable $th) {
  2683.             return redirect()->back()->with(['message' => $th]);
  2684.         }
  2685.  
  2686.     }
  2687.  
  2688.     /**
  2689.      * @param $id
  2690.      */
  2691.     public function disableTranslation($id)
  2692.     {
  2693.         $translation = Translation::where('id', $id)->first();
  2694.         if ($translation) {
  2695.             $translation->toggleEnable()->save();
  2696.             return redirect()->back()->with(['success' => 'Operation Successful']);
  2697.         } else {
  2698.             return redirect()->route('admin.translations');
  2699.         }
  2700.     }
  2701.  
  2702.     /**
  2703.      * @param $id
  2704.      */
  2705.     public function deleteTranslation($id)
  2706.     {
  2707.         $translation = Translation::where('id', $id)->first();
  2708.         if ($translation) {
  2709.             $translation->delete();
  2710.             return redirect()->route('admin.translations')->with(['success' => 'Translation Deleted']);
  2711.         } else {
  2712.             return redirect()->route('admin.translations');
  2713.         }
  2714.     }
  2715.  
  2716.     /**
  2717.      * @param $id
  2718.      */
  2719.     public function makeDefaultLanguage($id)
  2720.     {
  2721.         $translation = Translation::where('id', $id)->firstOrFail();
  2722.  
  2723.         //remove default of other
  2724.         $currentDefaults = Translation::where('is_default', '1')->get();
  2725.         // dd($currentDefault);
  2726.         if (!empty($currentDefaults)) {
  2727.             foreach ($currentDefaults as $currentDefault) {
  2728.                 $currentDefault->is_default = 0;
  2729.                 $currentDefault->save();
  2730.             }
  2731.         }
  2732.  
  2733.         //make this default
  2734.         $translation->is_default = 1;
  2735.         $translation->is_active = 1;
  2736.         $translation->save();
  2737.         return redirect()->back()->with(['success' => 'Operation Successful']);
  2738.  
  2739.     }
  2740.  
  2741.     /**
  2742.      * @param Request $request
  2743.      */
  2744.     public function updateRestaurantScheduleData(Request $request)
  2745.     {
  2746.         $data = $request->except(['_token', 'restaurant_id']);
  2747.  
  2748.         $i = 0;
  2749.         $str = '{';
  2750.         foreach ($data as $day => $times) {
  2751.             $str .= '"' . $day . '":[';
  2752.             if ($times) {
  2753.                 foreach ($times as $key => $time) {
  2754.  
  2755.                     if ($key % 2 == 0) {
  2756.                         $t1 = $time;
  2757.                         $str .= '{"open" :' . '"' . $time . '"';
  2758.  
  2759.                     } else {
  2760.                         $t2 = $time;
  2761.                         $str .= '"close" :' . '"' . $time . '"}';
  2762.                     }
  2763.  
  2764.                     //check if last, if last then dont add comma,
  2765.                     if (count($times) != $key + 1) {
  2766.                         $str .= ',';
  2767.                     }
  2768.                 }
  2769.                 // dd($t1);
  2770.                 if (Carbon::parse($t1) >= Carbon::parse($t2)) {
  2771.  
  2772.                     return redirect()->back()->with(['message' => 'Opening and Closing time is incorrect']);
  2773.                 }
  2774.             } else {
  2775.                 $str .= '}]';
  2776.             }
  2777.  
  2778.             if ($i != count($data) - 1) {
  2779.                 $str .= '],';
  2780.             } else {
  2781.                 $str .= ']';
  2782.             }
  2783.             $i++;
  2784.         }
  2785.         $str .= '}';
  2786.  
  2787.         // Fetches The Restaurant
  2788.         $restaurant = Restaurant::where('id', $request->restaurant_id)->first();
  2789.         // Enters The Data
  2790.         $restaurant->schedule_data = $str;
  2791.         // Saves the Data to Database
  2792.         $restaurant->save();
  2793.  
  2794.         return redirect()->back()->with(['success' => 'Scheduling data saved successfully']);
  2795.  
  2796.     }
  2797.  
  2798.     /**
  2799.      * @param $id
  2800.      */
  2801.     public function impersonate($id)
  2802.     {
  2803.         $user = User::where('id', $id)->first();
  2804.         if ($user && $user->hasRole('Store Owner')) {
  2805.             Auth::user()->impersonate($user);
  2806.             return redirect()->route('get.login');
  2807.         } else {
  2808.             return redirect()->route('admin.dashboard')->with(['message' => 'User not found']);
  2809.         }
  2810.     }
  2811.  
  2812.     /**
  2813.      * @param $order_id
  2814.      */
  2815.     public function approvePaymentOfOrder($order_id)
  2816.     {
  2817.         $order = Order::where('id', $order_id)->firstOrFail();
  2818.  
  2819.         if ($order->orderstatus_id == '8') {
  2820.  
  2821.             $restaurant = Restaurant::where('id', $order->restaurant_id)->first();
  2822.  
  2823.             if ($restaurant->auto_acceptable) {
  2824.                 $orderstatus_id = '2';
  2825.                 if (config('appSettings.enablePushNotificationOrders') == 'true') {
  2826.                     //to user
  2827.                     $notify = new PushNotify();
  2828.                     $notify->sendPushNotification('2', $order->user_id, $order->unique_order_id);
  2829.                 }
  2830.                 $this->sendPushNotificationStoreOwner($order->restaurant_id);
  2831.             } else {
  2832.                 $orderstatus_id = '1';
  2833.                 if (config('appSettings.smsRestaurantNotify') == 'true') {
  2834.                     $restaurant_id = $order->restaurant_id;
  2835.                     $this->smsToRestaurant($restaurant_id, $order->total);
  2836.                 }
  2837.                 $this->sendPushNotificationStoreOwner($order->restaurant_id);
  2838.             }
  2839.  
  2840.             $order->orderstatus_id = $orderstatus_id;
  2841.             $order->save();
  2842.  
  2843.             return redirect()->back()->with(['success' => 'Payment Approved']);
  2844.         } else {
  2845.             return 'Error! Payment already approved.';
  2846.         }
  2847.     }
  2848.  
  2849.     /**
  2850.      * @param $restaurant_id
  2851.      * @param $orderTotal
  2852.      */
  2853.     public function smsToRestaurant($restaurant_id, $orderTotal)
  2854.     {
  2855.         //get restaurant
  2856.         $restaurant = Restaurant::where('id', $restaurant_id)->first();
  2857.         if ($restaurant) {
  2858.             if ($restaurant->is_notifiable) {
  2859.                 //get all pivot users of restaurant (Store Ownerowners)
  2860.                 $pivotUsers = $restaurant->users()
  2861.                     ->wherePivot('restaurant_id', $restaurant_id)
  2862.                     ->get();
  2863.                 //filter only res owner and send notification.
  2864.                 foreach ($pivotUsers as $pU) {
  2865.                     if ($pU->hasRole('Store Owner')) {
  2866.                         // Include Order orderTotal or not ?
  2867.                         switch (config('appSettings.smsRestOrderValue')) {
  2868.                             case 'true':
  2869.                                 $message = config('appSettings.defaultSmsRestaurantMsg') . round($orderTotal);
  2870.                                 break;
  2871.                             case 'false':
  2872.                                 $message = config('appSettings.defaultSmsRestaurantMsg');
  2873.                                 break;
  2874.                         }
  2875.                         // As its not an OTP based message Nulling OTP
  2876.                         $otp = null;
  2877.                         $smsnotify = new Sms();
  2878.                         $smsnotify->processSmsAction('OD_NOTIFY', $pU->phone, $otp, $message);
  2879.                     }
  2880.                 }
  2881.             }
  2882.         }
  2883.     }
  2884.  
  2885.     /**
  2886.      * @param $restaurant_id
  2887.      */
  2888.     private function sendPushNotificationStoreOwner($restaurant_id, $unique_order_id)
  2889.     {
  2890.         if (config('appSettings.oneSignalAppId') != null && config('appSettings.oneSignalRestApiKey') != null) {
  2891.             $restaurant = Restaurant::where('id', $restaurant_id)->first();
  2892.             if ($restaurant) {
  2893.                 //get all pivot users of restaurant (Store Ownerowners)
  2894.                 $pivotUsers = $restaurant->users()
  2895.                     ->wherePivot('restaurant_id', $restaurant_id)
  2896.                     ->get();
  2897.  
  2898.                 //filter only res owner and send notification.
  2899.                 foreach ($pivotUsers as $pU) {
  2900.                     if ($pU->hasRole('Store Owner')) {
  2901.  
  2902.                         $message = config('appSettings.restaurantNewOrderNotificationMsg');
  2903.  
  2904.                         $url = config('appSettings.storeUrl') . '/public/store-owner/order/' . $unique_order_id;
  2905.  
  2906.                         $userId = (string) $pU->id;
  2907.  
  2908.                         $contents = array(
  2909.                             'en' => $message,
  2910.                         );
  2911.  
  2912.                         $appId = DotenvEditor::getValue('ONESIGNAL_APP_ID');
  2913.                         $apiKey = DotenvEditor::getValue('ONESIGNAL_REST_API_KEY');
  2914.  
  2915.                         $fields = array(
  2916.                             'app_id' => $appId,
  2917.                             'include_external_user_ids' => array($userId),
  2918.                             'channel_for_external_user_ids' => 'push',
  2919.                             'contents' => $contents,
  2920.                             'url' => $url,
  2921.                         );
  2922.  
  2923.                         $fields = json_encode($fields);
  2924.  
  2925.                         $ch = curl_init();
  2926.                         curl_setopt($ch, CURLOPT_URL, 'https://onesignal.com/api/v1/notifications');
  2927.                         curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8',
  2928.                             'Authorization: Basic ' . $apiKey));
  2929.                         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  2930.                         curl_setopt($ch, CURLOPT_HEADER, false);
  2931.                         curl_setopt($ch, CURLOPT_POST, true);
  2932.                         curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
  2933.                         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  2934.  
  2935.                         $response = curl_exec($ch);
  2936.                         curl_close($ch);
  2937.  
  2938.                     }
  2939.                 }
  2940.             }
  2941.         }
  2942.     }
  2943.  
  2944.     /**
  2945.      * @param Request $request
  2946.      */
  2947.     public function updateStorePayoutDetails(Request $request)
  2948.     {
  2949.         $storePayoutDetail = StorePayoutDetail::where('restaurant_id', $request->restaurant_id)->first();
  2950.         if ($storePayoutDetail) {
  2951.             $storePayoutDetail->data = json_encode($request->except(['restaurant_id', '_token']));
  2952.         } else {
  2953.             $storePayoutDetail = new StorePayoutDetail();
  2954.             $storePayoutDetail->restaurant_id = $request->restaurant_id;
  2955.             $storePayoutDetail->data = json_encode($request->except(['restaurant_id', '_token']));
  2956.         }
  2957.         try {
  2958.             $storePayoutDetail->save();
  2959.             return redirect()->back()->with(['success' => 'Payout Data Saved']);
  2960.         } catch (\Illuminate\Database\QueryException $qe) {
  2961.             return redirect()->back()->with(['message' => $qe->getMessage()]);
  2962.         } catch (Exception $e) {
  2963.             return redirect()->back()->with(['message' => $e->getMessage()]);
  2964.         } catch (\Throwable $th) {
  2965.             return redirect()->back()->with(['message' => $th]);
  2966.         }
  2967.     }
  2968. };

Editor

You can edit this paste and save as new:


File Description
  • AdminController
  • Paste Code
  • 14 Apr-2021
  • 107.59 Kb
You can Share it: