user()->venue; if (!$venue) { return redirect()->route('admin.dashboard')->with('error', 'Anda belum memiliki venue yang ditugaskan.'); } // Check for auto reopen if ($venue->checkAutoReopen()) { session()->flash('success', 'Venue telah dibuka kembali secara otomatis!'); } return view('admin.venues.index', compact('venue')); } /** * Show the form for editing venue */ public function edit() { $venue = auth()->user()->venue; if (!$venue) { return redirect()->route('admin.dashboard')->with('error', 'Anda belum memiliki venue yang ditugaskan.'); } return view('admin.venues.edit', compact('venue')); } /** * Update venue information */ public function update(Request $request) { $venue = auth()->user()->venue; if (!$venue) { return redirect()->route('admin.dashboard')->with('error', 'Anda belum memiliki venue yang ditugaskan.'); } // Validation rules $validator = Validator::make($request->all(), [ 'name' => 'required|string|max:255', 'address' => 'required|string|max:500', 'phone' => 'nullable|string|max:20', 'description' => 'nullable|string|max:1000', 'open_time' => 'required|date_format:H:i', 'close_time' => 'required|date_format:H:i', 'image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048', // Max 2MB ], [ 'name.required' => 'Nama venue harus diisi.', 'address.required' => 'Alamat venue harus diisi.', 'open_time.required' => 'Jam buka harus diisi.', 'open_time.date_format' => 'Format jam buka tidak valid (gunakan format HH:MM).', 'close_time.required' => 'Jam tutup harus diisi.', 'close_time.date_format' => 'Format jam tutup tidak valid (gunakan format HH:MM).', 'image.image' => 'File yang diupload harus berupa gambar.', 'image.mimes' => 'Gambar harus berformat: jpeg, png, jpg, atau gif.', 'image.max' => 'Ukuran gambar maksimal 2MB.', ]); if ($validator->fails()) { return redirect()->back() ->withErrors($validator) ->withInput(); } try { // Handle image upload $imagePath = $venue->image; // Keep current image by default if ($request->hasFile('image')) { // Delete old image if exists if ($venue->image && Storage::disk('public')->exists($venue->image)) { Storage::disk('public')->delete($venue->image); } // Store new image $imagePath = $request->file('image')->store('venues', 'public'); } // Prepare update data $updateData = [ 'name' => $request->name, 'address' => $request->address, 'phone' => $request->phone, 'description' => $request->description, 'image' => $imagePath, ]; // Only update operating hours if venue is open if ($venue->status === 'open') { $updateData['open_time'] = $request->open_time; $updateData['close_time'] = $request->close_time; } else { // If venue is closed, update original times $updateData['original_open_time'] = $request->open_time; $updateData['original_close_time'] = $request->close_time; } // Update venue data $venue->update($updateData); return redirect()->route('admin.venue.index') ->with('success', 'Informasi venue berhasil diperbarui!'); } catch (\Exception $e) { return redirect()->back() ->with('error', 'Terjadi kesalahan saat memperbarui venue: ' . $e->getMessage()) ->withInput(); } } /** * Toggle venue status (open/close) */ public function toggleStatus(Request $request) { $venue = auth()->user()->venue; if (!$venue) { return response()->json(['error' => 'Venue tidak ditemukan'], 404); } try { if ($venue->status === 'open') { // Closing venue - validate required fields $validator = Validator::make($request->all(), [ 'close_reason' => 'required|string|max:500', 'reopen_date' => 'required|date|after:today', ], [ 'close_reason.required' => 'Alasan penutupan harus diisi.', 'reopen_date.required' => 'Tanggal buka kembali harus diisi.', 'reopen_date.date' => 'Format tanggal tidak valid.', 'reopen_date.after' => 'Tanggal buka kembali harus setelah hari ini.', ]); if ($validator->fails()) { return response()->json([ 'error' => 'Validasi gagal', 'errors' => $validator->errors() ], 422); } $venue->closeVenue($request->close_reason, $request->reopen_date); $message = 'Venue berhasil ditutup!'; } else { // Opening venue $venue->openVenue(); $message = 'Venue berhasil dibuka!'; } return response()->json([ 'success' => true, 'message' => $message, 'status' => $venue->status, 'venue' => [ 'status' => $venue->status, 'close_reason' => $venue->close_reason, 'reopen_date' => $venue->reopen_date ? $venue->reopen_date->format('d M Y') : null, 'open_time' => $venue->open_time ? Carbon::parse($venue->open_time)->format('H:i') : null, 'close_time' => $venue->close_time ? Carbon::parse($venue->close_time)->format('H:i') : null, ] ]); } catch (\Exception $e) { return response()->json([ 'error' => 'Terjadi kesalahan: ' . $e->getMessage() ], 500); } } }