diff --git a/.claude/settings.local.json b/.claude/settings.local.json
index e200da5..f225c26 100644
--- a/.claude/settings.local.json
+++ b/.claude/settings.local.json
@@ -14,7 +14,8 @@
"Bash(git checkout:*)",
"Bash(git reset:*)",
"Bash(php -l app/Http/Controllers/Admin/ParkingLotController.php)",
- "Bash(php -l app/Http/Requests/StoreParkingLotRequest.php)"
+ "Bash(php -l app/Http/Requests/StoreParkingLotRequest.php)",
+ "Bash(php -l app/Http/Controllers/Admin/BookingController.php)"
]
}
}
diff --git a/app/Http/Controllers/Admin/ParkingLotController.php b/app/Http/Controllers/Admin/ParkingLotController.php
index 9723dab..6fb4a75 100644
--- a/app/Http/Controllers/Admin/ParkingLotController.php
+++ b/app/Http/Controllers/Admin/ParkingLotController.php
@@ -68,6 +68,29 @@ class ParkingLotController extends Controller
]);
}
+ public function destroy(ParkingLot $parkingLot): JsonResponse
+ {
+ // Block deletion if there are active bookings
+ $activeCount = $parkingLot->bookings()->where('status', 'active')->count();
+ if ($activeCount > 0) {
+ return response()->json([
+ 'success' => false,
+ 'message' => "لا يمكن الحذف — يوجد {$activeCount} حجز نشط في هذا الموقف",
+ ], 422);
+ }
+
+ if ($parkingLot->image) {
+ Storage::disk('public')->delete($parkingLot->image);
+ }
+
+ $parkingLot->delete();
+
+ return response()->json([
+ 'success' => true,
+ 'message' => 'تم حذف الموقف بنجاح',
+ ]);
+ }
+
public function toggleStatus(ParkingLot $parkingLot): JsonResponse
{
$parkingLot->update(['is_active' => !$parkingLot->is_active]);
diff --git a/resources/views/admin/parking-lots/index.blade.php b/resources/views/admin/parking-lots/index.blade.php
index f1f1270..f5d4ef3 100644
--- a/resources/views/admin/parking-lots/index.blade.php
+++ b/resources/views/admin/parking-lots/index.blade.php
@@ -143,6 +143,12 @@
title="{{ $lot->is_active ? 'تعطيل' : 'تفعيل' }}">
+
@@ -490,6 +496,28 @@ function doSearch() {
const t = document.getElementById('searchInput').value;
window.location.href = `/admin/parking-lots?search=${encodeURIComponent(t)}`;
}
+
+async function deleteLot(id, name) {
+ if (!confirm(`حذف الموقف "${name}"؟\nسيتم حذف جميع بيانات الموقف نهائياً.`)) return;
+
+ try {
+ const res = await fetch(`/admin/parking-lots/${id}`, {
+ method: 'DELETE',
+ headers: {
+ 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
+ 'Accept': 'application/json',
+ }
+ });
+ const data = await res.json();
+ if (data.success) {
+ location.reload();
+ } else {
+ alert(data.message || 'تعذّر الحذف');
+ }
+ } catch {
+ alert('خطأ في الاتصال');
+ }
+}
@endpush
diff --git a/routes/web.php b/routes/web.php
index 20410e7..e9f17cd 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -29,6 +29,7 @@ Route::prefix('admin')->middleware('admin')->name('admin.')->group(function () {
Route::post('/parking-lots', [\App\Http\Controllers\Admin\ParkingLotController::class, 'store'])->name('parking-lots.store');
Route::put('/parking-lots/{parkingLot}', [\App\Http\Controllers\Admin\ParkingLotController::class, 'update'])->name('parking-lots.update');
Route::post('/parking-lots/{parkingLot}/toggle', [\App\Http\Controllers\Admin\ParkingLotController::class, 'toggleStatus'])->name('parking-lots.toggle');
+ Route::delete('/parking-lots/{parkingLot}', [\App\Http\Controllers\Admin\ParkingLotController::class, 'destroy'])->name('parking-lots.destroy');
// Active Bookings
Route::get('/bookings/active', [\App\Http\Controllers\Admin\BookingController::class, 'activeIndex'])->name('bookings.active');