MIF_E31222313/app/Http/Controllers/SekolahController.php

355 lines
11 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Sekolah;
use App\Models\Kelas;
use App\Models\Siswa;
use App\Models\User;
use App\Models\TahunAjaran;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Support\Facades\Log;
class SekolahController extends Controller
{
public function sekolah()
{
$sekolahs = Sekolah::all();
return view('admin.sekolah', compact('sekolahs'));
}
public function tambahsekolah(Request $request)
{
$request->validate([
'nama' => 'required',
'alamat' => 'required',
]);
// Ambil nilai dari request
$nama = $request->input('nama');
$alamat = $request->input('alamat');
// Cek apakah ada kombinasi nama dan alamat yang sudah ada
$duplikatNamaAlamat = Sekolah::where('nama', $nama)
->where('alamat', $alamat)
->exists();
// Cek apakah ada nama yang duplikat
$duplikatNama = Sekolah::where('nama', $nama)->exists();
// Cek apakah ada alamat yang duplikat
$duplikatAlamat = Sekolah::where('alamat', $alamat)->exists();
if ($duplikatNamaAlamat) {
toastr()->error('Sekolah dengan nama dan alamat tersebut sudah ada.');
return redirect()->back();
}
if ($duplikatNama) {
toastr()->error('Sekolah dengan nama tersebut sudah ada.');
return redirect()->back();
}
if ($duplikatAlamat) {
toastr()->error('Sekolah dengan alamat tersebut sudah ada.');
return redirect()->back();
}
$sekolah = new Sekolah();
$sekolah->nama = $request->input('nama');
$sekolah->alamat = $request->input('alamat');
if ($sekolah->save()) {
toastr()->success('Data sekolah berhasil ditambahkan.');
} else {
toastr()->error('Gagal menambahkan data sekolah.');
}
return redirect()->route('sekolah');
}
public function updatesekolah(Request $request, $id)
{
$request->validate([
'nama' => 'required',
'alamat' => 'required',
]);
// Ambil data sekolah berdasarkan ID
$sekolah = Sekolah::findOrFail($id);
// Ambil nilai dari request
$nama = $request->input('nama');
$alamat = $request->input('alamat');
// Cek apakah ada nama yang duplikat (karena nama unique di database)
$duplikatNama = Sekolah::where('nama', $nama)
->where('id', '!=', $id)
->exists();
if ($duplikatNama) {
toastr()->error('Sekolah dengan nama tersebut sudah ada.');
return redirect()->back();
}
// Cek apakah ada alamat yang duplikat
$duplikatAlamat = Sekolah::where('alamat', $alamat)
->where('id', '!=', $id)
->exists();
if ($duplikatAlamat) {
toastr()->error('Sekolah dengan alamat tersebut sudah ada.');
return redirect()->back();
}
// Update data sekolah
$sekolah->nama = $nama;
$sekolah->alamat = $alamat;
$sekolah->save();
toastr()->success('Data sekolah berhasil diupdate.');
return redirect()->route('sekolah')->with('reload', true);
}
public function hapussekolah($id)
{
$sekolah = Sekolah::findOrFail($id);
$sekolah->delete();
toastr()->success('Data sekolah berhasil dihapus.');
return redirect()->route('sekolah');
}
public function downloadsekolah()
{
// Ambil data sekolah dari database
$sekolahs = Sekolah::all();
$pdf = Pdf::loadView('admin.sekolahpdf', compact('sekolahs'));
// Download file PDF
return $pdf->download('data_sekolah.pdf');
}
public function kelas()
{
$kelas = Kelas::all();
$sekolahs = Sekolah::all();
return view('admin.kelas', compact('kelas', 'sekolahs'));
}
public function getkelas($id)
{
$kelas = Kelas::where('sekolah_id', $id)->get();
// Balikkan dalam bentuk JSON
return response()->json(['kelas' => $kelas]);
}
public function tambahkelas(Request $request)
{
$request->validate([
'nama_kelas' => 'required',
'sekolah_id' => 'required|exists:sekolahs,id',
]);
// Ambil nilai dari request
$nama = $request->input('nama_kelas');
// Cek apakah ada nama yang duplikat
$duplikatNama = Kelas::where('nama_kelas', $nama)
->where('sekolah_id', $request->input('sekolah_id'))
->exists();
if ($duplikatNama) {
toastr()->error('Kelas dengan nama tersebut sudah ada.');
return redirect()->back();
}
$kelas = new Kelas();
$kelas->nama_kelas = $request->input('nama_kelas');
$kelas->sekolah_id = $request->input('sekolah_id');
if ($kelas->save()) {
toastr()->success('Data kelas berhasil ditambahkan.');
} else {
toastr()->error('Gagal menambahkan data kelas.');
}
return redirect()->route('kelas');
}
public function updatekelas(Request $request, $id)
{
$request->validate([
'nama_kelas' => 'required',
'sekolah_id' => 'required|exists:sekolahs,id',
]);
// Ambil data kelas berdasarkan ID
$kelas = Kelas::findOrFail($id);
// Ambil nilai dari request
$nama = $request->input('nama_kelas');
// Cek apakah ada nama yang duplikat, kecuali untuk kelas yang sedang diupdate
$duplikatNama = Kelas::where('nama_kelas', $nama)
->where('sekolah_id', $request->input('sekolah_id'))
->where('id', '!=', $id) // Menghindari duplikasi pada kelas yang sedang diupdate
->exists();
if ($duplikatNama) {
toastr()->error('Kelas dengan nama tersebut sudah ada.');
return redirect()->back();
}
// Update data kelas
$kelas->nama_kelas = $nama;
$kelas->sekolah_id = $request->input('sekolah_id');
if ($kelas->save()) {
toastr()->success('Data kelas berhasil diupdate.');
} else {
toastr()->error('Gagal memperbarui data kelas.');
}
return redirect()->route('kelas')->with('reload', true);
}
public function hapuskelas($id)
{
$kelas = Kelas::findOrFail($id);
$kelas->delete();
toastr()->success('Data kelas berhasil dihapus.');
return redirect()->route('kelas');
}
public function downloadkelas()
{
// Ambil data sekolah dari database
$kelas = Kelas::all();
$pdf = Pdf::loadView('admin.kelaspdf', compact('kelas'));
// Download file PDF
return $pdf->download('data_kelas.pdf');
}
public function siswa()
{
$users = User::where('usertype', 'user')->get();
$sekolahs = Sekolah::all(); // Untuk dropdown sekolah
$kelas = Kelas::all(); // Untuk dropdown kelas
$tahun_ajarans = TahunAjaran::where('is_active', 1)->get(); // Ambil tahun ajaran yang aktif
$siswas = Siswa::with('user', 'sekolah', 'kelas', 'tahunAjaran')->get(); // Tambahkan relasi 'tahunAjaran'
return view('admin.siswa', compact('siswas', 'users', 'sekolahs', 'kelas', 'tahun_ajarans'));
}
public function tambahsiswa(Request $request)
{
$request->validate([
'user_id' => 'required|exists:users,id',
'sekolah_id' => 'required|exists:sekolahs,id',
'kelas_id' => 'required|exists:kelas,id',
'tahun_ajaran_id' => 'required|exists:tahun_ajarans,id',
]);
$userId = $request->input('user_id');
$sekolahId = $request->input('sekolah_id');
$kelasId = $request->input('kelas_id');
$tahunAjaranId = $request->input('tahun_ajaran_id');
// Cek apakah siswa ini sudah terdaftar di sekolah, kelas, dan tahun ajaran yang sama
$duplikat = Siswa::where('user_id', $userId)
->where('sekolah_id', $sekolahId)
->where('kelas_id', $kelasId)
->where('tahun_ajaran_id', $tahunAjaranId)
->exists();
if ($duplikat) {
toastr()->error('Siswa tersebut sudah terdaftar di sekolah, kelas, dan tahun ajaran yang sama.');
return redirect()->back();
}
// Simpan data siswa
$siswa = new Siswa();
$siswa->user_id = $userId;
$siswa->sekolah_id = $sekolahId;
$siswa->kelas_id = $kelasId;
$siswa->tahun_ajaran_id = $tahunAjaranId;
if ($siswa->save()) {
toastr()->success('Data siswa berhasil ditambahkan.');
} else {
toastr()->error('Gagal menambahkan data siswa.');
}
return redirect()->route('siswa')->with('reload', true);
}
public function updatesiswa(Request $request, $id)
{
// Validasi input
$request->validate([
'user_id' => 'required|exists:users,id',
'sekolah_id' => 'required|exists:sekolahs,id',
'kelas_id' => 'required|exists:kelas,id',
'tahun_ajaran_id' => 'required|exists:tahun_ajarans,id',
]);
// Cari data siswa berdasarkan ID
$siswa = Siswa::findOrFail($id);
$userId = $request->input('user_id');
$sekolahId = $request->input('sekolah_id');
$kelasId = $request->input('kelas_id');
$tahunAjaranId = $request->input('tahun_ajaran_id');
// Cek apakah siswa ini sudah terdaftar di sekolah, kelas, dan tahun ajaran yang sama, kecuali untuk siswa yang sedang di-update
$duplikat = Siswa::where('user_id', $userId)
->where('sekolah_id', $sekolahId)
->where('kelas_id', $kelasId)
->where('tahun_ajaran_id', $tahunAjaranId)
->where('id', '!=', $id) // Hindari memeriksa siswa yang sedang di-update
->exists();
if ($duplikat) {
toastr()->error('Siswa tersebut sudah terdaftar di sekolah, kelas, dan tahun ajaran yang sama.');
return redirect()->back();
}
// Update data siswa
$siswa->user_id = $userId;
$siswa->sekolah_id = $sekolahId;
$siswa->kelas_id = $kelasId;
$siswa->tahun_ajaran_id = $tahunAjaranId;
if ($siswa->save()) {
toastr()->success('Data siswa berhasil di-update.');
} else {
toastr()->error('Gagal meng-update data siswa.');
}
return redirect()->route('siswa');
}
public function hapussiswa($id)
{
$siswa = Siswa::findOrFail($id);
$siswa->delete();
toastr()->success('Data siswa berhasil dihapus.');
return redirect()->route('siswa');
}
public function downloadsiswa()
{
// Ambil data siswa dengan relasi lengkap untuk PDF
$siswas = Siswa::with('user', 'sekolah', 'kelas', 'tahunAjaran')->get();
$pdf = Pdf::loadView('admin.siswapdf', compact('siswas'));
// Download file PDF
return $pdf->download('data_siswa.pdf');
}
}