306 lines
12 KiB
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');
|
|
}
|
|
}
|