penjadwalan-ga/app/Http/Controllers/Admin/RuanganController.php

123 lines
4.5 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Ruangan;
use App\Models\Sekolah;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class RuanganController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$data = Ruangan::with('sekolah')->orderBy('created_at', 'desc')->get();
$sekolahList = Sekolah::whereNotIn('id', [172, 173, 63])->orderBy('nama_sekolah', 'asc')->get();
return view('admin.pages.ruangan', compact('data', 'sekolahList'));
}
/**
* Get single data for ajax editing.
*/
public function data($id)
{
$data = Ruangan::with('sekolah')->findOrFail($id);
return response()->json($data);
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'nama_ruangan' => 'required|string|max:255',
'kapasitas' => 'nullable|integer|min:0',
'status' => 'required|in:aktif,nonaktif',
'lokasi_tipe' => 'required|in:robotku,sekolah',
'sekolah_id' => 'required_if:lokasi_tipe,sekolah|nullable|exists:sekolah,id',
], [
'nama_ruangan.required' => 'Nama ruangan wajib diisi!',
'nama_ruangan.string' => 'Nama ruangan harus berupa teks!',
'nama_ruangan.max' => 'Nama ruangan maksimal 255 karakter!',
'kapasitas.integer' => 'Kapasitas harus berupa angka!',
'kapasitas.min' => 'Kapasitas tidak boleh kurang dari 0!',
'status.required' => 'Status wajib dipilih!',
'status.in' => 'Status tidak valid!',
'lokasi_tipe.required' => 'Lokasi tipe wajib dipilih!',
'lokasi_tipe.in' => 'Lokasi tipe tidak valid!',
'sekolah_id.required_if' => 'Sekolah wajib dipilih jika lokasi tipe adalah Sekolah!',
'sekolah_id.exists' => 'Sekolah tidak valid!',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput()->with('error', 'Gagal menyimpan data. Periksa inputan Anda.');
}
$validated = $validator->validated();
if ($validated['lokasi_tipe'] === 'robotku') {
$validated['sekolah_id'] = null;
}
Ruangan::create($validated);
return redirect('/admin/ruangan')->with('success', 'Data Ruangan berhasil disimpan');
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
$ruangan = Ruangan::findOrFail($id);
$validator = Validator::make($request->all(), [
'nama_ruangan' => 'required|string|max:255',
'kapasitas' => 'nullable|integer|min:0',
'status' => 'required|in:aktif,nonaktif',
'lokasi_tipe' => 'required|in:robotku,sekolah',
'sekolah_id' => 'required_if:lokasi_tipe,sekolah|nullable|exists:sekolah,id',
], [
'nama_ruangan.required' => 'Nama ruangan wajib diisi!',
'nama_ruangan.string' => 'Nama ruangan harus berupa teks!',
'nama_ruangan.max' => 'Nama ruangan maksimal 255 karakter!',
'kapasitas.integer' => 'Kapasitas harus berupa angka!',
'kapasitas.min' => 'Kapasitas tidak boleh kurang dari 0!',
'status.required' => 'Status wajib dipilih!',
'status.in' => 'Status tidak valid!',
'lokasi_tipe.required' => 'Lokasi tipe wajib dipilih!',
'lokasi_tipe.in' => 'Lokasi tipe tidak valid!',
'sekolah_id.required_if' => 'Sekolah wajib dipilih jika lokasi tipe adalah Sekolah!',
'sekolah_id.exists' => 'Sekolah tidak valid!',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput()->with('error', 'Gagal memperbarui data. Periksa inputan Anda.');
}
$validated = $validator->validated();
if ($validated['lokasi_tipe'] === 'robotku') {
$validated['sekolah_id'] = null;
}
$ruangan->update($validated);
return redirect('/admin/ruangan')->with('success', 'Data Ruangan berhasil diperbarui');
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
$ruangan = Ruangan::findOrFail($id);
$ruangan->delete();
return redirect('/admin/ruangan')->with('success', 'Data Ruangan berhasil dihapus');
}
}