From c2d147c20c227f0f21b8427ce38dc3f4eee36e79 Mon Sep 17 00:00:00 2001 From: mirsydfchrynto Date: Sat, 9 Aug 2025 00:13:09 +0700 Subject: [PATCH] new fitur --- .../Admin/AdminBookingController.php | 8 + .../views/admin/bookings/index.blade.php | 20 +- resources/views/admin/bookings/show.blade.php | 176 ++++++++++++------ 3 files changed, 144 insertions(+), 60 deletions(-) diff --git a/app/Http/Controllers/Admin/AdminBookingController.php b/app/Http/Controllers/Admin/AdminBookingController.php index 905747c..5f33e9a 100644 --- a/app/Http/Controllers/Admin/AdminBookingController.php +++ b/app/Http/Controllers/Admin/AdminBookingController.php @@ -21,6 +21,14 @@ public function index() public function show(string $id) { $booking = Booking::findOrFail($id); + + // 🔁 Auto-cancel: Jika status 'waiting' dan lebih dari 24 jam + if ($booking->status === 'waiting' && $booking->created_at->lt(now()->subDay())) { + $booking->update(['status' => 'cancelled']); + // Refresh agar status baru terbaca + $booking->refresh(); + } + $expectedDpAmount = $booking->total_price * self::DP_PERCENTAGE; return view('admin.bookings.show', compact('booking', 'expectedDpAmount')); diff --git a/resources/views/admin/bookings/index.blade.php b/resources/views/admin/bookings/index.blade.php index bdf16c2..bf36572 100644 --- a/resources/views/admin/bookings/index.blade.php +++ b/resources/views/admin/bookings/index.blade.php @@ -45,15 +45,29 @@ @php - $badgeColor = match ($booking->status) { + // Cek apakah status waiting tapi sudah expired + $isExpired = $booking->status === 'waiting' && $booking->created_at->lt(now()->subDay()); + $displayStatus = $isExpired ? 'cancelled' : $booking->status; + + $badgeColor = match ($displayStatus) { 'waiting' => 'bg-yellow-100 text-yellow-800 border-yellow-200', 'booked' => 'bg-green-100 text-green-800 border-green-200', 'completed' => 'bg-blue-100 text-blue-800 border-blue-200', + 'cancelled' => 'bg-red-100 text-red-800 border-red-200', default => 'bg-gray-100 text-gray-800 border-gray-200' }; + + $label = match ($displayStatus) { + 'waiting' => 'Menunggu DP', + 'booked' => 'Sudah Dibooking', + 'completed' => 'Selesai', + 'cancelled' => 'Dibatalkan', + default => ucfirst($displayStatus) + }; @endphp - - {{ ucfirst($booking->status === 'waiting' ? 'Menunggu DP' : ($booking->status === 'booked' ? 'Sudah Dibooking' : 'Selesai')) }} + + {{ $label }} diff --git a/resources/views/admin/bookings/show.blade.php b/resources/views/admin/bookings/show.blade.php index 163aedf..3b02d6c 100644 --- a/resources/views/admin/bookings/show.blade.php +++ b/resources/views/admin/bookings/show.blade.php @@ -106,7 +106,45 @@ class="inline-flex items-center gap-2 bg-gray-200 hover:bg-gray-300 text-gray-80
- + + +
+

Status Pesanan

+ @php + $badgeColor = match ($booking->status) { + 'waiting' => 'bg-yellow-100 text-yellow-800 border-yellow-200', + 'booked' => 'bg-green-100 text-green-800 border-green-200', + 'completed' => 'bg-blue-100 text-blue-800 border-blue-200', + 'cancelled' => 'bg-red-100 text-red-800 border-red-200', + default => 'bg-gray-100 text-gray-800 border-gray-200' + }; + @endphp + + {{ ucfirst( + $booking->status === 'waiting' ? 'Menunggu DP' : + ($booking->status === 'booked' ? 'Sudah Dibooking' : + ($booking->status === 'completed' ? 'Selesai' : 'Dibatalkan')) + ) }} + + + + @if($booking->status === 'waiting' && $booking->created_at->gt(now()->subDay())) +
+

Waktu untuk bayar DP:

+

Memuat...

+

Booking akan dibatalkan otomatis jika DP tidak dibayar.

+
+ @endif + + + @if($booking->status === 'cancelled') +
+

Booking dibatalkan karena melewati batas waktu pembayaran DP.

+
+ @endif +
+ + @if($booking->status === 'waiting')

Nominal DP yang harus dibayar:

@@ -116,61 +154,43 @@ class="inline-flex items-center gap-2 bg-gray-200 hover:bg-gray-300 text-gray-80
@endif - -
-

Tindakan Cepat

+ +
+

Tindakan Cepat

+ + -

Klik untuk memperbarui status terbaru

-
- -
-

Status Pesanan

- @php - $badgeColor = match ($booking->status) { - 'waiting' => 'bg-yellow-100 text-yellow-800 border-yellow-200', - 'booked' => 'bg-green-100 text-green-800 border-green-200', - 'completed' => 'bg-blue-100 text-blue-800 border-blue-200', - default => 'bg-gray-100 text-gray-800 border-gray-200' - }; - @endphp - - {{ ucfirst($booking->status === 'waiting' ? 'Menunggu DP' : ($booking->status === 'booked' ? 'Sudah Dibooking' : 'Selesai')) }} - + + @if($booking->status === 'waiting') + @php + $dpAmount = number_format($expectedDpAmount, 0, ',', '.'); + $message = "Halo kak {$booking->contact_name},\n\n" + . "Terima kasih, pesanan untuk sesi {$booking->session_name} pada tanggal " + . \Carbon\Carbon::parse($booking->booking_date)->translatedFormat('d F Y') . " pukul {$booking->booking_time} telah kami terima.\n" + . "Mohon transfer DP Rp{$dpAmount} untuk mengamankan jadwal.\n" + . "Balas dengan bukti transfer ya. Terima kasih!"; + $whatsappNumber = preg_replace('/[^0-9]/', '', $booking->whatsapp_number); + $url = 'https://wa.me/' . $whatsappNumber . '?text=' . urlencode($message); + @endphp + + + + + Kirim Konfirmasi via WhatsApp + + @endif
- - @if($booking->status === 'waiting') - @php - $dpAmount = number_format($expectedDpAmount, 0, ',', '.'); - $message = "Halo kak {$booking->contact_name}, -" - . "Terima kasih, pesanan untuk sesi {$booking->session_name} pada tanggal " - . \Carbon\Carbon::parse($booking->booking_date)->translatedFormat('d F Y') . " pukul {$booking->booking_time} telah kami terima. -" - . "Mohon transfer DP Rp{$dpAmount} untuk mengamankan jadwal. -" - . "Balas dengan bukti transfer ya. Terima kasih!"; - $whatsappNumber = preg_replace('/[^0-9]/', '', $booking->whatsapp_number); - $url = 'https://wa.me/' . $whatsappNumber . '?text=' . urlencode($message); - @endphp - - - - - Kirim Konfirmasi via WhatsApp - - @endif - @if($booking->status === 'waiting')
@@ -283,21 +303,63 @@ class="rounded-lg border w-full mt-1 shadow-sm"> @endif -
-
- @csrf - @method('DELETE') - -
-
+ @if(!in_array($booking->status, ['completed', 'cancelled'])) +
+
+ @csrf + @method('DELETE') + +
+
+ @endif
+ + @if($booking->status === 'waiting' && $booking->created_at->gt(now()->subDay())) + + @endif +