190 lines
5.6 KiB
PHP
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');
|
|
}
|
|
}
|
|
}
|