penjadwalan-ga/app/Http/Controllers/Guru/KelasGuruController.php

306 lines
12 KiB
PHP

<?php
namespace App\Http\Controllers\Guru;
use App\Http\Controllers\Controller;
use App\Models\DetailKelas;
use App\Models\FotoLogbooks;
use App\Models\Guru;
use App\Models\Kelas;
use App\Models\Logbooks;
use App\Models\Siswa;
use App\Models\Programs;
use App\Models\Sesi;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\Str;
class KelasGuruController extends Controller
{
public function index(){
$guru_id = auth()->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');
}
}