You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					1063 lines
				
				47 KiB
			
		
		
			
		
	
	
					1063 lines
				
				47 KiB
			| 
								 
											2 years ago
										 
									 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace App\Http\Controllers\Admin;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use App\Models\Zone;
							 | 
						||
| 
								 | 
							
								use App\Models\AddOn;
							 | 
						||
| 
								 | 
							
								use App\Models\Vendor;
							 | 
						||
| 
								 | 
							
								use App\Models\Message;
							 | 
						||
| 
								 | 
							
								use App\Models\UserInfo;
							 | 
						||
| 
								 | 
							
								use App\Models\Restaurant;
							 | 
						||
| 
								 | 
							
								use Illuminate\Support\Str;
							 | 
						||
| 
								 | 
							
								use App\Models\Conversation;
							 | 
						||
| 
								 | 
							
								use Illuminate\Http\Request;
							 | 
						||
| 
								 | 
							
								use App\CentralLogics\Helpers;
							 | 
						||
| 
								 | 
							
								use Illuminate\Support\Carbon;
							 | 
						||
| 
								 | 
							
								use App\Models\BusinessSetting;
							 | 
						||
| 
								 | 
							
								use App\Models\WithdrawRequest;
							 | 
						||
| 
								 | 
							
								use App\Scopes\RestaurantScope;
							 | 
						||
| 
								 | 
							
								use App\Models\OrderTransaction;
							 | 
						||
| 
								 | 
							
								use App\Models\RestaurantWallet;
							 | 
						||
| 
								 | 
							
								use App\Models\AccountTransaction;
							 | 
						||
| 
								 | 
							
								use App\Models\RestaurantSchedule;
							 | 
						||
| 
								 | 
							
								use Illuminate\Support\Facades\DB;
							 | 
						||
| 
								 | 
							
								use App\Models\SubscriptionPackage;
							 | 
						||
| 
								 | 
							
								use App\Http\Controllers\Controller;
							 | 
						||
| 
								 | 
							
								use Brian2694\Toastr\Facades\Toastr;
							 | 
						||
| 
								 | 
							
								use Illuminate\Support\Facades\Mail;
							 | 
						||
| 
								 | 
							
								use Rap2hpoutre\FastExcel\FastExcel;
							 | 
						||
| 
								 | 
							
								use App\CentralLogics\RestaurantLogic;
							 | 
						||
| 
								 | 
							
								use App\Models\RestaurantSubscription;
							 | 
						||
| 
								 | 
							
								use App\Models\SubscriptionTransaction;
							 | 
						||
| 
								 | 
							
								use Illuminate\Support\Facades\Storage;
							 | 
						||
| 
								 | 
							
								use Illuminate\Support\Facades\Validator;
							 | 
						||
| 
								 | 
							
								use Grimzy\LaravelMysqlSpatial\Types\Point;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class VendorController extends Controller
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    public function index()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return view('admin-views.vendor.index');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function store(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $validator = Validator::make($request->all(), [
							 | 
						||
| 
								 | 
							
								            'f_name' => 'required|max:100',
							 | 
						||
| 
								 | 
							
								            'l_name' => 'nullable|max:100',
							 | 
						||
| 
								 | 
							
								            'name' => 'required|max:191',
							 | 
						||
| 
								 | 
							
								            'address' => 'required|max:1000',
							 | 
						||
| 
								 | 
							
								            'latitude' => 'required|numeric|min:-90|max:90',
							 | 
						||
| 
								 | 
							
								            'longitude' => 'required|numeric|min:-180|max:180',
							 | 
						||
| 
								 | 
							
								            'email' => 'required|unique:vendors',
							 | 
						||
| 
								 | 
							
								            'phone' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:10|max:20|unique:vendors',
							 | 
						||
| 
								 | 
							
								            'minimum_delivery_time' => 'required|regex:/^([0-9]{2})$/|min:2|max:2',
							 | 
						||
| 
								 | 
							
								            'maximum_delivery_time' => 'required|regex:/^([0-9]{2})$/|min:2|max:2|gt:minimum_delivery_time',
							 | 
						||
| 
								 | 
							
								            'password' => 'required|min:6',
							 | 
						||
| 
								 | 
							
								            'zone_id' => 'required',
							 | 
						||
| 
								 | 
							
								            'logo' => 'required|max:2048',
							 | 
						||
| 
								 | 
							
								            'cover_photo' => 'required|max:2048',
							 | 
						||
| 
								 | 
							
								            'tax' => 'required',
							 | 
						||
| 
								 | 
							
								        ], [
							 | 
						||
| 
								 | 
							
								            'f_name.required' => translate('messages.first_name_is_required')
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								        $cuisine_ids = [];
							 | 
						||
| 
								 | 
							
								        $cuisine_ids=$request->cuisine_ids;
							 | 
						||
| 
								 | 
							
								        if ($request->zone_id) {
							 | 
						||
| 
								 | 
							
								            $point = new Point($request->latitude, $request->longitude);
							 | 
						||
| 
								 | 
							
								            $zone = Zone::contains('coordinates', $point)->where('id', $request->zone_id)->first();
							 | 
						||
| 
								 | 
							
								            if (!$zone) {
							 | 
						||
| 
								 | 
							
								                $validator->getMessageBag()->add('latitude', translate('messages.coordinates_out_of_zone'));
							 | 
						||
| 
								 | 
							
								                return back()->withErrors($validator)
							 | 
						||
| 
								 | 
							
								                    ->withInput();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if ($validator->fails()) {
							 | 
						||
| 
								 | 
							
								            return back()
							 | 
						||
| 
								 | 
							
								                ->withErrors($validator)
							 | 
						||
| 
								 | 
							
								                ->withInput();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $vendor = new Vendor();
							 | 
						||
| 
								 | 
							
								        $vendor->f_name = $request->f_name;
							 | 
						||
| 
								 | 
							
								        $vendor->l_name = $request->l_name;
							 | 
						||
| 
								 | 
							
								        $vendor->email = $request->email;
							 | 
						||
| 
								 | 
							
								        $vendor->phone = $request->phone;
							 | 
						||
| 
								 | 
							
								        $vendor->password = bcrypt($request->password);
							 | 
						||
| 
								 | 
							
								        $vendor->save();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $restaurant = new Restaurant;
							 | 
						||
| 
								 | 
							
								        $restaurant->name = $request->name;
							 | 
						||
| 
								 | 
							
								        $restaurant->phone = $request->phone;
							 | 
						||
| 
								 | 
							
								        $restaurant->email = $request->email;
							 | 
						||
| 
								 | 
							
								        $restaurant->logo = Helpers::upload('restaurant/', 'png', $request->file('logo'));
							 | 
						||
| 
								 | 
							
								        $restaurant->cover_photo = Helpers::upload('restaurant/cover/', 'png', $request->file('cover_photo'));
							 | 
						||
| 
								 | 
							
								        $restaurant->address = $request->address;
							 | 
						||
| 
								 | 
							
								        $restaurant->latitude = $request->latitude;
							 | 
						||
| 
								 | 
							
								        $restaurant->longitude = $request->longitude;
							 | 
						||
| 
								 | 
							
								        $restaurant->vendor_id = $vendor->id;
							 | 
						||
| 
								 | 
							
								        $restaurant->zone_id = $request->zone_id;
							 | 
						||
| 
								 | 
							
								        $restaurant->tax = $request->tax;
							 | 
						||
| 
								 | 
							
								        $restaurant->restaurant_model = 'none';
							 | 
						||
| 
								 | 
							
								        $restaurant->delivery_time = $request->minimum_delivery_time . '-' . $request->maximum_delivery_time;
							 | 
						||
| 
								 | 
							
								        $restaurant->save();
							 | 
						||
| 
								 | 
							
								        $restaurant->cuisine()->sync($cuisine_ids);
							 | 
						||
| 
								 | 
							
								        Toastr::success(translate('messages.vendor') . translate('messages.added_successfully'));
							 | 
						||
| 
								 | 
							
								        return redirect('admin/restaurant/list');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function edit($id)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if (env('APP_MODE') == 'demo' && $id == 2) {
							 | 
						||
| 
								 | 
							
								            Toastr::warning(translate('messages.you_can_not_edit_this_restaurant_please_add_a_new_restaurant_to_edit'));
							 | 
						||
| 
								 | 
							
								            return back();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $restaurant = Restaurant::find($id);
							 | 
						||
| 
								 | 
							
								        return view('admin-views.vendor.edit', compact('restaurant'));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function update(Request $request, Restaurant $restaurant)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $validator = Validator::make($request->all(), [
							 | 
						||
| 
								 | 
							
								            'f_name' => 'required|max:100',
							 | 
						||
| 
								 | 
							
								            'l_name' => 'nullable|max:100',
							 | 
						||
| 
								 | 
							
								            'name' => 'required|max:191',
							 | 
						||
| 
								 | 
							
								            'email' => 'required|unique:vendors,email,' . $restaurant->vendor->id,
							 | 
						||
| 
								 | 
							
								            'phone' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:10|max:20|unique:vendors,phone,' . $restaurant->vendor->id,
							 | 
						||
| 
								 | 
							
								            'zone_id' => 'required',
							 | 
						||
| 
								 | 
							
								            'latitude' => 'required|min:-90|max:90',
							 | 
						||
| 
								 | 
							
								            'longitude' => 'required|min:-180|max:180',
							 | 
						||
| 
								 | 
							
								            'tax' => 'required',
							 | 
						||
| 
								 | 
							
								            'password' => 'nullable|min:6',
							 | 
						||
| 
								 | 
							
								            'minimum_delivery_time' => 'required|regex:/^([0-9]{2})$/|min:2|max:2',
							 | 
						||
| 
								 | 
							
								            'maximum_delivery_time' => 'required|regex:/^([0-9]{2})$/|min:2|max:2|gt:minimum_delivery_time',
							 | 
						||
| 
								 | 
							
								            'logo' => 'nullable|max:2048',
							 | 
						||
| 
								 | 
							
								            'cover_photo' => 'nullable|max:2048',
							 | 
						||
| 
								 | 
							
								        ], [
							 | 
						||
| 
								 | 
							
								            'f_name.required' => translate('messages.first_name_is_required')
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($request->zone_id) {
							 | 
						||
| 
								 | 
							
								            $point = new Point($request->latitude, $request->longitude);
							 | 
						||
| 
								 | 
							
								            $zone = Zone::contains('coordinates', $point)->where('id', $request->zone_id)->first();
							 | 
						||
| 
								 | 
							
								            if (!$zone) {
							 | 
						||
| 
								 | 
							
								                $validator->getMessageBag()->add('latitude', translate('messages.coordinates_out_of_zone'));
							 | 
						||
| 
								 | 
							
								                return back()->withErrors($validator)
							 | 
						||
| 
								 | 
							
								                    ->withInput();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if ($validator->fails()) {
							 | 
						||
| 
								 | 
							
								            return back()
							 | 
						||
| 
								 | 
							
								                ->withErrors($validator)
							 | 
						||
| 
								 | 
							
								                ->withInput();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $vendor = Vendor::findOrFail($restaurant->vendor->id);
							 | 
						||
| 
								 | 
							
								        $vendor->f_name = $request->f_name;
							 | 
						||
| 
								 | 
							
								        $vendor->l_name = $request->l_name;
							 | 
						||
| 
								 | 
							
								        $vendor->email = $request->email;
							 | 
						||
| 
								 | 
							
								        $vendor->phone = $request->phone;
							 | 
						||
| 
								 | 
							
								        $vendor->password = strlen($request->password) > 1 ? bcrypt($request->password) : $restaurant->vendor->password;
							 | 
						||
| 
								 | 
							
								        $vendor->save();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $cuisine_ids = [];
							 | 
						||
| 
								 | 
							
								        $cuisine_ids=$request->cuisine_ids;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $slug = Str::slug($request->name);
							 | 
						||
| 
								 | 
							
								        $restaurant->slug = $restaurant->slug? $restaurant->slug :"{$slug}{$restaurant->id}";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $restaurant->email = $request->email;
							 | 
						||
| 
								 | 
							
								        $restaurant->phone = $request->phone;
							 | 
						||
| 
								 | 
							
								        $restaurant->logo = $request->has('logo') ? Helpers::update('restaurant/', $restaurant->logo, 'png', $request->file('logo')) : $restaurant->logo;
							 | 
						||
| 
								 | 
							
								        $restaurant->cover_photo = $request->has('cover_photo') ? Helpers::update('restaurant/cover/', $restaurant->cover_photo, 'png', $request->file('cover_photo')) : $restaurant->cover_photo;
							 | 
						||
| 
								 | 
							
								        $restaurant->name = $request->name;
							 | 
						||
| 
								 | 
							
								        $restaurant->address = $request->address;
							 | 
						||
| 
								 | 
							
								        $restaurant->latitude = $request->latitude;
							 | 
						||
| 
								 | 
							
								        $restaurant->longitude = $request->longitude;
							 | 
						||
| 
								 | 
							
								        $restaurant->zone_id = $request->zone_id;
							 | 
						||
| 
								 | 
							
								        $restaurant->tax = $request->tax;
							 | 
						||
| 
								 | 
							
								        $restaurant->delivery_time = $request->minimum_delivery_time . '-' . $request->maximum_delivery_time;
							 | 
						||
| 
								 | 
							
								        $restaurant->save();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $restaurant->cuisine()->sync($cuisine_ids);
							 | 
						||
| 
								 | 
							
								        if ($vendor->userinfo) {
							 | 
						||
| 
								 | 
							
								            $userinfo = $vendor->userinfo;
							 | 
						||
| 
								 | 
							
								            $userinfo->f_name = $request->name;
							 | 
						||
| 
								 | 
							
								            $userinfo->l_name = '';
							 | 
						||
| 
								 | 
							
								            $userinfo->email = $request->email;
							 | 
						||
| 
								 | 
							
								            $userinfo->image = $restaurant->logo;
							 | 
						||
| 
								 | 
							
								            $userinfo->save();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        Toastr::success(translate('messages.restaurant') . translate('messages.updated_successfully'));
							 | 
						||
| 
								 | 
							
								        return redirect('admin/restaurant/list');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function destroy(Request $request, Restaurant $restaurant)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if (env('APP_MODE') == 'demo' && $restaurant->id == 2) {
							 | 
						||
| 
								 | 
							
								            Toastr::warning(translate('messages.you_can_not_delete_this_restaurant_please_add_a_new_restaurant_to_delete'));
							 | 
						||
| 
								 | 
							
								            return back();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if (Storage::disk('public')->exists('restaurant/' . $restaurant['logo'])) {
							 | 
						||
| 
								 | 
							
								            Storage::disk('public')->delete('restaurant/' . $restaurant['logo']);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $restaurant->delete();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $vendor = Vendor::findOrFail($restaurant->vendor->id);
							 | 
						||
| 
								 | 
							
								        if($vendor->userinfo){
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            $vendor->userinfo->delete();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $vendor->delete();
							 | 
						||
| 
								 | 
							
								        Toastr::success(translate('messages.restaurant') . ' ' . translate('messages.removed'));
							 | 
						||
| 
								 | 
							
								        return back();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function view(Restaurant $restaurant,Request $request, $tab = null, $sub_tab = 'cash')
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $wallet = $restaurant->vendor->wallet;
							 | 
						||
| 
								 | 
							
								        if (!$wallet) {
							 | 
						||
| 
								 | 
							
								            $wallet = new RestaurantWallet();
							 | 
						||
| 
								 | 
							
								            $wallet->vendor_id = $restaurant->vendor->id;
							 | 
						||
| 
								 | 
							
								            $wallet->total_earning = 0.0;
							 | 
						||
| 
								 | 
							
								            $wallet->total_withdrawn = 0.0;
							 | 
						||
| 
								 | 
							
								            $wallet->pending_withdraw = 0.0;
							 | 
						||
| 
								 | 
							
								            $wallet->created_at = now();
							 | 
						||
| 
								 | 
							
								            $wallet->updated_at = now();
							 | 
						||
| 
								 | 
							
								            $wallet->save();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if ($tab == 'settings') {
							 | 
						||
| 
								 | 
							
								            return view('admin-views.vendor.view.settings', compact('restaurant'));
							 | 
						||
| 
								 | 
							
								        } else if ($tab == 'order') {
							 | 
						||
| 
								 | 
							
								            return view('admin-views.vendor.view.order', compact('restaurant'));
							 | 
						||
| 
								 | 
							
								        } else if ($tab == 'product') {
							 | 
						||
| 
								 | 
							
								            return view('admin-views.vendor.view.product', compact('restaurant'));
							 | 
						||
| 
								 | 
							
								        } else if ($tab == 'discount') {
							 | 
						||
| 
								 | 
							
								            return view('admin-views.vendor.view.discount', compact('restaurant'));
							 | 
						||
| 
								 | 
							
								        } else if ($tab == 'transaction') {
							 | 
						||
| 
								 | 
							
								            return view('admin-views.vendor.view.transaction', compact('restaurant', 'sub_tab'));
							 | 
						||
| 
								 | 
							
								        } else if ($tab == 'reviews') {
							 | 
						||
| 
								 | 
							
								            return view('admin-views.vendor.view.review', compact('restaurant', 'sub_tab'));
							 | 
						||
| 
								 | 
							
								        } else if ($tab == 'conversations') {
							 | 
						||
| 
								 | 
							
								            $user = UserInfo::where(['vendor_id' => $restaurant->vendor->id])->first();
							 | 
						||
| 
								 | 
							
								            if ($user) {
							 | 
						||
| 
								 | 
							
								                $conversations = Conversation::with(['sender', 'receiver', 'last_message'])->WhereUser($user->id)
							 | 
						||
| 
								 | 
							
								                    ->paginate(8);
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                $conversations = [];
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            return view('admin-views.vendor.view.conversations', compact('restaurant', 'sub_tab', 'conversations'));
							 | 
						||
| 
								 | 
							
								        } elseif ($tab == 'subscriptions'){
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            $id=$restaurant->id;
							 | 
						||
| 
								 | 
							
								            if ($restaurant->restaurant_model == 'subscription' || $restaurant->restaurant_model == 'unsubscribed') {
							 | 
						||
| 
								 | 
							
								                $rest_subscription= RestaurantSubscription::where('restaurant_id', $id)->with(['package'])->latest()->first();
							 | 
						||
| 
								 | 
							
								                $package_id=(isset($rest_subscription->package_id))  ? $rest_subscription->package_id : 0 ;
							 | 
						||
| 
								 | 
							
								                $total_bill=SubscriptionTransaction::where('restaurant_id', $id)->where('package_id', $package_id)->sum('paid_amount');
							 | 
						||
| 
								 | 
							
								                $packages= SubscriptionPackage::where('status', 1)->get();
							 | 
						||
| 
								 | 
							
								                return view('admin-views.vendor.view.subscriptions', compact('restaurant', 'rest_subscription','package_id','total_bill','packages'));
							 | 
						||
| 
								 | 
							
								            } else{
							 | 
						||
| 
								 | 
							
								                abort(404);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        } elseif ($tab == 'subscriptions-transactions'){
							 | 
						||
| 
								 | 
							
								            $filter = $request->query('filter', 'all');
							 | 
						||
| 
								 | 
							
								            $transcations = SubscriptionTransaction::where('restaurant_id', $restaurant->id)
							 | 
						||
| 
								 | 
							
								            ->when($filter == 'month', function ($query) {
							 | 
						||
| 
								 | 
							
								                return $query->whereMonth('created_at', Carbon::now()->month);
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								            ->when($filter == 'year', function ($query) {
							 | 
						||
| 
								 | 
							
								                return $query->whereYear('created_at', Carbon::now()->year);
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								            ->latest()->paginate(config('default_pagination'));
							 | 
						||
| 
								 | 
							
								            $total = $transcations->total();
							 | 
						||
| 
								 | 
							
								            return view('admin-views.vendor.view.subs_transaction',[
							 | 
						||
| 
								 | 
							
								            'transcations' => $transcations,
							 | 
						||
| 
								 | 
							
								            'filter' => $filter,
							 | 
						||
| 
								 | 
							
								            'total' => $total,
							 | 
						||
| 
								 | 
							
								            'restaurant' => $restaurant,
							 | 
						||
| 
								 | 
							
								            ]);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return view('admin-views.vendor.view.index', compact('restaurant','wallet'));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function rest_transcation_search(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $key = explode(' ', $request['search']);
							 | 
						||
| 
								 | 
							
								        $transcations = SubscriptionTransaction::where('restaurant_id',$request->id)->where(function ($q) use ($key) {
							 | 
						||
| 
								 | 
							
								            foreach ($key as $value) {
							 | 
						||
| 
								 | 
							
								                $q->orWhere('id', 'like', "%{$value}%")
							 | 
						||
| 
								 | 
							
								                    ->orWhere('paid_amount', 'like', "%{$value}%")
							 | 
						||
| 
								 | 
							
								                    ->orWhere('reference', 'like', "%{$value}%")
							 | 
						||
| 
								 | 
							
								                    ->orWheredate('created_at', 'like', "%{$value}%");
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								            ->get();
							 | 
						||
| 
								 | 
							
								        $total = $transcations->count();
							 | 
						||
| 
								 | 
							
								        return response()->json([
							 | 
						||
| 
								 | 
							
								            'view' => view('admin-views.vendor.view.partials._rest_subs_transcation', compact('transcations','total'))->render(), 'total'=> $total
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    public function trans_search_by_date(Request $request){
							 | 
						||
| 
								 | 
							
								        $from=$request->start_date;
							 | 
						||
| 
								 | 
							
								        $to= $request->end_date;
							 | 
						||
| 
								 | 
							
								        $id= $request->id;
							 | 
						||
| 
								 | 
							
								        $filter = 'all';
							 | 
						||
| 
								 | 
							
								        $restaurant=Restaurant::findOrFail($id);
							 | 
						||
| 
								 | 
							
								        $transcations=SubscriptionTransaction::where('restaurant_id', $restaurant->id)
							 | 
						||
| 
								 | 
							
								        ->whereBetween('created_at', ["{$from}", "{$to} 23:59:59"])
							 | 
						||
| 
								 | 
							
								        ->latest()->paginate(config('default_pagination'));
							 | 
						||
| 
								 | 
							
								        $total = $transcations->total();
							 | 
						||
| 
								 | 
							
								        return view('admin-views.vendor.view.subs_transaction',[
							 | 
						||
| 
								 | 
							
								            'transcations' => $transcations,
							 | 
						||
| 
								 | 
							
								            'filter' => $filter,
							 | 
						||
| 
								 | 
							
								            'total' => $total,
							 | 
						||
| 
								 | 
							
								            'restaurant' => $restaurant,
							 | 
						||
| 
								 | 
							
								            'from' =>  $from,
							 | 
						||
| 
								 | 
							
								            'to' =>  $to,
							 | 
						||
| 
								 | 
							
								            ]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function view_tab(Restaurant $restaurant)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        Toastr::error(translate('messages.unknown_tab'));
							 | 
						||
| 
								 | 
							
								        return back();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function list(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $zone_id = $request->query('zone_id', 'all');
							 | 
						||
| 
								 | 
							
								        $cuisine_id = $request->query('cuisine_id', 'all');
							 | 
						||
| 
								 | 
							
								        $type = $request->query('type', 'all');
							 | 
						||
| 
								 | 
							
								        $typ = $request->query('restaurant_model', '');
							 | 
						||
| 
								 | 
							
								        $restaurants = Restaurant::when(is_numeric($zone_id), function ($query) use ($zone_id) {
							 | 
						||
| 
								 | 
							
								        return $query->where('zone_id', $zone_id);
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    ->with('vendor')
							 | 
						||
| 
								 | 
							
								    ->withSum('reviews' , 'rating')
							 | 
						||
| 
								 | 
							
								    ->withCount('reviews')
							 | 
						||
| 
								 | 
							
								    ->whereHas('vendor', function($q){
							 | 
						||
| 
								 | 
							
								        $q->where('status',1);
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    // ->when($cuisine_id,function($query) use($cuisine_id){
							 | 
						||
| 
								 | 
							
								    //     $query->whereHas('cuisine', function ($query) use ($cuisine_id){
							 | 
						||
| 
								 | 
							
								    //         $query->where('cuisine_restaurant.cuisine_id', $cuisine_id);
							 | 
						||
| 
								 | 
							
								    //     });
							 | 
						||
| 
								 | 
							
								    // })
							 | 
						||
| 
								 | 
							
								    ->cuisine($cuisine_id)
							 | 
						||
| 
								 | 
							
								    ->type($type)->RestaurantModel($typ)->latest()->paginate(config('default_pagination'));
							 | 
						||
| 
								 | 
							
								        $zone = is_numeric($zone_id) ? Zone::findOrFail($zone_id) : null;
							 | 
						||
| 
								 | 
							
								        return view('admin-views.vendor.list', compact('restaurants', 'zone', 'type','typ','cuisine_id'));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    public function pending(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $key = explode(' ', $request['search']);
							 | 
						||
| 
								 | 
							
								        $zone_id = $request->query('zone_id', 'all');
							 | 
						||
| 
								 | 
							
								        $type = $request->query('type', 'all');
							 | 
						||
| 
								 | 
							
								        $typ = $request->query('restaurant_model', '');
							 | 
						||
| 
								 | 
							
								        $restaurants = Restaurant::when(is_numeric($zone_id), function ($query) use ($zone_id) {
							 | 
						||
| 
								 | 
							
								        return $query->where('zone_id', $zone_id);
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    ->when(isset($key),function($query)use($key){
							 | 
						||
| 
								 | 
							
								        $query->where(function($q)use($key){
							 | 
						||
| 
								 | 
							
								            foreach ($key as $value) {
							 | 
						||
| 
								 | 
							
								                $q->orWhere('name', 'like', "%{$value}%")
							 | 
						||
| 
								 | 
							
								                ->orWhere('email', 'like', "%{$value}%")
							 | 
						||
| 
								 | 
							
								                ->orWhere('phone', 'like', "%{$value}%");
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    ->with('vendor')
							 | 
						||
| 
								 | 
							
								    ->whereHas('vendor', function ($q) {
							 | 
						||
| 
								 | 
							
								        $q->where('status', null);
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    ->type($type)->RestaurantModel($typ)->latest()->paginate(config('default_pagination'));
							 | 
						||
| 
								 | 
							
								        $zone = is_numeric($zone_id) ? Zone::findOrFail($zone_id) : null;
							 | 
						||
| 
								 | 
							
								        return view('admin-views.vendor.pending_list', compact('restaurants', 'zone', 'type','typ'));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    public function denied(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $key = explode(' ', $request['search']);
							 | 
						||
| 
								 | 
							
								        $zone_id = $request->query('zone_id', 'all');
							 | 
						||
| 
								 | 
							
								        $type = $request->query('type', 'all');
							 | 
						||
| 
								 | 
							
								        $typ = $request->query('restaurant_model', '');
							 | 
						||
| 
								 | 
							
								        $restaurants = Restaurant::when(is_numeric($zone_id), function ($query) use ($zone_id) {
							 | 
						||
| 
								 | 
							
								        return $query->where('zone_id', $zone_id);
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    ->when(isset($key),function($query)use($key){
							 | 
						||
| 
								 | 
							
								        $query->where(function($q)use($key){
							 | 
						||
| 
								 | 
							
								            foreach ($key as $value) {
							 | 
						||
| 
								 | 
							
								                $q->orWhere('name', 'like', "%{$value}%")
							 | 
						||
| 
								 | 
							
								                ->orWhere('email', 'like', "%{$value}%")
							 | 
						||
| 
								 | 
							
								                ->orWhere('phone', 'like', "%{$value}%");
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    ->with('vendor')
							 | 
						||
| 
								 | 
							
								    ->whereHas('vendor', function ($q) {
							 | 
						||
| 
								 | 
							
								        $q->Where('status', 0);
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    ->type($type)->RestaurantModel($typ)->latest()->paginate(config('default_pagination'));
							 | 
						||
| 
								 | 
							
								        $zone = is_numeric($zone_id) ? Zone::findOrFail($zone_id) : null;
							 | 
						||
| 
								 | 
							
								        return view('admin-views.vendor.denied', compact('restaurants', 'zone', 'type','typ'));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function search(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $key = explode(' ', $request['search']);
							 | 
						||
| 
								 | 
							
								        $restaurants = Restaurant::whereHas('vendor', function($q){
							 | 
						||
| 
								 | 
							
								            $q->where('status',1);
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								        ->where(function($query)use ($key){
							 | 
						||
| 
								 | 
							
								            $query->orWhereHas('vendor', function ($q) use ($key) {
							 | 
						||
| 
								 | 
							
								                foreach ($key as $value) {
							 | 
						||
| 
								 | 
							
								                    $q->orWhere('f_name', 'like', "%{$value}%")
							 | 
						||
| 
								 | 
							
								                        ->orWhere('l_name', 'like', "%{$value}%")
							 | 
						||
| 
								 | 
							
								                        ->orWhere('email', 'like', "%{$value}%")
							 | 
						||
| 
								 | 
							
								                        ->orWhere('phone', 'like', "%{$value}%");
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								            ->where(function ($q) use ($key) {
							 | 
						||
| 
								 | 
							
								                    foreach ($key as $value) {
							 | 
						||
| 
								 | 
							
								                        $q->orWhere('name', 'like', "%{$value}%")
							 | 
						||
| 
								 | 
							
								                            ->orWhere('email', 'like', "%{$value}%")
							 | 
						||
| 
								 | 
							
								                            ->orWhere('phone', 'like', "%{$value}%");
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                });
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            ->withSum('reviews' , 'rating')
							 | 
						||
| 
								 | 
							
								            ->withCount('reviews')
							 | 
						||
| 
								 | 
							
								            ->get();
							 | 
						||
| 
								 | 
							
								        $total = $restaurants->count();
							 | 
						||
| 
								 | 
							
								        return response()->json([
							 | 
						||
| 
								 | 
							
								            'view' => view('admin-views.vendor.partials._table', compact('restaurants'))->render(), 'total' => $total
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function get_restaurants(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $zone_ids = isset($request->zone_ids) ? (count($request->zone_ids) > 0 ? $request->zone_ids : []) : 0;
							 | 
						||
| 
								 | 
							
								        $data = Restaurant::join('zones', 'zones.id', '=', 'restaurants.zone_id')
							 | 
						||
| 
								 | 
							
								            ->when($zone_ids, function ($query) use ($zone_ids) {
							 | 
						||
| 
								 | 
							
								                $query->whereIn('restaurants.zone_id', $zone_ids);
							 | 
						||
| 
								 | 
							
								            })->where('restaurants.name', 'like', '%' . $request->q . '%')->limit(8)->get([DB::raw('restaurants.id as id, CONCAT(restaurants.name, " (", zones.name,")") as text')]);
							 | 
						||
| 
								 | 
							
								        if (isset($request->all)) {
							 | 
						||
| 
								 | 
							
								            $data[] = (object)['id' => 'all', 'text' => 'All'];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return response()->json($data);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function status(Restaurant $restaurant, Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $restaurant->status = $request->status;
							 | 
						||
| 
								 | 
							
								        $restaurant->save();
							 | 
						||
| 
								 | 
							
								        $vendor = $restaurant->vendor;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            if ($request->status == 0) {
							 | 
						||
| 
								 | 
							
								                $vendor->auth_token = null;
							 | 
						||
| 
								 | 
							
								                if (isset($vendor->fcm_token)) {
							 | 
						||
| 
								 | 
							
								                    $data = [
							 | 
						||
| 
								 | 
							
								                        'title' => translate('messages.suspended'),
							 | 
						||
| 
								 | 
							
								                        'description' => translate('messages.your_account_has_been_suspended'),
							 | 
						||
| 
								 | 
							
								                        'order_id' => '',
							 | 
						||
| 
								 | 
							
								                        'image' => '',
							 | 
						||
| 
								 | 
							
								                        'type' => 'block'
							 | 
						||
| 
								 | 
							
								                    ];
							 | 
						||
| 
								 | 
							
								                    Helpers::send_push_notif_to_device($vendor->fcm_token, $data);
							 | 
						||
| 
								 | 
							
								                    DB::table('user_notifications')->insert([
							 | 
						||
| 
								 | 
							
								                        'data' => json_encode($data),
							 | 
						||
| 
								 | 
							
								                        'vendor_id' => $vendor->id,
							 | 
						||
| 
								 | 
							
								                        'created_at' => now(),
							 | 
						||
| 
								 | 
							
								                        'updated_at' => now()
							 | 
						||
| 
								 | 
							
								                    ]);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        } catch (\Exception $e) {
							 | 
						||
| 
								 | 
							
								            Toastr::warning(translate('messages.push_notification_faild'));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Toastr::success(translate('messages.restaurant') . translate('messages.status_updated'));
							 | 
						||
| 
								 | 
							
								        return back();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function restaurant_status(Restaurant $restaurant, Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // dd($request->menu);
							 | 
						||
| 
								 | 
							
								        if ($request->menu == "schedule_order" && !Helpers::schedule_order()) {
							 | 
						||
| 
								 | 
							
								            Toastr::warning(translate('messages.schedule_order_disabled_warning'));
							 | 
						||
| 
								 | 
							
								            return back();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ((($request->menu == "delivery" && $restaurant->take_away == 0) || ($request->menu == "take_away" && $restaurant->delivery == 0)) &&  $request->status == 0) {
							 | 
						||
| 
								 | 
							
								            Toastr::warning(translate('messages.can_not_disable_both_take_away_and_delivery'));
							 | 
						||
| 
								 | 
							
								            return back();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ((($request->menu == "veg" && $restaurant->non_veg == 0) || ($request->menu == "non_veg" && $restaurant->veg == 0)) &&  $request->status == 0) {
							 | 
						||
| 
								 | 
							
								            Toastr::warning(translate('messages.veg_non_veg_disable_warning'));
							 | 
						||
| 
								 | 
							
								            return back();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if ($request->menu == "self_delivery_system" && $request->status == '0') {
							 | 
						||
| 
								 | 
							
								            $restaurant['free_delivery'] = 0;
							 | 
						||
| 
								 | 
							
								            $restaurant->coupon()->where('created_by','vendor')->where('coupon_type','free_delivery')->delete();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $restaurant[$request->menu] = $request->status;
							 | 
						||
| 
								 | 
							
								        $restaurant->save();
							 | 
						||
| 
								 | 
							
								        Toastr::success(translate('messages.restaurant') . translate('messages.settings_updated'));
							 | 
						||
| 
								 | 
							
								        return back();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function discountSetup(Restaurant $restaurant, Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $message = translate('messages.discount');
							 | 
						||
| 
								 | 
							
								        $message .= $restaurant->discount ? translate('messages.updated_successfully') : translate('messages.added_successfully');
							 | 
						||
| 
								 | 
							
								        $restaurant->discount()->updateOrinsert(
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'restaurant_id' => $restaurant->id
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'start_date' => $request->start_date,
							 | 
						||
| 
								 | 
							
								                'end_date' => $request->end_date,
							 | 
						||
| 
								 | 
							
								                'start_time' => $request->start_time,
							 | 
						||
| 
								 | 
							
								                'end_time' => $request->end_time,
							 | 
						||
| 
								 | 
							
								                'min_purchase' => $request->min_purchase != null ? $request->min_purchase : 0,
							 | 
						||
| 
								 | 
							
								                'max_discount' => $request->max_discount != null ? $request->max_discount : 0,
							 | 
						||
| 
								 | 
							
								                'discount' => $request->discount_type == 'amount' ? $request->discount : $request['discount'],
							 | 
						||
| 
								 | 
							
								                'discount_type' => 'percent'
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								        return response()->json(['message' => $message], 200);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function updateRestaurantSettings(Restaurant $restaurant, Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if(isset($request->restaurant_model)){
							 | 
						||
| 
								 | 
							
								            if($request->restaurant_model == 'subscription'){
							 | 
						||
| 
								 | 
							
								                $restaurant->restaurant_model= 'unsubscribed';
							 | 
						||
| 
								 | 
							
								                $restaurant->status=0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            } elseif($request->restaurant_model == 'commission'){
							 | 
						||
| 
								 | 
							
								                $restaurant->restaurant_model= 'commission';
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if(isset($restaurant->restaurant_sub)){
							 | 
						||
| 
								 | 
							
								                $restaurant->restaurant_sub->update([
							 | 
						||
| 
								 | 
							
								                    'status'=>0,
							 | 
						||
| 
								 | 
							
								                ]);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            $restaurant->save();
							 | 
						||
| 
								 | 
							
								            Toastr::success(translate('messages.restaurant') .' '.translate('messages.Business_Model_Updated'));
							 | 
						||
| 
								 | 
							
								            return back();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $request->validate([
							 | 
						||
| 
								 | 
							
								            'minimum_order' => 'required',
							 | 
						||
| 
								 | 
							
								            // 'comission' => 'required',
							 | 
						||
| 
								 | 
							
								            'tax' => 'required',
							 | 
						||
| 
								 | 
							
								            'minimum_delivery_time' => 'required|regex:/^([0-9]{2})$/|min:2|max:2',
							 | 
						||
| 
								 | 
							
								            'maximum_delivery_time' => 'required|regex:/^([0-9]{2})$/|min:2|max:2|gt:minimum_delivery_time',
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($request->comission_status) {
							 | 
						||
| 
								 | 
							
								            $restaurant->comission = $request->comission;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            $restaurant->comission = null;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $restaurant->minimum_order = $request->minimum_order;
							 | 
						||
| 
								 | 
							
								        $restaurant->opening_time = $request->opening_time;
							 | 
						||
| 
								 | 
							
								        $restaurant->closeing_time = $request->closeing_time;
							 | 
						||
| 
								 | 
							
								        $restaurant->tax = $request->tax;
							 | 
						||
| 
								 | 
							
								        $restaurant->delivery_time = $request->minimum_delivery_time . '-' . $request->maximum_delivery_time;
							 | 
						||
| 
								 | 
							
								        if ($request->menu == "veg") {
							 | 
						||
| 
								 | 
							
								            $restaurant->veg = 1;
							 | 
						||
| 
								 | 
							
								            $restaurant->non_veg = 0;
							 | 
						||
| 
								 | 
							
								        } elseif ($request->menu == "non-veg") {
							 | 
						||
| 
								 | 
							
								            $restaurant->veg = 0;
							 | 
						||
| 
								 | 
							
								            $restaurant->non_veg = 1;
							 | 
						||
| 
								 | 
							
								        } elseif ($request->menu == "both") {
							 | 
						||
| 
								 | 
							
								            $restaurant->veg = 1;
							 | 
						||
| 
								 | 
							
								            $restaurant->non_veg = 1;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $restaurant->save();
							 | 
						||
| 
								 | 
							
								        Toastr::success(translate('messages.restaurant') . translate('messages.settings_updated'));
							 | 
						||
| 
								 | 
							
								        return back();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function update_application($id,$status)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $restaurant = Restaurant::findOrFail($id);
							 | 
						||
| 
								 | 
							
								        $restaurant->vendor->status = $status;
							 | 
						||
| 
								 | 
							
								        $restaurant->vendor->save();
							 | 
						||
| 
								 | 
							
								        if ($status) $restaurant->status = 1;
							 | 
						||
| 
								 | 
							
								        if(isset($restaurant->restaurant_sub_trans) && isset($restaurant->restaurant_sub_update_application) && $restaurant->restaurant_sub_trans->payment_method == 'free_trial'){
							 | 
						||
| 
								 | 
							
								            $free_trial_period_data = json_decode(BusinessSetting::where(['key' => 'free_trial_period'])->first()->value,true);
							 | 
						||
| 
								 | 
							
								            $free_trial_period= (isset($free_trial_period_data['data']) ? $free_trial_period_data['data'] : 0);
							 | 
						||
| 
								 | 
							
								            $restaurant->restaurant_sub_update_application->update([
							 | 
						||
| 
								 | 
							
								                'expiry_date'=> Carbon::now()->addDays($free_trial_period)->format('Y-m-d'),
							 | 
						||
| 
								 | 
							
								                'status'=>1
							 | 
						||
| 
								 | 
							
								            ]);
							 | 
						||
| 
								 | 
							
								            $restaurant->restaurant_model= 'subscription';
							 | 
						||
| 
								 | 
							
								        } elseif (isset($restaurant->restaurant_sub_trans) && isset($restaurant->restaurant_sub_update_application) && $restaurant->restaurant_sub_trans->payment_method != 'free_trial') {
							 | 
						||
| 
								 | 
							
								            $add_days=$restaurant->restaurant_sub_trans->validity;
							 | 
						||
| 
								 | 
							
								            $restaurant->restaurant_sub_update_application->update([
							 | 
						||
| 
								 | 
							
								                'expiry_date'=> Carbon::now()->addDays($add_days)->format('Y-m-d'),
							 | 
						||
| 
								 | 
							
								                'status'=>1
							 | 
						||
| 
								 | 
							
								            ]);
							 | 
						||
| 
								 | 
							
								            $restaurant->restaurant_model= 'subscription';
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $restaurant->save();
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            if (config('mail.status')) {
							 | 
						||
| 
								 | 
							
								                Mail::to($restaurant->vendor->email)->send(new \App\Mail\SelfRegistration($status == 1 ? 'approved' : 'denied', $restaurant->vendor->f_name . ' ' . $restaurant->vendor->l_name));
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        } catch (\Exception $ex) {
							 | 
						||
| 
								 | 
							
								            info($ex);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        Toastr::success(translate('messages.application_status_updated_successfully'));
							 | 
						||
| 
								 | 
							
								        return back();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function cleardiscount(Restaurant $restaurant)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $restaurant->discount->delete();
							 | 
						||
| 
								 | 
							
								        Toastr::success(translate('messages.restaurant') . translate('messages.discount_cleared'));
							 | 
						||
| 
								 | 
							
								        return back();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function withdraw()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $all = session()->has('withdraw_status_filter') && session('withdraw_status_filter') == 'all' ? 1 : 0;
							 | 
						||
| 
								 | 
							
								        $active = session()->has('withdraw_status_filter') && session('withdraw_status_filter') == 'approved' ? 1 : 0;
							 | 
						||
| 
								 | 
							
								        $denied = session()->has('withdraw_status_filter') && session('withdraw_status_filter') == 'denied' ? 1 : 0;
							 | 
						||
| 
								 | 
							
								        $pending = session()->has('withdraw_status_filter') && session('withdraw_status_filter') == 'pending' ? 1 : 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $withdraw_req = WithdrawRequest::with(['vendor'])
							 | 
						||
| 
								 | 
							
								            ->when($all, function ($query) {
							 | 
						||
| 
								 | 
							
								                return $query;
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								            ->when($active, function ($query) {
							 | 
						||
| 
								 | 
							
								                return $query->where('approved', 1);
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								            ->when($denied, function ($query) {
							 | 
						||
| 
								 | 
							
								                return $query->where('approved', 2);
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								            ->when($pending, function ($query) {
							 | 
						||
| 
								 | 
							
								                return $query->where('approved', 0);
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								            ->latest()
							 | 
						||
| 
								 | 
							
								            ->paginate(config('default_pagination'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return view('admin-views.wallet.withdraw', compact('withdraw_req'));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function withdraw_view($withdraw_id, $seller_id)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $wr = WithdrawRequest::with(['vendor','method:id,method_name'])->where(['id' => $withdraw_id])->first();
							 | 
						||
| 
								 | 
							
								        return view('admin-views.wallet.withdraw-view', compact('wr'));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function status_filter(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        session()->put('withdraw_status_filter', $request['withdraw_status_filter']);
							 | 
						||
| 
								 | 
							
								        return response()->json(session('withdraw_status_filter'));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function withdrawStatus(Request $request, $id)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $withdraw = WithdrawRequest::findOrFail($id);
							 | 
						||
| 
								 | 
							
								        $withdraw->approved = $request->approved;
							 | 
						||
| 
								 | 
							
								        $withdraw->transaction_note = $request['note'];
							 | 
						||
| 
								 | 
							
								        if ($request->approved == 1) {
							 | 
						||
| 
								 | 
							
								            RestaurantWallet::where('vendor_id', $withdraw->vendor_id)->increment('total_withdrawn', $withdraw->amount);
							 | 
						||
| 
								 | 
							
								            RestaurantWallet::where('vendor_id', $withdraw->vendor_id)->decrement('pending_withdraw', $withdraw->amount);
							 | 
						||
| 
								 | 
							
								            $withdraw->save();
							 | 
						||
| 
								 | 
							
								            Toastr::success(translate('messages.seller_payment_approved'));
							 | 
						||
| 
								 | 
							
								            return redirect()->route('admin.restaurant.withdraw_list');
							 | 
						||
| 
								 | 
							
								        } else if ($request->approved == 2) {
							 | 
						||
| 
								 | 
							
								            RestaurantWallet::where('vendor_id', $withdraw->vendor_id)->decrement('pending_withdraw', $withdraw->amount);
							 | 
						||
| 
								 | 
							
								            $withdraw->save();
							 | 
						||
| 
								 | 
							
								            Toastr::info(translate('messages.seller_payment_denied'));
							 | 
						||
| 
								 | 
							
								            return redirect()->route('admin.restaurant.withdraw_list');
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            Toastr::error(translate('messages.not_found'));
							 | 
						||
| 
								 | 
							
								            return back();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function get_addons(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $cat = AddOn::withoutGlobalScope(RestaurantScope::class)->withoutGlobalScope('translate')->where(['restaurant_id' => $request->restaurant_id])->active()->get();
							 | 
						||
| 
								 | 
							
								        $res = '';
							 | 
						||
| 
								 | 
							
								        foreach ($cat as $row) {
							 | 
						||
| 
								 | 
							
								            $res .= '<option value="' . $row->id . '"';
							 | 
						||
| 
								 | 
							
								            if (count($request->data)) {
							 | 
						||
| 
								 | 
							
								                $res .= in_array($row->id, $request->data) ? 'selected' : '';
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            $res .=  '>' . $row->name . '</option>';
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return response()->json([
							 | 
						||
| 
								 | 
							
								            'options' => $res,
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function get_restaurant_data(Restaurant $restaurant)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return response()->json($restaurant);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function restaurant_filter($id)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if ($id == 'all') {
							 | 
						||
| 
								 | 
							
								            if (session()->has('restaurant_filter')) {
							 | 
						||
| 
								 | 
							
								                session()->forget('restaurant_filter');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            session()->put('restaurant_filter', Restaurant::where('id', $id)->first(['id', 'name']));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return back();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function get_account_data(Restaurant $restaurant)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $wallet = $restaurant->vendor->wallet;
							 | 
						||
| 
								 | 
							
								        $cash_in_hand = 0;
							 | 
						||
| 
								 | 
							
								        $balance = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($wallet) {
							 | 
						||
| 
								 | 
							
								            $cash_in_hand = $wallet->collected_cash;
							 | 
						||
| 
								 | 
							
								            $balance = $wallet->total_earning - $wallet->total_withdrawn - $wallet->pending_withdraw - $wallet->collected_cash;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return response()->json(['cash_in_hand' => $cash_in_hand, 'earning_balance' => $balance], 200);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function bulk_import_index()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return view('admin-views.vendor.bulk-import');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function bulk_import_data(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            $collections = (new FastExcel)->import($request->file('products_file'));
							 | 
						||
| 
								 | 
							
								        } catch (\Exception $exception) {
							 | 
						||
| 
								 | 
							
								            Toastr::error(translate('messages.you_have_uploaded_a_wrong_format_file'));
							 | 
						||
| 
								 | 
							
								            return back();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $duplicate_phones = $collections->duplicates('phone');
							 | 
						||
| 
								 | 
							
								        $duplicate_emails = $collections->duplicates('email');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // dd(['Phone'=>$duplicate_phones, 'Email'=>$duplicate_emails]);
							 | 
						||
| 
								 | 
							
								        if ($duplicate_emails->isNotEmpty()) {
							 | 
						||
| 
								 | 
							
								            Toastr::error(translate('messages.duplicate_data_on_column', ['field' => translate('messages.email')]));
							 | 
						||
| 
								 | 
							
								            return back();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($duplicate_phones->isNotEmpty()) {
							 | 
						||
| 
								 | 
							
								            Toastr::error(translate('messages.duplicate_data_on_column', ['field' => translate('messages.phone')]));
							 | 
						||
| 
								 | 
							
								            return back();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $vendors = [];
							 | 
						||
| 
								 | 
							
								        $restaurants = [];
							 | 
						||
| 
								 | 
							
								        $vendor = Vendor::orderBy('id', 'desc')->first('id');
							 | 
						||
| 
								 | 
							
								        $vendor_id = $vendor ? $vendor->id : 0;
							 | 
						||
| 
								 | 
							
								        foreach ($collections as $key => $collection) {
							 | 
						||
| 
								 | 
							
								            if ($collection['ownerFirstName'] === "" || $collection['restaurantName'] === "" || $collection['phone'] === ""
							 | 
						||
| 
								 | 
							
								            || $collection['email'] === "" || $collection['latitude'] === "" || $collection['longitude'] === ""
							 | 
						||
| 
								 | 
							
								            || $collection['zone_id'] === "" ||  $collection['DeliveryTime'] === ""  || $collection['RestaurantModel'] === ""  ) {
							 | 
						||
| 
								 | 
							
								                Toastr::error(translate('messages.please_fill_all_required_fields'));
							 | 
						||
| 
								 | 
							
								                return back();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if(isset($collection['DeliveryTime']) && explode("-", (string)$collection['DeliveryTime'])[0] >  explode("-", (string)$collection['DeliveryTime'])[1]){
							 | 
						||
| 
								 | 
							
								                Toastr::error('messages.max_delivery_time_must_be_greater_than_min_delivery_time');
							 | 
						||
| 
								 | 
							
								                return back();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if(isset($collection['Comission']) && ($collection['Comission'] < 0 ||  $collection['Comission'] > 100) ) {
							 | 
						||
| 
								 | 
							
								                Toastr::error('messages.Comission_must_be_in_0_to_100');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if(isset($collection['Tax']) && ($collection['Tax'] < 0 ||  $collection['Tax'] > 100 )) {
							 | 
						||
| 
								 | 
							
								                Toastr::error('messages.Tax_must_be_in_0_to_100');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if(isset($collection['latitude']) && ($collection['latitude'] < -90 ||  $collection['latitude'] > 90 )) {
							 | 
						||
| 
								 | 
							
								                Toastr::error('messages.latitude_must_be_in_-90_to_90');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if(isset($collection['longitude']) && ($collection['longitude'] < -180 ||  $collection['longitude'] > 180 )) {
							 | 
						||
| 
								 | 
							
								                Toastr::error('messages.longitude_must_be_in_-180_to_180');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if(isset($collection['MinimumDeliveryFee']) && ($collection['MinimumDeliveryFee'] < 0  )) {
							 | 
						||
| 
								 | 
							
								                Toastr::error('messages.Enter_valid_Minimum_Delivery_Fee');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if(isset($collection['MinimumOrderAmount']) && ($collection['MinimumOrderAmount'] < 0  )) {
							 | 
						||
| 
								 | 
							
								                Toastr::error('messages.Enter_valid_Minimum_Order_Amount');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if(isset($collection['PerKmDeliveryFee']) && ($collection['PerKmDeliveryFee'] < 0  )) {
							 | 
						||
| 
								 | 
							
								                Toastr::error('messages.Enter_valid_Per_Km_Delivery_Fee');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if(isset($collection['MaximumDeliveryFee']) && ($collection['MaximumDeliveryFee'] < 0  )  ) {
							 | 
						||
| 
								 | 
							
								                Toastr::error('messages.Enter_valid_Maximum_Delivery_Fee');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            array_push($vendors, [
							 | 
						||
| 
								 | 
							
								                'id' => $vendor_id + $key + 1,
							 | 
						||
| 
								 | 
							
								                'f_name' => $collection['ownerFirstName'],
							 | 
						||
| 
								 | 
							
								                'l_name' => $collection['ownerLastName'],
							 | 
						||
| 
								 | 
							
								                'password' => bcrypt(12345678),
							 | 
						||
| 
								 | 
							
								                'phone' => $collection['phone'],
							 | 
						||
| 
								 | 
							
								                'email' => $collection['email'],
							 | 
						||
| 
								 | 
							
								                'status' => 1,
							 | 
						||
| 
								 | 
							
								                'created_at' => now(),
							 | 
						||
| 
								 | 
							
								                'updated_at' => now()
							 | 
						||
| 
								 | 
							
								            ]);
							 | 
						||
| 
								 | 
							
								            array_push($restaurants, [
							 | 
						||
| 
								 | 
							
								                'name' => $collection['restaurantName'],
							 | 
						||
| 
								 | 
							
								                'logo' => $collection['logo'],
							 | 
						||
| 
								 | 
							
								                'phone' => $collection['phone'],
							 | 
						||
| 
								 | 
							
								                'email' => $collection['email'],
							 | 
						||
| 
								 | 
							
								                'latitude' => $collection['latitude'],
							 | 
						||
| 
								 | 
							
								                'longitude' => $collection['longitude'],
							 | 
						||
| 
								 | 
							
								                'vendor_id' => $vendor_id + $key + 1,
							 | 
						||
| 
								 | 
							
								                'zone_id' => $collection['zone_id'],
							 | 
						||
| 
								 | 
							
								                'address' => $collection['Address'],
							 | 
						||
| 
								 | 
							
								                // 'footer_text' => $collection['FooterText'],
							 | 
						||
| 
								 | 
							
								                'tax' => $collection['Tax'] ?? 0,
							 | 
						||
| 
								 | 
							
								                'minimum_order' => $collection['MinimumOrderAmount'] ?? 0,
							 | 
						||
| 
								 | 
							
								                'delivery_time' => $collection['DeliveryTime'] ?? '15-30',
							 | 
						||
| 
								 | 
							
								                'comission' => $collection['Comission'] ?? 'comission',
							 | 
						||
| 
								 | 
							
								                'minimum_shipping_charge' => $collection['MinimumDeliveryFee'] ?? 0,
							 | 
						||
| 
								 | 
							
								                'per_km_shipping_charge' => $collection['PerKmDeliveryFee'] ?? 0,
							 | 
						||
| 
								 | 
							
								                'maximum_shipping_charge' => $collection['MaximumDeliveryFee'] ?? 0,
							 | 
						||
| 
								 | 
							
								                // 'restaurant_model' => $collection['RestaurantModel'] ?? 'commission',
							 | 
						||
| 
								 | 
							
								                'restaurant_model' =>  $collection['RestaurantModel'] == 'subscription' ? 'unsubscribed' : 'commission'  ,
							 | 
						||
| 
								 | 
							
								                'schedule_order' => $collection['ScheduleOrder'] == 'yes' ? 1 : 0,
							 | 
						||
| 
								 | 
							
								                'take_away' => $collection['TakeAway'] == 'yes' ? 1 : 0,
							 | 
						||
| 
								 | 
							
								                'free_delivery' => $collection['FreeDelivery'] == 'yes' ? 1 : 0,
							 | 
						||
| 
								 | 
							
								                'veg' => $collection['Veg'] == 'yes' ? 1 : 0,
							 | 
						||
| 
								 | 
							
								                'non_veg' => $collection['NonVeg'] == 'yes' ? 1 : 0,
							 | 
						||
| 
								 | 
							
								                'delivery' => $collection['Delivery'] == 'yes' ? 1 : 0,
							 | 
						||
| 
								 | 
							
								                'status' => $collection['Status'] == 'active' ? 1 : 0,
							 | 
						||
| 
								 | 
							
								                'food_section' => $collection['FoodSection'] == 'active' ?1 : 0,
							 | 
						||
| 
								 | 
							
								                'reviews_section' => $collection['ReviewsSection'] == 'active' ?1 : 0,
							 | 
						||
| 
								 | 
							
								                'pos_system' => $collection['PosSystem'] == 'active' ?1 : 0,
							 | 
						||
| 
								 | 
							
								                'self_delivery_system' => $collection['SelfDeliverySystem'] == 'active' ?1 : 0,
							 | 
						||
| 
								 | 
							
								                'active' => $collection['RestaurantOpen'] == 'yes' ?1 : 0,
							 | 
						||
| 
								 | 
							
								                'created_at' => now(),
							 | 
						||
| 
								 | 
							
								                'updated_at' => now()
							 | 
						||
| 
								 | 
							
								            ]);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            DB::beginTransaction();
							 | 
						||
| 
								 | 
							
								            DB::table('vendors')->insert($vendors);
							 | 
						||
| 
								 | 
							
								            DB::table('restaurants')->insert($restaurants);
							 | 
						||
| 
								 | 
							
								            DB::commit();
							 | 
						||
| 
								 | 
							
								        } catch (\Exception $e) {
							 | 
						||
| 
								 | 
							
								            DB::rollBack();
							 | 
						||
| 
								 | 
							
								            info($e);
							 | 
						||
| 
								 | 
							
								            Toastr::error(translate('messages.failed_to_import_data'));
							 | 
						||
| 
								 | 
							
								            return back();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Toastr::success(translate('messages.restaurant_imported_successfully', ['count' => count($restaurants)]));
							 | 
						||
| 
								 | 
							
								        return back();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function bulk_export_index()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return view('admin-views.vendor.bulk-export');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function bulk_export_data(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $request->validate([
							 | 
						||
| 
								 | 
							
								            'type' => 'required',
							 | 
						||
| 
								 | 
							
								            'start_id' => 'required_if:type,id_wise',
							 | 
						||
| 
								 | 
							
								            'end_id' => 'required_if:type,id_wise',
							 | 
						||
| 
								 | 
							
								            'from_date' => 'required_if:type,date_wise',
							 | 
						||
| 
								 | 
							
								            'to_date' => 'required_if:type,date_wise'
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								        $vendors = Vendor::with('restaurants')->has('restaurants')
							 | 
						||
| 
								 | 
							
								            ->when($request['type'] == 'date_wise', function ($query) use ($request) {
							 | 
						||
| 
								 | 
							
								                $query->whereBetween('created_at', [$request['from_date'] . ' 00:00:00', $request['to_date'] . ' 23:59:59']);
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								            ->when($request['type'] == 'id_wise', function ($query) use ($request) {
							 | 
						||
| 
								 | 
							
								                $query->whereBetween('id', [$request['start_id'], $request['end_id']]);
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								            ->when($request->type == 'all' ,function($q){
							 | 
						||
| 
								 | 
							
								                $q->where('status',1);
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								            ->get();
							 | 
						||
| 
								 | 
							
								        return (new FastExcel(RestaurantLogic::format_export_restaurants($vendors)))->download('Restaurants.xlsx');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function add_schedule(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $validator = Validator::make($request->all(), [
							 | 
						||
| 
								 | 
							
								            'start_time' => 'required|date_format:H:i',
							 | 
						||
| 
								 | 
							
								            'end_time' => 'required|date_format:H:i|after:start_time',
							 | 
						||
| 
								 | 
							
								            'restaurant_id' => 'required',
							 | 
						||
| 
								 | 
							
								        ], [
							 | 
						||
| 
								 | 
							
								            'end_time.after' => translate('messages.End time must be after the start time')
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($validator->fails()) {
							 | 
						||
| 
								 | 
							
								            return response()->json(['errors' => Helpers::error_processor($validator)]);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $temp = RestaurantSchedule::where('day', $request->day)->where('restaurant_id', $request->restaurant_id)
							 | 
						||
| 
								 | 
							
								            ->where(function ($q) use ($request) {
							 | 
						||
| 
								 | 
							
								                return $q->where(function ($query) use ($request) {
							 | 
						||
| 
								 | 
							
								                    return $query->where('opening_time', '<=', $request->start_time)->where('closing_time', '>=', $request->start_time);
							 | 
						||
| 
								 | 
							
								                })->orWhere(function ($query) use ($request) {
							 | 
						||
| 
								 | 
							
								                    return $query->where('opening_time', '<=', $request->end_time)->where('closing_time', '>=', $request->end_time);
							 | 
						||
| 
								 | 
							
								                });
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								            ->first();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (isset($temp)) {
							 | 
						||
| 
								 | 
							
								            return response()->json(['errors' => [
							 | 
						||
| 
								 | 
							
								                ['code' => 'time', 'message' => translate('messages.schedule_overlapping_warning')]
							 | 
						||
| 
								 | 
							
								            ]]);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $restaurant = Restaurant::find($request->restaurant_id);
							 | 
						||
| 
								 | 
							
								        $restaurant_schedule = RestaurantSchedule::insert(['restaurant_id' => $request->restaurant_id, 'day' => $request->day, 'opening_time' => $request->start_time, 'closing_time' => $request->end_time]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return response()->json([
							 | 
						||
| 
								 | 
							
								            'view' => view('admin-views.vendor.view.partials._schedule', compact('restaurant'))->render(),
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function remove_schedule($restaurant_schedule)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $schedule = RestaurantSchedule::find($restaurant_schedule);
							 | 
						||
| 
								 | 
							
								        if (!$schedule) {
							 | 
						||
| 
								 | 
							
								            return response()->json([], 404);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $restaurant = $schedule->restaurant;
							 | 
						||
| 
								 | 
							
								        $schedule->delete();
							 | 
						||
| 
								 | 
							
								        return response()->json([
							 | 
						||
| 
								 | 
							
								            'view' => view('admin-views.vendor.view.partials._schedule', compact('restaurant'))->render(),
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function restaurants_export( Request $request,  $type)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $zone_id = $request->query('zone_id', 'all');
							 | 
						||
| 
								 | 
							
								        $restaurant_model = $request->query('restaurant_model', '');
							 | 
						||
| 
								 | 
							
								        $ty = $request->query('ty', 'all');
							 | 
						||
| 
								 | 
							
								        $restaurants = Restaurant::when(is_numeric($zone_id), function ($query) use ($zone_id) {
							 | 
						||
| 
								 | 
							
								            return $query->where('zone_id', $zone_id);
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								        ->type($ty)->RestaurantModel($restaurant_model)->latest()->with('vendor', 'zone')->get();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($type == 'excel') {
							 | 
						||
| 
								 | 
							
								            return (new FastExcel(Helpers::export_restaurants($restaurants)))->download('Restaurants.xlsx');
							 | 
						||
| 
								 | 
							
								        } elseif ($type == 'csv') {
							 | 
						||
| 
								 | 
							
								            return (new FastExcel(Helpers::export_restaurants($restaurants)))->download('Restaurants.csv');
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function withdraw_list_export(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $withdraw_request = WithdrawRequest::latest()->get();
							 | 
						||
| 
								 | 
							
								        if ($request->type == 'excel') {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            return (new FastExcel(Helpers::restaurant_withdraw_list_export($withdraw_request)))->download('WithdrawRequests.xlsx');
							 | 
						||
| 
								 | 
							
								        } elseif ($request->type == 'csv') {
							 | 
						||
| 
								 | 
							
								            return (new FastExcel(Helpers::restaurant_withdraw_list_export($withdraw_request)))->download('WithdrawRequests.csv');
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    public function conversation_list(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $user = UserInfo::where('vendor_id', $request->user_id)->first();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $conversations = Conversation::WhereUser($user->id);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($request->query('key') != null) {
							 | 
						||
| 
								 | 
							
								            $key = explode(' ', $request->get('key'));
							 | 
						||
| 
								 | 
							
								            $conversations = $conversations->where(function ($qu) use ($key) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                $qu->whereHas('sender', function ($query) use ($key) {
							 | 
						||
| 
								 | 
							
								                    foreach ($key as $value) {
							 | 
						||
| 
								 | 
							
								                        $query->where('f_name', 'like', "%{$value}%")->orWhere('l_name', 'like', "%{$value}%")->orWhere('phone', 'like', "%{$value}%");
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                })->orWhereHas('receiver', function ($query1) use ($key) {
							 | 
						||
| 
								 | 
							
								                        foreach ($key as $value) {
							 | 
						||
| 
								 | 
							
								                            $query1->where('f_name', 'like', "%{$value}%")->orWhere('l_name', 'like', "%{$value}%")->orWhere('phone', 'like', "%{$value}%");
							 | 
						||
| 
								 | 
							
								                        }
							 | 
						||
| 
								 | 
							
								                    });
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $conversations = $conversations->paginate(8);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $view = view('admin-views.vendor.view.partials._conversation_list', compact('conversations'))->render();
							 | 
						||
| 
								 | 
							
								        return response()->json(['html' => $view]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function conversation_view($conversation_id, $user_id)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $convs = Message::where(['conversation_id' => $conversation_id])->get();
							 | 
						||
| 
								 | 
							
								        $conversation = Conversation::find($conversation_id);
							 | 
						||
| 
								 | 
							
								        $receiver = UserInfo::find($conversation->receiver_id);
							 | 
						||
| 
								 | 
							
								        $sender = UserInfo::find($conversation->sender_id);
							 | 
						||
| 
								 | 
							
								        $user = UserInfo::find($user_id);
							 | 
						||
| 
								 | 
							
								        return response()->json([
							 | 
						||
| 
								 | 
							
								            'view' => view('admin-views.vendor.view.partials._conversations', compact('convs', 'user', 'receiver'))->render()
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function cash_transaction_export(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $transaction = AccountTransaction::where('from_type', 'restaurant')->where('from_id', $request->restaurant)->get();
							 | 
						||
| 
								 | 
							
								        if ($request->type == 'excel') {
							 | 
						||
| 
								 | 
							
								            return (new FastExcel($transaction))->download('CashTransaction.xlsx');
							 | 
						||
| 
								 | 
							
								        } elseif ($request->type == 'csv') {
							 | 
						||
| 
								 | 
							
								            return (new FastExcel($transaction))->download('CashTransaction.csv');
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    public function digital_transaction_export(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $transaction = OrderTransaction::where('vendor_id', $request->restaurant)->latest()->get();
							 | 
						||
| 
								 | 
							
								        if ($request->type == 'excel') {
							 | 
						||
| 
								 | 
							
								            return (new FastExcel($transaction))->download('AdminOrderTransaction.xlsx');
							 | 
						||
| 
								 | 
							
								        } elseif ($request->type == 'csv') {
							 | 
						||
| 
								 | 
							
								            return (new FastExcel($transaction))->download('AdminOrderTransaction.csv');
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    public function withdraw_transaction_export(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $transaction = WithdrawRequest::where('vendor_id', $request->restaurant)->get();
							 | 
						||
| 
								 | 
							
								        if ($request->type == 'excel') {
							 | 
						||
| 
								 | 
							
								            return (new FastExcel($transaction))->download('WithdrawTransaction.xlsx');
							 | 
						||
| 
								 | 
							
								        } elseif ($request->type == 'csv') {
							 | 
						||
| 
								 | 
							
								            return (new FastExcel($transaction))->download('WithdrawTransaction.csv');
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function withdraw_search(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $key = explode(' ', $request['search']);
							 | 
						||
| 
								 | 
							
								        $withdraw_req = WithdrawRequest::whereHas('vendor', function ($query) use ($key) {
							 | 
						||
| 
								 | 
							
								            $query->whereHas('restaurants', function ($q) use ($key) {
							 | 
						||
| 
								 | 
							
								                foreach ($key as $value) {
							 | 
						||
| 
								 | 
							
								                    $q->where('name', 'like', "%{$value}%");
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								        })->get();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return response()->json([
							 | 
						||
| 
								 | 
							
								            'view' => view('admin-views.wallet.partials._table', compact('withdraw_req'))->render(),
							 | 
						||
| 
								 | 
							
								            'total' => $withdraw_req->count()
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |