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

272 lines
8.3 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Asuransi;
use App\Models\Pasien;
use App\Models\Pegawai;
use App\Models\Registrasi;
use App\Models\RuangPelayanan;
use App\Models\Tindakan;
use App\Models\Transaksi;
use Carbon\Carbon;
use Illuminate\Http\Request;
class AdminController extends Controller
{
public function __construct()
{
$this->middleware(['auth', 'role:admin']);
}
/**
* Display a listing of the resource.
*/
public function dashboard()
{
$totalAsuransi = Asuransi::count();
$totalPegawai = Pegawai::count();
$totalPasien = Pasien::count();
$totalRegistrasi = Registrasi::count();
$totalRuang = RuangPelayanan::count();
$totalTindakan = Tindakan::count();
$endDate = Carbon::now();
$startDate = Carbon::now()->subDays(30);
$registrasiData = Registrasi::whereBetween('tanggal_registrasi', [$startDate, $endDate])
->selectRaw('DATE(tanggal_registrasi) as date, COUNT(*) as count')
->groupBy('date')
->orderBy('date')
->get();
$pendapatanData = Transaksi::whereBetween('tanggal_transaksi', [$startDate, $endDate])
->where('status_pembayaran', 'lunas')
->selectRaw('DATE(tanggal_transaksi) as date, SUM(total_tarif) as total')
->groupBy('date')
->orderBy('date')
->get();
$distribusiPasien = Registrasi::with('ruang_pelayanan')
->selectRaw('ruang_pelayanan_id, COUNT(*) as total')
->whereBetween('tanggal_registrasi', [$startDate, $endDate])
->groupBy('ruang_pelayanan_id')
->get();
return view('admin.dashboard.admin', compact(
'totalAsuransi',
'totalPegawai',
'totalPasien',
'totalRegistrasi',
'totalRuang',
'totalTindakan',
'registrasiData',
'pendapatanData',
'distribusiPasien'
));
}
// ==================== CRUD ASURANSI ====================
public function indexAsuransi()
{
$asuransi = Asuransi::all();
return view('admin.asuransi.index', compact('asuransi'));
}
public function createAsuransi()
{
return view('admin.asuransi.create');
}
public function storeAsuransi(Request $request)
{
$validated = $request->validate([
'nama_asuransi' => 'required|max:100|unique:asuransis,nama_asuransi',
]);
Asuransi::create($validated);
return redirect()->route('asuransi.index')->with('message', 'Asuransi created successfully');
}
public function editAsuransi(Asuransi $asuransi)
{
return view('admin.asuransi.edit', compact('asuransi'));
}
public function updateAsuransi(Request $request, Asuransi $asuransi)
{
$validated = $request->validate([
'nama_asuransi' => 'required|max:100|unique:asuransis,nama_asuransi',
]);
$asuransi->update($validated);
return redirect()->route('asuransi.index')->with('message', 'Asuransi updated successfully');
}
public function destroyAsuransi(Asuransi $asuransi)
{
$asuransi->delete();
return response()->json(['message' => 'Asuransi deleted successfully']);
}
// ==================== CRUD PEGAWAI ====================
public function indexPegawai()
{
$pegawai = Pegawai::all();
return view('admin.pegawai.index', compact('pegawai'));
}
public function indexPegawaiPelayanan()
{
$pegawai = Pegawai::join('ruang_pelayanans', 'pegawais.ruang_pelayanan_id', '=', 'ruang_pelayanans.id')
->orderBy('ruang_pelayanans.nama_ruang_pelayanan')
->select('pegawais.*') // Memastikan hanya kolom pegawai yang diambil
->get();
return view('admin.pegawai.index', compact('pegawai'));
}
public function createPegawai()
{
$ruangPelayanans = RuangPelayanan::all();
return view('admin.pegawai.create', compact('ruangPelayanans'));
}
public function storePegawai(Request $request)
{
$validated = $request->validate([
'nip' => 'required|unique:pegawais,nip',
'nama_pegawai' => 'required|max:100',
'spesialisasi' => 'nullable|string',
'ruang_pelayanan_id' => 'nullable|exists:ruang_pelayanans,id',
]);
Pegawai::create($validated);
return redirect()->route('pegawai.index')->with('message', 'Pegawai created successfully');
}
public function editPegawai(Pegawai $pegawai)
{
$ruangPelayanans = RuangPelayanan::all();
return view('admin.pegawai.edit', compact('pegawai', 'ruangPelayanans'));
}
public function updatePegawai(Request $request, Pegawai $pegawai)
{
$validated = $request->validate([
'nip' => 'required|unique:pegawais,nip,' . $pegawai->id,
'nama_pegawai' => 'required|max:100',
'spesialisasi' => 'nullable|string',
'ruang_pelayanan_id' => 'nullable|exists:ruang_pelayanans,id',
]);
$pegawai->update($validated);
return redirect()->route('pegawai.index')->with('message', 'Pegawai updated successfully');
}
public function destroyPegawai(Pegawai $pegawai)
{
$pegawai->delete();
return redirect()->route('pegawai.index')->with('message', 'Pegawai deleted successfully');
}
// ==================== CRUD RUANG PELAYANAN ====================
public function indexRuangPelayanan()
{
$ruangPelayanan = RuangPelayanan::all();
return view('admin.ruang.index', compact('ruangPelayanan'));
}
public function createRuangPelayanan()
{
$ruangPelayanan = RuangPelayanan::all();
return view('admin.ruang.create');
}
public function storeRuangPelayanan(Request $request)
{
$validated = $request->validate([
'nama_ruang_pelayanan' => 'required|max:100|unique:ruang_pelayanans,nama_ruang_pelayanan',
]);
RuangPelayanan::create($validated);
return redirect()->route('ruang.index')->with('message', 'Ruang Pelayanan created successfully');
}
public function editRuangPelayanan(RuangPelayanan $ruangPelayanan)
{
return view('admin.ruang.edit', compact('ruangPelayanan'));
}
public function updateRuangPelayanan(Request $request, RuangPelayanan $ruangPelayanan)
{
$validated = $request->validate([
'nama_ruang_pelayanan' => 'required|max:100|unique:ruang_pelayanans,nama_ruang_pelayanan,' . $ruangPelayanan->id,
]);
$ruangPelayanan->update($validated);
return redirect()->route('ruang.index')->with('message', 'Ruang Pelayanan updated successfully');
}
public function destroyRuangPelayanan(RuangPelayanan $ruangPelayanan)
{
$ruangPelayanan->delete();
return redirect()->route('ruang.index')->with('message', 'Ruang Pelayanan deleted successfully');
}
// ==================== CRUD TINDAKAN ====================
public function indexTindakan()
{
$tindakan = Tindakan::all();
return view('admin.tindakan.index', compact('tindakan'));
}
public function createTindakan()
{
return view('admin.tindakan.create');
}
public function storeTindakan(Request $request)
{
$validated = $request->validate([
'nama_tindakan' => 'required|string',
'tarif_tindakan' => 'required|string',
]);
Tindakan::create($validated);
return redirect()->route('admin.tindakan.index')->with('message', 'Tindakan created successfully');
}
public function editTindakan(Tindakan $tindakan)
{
return view('admin.tindakan.edit', compact('tindakan'));
}
public function updateTindakan(Request $request, Tindakan $tindakan)
{
$validated = $request->validate([
'nama_tindakan' => 'required|string',
'tarif_tindakan' => 'required|string',
]);
$tindakan->update($validated);
return redirect()->route('admin.tindakan.index')->with('message', 'Tindakan updated successfully');
}
public function destroyTindakan(Tindakan $tindakan)
{
$tindakan->delete();
return redirect()->route('admin.tindakan.index')->with('message', 'Tindakan deleted successfully');
}
}