with('file') ->when($request->filled('search'), function (Builder $query) use ($request) { $search = $request->input('search'); $query->whereAny([ 'title', 'summary', 'description', 'origin', 'destination', ], 'LIKE', "%$search%"); }) ->when($request->filled('sort'), function (Builder $query) use ($request) { switch ($request->input('sort')) { case 'price_asc': $query->orderBy('price'); break; case 'price_desc': $query->orderByDesc('price'); break; case 'duration_asc': $query->orderBy('duration'); break; case 'duration_desc': $query->orderByDesc('duration'); break; case 'created_at': $query->orderByDesc('created_at'); break; } }, function (Builder $query) { $query->orderByDesc('created_at'); }) ->paginate(); return view('admin.tours.index', compact('tours')); } public function create() { return view('admin.tours.create'); } public function store(tourStoreRequest $request) { try { DB::beginTransaction(); $fileId = null; if ($request->hasFile('image')) { $file = $request->file('image'); $path = $file->store('tours', 'public'); $uploadedFile = File::create([ 'name' => pathinfo( $file->hashName(), PATHINFO_FILENAME ), 'extension' => $file->getClientOriginalExtension(), 'size' => $file->getSize(), 'original_name' => $file->getClientOriginalName(), 'path' => $path, ]); $fileId = $uploadedFile->id; } $tour = Tour::create([ 'title' => $request->input('title'), 'summary' => $request->input('summary'), 'description' => $request->input('description'), 'origin' => $request->input('origin'), 'destination' => $request->input('destination'), 'file_id' => $fileId, 'duration' => $request->input('duration'), 'departure_time' => $request->input('departure_time'), 'price' => $request->input('price'), 'status' => $request->input('status'), 'created_by' => auth('admin')->id(), 'updated_by' => auth('admin')->id(), ]); logActivity('tours', $tour->id, 'created'); DB::commit(); } catch (\Exception $exception) { DB::rollBack(); Log::error($exception); return back() ->withErrors([ 'general' => 'خطایی رخ داده است' ]) ->withInput(); } return redirect() ->route('admin.tours.index') ->withErrors([ 'success' => 'تور با موفقیت ایجاد شد' ]); } public function edit(Tour $tour) { $tour->load('file'); return view('admin.tours.edit', compact('tour')); } public function update(tourUpdateRequest $request, Tour $tour) { try { $before = $tour->only([ 'title', 'summary', 'description', 'origin', 'destination', 'file_id', 'duration', 'price', 'departure_time', 'status', ]); DB::beginTransaction(); $fileId = $tour->file_id; if ($request->hasFile('image')) { $file = $request->file('image'); $path = $file->store('tours', 'public'); $uploadedFile = File::create([ 'name' => pathinfo( $file->hashName(), PATHINFO_FILENAME ), 'extension' => $file->getClientOriginalExtension(), 'size' => $file->getSize(), 'original_name' => $file->getClientOriginalName(), 'path' => $path, ]); $fileId = $uploadedFile->id; } $tour->update([ 'title' => $request->input('title'), 'summary' => $request->input('summary'), 'description' => $request->input('description'), 'origin' => $request->input('origin'), 'destination' => $request->input('destination'), 'file_id' => $fileId, 'duration' => $request->input('duration'), 'departure_time' => $request->input('departure_time'), 'price' => $request->input('price'), 'status' => $request->input('status'), 'updated_by' => auth('admin')->id(), ]); logActivity('tours', $tour->id , 'updated', [ 'before' => $before, 'after' => $tour->only(array_keys($before)), ]); DB::commit(); } catch (\Exception $exception) { DB::rollBack(); Log::error($exception); return back() ->withErrors([ 'general' => 'خطایی رخ داده است' ]) ->withInput(); } return redirect() ->route('admin.tours.index') ->withErrors([ 'success' => 'تور با موفقیت ویرایش شد' ]); } public function destroy(Tour $tour) { if ($tour->bookings()->exists()) { return back()->withErrors(['error' => 'این پرواز دارای رزرو است و قابل حذف نیست.']); } logActivity('flights', $tour->id, 'deleted'); $tour->delete(); return redirect()->route('admin.flights.index')->withErrors(['success'=> 'پرواز با موفقیت حذف شد']); } }