middleware('role:admin')->except(['show', 'updateStatus']); $this->middleware('role:admin|pegawai')->only('show', 'updateStatus'); } /** * Display a listing of the resource. */ public function index() { $registrasis = Registrasi::with([ 'pasien', 'asuransi', 'pegawai', 'ruang_pelayanan' ])->latest()->get(); return view('registrasi.index', compact('registrasis')); } /** * Show the form for creating a new resource. */ public function create() { $pegawai = Pegawai::all(); $ruang_pelayanan = RuangPelayanan::all(); $asuransi = Asuransi::all(); return view('registrasi.create', compact( 'pegawai', 'ruang_pelayanan', 'asuransi' )); } /** * Store a newly created resource in storage. */ public function store(StoreRegistrasiRequest $request) { $request->validate([ 'nik' => 'required|unique:pasiens|max:16', 'nama_pasien' => 'required|max:100', 'jenis_kelamin' => 'required|in:Laki-Laki,Perempuan', 'tanggal_lahir' => 'required|date', 'nomor_telepon' => 'nullable|max:15', 'nama_asuransi' => 'required_if:asuransi_baru,true|max:100|unique:asuransis,nama_asuransi', 'pegawai_id' => 'required|exists:pegawais,id', 'ruang_pelayanan_id' => 'required|exists:ruang_pelayanans,id', 'nomor_kartu_asuransi' => 'required|max:50|string', 'tanggal_registrasi' => 'required|date', 'keluhan' => 'required|string', 'nomor_antrian' => 'required|string|unique:registrasis', ]); $pasien = Pasien::create([ 'nik' => $request->nik, 'nama_pasien' => $request->nama_pasien, 'jenis_kelamin' => $request->jenis_kelamin, 'tanggal_lahir' => $request->tanggal_lahir, 'nomor_telepon' => $request->nomor_telepon, ]); if ($request->filled('asuransi_id')) { $asuransiId = $request->asuransi_id; } else { $asuransi = Asuransi::create([ 'nama_asuransi' => $request->nama_asuransi, ]); $asuransiId = $asuransi->id; $pasien->asuransi()->attach($asuransiId); }; $registrasi = Registrasi::create([ 'pasien_id' => $pasien->id, 'asuransi_id' => $asuransiId, 'pegawai_id' => $request->pegawai_id, 'ruang_pelayanan_id' => $request->ruang_pelayanan_id, 'nomor_kartu_asuransi' => $request->nomor_kartu_asuransi, 'tanggal_registrasi' => $request->tanggal_registrasi, 'keluhan' => $request->keluhan, 'nomor_antrian' => $request->nomor_antrian, 'status' => 'menunggu', ]); return redirect()->route('registrasi.show', $registrasi->id) ->with('success', 'Registrasi berhasil ditambahkan'); } /** * Display the specified resource. */ public function show(Registrasi $registrasi) { $registrasi->load([ 'pasien', 'asuransi', 'pegawai', 'ruang_pelayanan', ]); return view('registrasi.show', compact('registrasi')); } /** * Show the form for editing the specified resource. */ public function edit(Registrasi $registrasi) { $pegawai = Pegawai::all(); $ruang_pelayanan = RuangPelayanan::all(); $asuransi = Asuransi::all(); return view('registrasi.edit', compact( 'pegawai', 'ruang_pelayanan', 'asuransi', 'registrasi' )); } /** * Update the specified resource in storage. */ public function update(UpdateRegistrasiRequest $request, Registrasi $registrasi) { $data = $request->validated(); $registrasi->update($data); return redirect()->route('registrasi.show', $registrasi->id) ->with('success', 'Registrasi berhasil diperbarui'); } /** * Remove the specified resource from storage. */ public function destroy(Registrasi $registrasi) { $registrasi->delete(); return redirect()->route('registrasi.index') ->with('success', 'Registrasi berhasil dihapus'); } public function updateStatus(Request $request, Registrasi $registrasi) { $request->validate([ 'status' => 'required|in:menunggu,sedang_diproses,selesai', ]); $allowedTransitions = [ 'menunggu' => ['sedang_diproses'], 'sedang_diproses' => ['selesai'], 'selesai' => [] ]; if (!in_array($request->status, $allowedTransitions[$registrasi->status] ?? [])) { return back()->with('error', 'Transisi status tidak valid'); } try { $registrasi->update(['status' => $request->status]); return back() ->with('success', 'Status registrasi berhasil diperbarui'); } catch (\Exception $e) { return back()->with('error', 'Gagal memperbarui status'); } } }