From ac9d47071ed84ea3cbf0a3b4d1b049e0541b2323 Mon Sep 17 00:00:00 2001 From: Stephen Gesityan Date: Mon, 19 May 2025 17:07:52 +0700 Subject: [PATCH] Fitur batasan reschedule --- .../Controllers/pages/BookingController.php | 8 ++++++ ...d_reschedule_columns_to_bookings_table.php | 25 ----------------- ...add_reschedule_count_to_bookings_table.php | 28 +++++++++++++++++++ .../views/pages/booking-history.blade.php | 10 +++---- resources/views/pages/reschedule.blade.php | 1 + 5 files changed, 41 insertions(+), 31 deletions(-) delete mode 100644 database/migrations/2025_05_15_035617_add_reschedule_columns_to_bookings_table.php create mode 100644 database/migrations/2025_05_19_165017_add_reschedule_count_to_bookings_table.php diff --git a/app/Http/Controllers/pages/BookingController.php b/app/Http/Controllers/pages/BookingController.php index 9a27e9a..f37fc6a 100644 --- a/app/Http/Controllers/pages/BookingController.php +++ b/app/Http/Controllers/pages/BookingController.php @@ -494,6 +494,11 @@ public function showReschedule($id) if ($booking->start_time <= now() || $booking->status !== 'paid') { return redirect()->route('booking.history')->with('error', 'Booking ini tidak dapat di-reschedule.'); } + + // Check if booking has reached reschedule limit + if ($booking->reschedule_count >= 1) { + return redirect()->route('booking.history')->with('error', 'Booking ini sudah pernah di-reschedule sebelumnya dan tidak dapat di-reschedule lagi.'); + } // Check if it's within the time limit (at least 1 hour before start) $rescheduleDeadline = Carbon::parse($booking->start_time)->subHour(); @@ -557,6 +562,9 @@ public function processReschedule(Request $request, $id) $booking->end_time = $request->end_time; $booking->table_id = $request->table_id; $booking->save(); + + // Increment reschedule count + $booking->increment('reschedule_count'); return response()->json([ 'success' => true, diff --git a/database/migrations/2025_05_15_035617_add_reschedule_columns_to_bookings_table.php b/database/migrations/2025_05_15_035617_add_reschedule_columns_to_bookings_table.php deleted file mode 100644 index 7f0eb75..0000000 --- a/database/migrations/2025_05_15_035617_add_reschedule_columns_to_bookings_table.php +++ /dev/null @@ -1,25 +0,0 @@ -boolean('has_rescheduled')->default(false); - $table->timestamp('original_start_time')->nullable(); - $table->timestamp('original_end_time')->nullable(); - $table->unsignedBigInteger('original_table_id')->nullable(); - }); - } - - public function down() - { - Schema::table('bookings', function (Blueprint $table) { - $table->dropColumn(['has_rescheduled', 'original_start_time', 'original_end_time', 'original_table_id']); - }); - } -} \ No newline at end of file diff --git a/database/migrations/2025_05_19_165017_add_reschedule_count_to_bookings_table.php b/database/migrations/2025_05_19_165017_add_reschedule_count_to_bookings_table.php new file mode 100644 index 0000000..2604735 --- /dev/null +++ b/database/migrations/2025_05_19_165017_add_reschedule_count_to_bookings_table.php @@ -0,0 +1,28 @@ +integer('reschedule_count')->default(0)->after('status'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('bookings', function (Blueprint $table) { + $table->dropColumn('reschedule_count'); + }); + } +}; \ No newline at end of file diff --git a/resources/views/pages/booking-history.blade.php b/resources/views/pages/booking-history.blade.php index 6cd007f..bc3812c 100644 --- a/resources/views/pages/booking-history.blade.php +++ b/resources/views/pages/booking-history.blade.php @@ -69,12 +69,10 @@ class="px-3 py-1 rounded-full text-sm {{ $booking->start_time > now() ? 'bg-gree Lihat Venue - @if(!$booking->has_rescheduled && \Carbon\Carbon::parse($booking->start_time)->subHour() > now()) - - Reschedule - - @endif + + Reschedule + @endif diff --git a/resources/views/pages/reschedule.blade.php b/resources/views/pages/reschedule.blade.php index fbf8857..2ea8bf3 100644 --- a/resources/views/pages/reschedule.blade.php +++ b/resources/views/pages/reschedule.blade.php @@ -35,6 +35,7 @@

Perhatian

• Reschedule dapat dilakukan selama minimal 1 jam sebelum jadwal booking
+ • Setiap booking hanya dapat di-reschedule maksimal 1 kali
• Durasi booking akan tetap sama ({{ $duration }} jam)
• Setelah reschedule, jadwal lama akan digantikan dengan jadwal baru