MIF_E31222313/app/Http/Controllers/TahunAjaranController.php

167 lines
6.3 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\TahunAjaran;
use Barryvdh\DomPDF\Facade\Pdf;
class TahunAjaranController extends Controller
{
public function tahunajaran()
{
$tahunAjarans = TahunAjaran::orderBy('tanggal_mulai', 'desc')->get();
return view('admin.tahunajaran', compact('tahunAjarans'));
}
public function tambahtahunajaran(Request $request)
{
$request->validate([
'nama' => 'required|string|max:255',
'tanggal_mulai' => 'required|date',
'tanggal_selesai' => 'required|date|after:tanggal_mulai',
]);
$nama = $request->input('nama');
$tanggalMulai = $request->input('tanggal_mulai');
$tanggalSelesai = $request->input('tanggal_selesai');
// Cek apakah nama tahun ajaran sudah ada
$duplikatNama = TahunAjaran::where('nama', $nama)->exists();
if ($duplikatNama) {
toastr()->error('Tahun ajaran dengan nama tersebut sudah ada.');
return redirect()->back();
}
// Cek overlap tanggal dengan tahun ajaran lain
$overlap = TahunAjaran::where(function($query) use ($tanggalMulai, $tanggalSelesai) {
$query->whereBetween('tanggal_mulai', [$tanggalMulai, $tanggalSelesai])
->orWhereBetween('tanggal_selesai', [$tanggalMulai, $tanggalSelesai])
->orWhere(function($q) use ($tanggalMulai, $tanggalSelesai) {
$q->where('tanggal_mulai', '<=', $tanggalMulai)
->where('tanggal_selesai', '>=', $tanggalSelesai);
});
})->exists();
if ($overlap) {
toastr()->error('Periode tahun ajaran bertumpang tindih dengan tahun ajaran yang sudah ada.');
return redirect()->back();
}
$tahunAjaran = new TahunAjaran();
$tahunAjaran->nama = $nama;
$tahunAjaran->tanggal_mulai = $tanggalMulai;
$tahunAjaran->tanggal_selesai = $tanggalSelesai;
$tahunAjaran->is_active = $request->has('is_active') ? true : false;
// Jika set sebagai aktif, nonaktifkan yang lain
if ($tahunAjaran->is_active) {
TahunAjaran::where('is_active', true)->update(['is_active' => false]);
}
if ($tahunAjaran->save()) {
toastr()->success('Data tahun ajaran berhasil ditambahkan.');
} else {
toastr()->error('Gagal menambahkan data tahun ajaran.');
}
return redirect()->route('tahunajaran');
}
public function updatetahunajaran(Request $request, $id)
{
$request->validate([
'nama' => 'required|string|max:255',
'tanggal_mulai' => 'required|date',
'tanggal_selesai' => 'required|date|after:tanggal_mulai',
]);
$tahunAjaran = TahunAjaran::findOrFail($id);
$nama = $request->input('nama');
$tanggalMulai = $request->input('tanggal_mulai');
$tanggalSelesai = $request->input('tanggal_selesai');
// Cek duplikasi nama (kecuali yang sedang diedit)
$duplikatNama = TahunAjaran::where('nama', $nama)
->where('id', '!=', $id)
->exists();
if ($duplikatNama) {
toastr()->error('Tahun ajaran dengan nama tersebut sudah ada.');
return redirect()->back();
}
// Cek overlap tanggal (kecuali yang sedang diedit)
$overlap = TahunAjaran::where('id', '!=', $id)
->where(function($query) use ($tanggalMulai, $tanggalSelesai) {
$query->whereBetween('tanggal_mulai', [$tanggalMulai, $tanggalSelesai])
->orWhereBetween('tanggal_selesai', [$tanggalMulai, $tanggalSelesai])
->orWhere(function($q) use ($tanggalMulai, $tanggalSelesai) {
$q->where('tanggal_mulai', '<=', $tanggalMulai)
->where('tanggal_selesai', '>=', $tanggalSelesai);
});
})->exists();
if ($overlap) {
toastr()->error('Periode tahun ajaran bertumpang tindih dengan tahun ajaran yang sudah ada.');
return redirect()->back();
}
// Jika diset sebagai aktif, nonaktifkan yang lain
$isActive = $request->has('is_active') ? true : false;
if ($isActive) {
TahunAjaran::where('is_active', true)->where('id', '!=', $id)->update(['is_active' => false]);
}
$tahunAjaran->nama = $nama;
$tahunAjaran->tanggal_mulai = $tanggalMulai;
$tahunAjaran->tanggal_selesai = $tanggalSelesai;
$tahunAjaran->is_active = $isActive;
if ($tahunAjaran->save()) {
toastr()->success('Data tahun ajaran berhasil diupdate.');
} else {
toastr()->error('Gagal memperbarui data tahun ajaran.');
}
return redirect()->route('tahunajaran')->with('reload', true);
}
public function hapustahunajaran($id)
{
$tahunAjaran = TahunAjaran::findOrFail($id);
// Cek apakah tahun ajaran ini sedang digunakan oleh siswa
if ($tahunAjaran->siswas()->count() > 0) {
toastr()->error('Tahun ajaran tidak dapat dihapus karena masih digunakan oleh data siswa.');
return redirect()->back();
}
$tahunAjaran->delete();
toastr()->success('Data tahun ajaran berhasil dihapus.');
return redirect()->route('tahunajaran');
}
public function downloadtahunajaran()
{
$tahunAjarans = TahunAjaran::orderBy('tanggal_mulai', 'desc')->get();
$pdf = Pdf::loadView('admin.tahunajaranpdf', compact('tahunAjarans'));
return $pdf->download('data_tahun_ajaran.pdf');
}
public function setaktif($id)
{
// Nonaktifkan semua tahun ajaran
TahunAjaran::where('is_active', true)->update(['is_active' => false]);
// Aktifkan tahun ajaran yang dipilih
$tahunAjaran = TahunAjaran::findOrFail($id);
$tahunAjaran->is_active = true;
$tahunAjaran->save();
toastr()->success('Tahun ajaran berhasil diaktifkan.');
return redirect()->route('tahunajaran');
}
}