Edit File: StoreController.php
<?php namespace App\Http\Controllers\Admin; use App\Models\User; use App\Models\Store; use App\Traits\Report; use App\Models\Country; use App\Models\Category; use App\Traits\Uploadable; use App\Models\StoreTiming; use Carbon\Carbon; 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\BlockUser; 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::where(['type' => 'store' , 'status' => '' ])->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' ])->latest()->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(Request $request) { if ('all' == $request->id) { $clients = User::where('type','store')->where('status','active')->get(); } else { $clients = User::findOrFail($request->id); } dispatch(new NotifyUser($clients, $request, $request->type)); 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'])->latest()->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 ])->latest()->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']); return response()->json([ 'message' => awtTrans('تم قبول التعاقد بنجاح') ]); }else{ $row->update(['approve' => $request->status]); return response()->json([ 'message' => awtTrans('تم رفض التعاقد بنجاح') ]); } $row->updateCacheWithProducts(); } public function show($id) { $row = Store::findOrFail($id) ; $category = Category::where('slug', $row['category'])->first(); return view('admin.stores.show' , compact('row', 'category')); } 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); 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; if ($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) { $requestIds = json_decode($request->data); foreach ($requestIds as $id) { // if(Cache::has('store-'.$id)){ // Cache::forget('store-'.$id); // } $ids[] = $id->id; } $ids = array_values($ids); $stores = Store::whereIn('id', $ids)->whereHas('user'); if ($stores->count() > 0){ $users = $stores->user; foreach($users as $user){ dispatch(new DeleteUser($user)); } } if (Store::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')->get(); return view('admin.stores.create' , compact('keys' ,'categories')); } /*************************** store **************************/ public function store(StoreRequest $request) { if ($request->has_contract == 1 ) { $user = User::create($request->validated(['country_key','email','name','password']) + ([ 'type' => 'store' , 'approve' => 'accept' ])); $user->sendVerificationCode(); } $arr = [ 'name' => ['ar' => $request->name_ar , 'en' => $request->name_en] , 'cover' => $this->uploadFile($request->cover , 'stores', true, 250, null) , 'icon' => $this->uploadFile($request->icon , 'stores', true, 250, null) , 'commercial_image' => $this->uploadFile($request->commercial_image , 'stores', true, 250, null) , 'user_id' => $request->has_contract == 1 ? $user->id : null , 'has_contract' => $request->has_contract == 1 ? 'true' : 'false' , ]; if ($request->has_contract == 1 ) { $arr['app_commission'] = $request['app_commission']; } $store = Store::create( $request->only(['bank_name','iban_number','address','category','commercial_id','lat','long']) + $arr); 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(); $user = $row->user; return view('admin.stores.edit' , compact('row' ,'keys' ,'categories', 'user') ); } /*************************** update **************************/ public function update(Edit $request, $id) { $store = Store::findOrFail($id); if ($store->user_id != null ) { $store->user->update($request->validated()); $user = $store->user; $user->sendVerificationCode(); if($request['block']==1){ dispatch(new BlockUser($user)); } } $arr = [ 'name' => ['ar' => $request->name_ar , 'en' => $request->name_en] , 'cover' => $request->cover ? $this->uploadFile($request->cover , 'stores', true, 250, null) : $store->cover , 'icon' => $request->icon ? $this->uploadFile($request->icon , 'stores', true, 250, null) : $store->icon, 'commercial_image' => $request->commercial_image ? $this->uploadFile($request->commercial_image , 'stores', true, 250, null) : $store->commercial_image , ]; if ($request->has_contract == 1 ) { $arr['app_commission'] = $request['app_commission']; } $store->update( $request->validatedExcept(['name' , 'name_ar' , 'name_en' , 'cover' , 'icon' , 'commercial_image']) + ($arr)); $update_branshes = ['store_id' => $id , 'name_ar' => $request->name_ar , 'name_en' => $request->name_en]; $this->updateBranches($update_branshes); $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 updateBranches(array $request) { $branches = Store::where('store_id', $request['store_id'])->get(); foreach ($branches as $branch) { $branch->update(['name' => [ 'ar' => $request['name_ar'], 'en' => $request['name_en'], ] ]); } } 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 ($store['offer_image'] == null && !isset($request['offer_image'])){ $msg = awtTrans('صورة العرض مطلوبة'); return response()->json(['key'=>'error', 'msg'=>$msg]); } if ($request->offer == null) { $store->update([ 'offer' => 'false' , 'offer_image' => null , 'offer_amount' => 0 , 'offer_max' => 0 ]); }else{ $arr = [ 'offer' => 'true' , 'offer_amount' => $request->offer_amount , 'offer_type' => $request->offer_type , 'offer_max' => $request->offer_type == 'percentage' ? $request->offer_max : $request->offer_amount , ]; if (isset($request->offer_image)){ $arr['offer_image'] = $this->uploadFile($request->offer_image,'stores', true, 250, null); } $store->update($arr); } $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' ])); $user->sendVerificationCode(); } $arr = [ '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 , ]; if (isset($request['commercial_image'])){ $arr['commercial_image'] = $this->uploadFile($request->commercial_image, 'stores'); } $store = Store::create( $request->only(['bank_name','iban_number','address','lat','long']) + $arr); 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()); $user = $store->user; $user->sendVerificationCode(); } $arr = [ 'name' => ['ar' => $store->getTranslations('name')['ar'] , 'en' => $store->getTranslations('name')['en']] , ]; if (isset($request['commercial_image'])){ $arr['commercial_image'] = $this->uploadFile($request->commercial_image, 'stores'); } $store->update( $request->validatedExcept( ['name' , 'avatar' , 'name_ar' , 'name_en' , 'cover' , 'icon' , 'commercial_image'] ) + $arr); 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(); $array = $request->day; $unique = array_unique($array); $times = []; foreach ($unique as $value){ $duplicated = array_keys(array_intersect($array, $unique), $value); $from = array_values(array_intersect_key($request->from, array_flip($duplicated))); $to = array_values(array_intersect_key($request->to, array_flip($duplicated))); $times[] = [$value=>['from'=>$from, 'to'=>$to]]; } foreach ($times as $values){ foreach ($values as $value){ $count = count($value['from']); for ($i = 0; $i < $count; $i++) { if ($value['from'][$i] && $value['to'][$i]) { $start = Carbon::createFromTimeString($value['from'][$i]); $end = Carbon::createFromTimeString($value['to'][$i]); for ($i2 = 0; $i2 < $count; $i2++) { if ($i2 != $i) { $previos_from = Carbon::createFromTimeString($value['from'][$i2]); $previos_to = Carbon::createFromTimeString($value['to'][$i2])->subHour(); if ($start->between($previos_from, $previos_to) || $end->between($previos_from, $previos_to, false)) { return response()->json(['key'=>'fail']); } } } } } } } if($request->day){ foreach ($request->day as $key => $value) { 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(['key'=>'success','url' => route('admin.stores.accept')]); } }
Back to File Manager