Edit File: StoreController.php
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Http\Requests\Admin\Stores\createBranchRequest; use App\Http\Requests\Admin\Stores\Edit; use App\Http\Requests\Admin\Stores\editBranchReqtest; use App\Http\Requests\Admin\Stores\Store as StoreRequest; use App\Http\Requests\Admin\Stores\updateOfferRequest; use App\Jobs\AdminAcceptStoreNotify; use App\Jobs\DeleteUser; use App\Jobs\AcceptStoreUpdateNotify; use App\Jobs\NotifyUser; use App\Models\Category; use App\Models\Country; use App\Models\Store; use App\Models\StoreUpdate; use App\Models\UserCategory; use App\Models\StoreTiming; use App\Models\User; use App\Traits\Report; use App\Traits\Uploadable; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; 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($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 storeUpdateProfile($id = null) { if (request()->ajax()) { $rows = StoreUpdate::orderBy('updated_at' , 'desc')->paginate(10); $html = view('admin.stores.updateProfileTable', compact('rows'))->render(); return response()->json(['html' => $html]); } return view('admin.stores.updateProfile'); } public function notify(Request $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($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(); } return view('admin.stores.refused', compact('rows', 'store_id')); } 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 , 'accepted')); return response()->json(['message' => awtTrans('تم قبول التعاقد بنجاح')]); } else { $store = $row->store; $row->update(['approve' => $request->status]); $store->update(['refuse_reason' => $request['reason']]); dispatch(new AdminAcceptStoreNotify($row , 'reject')); return response()->json(['id' => $row->id]); } $row->updateCacheWithProducts(); } public function acceptOrRefuseUpdate(Request $request) { $row = StoreUpdate::findOrFail($request->id); $store = Store::find($row->store_id); if ($request->status == 'accept') { $store->update(\Arr::except(array_filter($row->getAttributes()) , ['name' , 'store_id']) + [ 'name' => ['ar' => $row->getTranslation('name' , 'ar'), 'en' => $row->getTranslation('name' , 'en')], 'long' => $row->lng ? $row->lng : ($row->long ? $row->long : $store->long), ]); if ($row->days){ StoreTiming::where('store_id', $store->id)->delete(); foreach (json_decode($row->days) as $day) { $timing = new StoreTiming(); $timing->day = \Str::lower($day->day); $timing->from = $day->from ?? NULL; $timing->to = $day->to ?? NULL; $timing->store_id = $store->id; $timing->is_closed = $day->is_closed ?? 'false'; $timing->save(); } } $row->delete(); dispatch(new AcceptStoreUpdateNotify($store->user , 'approved')); return response()->json(['message' => awtTrans('تم قبول بنجاح') , 'url' => route('admin.stores.update_profile')]); } else { $row->delete(); dispatch(new AcceptStoreUpdateNotify($store->user , 'refused')); return response()->json(['id' => $row->id , 'url' => route('admin.stores.update_profile')]); } $store->updateCacheWithProducts(); } public function show($id) { $row = Store::findOrFail($id); $category = Category::where('slug' , $row->category)->first(); $subcategories = Category::where('category_id',0)->get(); if ($row->store_id) { $category = Category::where('slug' , $row->parent->category)->first(); } if ($category){ $subcategories = Category::where('category_id',$category->id )->get(); } $ids = UserCategory::where('user_id' , $row->user_id)->pluck('category_id')->toArray(); return view('admin.stores.show', compact('row' , 'subcategories' , 'ids')); } public function profile_show($id) { $row = StoreUpdate::findOrFail($id); return view('admin.stores.profile_show', compact('row')); } 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) { $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(); 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(); return view('admin.stores.create', compact('keys', 'categories')); } /*************************** store **************************/ public function store(StoreRequest $request) { $user = User::create($request->validated() + (['type' => 'store', 'approve' => 'accept'])); $store = Store::create( $request->validatedExcept(['name', 'phone', 'icon']) + [ 'name' => ['ar' => $request->name_ar, 'en' => $request->name_en], 'icon' => $this->uploadFile($request->icon, 'stores', true, 250, null), 'user_id' => $user->id, 'has_contract' => 'true', ]); if ($request['category_id']) { foreach ($request['category_id'] as $id) { UserCategory::create([ 'category_id' => $id, 'store_id' => $store->id, 'user_id' => $store->user_id, ]); } } 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(); $category = Category::where('slug' , $row->category)->first(); $subcategories = Category::where('category_id','!=' , null )->get(); if ($category) { $subcategories = Category::where('category_id',$category->id )->get(); } $ids = UserCategory::where('user_id' , $row->user_id)->pluck('category_id')->toArray(); return view('admin.stores.edit', compact('row', 'keys' , 'ids', 'categories' , 'subcategories')); } public function subcategories($id) { $category = Category::where('slug' , $id)->first(); $subcategories = Category::where('category_id', $category->id)->get(); $html = view('admin.stores.subcategories' , compact('subcategories'))->render(); return response()->json(['html' => $html]); } /*************************** update **************************/ public function update(Edit $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']) + ([ '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['category_id']) { UserCategory::where('store_id', $store->id)->delete(); foreach ($request['category_id'] as $id) { UserCategory::create([ 'category_id' => $id, 'store_id' => $store->id, 'user_id' => $store->user_id, ]); } } $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([ '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->validated()); 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) { StoreTiming::create([ 'day' => $value, 'from' => $request->from[$value] ?? NULL, 'to' => $request->to[$value] ?? null, 'store_id' => $id, 'is_closed' => $request->is_closed[$value] ?? 'false', ]); } } $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