167 lines
6.3 KiB
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');
|
|
}
|
|
}
|