hospital_report/app/Http/Controllers/RegistrasiController.php
2025-04-27 23:36:33 +07:00

190 lines
5.6 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Registrasi;
use App\Http\Requests\StoreRegistrasiRequest;
use App\Http\Requests\UpdateRegistrasiRequest;
use App\Models\Asuransi;
use App\Models\Pasien;
use App\Models\Pegawai;
use App\Models\RuangPelayanan;
use Illuminate\Http\Request;
class RegistrasiController extends Controller
{
public function __construct()
{
$this->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');
}
}
}