Edit File: StoreController.php
<?php namespace App\Http\Controllers\Admin; use App\Models\City; use App\Models\Nationality; use App\Models\User; use App\Models\Store; use App\Models\Qualification; use App\Traits\Report; use App\Models\StoreCategory; use App\Models\Country; use App\Models\Category; use App\Traits\Uploadable; use App\Models\StoreTiming; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Http\Requests\Admin\Stores\Edit; use App\Http\Requests\Admin\Stores\editBranchReqtest; use App\Http\Requests\Admin\Stores\updateOfferRequest; use App\Http\Requests\Admin\Stores\createBranchRequest; use App\Http\Requests\Admin\Stores\Store as StoreRequest; use Illuminate\Support\Facades\Cache; use App\Jobs\DeleteUser; use App\Jobs\NotifyUser; use App\Jobs\AdminAcceptStoreNotify; use Carbon\Carbon; use App\Http\Requests\Admin\Notifiation\SendRequest; class StoreController extends Controller { use Uploadable ; public function index() { $status = request()->segment(3); if ($status == 'all') { $rows = Store::with(['user'])->where('store_id' , null)->latest()->get() ; }else{ $rows = Store::with(['user'])->latest()->get(); } return view('admin.stores.index', compact('rows' , 'status')); } /*************************** accept**************************/ // public function pending() // { // $rows = User::whereHas('store')->with('store')->where(['approve' => 'pending' , 'type' => 'store' ])->latest()->get(); // return view('admin.stores.pending', compact('rows')); // } // public function pending($id = null) { if (request()->ajax()) { $rows = User::whereHas('store')->with('store')->where(['approve' => 'pending' , 'type' => 'store' ])->search(request()->searchArray)->paginate(10); $html = view('admin.stores.pending_table' ,compact('rows'))->render() ; return response()->json(['html' => $html]); } return view('admin.stores.pending'); } public function notify(SendRequest $request) { if ('all' == $request->id) { $count ='all'; $clients = User::where('type','store')->where('status','active')->get(); } else { $count ='one'; $clients = User::findOrFail($request->id); } dispatch(new NotifyUser($clients, $request, $request->type ,$count)); return response()->json(); } // public function accepted() // { // $rows = User::whereHas('store' , function($query) { // $query->where('store_id' , null ); // })->where(['approve' => 'accept' , 'type' => 'store'])->latest()->get(); // return view('admin.stores.accepted', compact('rows' )); // } public function accepted($id = null) { if (request()->ajax()) { $rows = User::whereHas('store' , function($query) { $query->where('store_id' , null ); })->where(['approve' => 'accept' , 'type' => 'store'])->search(request()->searchArray)->paginate(10); $html = view('admin.stores.accepted_table' ,compact('rows'))->render() ; return response()->json(['html' => $html]); } return view('admin.stores.accepted'); } public function branches($store_id) { $rows= Store::where('store_id' , $store_id)->latest()->get(); return view('admin.stores.branches', compact('rows' ,'store_id')); } public function refused($store_id = null) { if ($store_id == null ) { $rows = User::whereHas('store' , function($query) { $query->where('store_id' , null ); })->where(['approve' => 'refused' , 'type' => 'store' ])->latest()->get(); }else{ $rows = User::where(['approve' => 'refused' , 'type' => 'store' ])->latest()->get(); } // $rows = User::where(['approve' => 'refused' , 'type' => 'store' ])->latest()->get(); return view('admin.stores.refused', compact('rows','store_id')); } // public function googleProviders() // { // $rows = Store::where(['user_id' => null ])->latest()->get(); // return view('admin.stores.google', compact('rows')); // } public function googleProviders($id = null) { if (request()->ajax()) { $rows = Store::where(['user_id' => null ])->search(request()->searchArray)->paginate(10); $html = view('admin.stores.google_table' ,compact('rows'))->render() ; return response()->json(['html' => $html]); } return view('admin.stores.google'); } public function acceptOrRefuse(Request $request) { $row = User::findOrFail($request->id); if ($request->status == 'accept') { $row->update(['approve' => $request->status]); $row->store()->update(['has_contract' => 'true']); dispatch(new AdminAcceptStoreNotify($row)); return response()->json([ 'message' => awtTrans('تم قبول التعاقد بنجاح') ]); }else{ $store = $row->store; $row->update(['approve' => $request->status]); $store->update(['refuse_reason' => $request['reason']]); return response()->json(['id' =>$row->id ]); } $row->updateCacheWithProducts(); } public function show($id) { $row = Store::findOrFail($id); $keys = Country::get(); $categories = Category::where('slug' , '!=' , 'free_delivery')->get(); $qualifications = Qualification::get(); $cities = City::get(); $nationalities = Nationality::get(); return view('admin.stores.show' , compact('row' ,'keys' , 'cities' , 'categories' , 'nationalities' , 'qualifications')); } public function googleShow($id) { $row = Store::findOrFail($id) ; return view('admin.stores.google_show' , compact('row')); } /*************************** delete **************************/ public function destroy($id) { $row = User::find($id); $store = Store::where('user_id' , $row->id)->first(); Store::where('store_id' , $store->id)->delete(); $store->delete(); dispatch(new DeleteUser($row)); $row->delete(); Report::addToLog('حذف مقدم خدمة') ; if(Cache::has('store-'.$row->id)){ Cache::forget('store-'.$row->id); } return response()->json(['id' =>$id]); } public function destroy_branch($id) { $row = Store::find($id); $user = $row->user(); dispatch(new DeleteUser($user)); $user->delete(); $row->delete(); Report::addToLog(' حذف مقدم خدمة') ; if(Cache::has('store-'.$row->id)){ Cache::forget('store-'.$user->id); } return response()->json(['id' =>$id]); } /*************************** delete **************************/ public function destroyGoogle($id) { $row = Store::findOrFail($id)->delete(); if(Cache::has('store-'.$row->id)){ Cache::forget('store-'.$row->id); } Report::addToLog(' حذف متجر جوجل') ; return response()->json(['id' =>$id]); } public function destroyAll(Request $request) { // dd($request->all()); $requestIds = json_decode($request->data,true); foreach ($requestIds as $id) { if(Cache::has('store-'.$id['id'])){ Cache::forget('store-'.$id['id']); } $ids[] = $id['id']; } $users=User::whereIn('id', $ids)->get(); $stores=Store::whereIn('user_id', $ids)->delete(); foreach($users as $user){ dispatch(new DeleteUser($user)); } if (User::WhereIn('id',$ids)->delete()) { Report::addToLog(' حذف العديد من المتاجر') ; return response()->json('success'); } else { return response()->json('failed'); } } public function destroyAllGoogle(Request $request) { $requestIds = json_decode($request->data); foreach ($requestIds as $id) { if(Cache::has('store-'.$id)){ Cache::forget('store-'.$id); } $ids[] = $id->id; } if (Store::WhereIn('id',$ids)->delete()) { Report::addToLog(' حذف العديد من متاجر جوجل') ; return response()->json('success'); } else { return response()->json('failed'); } } /*************************** store **************************/ public function create() { $keys = Country::get(); $categories = Category::where('slug' , '!=' , 'free_delivery') ->where('category_id',NULL)->get(); $qualifications = Qualification::get(); $cities = City::get(); $nationalities = Nationality::get(); return view('admin.stores.create' , compact('keys' ,'categories' , 'qualifications' , 'cities' , 'nationalities')); } /*************************** store **************************/ public function store(StoreRequest $request) { if ($request->has_contract == 1 ) { $user = User::create($request->validated() + ([ 'type' => 'store' , 'approve' => 'accept' ])); $store = Store::create( $request->validatedExcept('name') + [ 'name' => ['ar' => $request->name_ar , 'en' => $request->name_en] , 'desc' => ['ar' => $request->desc_ar , 'en' => $request->desc_en] , 'user_id' => $user->id , 'has_contract' => 'true' , ]); } else { $store = Store::create( $request->only(['address','category','lat','long']) + [ 'name' => ['ar' => $request->name_ar , 'en' => $request->name_en] , 'commercial_id' => (isset($request->commercial_id)) ? $request->commercial_id : null, 'has_contract' => 'false' , ]); } Report::addToLog(' اضافه متجر') ; $store->updateCacheWithProducts(); if ($request->has_contract == 1){ return response()->json(['url' => route('admin.stores.accept')]); }else{ return response()->json(['url' => route('admin.stores.googleProviders')]); } } /*************************** edit page **************************/ public function edit($id) { $row = Store::findOrFail($id); $keys = Country::get(); $categories = Category::where('slug' , '!=' , 'free_delivery')->get(); $qualifications = Qualification::get(); $cities = City::get(); $nationalities = Nationality::get(); return view('admin.stores.edit' , compact('row' ,'keys' ,'categories' , 'qualifications' , 'nationalities' , 'cities') ); } /*************************** update **************************/ public function update(Edit $request, $id) { $store = Store::findOrFail($id); if ($store->user) { $store->user->update($request->validated()); } $store->update( $request->validatedExcept('name') + ([ 'name' => ['ar' => $request->name_ar , 'en' => $request->name_en] , 'desc' => ['ar' => $request->desc_ar , 'en' => $request->desc_en] , ])); $store->updateCacheWithProducts(); Report::addToLog(' تعديل المتاجر') ; if($store->has_contract == '0') { $url = route('admin.stores.googleProviders'); }else{ $url = route('admin.stores.accept'); } return response()->json(['url' => $url]); } public function offerPage($id) { $row = Store::findOrFail($id) ; return view('admin.stores.offer' , compact('row')); } public function updateOffer(updateOfferRequest $request , $id) { $store = Store::findOrFail($id) ; if ($request->offer == null) { $store->update([ 'offer' => 'false' , 'offer_image' => null , 'offer_amount' => 0 , 'offer_max' => 0 ]); }else{ if($request->offer_image != NULL){ $store->update([ 'offer' => 'true' , 'offer_image' => $this->uploadFile($request->offer_image , 'stores', true, 250, null) , 'offer_amount' => $request->offer_amount , 'offer_type' => $request->offer_type , 'offer_max' => $request->offer_type == 'percentage' ? $request->offer_max : $request->offer_amount , ]); } else { $store->update([ 'offer' => 'true' , 'offer_amount' => $request->offer_amount , 'offer_type' => $request->offer_type , 'offer_max' => $request->offer_type == 'percentage' ? $request->offer_max : $request->offer_amount , ]); } } $store->updateCacheWithProducts(); return response()->json(['url' => route('admin.stores.accept')]); } public function createBranchPage($id) { $store = Store::FindOrFail($id); $keys = Country::get(); $categories = Category::get(); return view('admin.stores.branch_create' , compact('keys' , 'categories' ,'store')); } public function createBranch(createBranchRequest $request , $id) { $store = Store::FindOrFail($id); if ($request->has_contract == 1 ) { $user = User::create($request->validated(['avatar','country_key','email','name','password']) + ([ 'type' => 'store' , 'approve' => 'accept' ])); } $store = Store::create( $request->only(['bank_name','iban_number','address','lat','long']) + [ 'name' => ['ar' => $store->getTranslations('name')['ar'] , 'en' => $store->getTranslations('name')['en']] , 'category' => $store -> category , 'commercial_id' => $store -> commercial_id , 'cover' => $store -> cover , 'icon' => $store -> icon , 'commercial_image' => $store -> commercial_image , 'user_id' => $request -> has_contract == 1 ? $user->id : null , 'has_contract' => $request -> has_contract == 1 ? 'true' : 'false' , 'store_id' => $id , ]); Report::addToLog(' اضافه فرع لمتجر') ; $store->updateCacheWithProducts(); return response()->json(['url' => route('admin.stores.branches' , ['id' => $id])]); } public function editBranchPage($id) { $row = Store::findOrFail($id); $keys = Country::get(); $categories = Category::get(); return view('admin.stores.branch_edit' , compact('row' ,'keys' ,'categories') ); } public function editBranch(editBranchReqtest $request ,$id) { $store = Store::findOrFail($id); if ($store->user_id != null ) { $store->user->update($request->validated()); } $store->update( $request->validatedExcept( ['name' , 'avatar' , 'name_ar' , 'name_en' , 'cover' , 'icon' , 'commercial_image'] )); Report::addToLog('تعديل متجر فرعي') ; $store->updateCacheWithProducts(); return response()->json(['url' => route('admin.stores.branches' , ['id' => $store->store_id])]); } public function datesPage($id) { $row = Store::findOrFail($id) ; return view('admin.stores.dates' , compact('row')); } public function datesStore(Request $request , $id) { $store = Store::findOrfail($id) ; $store->timings->each->delete(); if($request->day){ foreach ($request->day as $key => $value) { if(Carbon::parse($request->from[$key]) > Carbon::parse($request->to[$key])){ return response()->json(['key' => 'error',"msg" => 'يجب ان يكون توقيت الغلق بعد توقيت الفتح']); } StoreTiming::create([ 'day' => $value , 'from' => $request->from[$key] , 'to' => $request->to[$key] , 'store_id' => $id ]); } } $store->updateCacheWithProducts(); if(!$store->user_id){ return response()->json(['url' => route('admin.stores.googleProviders')]); } return response()->json(['url' => route('admin.stores.accept')]); } }
Back to File Manager