filled('search')) { $search = $request->search; $query->where(function ($q) use ($search) { $q->where('name', 'like', "%{$search}%") ->orWhere('description', 'like', "%{$search}%") ->orWhere('location', 'like', "%{$search}%"); }); } // Filter by type if ($request->filled('type') && $request->type !== 'all') { $query->where('type', $request->type); } // Filter by status if ($request->filled('status') && $request->status !== 'all') { $query->where('status', $request->status); } $events = $query->orderBy('event_date', 'desc')->paginate(15); return view('admin.events.index', compact('events')); } /** * Show the form for creating a new event. */ public function create() { return view('admin.events.create'); } /** * Store a newly created event in storage. */ public function store(Request $request) { $validated = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'description' => ['required', 'string'], 'type' => ['required', 'in:tasting,harvest_festival,vineyard_tour'], 'event_date' => ['required', 'date', 'after_or_equal:today'], 'event_time' => ['required', 'date_format:H:i'], 'capacity' => ['required', 'integer', 'min:1'], 'price_per_person' => ['required', 'numeric', 'min:0'], 'location' => ['nullable', 'string', 'max:255'], 'status' => ['required', 'in:upcoming,cancelled,completed'], ]); Event::create($validated); return redirect()->route('admin.events.index') ->with('success', 'Event created successfully.'); } /** * Show the form for editing the specified event. */ public function edit(Event $event) { // Load event with reservations and user data $event->load(['reservations' => function($query) { $query->wherePivot('status', 'confirmed') ->withPivot('number_of_guests', 'status', 'created_at') ->orderBy('event_reservations.created_at', 'desc'); }]); return view('admin.events.edit', compact('event')); } /** * Update the specified event in storage. */ public function update(Request $request, Event $event) { $validated = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'description' => ['required', 'string'], 'type' => ['required', 'in:tasting,harvest_festival,vineyard_tour'], 'event_date' => ['required', 'date'], 'event_time' => ['required', 'date_format:H:i'], 'capacity' => ['required', 'integer', 'min:1'], 'price_per_person' => ['required', 'numeric', 'min:0'], 'location' => ['nullable', 'string', 'max:255'], 'status' => ['required', 'in:upcoming,cancelled,completed'], ]); $event->update($validated); return redirect()->route('admin.events.index') ->with('success', 'Event updated successfully.'); } /** * Delete an event. */ public function destroy(Event $event) { // Check if event has reservations if ($event->reservations()->wherePivot('status', 'confirmed')->count() > 0) { return back()->with('error', 'Cannot delete event with confirmed reservations.'); } $event->delete(); return back()->with('success', 'Event deleted successfully.'); } }