user()->Guru->id; $data = Kelas::withCount('siswa')->withCount('logbooks') ->where('guru_id', $guru_id) ->orderByRaw("CASE WHEN status = 'Aktif' THEN 1 WHEN status = 'Tidak Aktif' THEN 2 ELSE 3 END") ->get(); return view('guru.pages.kelas', compact('data')); } public function create() { $programs = Programs::all(); $guru = Guru::where('status', 'Aktif')->select('id', 'nama')->get(); return view ('guru.pages.kelas-tambah', compact('programs', 'guru')); } public function store(Request $request){ $validated = $request->validate( [ 'nama_kelas' => 'required|string|max:255', 'jenis_kelas' => 'required', 'program_id' => 'required', 'guru_id' => 'required', 'harga_kelas' => 'required', 'status' => 'required', ], [ 'nama_kelas.required' => 'Nama kelas wajib diisi', 'nama_kelas.max' => 'Nama event terlalu panjang', 'jenis_kelas.required' => 'Jenis kelas wajib diisi', 'program_id.required' => 'Program wajib diisi', 'guru_id.required' => 'Guru wajib diisi', 'harga_kelas.required' => 'Harga kelas wajib diisi', 'status.required' => 'Status kelas wajib diisi', ] ); $validated['harga_kelas'] = (int) str_replace('.', '', $validated['harga_kelas']); $validated['kode_kelas'] = strtoupper(Str::random(6)); if ($request->keterangan){ $validated['keterangan'] = $request->keterangan; } Kelas::create($validated); return redirect('/guru/kelas')->with('success', 'Data Berhasil Disimpan'); } public function show($id){ $data = Kelas::where('id', $id)->first(); $programs = Programs::all(); $guru = Guru::where('status', 'Aktif')->select('id', 'nama')->get(); if ($data == null){ return redirect('/guru/kelas')->with('error', 'Data kelas tidak ditemukan'); } $peserta = DetailKelas::has('siswa')->where('kelas_id', $id)->get(); $logbook = Logbooks::with('Sesi')->where('kelas_id', $id)->orderBy('tanggal', 'asc')->get(); $sesiList = Sesi::orderBy('id', 'asc')->get(); // Batas waktu pengisian logbook hari ini adalah jam 19:00 $deadline = Carbon::today()->setTime(19, 0, 0); $now = Carbon::now(); $isDeadlinePassed = $now->greaterThan($deadline); $remainingSeconds = $isDeadlinePassed ? 0 : (int) $now->diffInSeconds($deadline); return view('guru.pages.kelas-detail', compact('data', 'peserta', 'programs', 'logbook', 'guru', 'isDeadlinePassed', 'remainingSeconds', 'sesiList')); } public function update(Request $request, $id){ $data = Kelas::findOrFail($id); $validated = $request->validate( [ 'nama_kelas' => 'required|string|max:255', 'jenis_kelas' => 'required', 'program_id' => 'required', 'guru_id' => 'required', 'harga_kelas' => 'required', 'status' => 'required', ], [ 'nama_kelas.required' => 'Nama kelas wajib diisi', 'nama_kelas.max' => 'Nama event terlalu panjang', 'jenis_kelas.required' => 'Jenis kelas wajib diisi', 'program_id.required' => 'Program wajib diisi', 'guru_id.required' => 'Guru wajib diisi', 'harga_kelas.required' => 'Harga kelas wajib diisi', 'status.required' => 'Status kelas wajib diisi', ] ); $validated['harga_kelas'] = (int) str_replace('.', '', $validated['harga_kelas']); if ($request->keterangan){ $validated['keterangan'] = $request->keterangan; } $data->update($validated); $direct = '/admin/kelas/' .$id; return redirect($direct)->with('success', 'Data Kelas Berhasil Diubah'); } public function getSiswasKelas($kelas_id){ $pesertaTerdaftar = DetailKelas::where('kelas_id', $kelas_id)->pluck('siswa_id')->toArray(); $siswa = Siswa::whereNotIn('id', $pesertaTerdaftar)->get(); return response()->json([$siswa]); } public function tambahSiswas(Request $request) { $validated = $request->validate( [ 'kelas_id' => 'required', 'id' => 'required', ], [ 'kelas_id.required' => 'Event tidak ditemukan', 'id.required' => 'Silahkan pilih setidaknya satu siswa', ] ); $datas = []; $kelas = Kelas::where('id', $request->kelas_id)->select('harga_kelas')->first(); for ($i = 0; $i < count($request->id); $i++) { $siswa = Siswa::where('id', $request->id[$i])->select('id', 'nama_anak')->first(); $cekPeserta = DetailKelas::where('siswa_id', $request->id[$i])->where('kelas_id', $request->kelas_id)->count(); if ($cekPeserta == 0) { if ($siswa != null) { DetailKelas::create([ 'kelas_id' => $request->kelas_id, 'siswa_id' => $request->id[$i], 'nama_anak' => $siswa->nama_anak, 'status_siswa' => "Aktif", 'harga_kelas' => $kelas->harga_kelas, ]); }else{ $direct = '/admin/kelas/' . $request->kelas_id; $message = "Gagal menyimpan siswa, id " . $request->id[$i] . " tidak ditemukan"; return redirect($direct)->with('error', $message); } }else{ $direct = '/admin/kelas/' . $request->kelas_id; $message = "Anak dengan nama " . $siswa->nama_anak . " telah terdaftar di kelas ini"; return redirect($direct)->with('error', $message); } } $direct = '/admin/kelas/' . $request->kelas_id; $message = "Siswa berhasil ditambahkan pada kelas"; return redirect($direct)->with('success', $message); } public function getPesertaKelas($id){ $data = DetailKelas::where('id', $id)->first(); $peserta = Siswa::where('id', $data->siswa_id)->first(); // $user = User::where('id', $data->user_id)->select('id', 'email')->first(); $created_at = Carbon::parse($data->created_at)->locale('id')->translatedFormat('l, d F Y - H:i') . ' WIB'; return response()->json([ 'id' => $data->id, 'nama_anak' => $peserta->nama_anak, 'nama_orangtua' => $peserta->nama_orangtua, 'no_hp_orangtua' => $peserta->no_hp_orangtua, 'usia' => $peserta->usia ?? null, 'jenis_kelamin' => $peserta->jenis_kelamin ?? null, 'email' => $user->email ?? null, 'asal_sekolah' => $peserta->asal_sekolah ?? null, 'program_id'=> $peserta->program_id ?? null, 'status' => $data->status_siswa ?? null, 'alamat' => $peserta->alamat ?? null, 'bukti_pembayaran' => $data->bukti_pembayaran ?? null, 'harga_kelas' => $data->harga_kelas, 'catatan' => $data->catatan, 'tanggal_daftar' => $created_at ?? null, 'foto' => $peserta->foto ?? null, ]); } public function editSiswa(Request $request, $id){ $data = DetailKelas::where('id', $id)->first(); $validated = $request->validate( [ 'nama_anak' => 'required', 'status_siswa' => 'required', ], [ 'nama_anak.required' => 'Nama anak tidak ditemukan', 'status_siswa.required' => 'Harap pilih status siswa terlebih dahulu', ] ); if ($request->catatan !== null || $request->catatan !== ''){ $validated['catatan'] = $request->catatan; } if ($request->hasFile('bukti_pembayaran')) { if ($data->bukti_pembayaran) { $imagePath = storage_path('app/public/' . $data->bukti_pembayaran); if (file_exists($imagePath)) { unlink($imagePath); } } $file = $request->file('bukti_pembayaran'); $hashedName = md5(time() . $file->getClientOriginalName()) . '.' . $file->getClientOriginalExtension(); $file->storeAs('bukti-pembayaran', $hashedName, 'public'); $validated['bukti_pembayaran'] = 'bukti-pembayaran/' . $hashedName; DetailKelas::where('id', $id)->update([ 'nama_anak' => $validated['nama_anak'], 'status_siswa' => $validated['status_siswa'], 'bukti_pembayaran' => $validated['bukti_pembayaran'], 'catatan' => $validated['catatan'], ]); }else{ DetailKelas::where('id', $id)->update([ 'nama_anak' => $validated['nama_anak'], 'status_siswa' => $validated['status_siswa'], 'catatan' => $validated['catatan'], ]); } $direct = '/admin/kelas/' . $request->kelas_id; $message = "Data siswa dikelas berhasil diubah"; return redirect($direct)->with('success', $message); } public function destroyerSiswaFromKelas($id){ $data = DetailKelas::findOrFail($id); $kelas_id = $data->kelas_id; if ($data->bukti_pembayaran) { $imagePath = storage_path('app/public/' . $data->bukti_pembayaran); if (file_exists($imagePath)) { unlink($imagePath); } } $data->delete(); $direct = '/admin/kelas/' . $kelas_id; return redirect($direct)->with('success', 'Data siswa berhasil dihapus'); } public function destroy($id){ $data = Kelas::findOrFail($id); $detailkelas = DetailKelas::where('kelas_id', $id)->get(); if($detailkelas->count() > 0){ for($i = 0; $i < count($detailkelas); $i++){ $detailkelas[$i]->delete(); } } $logbooks = Logbooks::where('kelas_id', $id)->get(); if($logbooks->count() > 0){ for($i = 0; $i < count($logbooks); $i++){ $logbooks_id = $logbooks[$i]->id; $fotoLogbook = FotoLogbooks::where('logbook_id', $logbooks_id)->get(); if($fotoLogbook->count() > 0){ for($b = 0; $b < count($fotoLogbook); $b++){ if ($fotoLogbook[$b]->foto) { $imagePath = storage_path('app/public/' . $fotoLogbook[$b]->foto); if (file_exists($imagePath)) { unlink($imagePath); } } $fotoLogbook[$b]->delete(); } } $logbooks[$i]->delete(); } } $data->delete(); return redirect('/admin/kelas')->with('success', 'Data kelas berhasil dihapus'); } }