149 lines
5.1 KiB
PHP
149 lines
5.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Guru;
|
|
use App\Models\Mapel;
|
|
use App\Models\Kelas;
|
|
use App\Models\TahunAjaran;
|
|
use App\Models\GuruMapel;
|
|
use Illuminate\Http\Request;
|
|
use Carbon\Carbon;
|
|
|
|
class GuruMapelController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
$data = GuruMapel::with(['guru', 'mapel', 'kelas'])->paginate(10);
|
|
return view('admin.GuruMapel.index', compact('data'));
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
$guru = Guru::all();
|
|
$mapel = Mapel::all();
|
|
$kelas = Kelas::all();
|
|
return view('admin.GuruMapel.create', compact('guru', 'mapel', 'kelas'));
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$request->validate([
|
|
'guru_id' => 'required',
|
|
'mapel_id' => 'required',
|
|
'kelas_id' => 'required',
|
|
'hari' => 'required|string|max:20',
|
|
'jam_mulai' => 'required|date_format:H:i',
|
|
'jam_selesai' => 'required|date_format:H:i|after:jam_mulai',
|
|
]);
|
|
|
|
$jamMulai = Carbon::createFromFormat('H:i', $request->jam_mulai);
|
|
$jamSelesai = Carbon::createFromFormat('H:i', $request->jam_selesai);
|
|
|
|
$jadwalBentrok = GuruMapel::where('hari', $request->hari)
|
|
->where(function ($query) use ($request) {
|
|
$query->where('guru_id', $request->guru_id)
|
|
->orWhere('kelas_id', $request->kelas_id);
|
|
})
|
|
->get();
|
|
|
|
foreach ($jadwalBentrok as $jadwal) {
|
|
$mulai = Carbon::parse($jadwal->jam_mulai);
|
|
$selesai = Carbon::parse($jadwal->jam_selesai);
|
|
|
|
if ($jamMulai->lt($selesai) && $jamSelesai->gt($mulai)) {
|
|
return redirect()->back()->withInput()->withErrors([
|
|
'jadwal' => 'Jadwal bentrok dengan jadwal guru atau kelas yang sudah ada pada hari dan jam tersebut.'
|
|
]);
|
|
}
|
|
}
|
|
|
|
$tahunAjaranAktif = TahunAjaran::where('status', 'aktif')->first();
|
|
|
|
GuruMapel::create([
|
|
'guru_id' => $request->guru_id,
|
|
'mapel_id' => $request->mapel_id,
|
|
'kelas_id' => $request->kelas_id,
|
|
'hari' => $request->hari,
|
|
'jam_mulai' => $request->jam_mulai,
|
|
'jam_selesai' => $request->jam_selesai,
|
|
'tahun_ajaran_id' => $tahunAjaranAktif?->id,
|
|
]);
|
|
|
|
// ✅ Notifikasi berhasil
|
|
return redirect()->route('admin.guru-mapel.index')->with('success', 'Data berhasil ditambahkan.');
|
|
}
|
|
|
|
public function edit($id)
|
|
{
|
|
$data = GuruMapel::findOrFail($id);
|
|
$guru = Guru::all();
|
|
$mapel = Mapel::all();
|
|
$kelas = Kelas::all();
|
|
|
|
return view('admin.GuruMapel.edit', compact('data', 'guru', 'mapel', 'kelas'));
|
|
}
|
|
|
|
public function update(Request $request, $id)
|
|
{
|
|
try {
|
|
if (strlen($request->jam_mulai) > 5) {
|
|
$request->merge(['jam_mulai' => substr($request->jam_mulai, 0, 5)]);
|
|
}
|
|
if (strlen($request->jam_selesai) > 5) {
|
|
$request->merge(['jam_selesai' => substr($request->jam_selesai, 0, 5)]);
|
|
}
|
|
|
|
$request->validate([
|
|
'guru_id' => 'required',
|
|
'mapel_id' => 'required',
|
|
'kelas_id' => 'required',
|
|
'hari' => 'required|string|max:20',
|
|
'jam_mulai' => 'required|date_format:H:i',
|
|
'jam_selesai' => 'required|date_format:H:i|after:jam_mulai',
|
|
]);
|
|
|
|
$jamMulai = Carbon::createFromFormat('H:i', $request->jam_mulai);
|
|
$jamSelesai = Carbon::createFromFormat('H:i', $request->jam_selesai);
|
|
|
|
$jadwalBentrok = GuruMapel::where('hari', $request->hari)
|
|
->where(function ($query) use ($request) {
|
|
$query->where('guru_id', $request->guru_id)
|
|
->orWhere('kelas_id', $request->kelas_id);
|
|
})
|
|
->where('id', '!=', $id)
|
|
->get();
|
|
|
|
foreach ($jadwalBentrok as $jadwal) {
|
|
$mulai = Carbon::parse($jadwal->jam_mulai);
|
|
$selesai = Carbon::parse($jadwal->jam_selesai);
|
|
|
|
if ($jamMulai->lt($selesai) && $jamSelesai->gt($mulai)) {
|
|
return redirect()->back()->withInput()->withErrors([
|
|
'jadwal' => 'Jadwal bentrok dengan jadwal guru atau kelas yang sudah ada pada hari dan jam tersebut.'
|
|
]);
|
|
}
|
|
}
|
|
|
|
$item = GuruMapel::findOrFail($id);
|
|
$item->update($request->all());
|
|
|
|
// ✅ Notifikasi berhasil
|
|
return redirect('/admin/guru-mapel')->with('success', 'Data berhasil diperbarui.');
|
|
} catch (\Exception $e) {
|
|
// ❌ Notifikasi gagal
|
|
return redirect()->back()->withInput()->withErrors(['error' => $e->getMessage()]);
|
|
}
|
|
}
|
|
|
|
public function destroy($id)
|
|
{
|
|
$item = GuruMapel::findOrFail($id);
|
|
$item->delete();
|
|
|
|
// ✅ Notifikasi berhasil
|
|
return redirect('/admin/guru-mapel')->with('success', 'Data berhasil dihapus.');
|
|
}
|
|
}
|