MIF_E31221225/app/Http/Controllers/Admin/SiswaController.php

198 lines
6.6 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Siswa;
use App\Models\Kelas;
use App\Models\User;
use App\Models\TahunAjaran;
use App\Imports\SiswaImport;
use App\Exports\SiswaExport;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
class SiswaController extends Controller
{
public function index(Request $request)
{
$kelasId = $request->kelas_id;
$tahunAjaranId = $request->tahun_ajaran_id;
$tahunAjaranList = TahunAjaran::where('status', 'aktif')->orderBy('tahun', 'desc')->get();
$query = Siswa::with(['kelas', 'tahunAjaran', 'user']);
if ($tahunAjaranId) {
$query->where('tahun_ajaran_id', $tahunAjaranId);
}
if ($kelasId) {
$query->where('kelas_id', $kelasId);
}
$data = $query->paginate(15);
$kelasList = Kelas::all();
return view('admin.siswa.index', compact('data', 'kelasList', 'tahunAjaranList'))
->with('success', session('success'))
->withErrors(session('error'));
}
public function create()
{
$kelasList = Kelas::all();
$tahunAjaranList = TahunAjaran::orderBy('tahun', 'desc')->get();
return view('admin.siswa.create', compact('kelasList', 'tahunAjaranList'));
}
public function store(Request $request)
{
try {
$tahunAjaran = TahunAjaran::where('status', 'aktif')->first();
$request->validate([
'nisn' => 'required|unique:siswa,nisn',
'nama' => 'required',
'email' => 'required|email|unique:users,email',
'kelas_id' => 'required|exists:kelas,id',
'alamat' => 'nullable',
'jenis_kelamin' => 'required|in:L,P',
]);
$user = User::create([
'name' => $request->nama,
'email' => $request->email,
'password' => Hash::make('defaultpassword'),
'role' => 'siswa',
'is_active' => 1,
]);
Siswa::create([
'user_id' => $user->id,
'nisn' => $request->nisn,
'nama' => $request->nama,
'kelas_id' => $request->kelas_id,
'alamat' => $request->alamat,
'jenis_kelamin' => $request->jenis_kelamin,
'tahun_ajaran_id' => $tahunAjaran->id ?? null,
]);
return redirect()->route('admin.siswa.index')->with('success', 'Data siswa berhasil ditambahkan');
} catch (\Exception $e) {
Log::error('Gagal menambahkan siswa: ' . $e->getMessage());
return back()->withInput()->withErrors('Terjadi kesalahan saat menambahkan siswa.');
}
}
public function edit($id)
{
$siswa = Siswa::with(['user', 'kelas', 'tahunAjaran'])->findOrFail($id);
$kelasList = Kelas::all();
$tahunAjaranList = TahunAjaran::all();
return view('admin.siswa.edit', compact('siswa', 'kelasList', 'tahunAjaranList'));
}
public function update(Request $request, $id)
{
try {
$siswa = Siswa::with('user')->findOrFail($id);
$user = $siswa->user;
$request->validate([
'nisn' => 'required|unique:siswa,nisn,' . $siswa->id,
'nama' => 'required',
'email' => 'required|email|unique:users,email,' . $user->id,
'password' => 'nullable|min:6',
'alamat' => 'nullable',
'jenis_kelamin' => 'required|in:L,P',
'kelas_id' => 'required|exists:kelas,id',
'tahun_ajaran_id' => 'required|exists:tahun_ajaran,id',
]);
$user->name = $request->nama;
$user->email = $request->email;
if ($request->filled('password')) {
$user->password = Hash::make($request->password);
}
$user->save();
$siswa->update([
'nisn' => $request->nisn,
'nama' => $request->nama,
'alamat' => $request->alamat,
'jenis_kelamin' => $request->jenis_kelamin,
'kelas_id' => $request->kelas_id,
'tahun_ajaran_id' => $request->tahun_ajaran_id,
]);
return redirect()->route('admin.siswa.index')->with('success', 'Data siswa berhasil diperbarui');
} catch (\Exception $e) {
Log::error('Gagal mengupdate siswa: ' . $e->getMessage());
return back()->withInput()->withErrors('Terjadi kesalahan saat memperbarui data siswa.');
}
}
public function destroy($id)
{
try {
$siswa = Siswa::findOrFail($id);
$user = $siswa->user;
$siswa->delete();
if ($user) {
$user->delete();
}
return back()->with('success', 'Data siswa berhasil dihapus');
} catch (\Exception $e) {
Log::error('Gagal menghapus siswa: ' . $e->getMessage());
return back()->withErrors('Terjadi kesalahan saat menghapus data siswa.');
}
}
public function import(Request $request)
{
try {
$request->validate([
'file' => 'required|mimes:xlsx,xls',
]);
Excel::import(new SiswaImport, $request->file('file'));
return back()->with('success', 'Import data siswa berhasil!');
} catch (\Exception $e) {
Log::error('Import siswa gagal: ' . $e->getMessage());
return back()->withErrors('Terjadi kesalahan saat mengimpor data siswa.');
}
}
public function export()
{
return Excel::download(new SiswaExport, 'data_siswa.xlsx');
}
public function siswaLulus(Request $request)
{
$filterTahunAjaranId = $request->tahun_ajaran_id;
$tahunAjaranLulus = TahunAjaran::where('status', 'lulus')->pluck('id');
if ($filterTahunAjaranId) {
$tahunAjaranLulus = $tahunAjaranLulus->filter(function ($id) use ($filterTahunAjaranId) {
return $id == $filterTahunAjaranId;
});
}
$data = Siswa::with(['kelas', 'tahunAjaran', 'user'])
->whereIn('tahun_ajaran_id', $tahunAjaranLulus)
->paginate(15);
$kelasList = Kelas::all();
$tahunAjaranList = TahunAjaran::where('status', 'lulus')->get();
return view('admin.siswa.lulus', compact('data', 'kelasList', 'tahunAjaranList'));
}
}