get(); if ($daftarSoal->isEmpty()) { abort(404, 'Data soal tidak ditemukan.'); } $selectedSoalId = (int) $request->query('soal_id', $daftarSoal->first()->id); if (!$request->boolean('start')) { return view('soal.list', [ 'daftarSoal' => $daftarSoal, ]); } $soal = Soal::with('soalDetail')->find($selectedSoalId); if (!$soal) { abort(404, 'Data soal tidak ditemukan.'); } $detailSoal = $soal->soalDetail() ->orderBy('hal') ->orderBy('id') ->get(); $daftarHal = $detailSoal->pluck('hal') ->map(function ($value) { return is_null($value) ? null : (int) $value; }) ->filter(function ($value) { return !is_null($value); }) ->unique() ->sort() ->values(); if ($daftarHal->isEmpty()) { $daftarHal = collect([1]); } $hal = (int) $request->query('hal', $daftarHal->first()); if (!$daftarHal->contains($hal)) { $hal = $daftarHal->first(); } $detailSoal = $detailSoal->map(function ($detail) use ($daftarHal) { $detail->hal = $detail->hal ?? $daftarHal->first(); return $detail; }); $soal->setRelation('soalDetail', $detailSoal); $halPertama = $daftarHal->first() ?? $hal; $pegawai = session('pegawai'); dd($pegawai); return view('soal.index', [ 'soal' => $soal, 'hal' => $hal, 'halPertama' => $halPertama, 'daftarHal' => $daftarHal, 'totalHal' => $daftarHal->count(), 'soalId' => $soal->id, 'pegawai' => $pegawai, ]); } public function store(Request $request) { $validator = Validator::make($request->all(), [ 'lms_mutu_soal_id' => 'required|integer', 'hal' => 'nullable|integer|min:1', 'jawaban' => 'required|array', 'jawaban.*' => 'required', 'jawaban_lainnya' => 'nullable|array', 'jawaban_lainnya.*' => 'nullable|string', ]); $validator->after(function ($validator) use ($request) { $jawabanUtama = $request->input('jawaban', []); $jawabanLainnya = $request->input('jawaban_lainnya', []); foreach ($jawabanUtama as $detailId => $answer) { if ($answer === 'Lainnya') { $jawabanIsian = $jawabanLainnya[$detailId] ?? null; if (!$jawabanIsian) { $validator->errors()->add("jawaban_lainnya.$detailId", 'Jawaban lainnya wajib diisi.'); } } } }); $validated = $validator->validate(); $detailIds = array_map('intval', array_keys($validated['jawaban'])); $detailMeta = SoalDetail::whereIn('id', $detailIds) ->get(['id', 'soal']) ->keyBy('id'); $jawabanBaru = null; $jawabanLainnya = $validated['jawaban_lainnya'] ?? []; $namaResponden = null; $unitKerja = null; DB::connection('dbLmsMutu')->transaction(function () use (&$jawabanBaru, $validated, $jawabanLainnya, $detailMeta, &$namaResponden, &$unitKerja) { $jawabanBaru = Jawaban::create([ 'lms_mutu_soal_id' => $validated['lms_mutu_soal_id'], 'pegawai_id' => 1, 'tanggal_isi' => Carbon::now()->addHour(7), ]); foreach ($validated['jawaban'] as $detailId => $answer) { if (is_array($answer)) { $answer = json_encode($answer); } if ($answer === 'Lainnya' && !empty($jawabanLainnya[$detailId])) { $answer = $jawabanLainnya[$detailId]; } if ($answer === null || $answer === '') { continue; } $detailIdInt = (int) $detailId; $pertanyaan = null; if ($detailMeta->has($detailIdInt)) { $decoded = json_decode($detailMeta[$detailIdInt]->soal, true); $pertanyaan = Str::lower(trim($decoded['soal'] ?? '')); } if ($pertanyaan) { if (Str::contains($pertanyaan, 'nama/inisial responden')) { $namaResponden = $answer; } if (Str::contains($pertanyaan, 'unit/area kerja anda saat ini')) { $unitKerja = $answer; } } JawabanDetail::create([ 'lms_mutu_jawaban_id' => $jawabanBaru->id, 'lms_mutu_soal_detail_id' => $detailIdInt, 'jawaban' => $answer, ]); } $updatePayload = []; if (!empty($namaResponden)) { $updatePayload['nama'] = $namaResponden; } if (!empty($unitKerja)) { $updatePayload['unit'] = $unitKerja; } if (!empty($updatePayload)) { $jawabanBaru->update($updatePayload); } }); return redirect('/') ->with('success', 'Jawaban berhasil disimpan.'); } public function redirectSmart() { $data = request()->input('data'); $json = base64_decode($data); $array = json_decode($json, true); session(['pegawai' => $array]); return redirect('/'); } }