From 5f97cb9bfffba69ccc166007e7fe798c7b7792a6 Mon Sep 17 00:00:00 2001 From: Endyfadlullah Date: Mon, 11 Aug 2025 03:23:58 +0700 Subject: [PATCH] update lagi --- app/Http/Controllers/AdminController.php | 73 ++++++++++++++++++- resources/views/admin/laporan/index.blade.php | 40 +++++++++- resources/views/admin/laporan/pdf.blade.php | 9 ++- 3 files changed, 112 insertions(+), 10 deletions(-) diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index fb8f535..5698291 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -6,6 +6,7 @@ use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Log; use App\Models\User; use App\Models\Admin; use App\Models\Antrian; @@ -19,6 +20,9 @@ class AdminController extends Controller { public function dashboard() { + // Auto-batalkan antrian yang sudah dipanggil lebih dari 5 menit + $this->autoBatalkanAntrianLama(); + $totalUsers = User::count(); $totalAntrian = Antrian::count(); $antrianHariIni = Antrian::whereDate('created_at', today())->count(); @@ -62,6 +66,9 @@ public function dashboard() public function manageUsers(Request $request) { + // Auto-batalkan antrian yang sudah dipanggil lebih dari 5 menit + $this->autoBatalkanAntrianLama(); + $query = User::with(['antrians.poli']); // Search functionality @@ -184,6 +191,9 @@ public function resetUserPassword(Request $request, User $user) public function laporan(Request $request) { + // Auto-batalkan antrian yang sudah dipanggil lebih dari 5 menit + $this->autoBatalkanAntrianLama(); + $query = Antrian::with(['user', 'poli']); // Filter berdasarkan tanggal @@ -219,9 +229,10 @@ public function laporan(Request $request) $totalAntrian = $antrian->count(); $antrianSelesai = $antrian->where('status', 'selesai')->count(); $antrianMenunggu = $antrian->where('status', 'menunggu')->count(); + $antrianDipanggil = $antrian->where('status', 'dipanggil')->count(); $antrianSedang = $antrian->where('status', 'sedang')->count(); - return view('admin.laporan.index', compact('antrian', 'polis', 'totalAntrian', 'antrianSelesai', 'antrianMenunggu', 'antrianSedang')); + return view('admin.laporan.index', compact('antrian', 'polis', 'totalAntrian', 'antrianSelesai', 'antrianMenunggu', 'antrianDipanggil', 'antrianSedang')); } public function exportPDF(Request $request) @@ -256,7 +267,14 @@ public function exportPDF(Request $request) $antrian = $query->orderBy('created_at', 'desc')->get(); - $pdf = Pdf::loadView('admin.laporan.pdf', compact('antrian')); + // Statistik untuk PDF + $totalAntrian = $antrian->count(); + $antrianSelesai = $antrian->where('status', 'selesai')->count(); + $antrianMenunggu = $antrian->where('status', 'menunggu')->count(); + $antrianDipanggil = $antrian->where('status', 'dipanggil')->count(); + $antrianSedang = $antrian->where('status', 'sedang')->count(); + + $pdf = Pdf::loadView('admin.laporan.pdf', compact('antrian', 'totalAntrian', 'antrianSelesai', 'antrianMenunggu', 'antrianDipanggil', 'antrianSedang')); return $pdf->download('laporan-antrian-' . date('Y-m-d') . '.pdf'); } @@ -292,6 +310,13 @@ public function exportExcel(Request $request) $antrian = $query->orderBy('created_at', 'desc')->get(); + // Statistik untuk Excel + $totalAntrian = $antrian->count(); + $antrianSelesai = $antrian->where('status', 'selesai')->count(); + $antrianMenunggu = $antrian->where('status', 'menunggu')->count(); + $antrianDipanggil = $antrian->where('status', 'dipanggil')->count(); + $antrianSedang = $antrian->where('status', 'sedang')->count(); + $filename = 'laporan-antrian-' . date('Y-m-d') . '.csv'; $headers = [ @@ -338,6 +363,9 @@ public function exportExcel(Request $request) public function poliUmum() { + // Auto-batalkan antrian yang sudah dipanggil lebih dari 5 menit + $this->autoBatalkanAntrianLama(); + $antrians = Antrian::with(['user', 'poli']) ->whereHas('poli', function ($query) { $query->where('nama_poli', 'umum'); @@ -351,6 +379,9 @@ public function poliUmum() public function poliGigi() { + // Auto-batalkan antrian yang sudah dipanggil lebih dari 5 menit + $this->autoBatalkanAntrianLama(); + $antrians = Antrian::with(['user', 'poli']) ->whereHas('poli', function ($query) { $query->where('nama_poli', 'gigi'); @@ -364,6 +395,9 @@ public function poliGigi() public function poliJiwa() { + // Auto-batalkan antrian yang sudah dipanggil lebih dari 5 menit + $this->autoBatalkanAntrianLama(); + $antrians = Antrian::with(['user', 'poli']) ->whereHas('poli', function ($query) { $query->where('nama_poli', 'kesehatan jiwa'); @@ -377,6 +411,9 @@ public function poliJiwa() public function poliTradisional() { + // Auto-batalkan antrian yang sudah dipanggil lebih dari 5 menit + $this->autoBatalkanAntrianLama(); + $antrians = Antrian::with(['user', 'poli']) ->whereHas('poli', function ($query) { $query->where('nama_poli', 'kesehatan tradisional'); @@ -641,6 +678,38 @@ private function getPoliPrefix($namaPoli) return $prefixMap[strtolower($namaPoli)] ?? 'A'; } + /** + * Auto-batalkan antrian yang sudah dipanggil lebih dari 5 menit + * tanpa dikonfirmasi selesai oleh admin + */ + private function autoBatalkanAntrianLama() + { + try { + // Cari antrian yang sudah dipanggil lebih dari 5 menit + $antrianLama = Antrian::where('status', 'dipanggil') + ->where('waktu_panggil', '<=', now()->subMinutes(5)) + ->get(); + + $count = 0; + foreach ($antrianLama as $antrian) { + // Update status menjadi 'batal' + $antrian->update(['status' => 'batal']); + $count++; + + // Log untuk tracking + \Log::info("Antrian {$antrian->no_antrian} otomatis dibatalkan karena lewat 5 menit sejak dipanggil"); + } + + // Jika ada antrian yang dibatalkan, log jumlahnya + if ($count > 0) { + \Log::info("Total {$count} antrian otomatis dibatalkan karena timeout"); + } + } catch (\Exception $e) { + // Log error jika terjadi masalah + \Log::error("Error saat auto-batalkan antrian: " . $e->getMessage()); + } + } + public function cetakAntrian(Antrian $antrian) { try { diff --git a/resources/views/admin/laporan/index.blade.php b/resources/views/admin/laporan/index.blade.php index 2d12f40..c5a63dc 100644 --- a/resources/views/admin/laporan/index.blade.php +++ b/resources/views/admin/laporan/index.blade.php @@ -20,7 +20,7 @@ -
+
@@ -301,6 +304,25 @@ class="inline-flex items-center px-4 py-2 border border-gray-300 rounded-md shad
+
+
+
+
+ + + + +
+
+
+

Dipanggil

+

{{ $antrianDipanggil }}

+
+
+
+
@@ -400,6 +422,11 @@ class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium b class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-yellow-100 text-yellow-800"> Menunggu + @elseif($item->status == 'dipanggil') + + Dipanggil + @elseif($item->status == 'sedang') @@ -410,7 +437,7 @@ class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium b class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800"> Selesai - @else + @elseif($item->status == 'batal') Batal @@ -472,6 +499,11 @@ class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium b class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-yellow-100 text-yellow-800"> Menunggu + @elseif($item->status == 'dipanggil') + + Dipanggil + @elseif($item->status == 'sedang') @@ -482,7 +514,7 @@ class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium b class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800"> Selesai - @else + @elseif($item->status == 'batal') Batal diff --git a/resources/views/admin/laporan/pdf.blade.php b/resources/views/admin/laporan/pdf.blade.php index 21815e6..ad959f5 100644 --- a/resources/views/admin/laporan/pdf.blade.php +++ b/resources/views/admin/laporan/pdf.blade.php @@ -132,10 +132,11 @@

Ringkasan Statistik:

-

Total Antrian: {{ $antrian->count() }}

-

Menunggu: {{ $antrian->where('status', 'menunggu')->count() }}

-

Sedang: {{ $antrian->where('status', 'sedang')->count() }}

-

Selesai: {{ $antrian->where('status', 'selesai')->count() }}

+

Total Antrian: {{ $totalAntrian }}

+

Menunggu: {{ $antrianMenunggu }}

+

Dipanggil: {{ $antrianDipanggil }}

+

Sedang: {{ $antrianSedang }}

+

Selesai: {{ $antrianSelesai }}

Batal: {{ $antrian->where('status', 'batal')->count() }}