role === 'admin'){ $satisfactions = Satisfaction::latest()->paginate(10); }else{ $satisfactions = Satisfaction::where('user_id', Auth::id())->latest()->paginate(10); } return view('satisfactions.index', compact('satisfactions')); } /** * Show the form for creating a new resource. */ public function create() { // Cek apakah user sudah pernah mengisi kuesioner $hasSurvey = Satisfaction::where('user_id', Auth::id())->exists(); if ($hasSurvey) { return redirect()->route('satisfactions.index') ->with('warning', 'Anda sudah pernah mengisi kuesioner kepuasan pelanggan.'); } return view('satisfactions.create'); } /** * Store a newly created resource in storage. */ public function store(Request $request) { $request->validate([ 'q1' => 'required|integer|min:1|max:5', 'q2' => 'required|integer|min:1|max:5', 'q3' => 'required|integer|min:1|max:5', 'q4' => 'required|integer|min:1|max:5', 'q5' => 'required|integer|min:1|max:5', 'q6' => 'required|integer|min:1|max:5', 'q7' => 'required|integer|min:1|max:5', 'q8' => 'required|integer|min:1|max:5', 'q9' => 'required|integer|min:1|max:5', 'q10' => 'required|integer|min:1|max:5', 'q11' => 'required|integer|min:1|max:5', 'q12' => 'required|integer|min:1|max:5', 'q13' => 'required|integer|min:1|max:5', 'q14' => 'required|integer|min:1|max:5', 'q15' => 'required|integer|min:1|max:5', 'kritik_saran' => 'nullable|string', ]); $data = $request->all(); $data['user_id'] = Auth::id(); Satisfaction::create($data); return redirect()->route('satisfactions.index') ->with('success', 'Terima kasih! Penilaian kepuasan pelanggan Anda telah berhasil disimpan.'); } /** * Display the specified resource. */ public function show(Satisfaction $satisfaction) { // Pastikan pengguna hanya bisa melihat data survei miliknya sendiri if(Auth::user()->role === 'pelanggan'){ if ($satisfaction->user_id !== Auth::id()) { abort(403, 'Unauthorized action.'); } } return view('satisfactions.show', compact('satisfaction')); } /** * Show the form for editing the specified resource. */ public function edit(Satisfaction $satisfaction) { // Pastikan pengguna hanya bisa mengedit data survei miliknya sendiri if ($satisfaction->user_id !== Auth::id()) { abort(403, 'Unauthorized action.'); } return view('satisfactions.edit', compact('satisfaction')); } /** * Update the specified resource in storage. */ public function update(Request $request, Satisfaction $satisfaction) { // Pastikan pengguna hanya bisa mengupdate data survei miliknya sendiri if ($satisfaction->user_id !== Auth::id()) { abort(403, 'Unauthorized action.'); } $request->validate([ 'q1' => 'required|integer|min:1|max:5', 'q2' => 'required|integer|min:1|max:5', 'q3' => 'required|integer|min:1|max:5', 'q4' => 'required|integer|min:1|max:5', 'q5' => 'required|integer|min:1|max:5', 'q6' => 'required|integer|min:1|max:5', 'q7' => 'required|integer|min:1|max:5', 'q8' => 'required|integer|min:1|max:5', 'q9' => 'required|integer|min:1|max:5', 'q10' => 'required|integer|min:1|max:5', 'q11' => 'required|integer|min:1|max:5', 'q12' => 'required|integer|min:1|max:5', 'q13' => 'required|integer|min:1|max:5', 'q14' => 'required|integer|min:1|max:5', 'q15' => 'required|integer|min:1|max:5', 'kritik_saran' => 'nullable|string', ]); $satisfaction->update($request->all()); return redirect()->route('satisfactions.index') ->with('success', 'Penilaian kepuasan pelanggan berhasil diperbarui.'); } /** * Remove the specified resource from storage. */ public function destroy(Satisfaction $satisfaction) { // Pastikan pengguna hanya bisa menghapus data survei miliknya sendiri if ($satisfaction->user_id !== Auth::id()) { abort(403, 'Unauthorized action.'); } $satisfaction->delete(); return redirect()->route('satisfactions.index') ->with('success', 'Penilaian kepuasan pelanggan berhasil dihapus.'); } /** * Display the admin dashboard for survey results */ public function dashboard() { // Hanya admin yang bisa akses // Memeriksa apakah pengguna adalah admin (misalnya memiliki is_admin = 1 di tabel users) if (!Auth::user()->is_admin) { abort(403, 'Unauthorized action.'); } $satisfactions = Satisfaction::all(); // Hitung rata-rata untuk setiap pertanyaan $averages = []; for ($i = 1; $i <= 15; $i++) { $field = "q$i"; $averages[$field] = $satisfactions->avg($field); } // Hitung distribusi nilai untuk setiap pertanyaan $distributions = []; for ($i = 1; $i <= 15; $i++) { $field = "q$i"; $distributions[$field] = [ 1 => $satisfactions->where($field, 1)->count(), 2 => $satisfactions->where($field, 2)->count(), 3 => $satisfactions->where($field, 3)->count(), 4 => $satisfactions->where($field, 4)->count(), 5 => $satisfactions->where($field, 5)->count(), ]; } return view('satisfactions.dashboard', compact('satisfactions', 'averages', 'distributions')); } }