138 lines
3.7 KiB
PHP
138 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Kelas;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Validation\Rule;
|
|
use Barryvdh\DomPDF\Facade\Pdf;
|
|
|
|
|
|
class KelasController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$query = Kelas::query();
|
|
|
|
// SEARCH
|
|
if ($request->has('search')) {
|
|
$search = $request->search;
|
|
$query->where('nama_kelas', 'like', "%$search%")
|
|
->orWhere('id_kelas', 'like', "%$search%");
|
|
}
|
|
|
|
// SHOW PER PAGE
|
|
$perPage = $request->get('perPage', 10);
|
|
|
|
$kelass = $query->paginate($perPage)->appends($request->all());
|
|
|
|
return view('admin.kelas.index', compact('kelass'));
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$validated = $request->validate([
|
|
'nama_kelas' => [
|
|
'required',
|
|
'string',
|
|
'max:50',
|
|
Rule::unique('kelas')->where(function ($query) use ($request) {
|
|
return $query->where('tingkat', $request->tingkat);
|
|
}),
|
|
],
|
|
'tingkat' => 'required|in:X,XI,XII',
|
|
], [
|
|
'nama_kelas.unique' => 'Nama kelas sudah ada di tingkat ini!',
|
|
]);
|
|
|
|
Kelas::create([
|
|
'nama_kelas' => $validated['nama_kelas'],
|
|
'tingkat' => $validated['tingkat'],
|
|
]);
|
|
|
|
return redirect()->route('admin.kelas.index')
|
|
->with('success', 'Data kelas berhasil ditambahkan!');
|
|
}
|
|
|
|
|
|
public function update(Request $request, $id_kelas)
|
|
{
|
|
$kelas = Kelas::findOrFail($id_kelas);
|
|
|
|
$validated = $request->validate([
|
|
'nama_kelas' => [
|
|
'required',
|
|
'string',
|
|
'max:50',
|
|
Rule::unique('kelas')->where(function ($query) use ($request) {
|
|
return $query->where('tingkat', $request->tingkat);
|
|
})->ignore($id_kelas, 'id_kelas'),
|
|
],
|
|
'tingkat' => 'required|in:X,XI,XII',
|
|
], [
|
|
'nama_kelas.unique' => 'Nama kelas sudah ada di tingkat ini!',
|
|
]);
|
|
|
|
|
|
$kelas->update($validated);
|
|
|
|
return redirect()->route('admin.kelas.index')
|
|
->with('success', 'Data kelas berhasil diupdate!');
|
|
}
|
|
|
|
public function destroy($id_kelas)
|
|
{
|
|
$kelas = Kelas::findOrFail($id_kelas);
|
|
$kelas->delete();
|
|
|
|
return redirect()->route('admin.kelas.index')
|
|
->with('success', 'Data kelas berhasil dihapus!');
|
|
}
|
|
|
|
public function downloadPdf(Request $request)
|
|
{
|
|
$query = Kelas::query();
|
|
if ($request->filled('search')) {
|
|
$search = $request->search;
|
|
$query->where('nama_kelas', 'like', "%$search%")
|
|
->orWhere('id_kelas', 'like', "%$search%");
|
|
}
|
|
$kelass = $query->get();
|
|
|
|
$pdf = Pdf::loadView('admin.kelas.pdf', compact('kelass'))
|
|
->setPaper('a4', 'portrait');
|
|
|
|
return $pdf->download('daftar-kelas-' . date('Ymd') . '.pdf');
|
|
}
|
|
|
|
public function downloadExcel(Request $request)
|
|
{
|
|
$query = Kelas::query();
|
|
if ($request->filled('search')) {
|
|
$search = $request->search;
|
|
$query->where('nama_kelas', 'like', "%$search%")
|
|
->orWhere('id_kelas', 'like', "%$search%");
|
|
}
|
|
$kelass = $query->get();
|
|
|
|
$filename = 'daftar-kelas-' . date('Ymd') . '.csv';
|
|
$headers = [
|
|
'Content-Type' => 'text/csv',
|
|
'Content-Disposition' => "attachment; filename=\"$filename\"",
|
|
];
|
|
|
|
$callback = function () use ($kelass) {
|
|
$file = fopen('php://output', 'w');
|
|
fprintf($file, chr(0xEF).chr(0xBB).chr(0xBF));
|
|
fputcsv($file, ['No', 'ID Kelas', 'Nama Kelas', 'Tingkat']);
|
|
foreach ($kelass as $i => $kelas) {
|
|
fputcsv($file, [$i + 1, $kelas->id_kelas, $kelas->nama_kelas, $kelas->tingkat]);
|
|
}
|
|
fclose($file);
|
|
};
|
|
|
|
return response()->stream($callback, 200, $headers);
|
|
}
|
|
}
|