first(); if (!$pelanggan) { return response()->json([ 'success' => false, 'message' => 'Pelanggan tidak ditemukan.', ], 404); } if ($pelanggan->status !== 'diterima') { return response()->json([ 'success' => false, 'message' => 'Pesanan belum diterima.', ], 400); } $guests = Guest::where('id_pelanggan', $pelanggan->id)->get(); return response()->json([ 'success' => true, 'data' => $guests, ]); } public function store(Request $request) { try { $validated = $request->validate([ 'kode_pelanggan' => 'required|exists:pelanggans,kode_pelanggan', 'nama_tamu' => 'required|string|max:255', ]); $pelanggan = Pelanggan::where('kode_pelanggan', $validated['kode_pelanggan'])->firstOrFail(); $jumlah_tamu = Guest::where('id_pelanggan', $pelanggan->id)->count(); $paket = $pelanggan->template->paket; if ($paket === 'starter' && $jumlah_tamu >= 10) { return response()->json([ 'success' => false, 'message' => 'Batas tamu untuk paket starter adalah 10.', ], 400); } elseif ($paket === 'basic' && $jumlah_tamu >= 20) { return response()->json([ 'success' => false, 'message' => 'Batas tamu untuk paket Basic adalah 20.', ], 400); } elseif ($paket === 'premium' && $jumlah_tamu >= 30) { return response()->json([ 'success' => false, 'message' => 'Batas tamu untuk paket Premium adalah 30.', ], 400); } // cek anunya udah diterima if ($pelanggan->status !== 'diterima') { return response()->json([ 'success' => false, 'message' => 'Pesanan belum diterima.', ], 400); } $guest = Guest::create([ 'id_pelanggan' => $pelanggan->id, 'nama_tamu' => $validated['nama_tamu'], 'kode_invitasi' => 'INV-' . strtoupper(Str::random(6)), ]); return response()->json([ 'success' => true, 'data' => $guest, ], 201); } catch (\Illuminate\Validation\ValidationException $e) { return response()->json([ 'success' => false, 'message' => 'Validation failed', 'errors' => $e->errors(), ], 422); } } public function destroy(int $id) { $guest = Guest::find($id); if (!$guest) { return response()->json([ 'success' => false, 'message' => 'Tamu tidak ditemukan.', ], 404); } try { $guest->delete(); return response()->json([ 'success' => true, 'message' => 'Tamu berhasil dihapus.', ], 200); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'Gagal menghapus tamu.', ], 500); } } // Ambil undangan berdasarkan invitation code public function getByInvitationCode($code) { $data = Guest::with('pelanggan.template') ->where('kode_invitasi', $code) ->first(); if (!$data) { return response()->json([ 'success' => false, 'message' => 'Data undangan tidak ditemukan.', ], 404); } return response()->json([ 'success' => true, 'data' => $data, ]); } }