diff --git a/app/Http/Controllers/BookingController.php b/app/Http/Controllers/BookingController.php index 45fa8eb..75edac0 100644 --- a/app/Http/Controllers/BookingController.php +++ b/app/Http/Controllers/BookingController.php @@ -17,12 +17,12 @@ public function index(Request $request) { $query = Booking::query(); - // Filter pencarian berdasarkan status_booking - if ($request->has('search') && !empty($request->search)) { - $query->where('status_booking', 'like', '%' . $request->search . '%'); - } + // Filter pencarian berdasarkan bulan dari tanggal_booking + if ($request->has('search') && !empty($request->search)) { + $query->whereMonth('tanggal_checkout', $request->search); + } - $bookings = $query->orderBy('tanggal_booking', 'desc')->paginate(10); + $bookings = $query->orderBy('tanggal_checkout', 'desc')->paginate(10); return view('admin.booking', compact('bookings')); } @@ -220,4 +220,25 @@ public function approvePerpanjangan($id) return redirect()->route('admin.booking')->with('success', 'Perpanjangan berhasil dikonfirmasi.'); } + +public function markAsCompleted($id_booking) +{ + $booking = Booking::findOrFail($id_booking); + + // Pastikan hanya booking yang dikonfirmasi bisa selesai + if ($booking->status_booking === 'Dikonfirmasi') { + $booking->update(['status_booking' => 'Selesai']); + + // Update status kamar menjadi tersedia + $room = $booking->room; + if ($room) { + $room->update(['status' => 'tersedia']); + } + + return redirect()->route('admin.booking')->with('success', 'Booking telah diselesaikan.'); + } + + return redirect()->route('admin.booking')->with('error', 'Booking belum dikonfirmasi.'); +} + } diff --git a/app/Http/Controllers/DashboardAdminController.php b/app/Http/Controllers/DashboardAdminController.php index 975f442..308ab2e 100644 --- a/app/Http/Controllers/DashboardAdminController.php +++ b/app/Http/Controllers/DashboardAdminController.php @@ -6,19 +6,43 @@ use App\Models\User; use App\Models\Room; use App\Models\Booking; +use Carbon\Carbon; class DashboardAdminController extends Controller { public function index() - { - // Mengambil data dari database - $totalUsers = User::count(); - $totalRooms = Room::count(); - $totalBookings = Booking::count(); - $pendingBookings = Booking::where('status_booking', 'pending')->with('user', 'room')->get(); +{ + $totalUsers = User::count(); + $totalRooms = Room::count(); + $totalBookings = Booking::count(); - // Mengirim data ke view - return view('admin.dashboard', compact('totalUsers', 'totalRooms', 'totalBookings', 'pendingBookings')); + // Ambil semua booking yang sudah dikonfirmasi + $confirmedBookings = Booking::with('user', 'room') + ->where('status_booking', 'Dikonfirmasi') + ->get(); + + // Buat array untuk simpan sisa hari per booking + $daysLeftPerBooking = []; + + foreach ($confirmedBookings as $booking) { + if ($booking->tanggal_checkout) { + $daysLeftPerBooking[$booking->id_booking] = now()->diffInDays(Carbon::parse($booking->tanggal_checkout), false); + } else { + $daysLeftPerBooking[$booking->id_booking] = null; + } } - + + // Ambil booking pending untuk ditampilkan di tabel + $pendingBookings = Booking::where('status_booking', 'pending')->with('user', 'room')->get(); + + return view('admin.dashboard', compact( + 'totalUsers', + 'totalRooms', + 'totalBookings', + 'pendingBookings', + 'confirmedBookings', + 'daysLeftPerBooking' + )); +} + } diff --git a/app/Http/Controllers/DashboardPemilikController.php b/app/Http/Controllers/DashboardPemilikController.php index b5aa80e..e075fa9 100644 --- a/app/Http/Controllers/DashboardPemilikController.php +++ b/app/Http/Controllers/DashboardPemilikController.php @@ -57,7 +57,14 @@ public function index(Request $request) return $p - $q; }, $pemasukan, $pengeluaran); - // Kirim data ke view + // Ambil data status kamar (tersedia, terisi, maintenance) + $data_kamar = [ + 'Terisi' => Room::where('status', 'terisi')->count(), + 'Kosong' => Room::where('status', 'tersedia')->count(), + 'Rusak' => Room::where('status', 'maintenance')->count(), + ]; + + // Kirim semua data ke view return view('pemilik.dashboard', compact( 'totalUsers', 'totalRooms', @@ -70,7 +77,8 @@ public function index(Request $request) 'pengeluaran', 'keuntungan', 'tahunList', - 'tahunTerpilih' + 'tahunTerpilih', + 'data_kamar' )); } } diff --git a/app/Http/Controllers/ExpenseController.php b/app/Http/Controllers/ExpenseController.php index d6c347b..d99e085 100644 --- a/app/Http/Controllers/ExpenseController.php +++ b/app/Http/Controllers/ExpenseController.php @@ -41,20 +41,26 @@ public function create() * Menyimpan data pengeluaran baru ke database. */ public function store(Request $request) - { - $request->validate([ - 'keterangan' => 'required|string|max:255', - 'jumlah_pengeluaran' => 'required|numeric|min:0', - 'tanggal_pengeluaran'=> 'required|date', - ]); +{ + $request->validate([ + 'keterangan' => 'required|string|max:255', + 'jumlah_pengeluaran' => 'required', + 'tanggal_pengeluaran'=> 'required|date', + ]); - Expense::create($request->only(['keterangan', 'jumlah_pengeluaran', 'tanggal_pengeluaran'])); + // Hilangkan titik/koma agar jumlah valid + $jumlah = str_replace(['.', ','], '', $request->jumlah_pengeluaran); - // Update data keuangan - $this->updateFinance(); + Expense::create([ + 'keterangan' => $request->keterangan, + 'jumlah_pengeluaran' => $jumlah, + 'tanggal_pengeluaran' => $request->tanggal_pengeluaran, + ]); - return redirect()->route('admin.expense')->with('success', 'Pengeluaran berhasil ditambahkan.'); - } + $this->updateFinance(); + + return redirect()->route('admin.expense')->with('success', 'Pengeluaran berhasil ditambahkan.'); +} /** * Menampilkan form untuk mengedit pengeluaran. @@ -69,21 +75,28 @@ public function edit($id_pengeluaran) * Memperbarui data pengeluaran di database. */ public function update(Request $request, $id_pengeluaran) - { - $request->validate([ - 'keterangan' => 'required|string|max:255', - 'jumlah_pengeluaran' => 'required|numeric|min:0', - 'tanggal_pengeluaran'=> 'required|date', - ]); +{ + $request->validate([ + 'keterangan' => 'required|string|max:255', + 'jumlah_pengeluaran' => 'required', + 'tanggal_pengeluaran'=> 'required|date', + ]); - $pengeluaran = Expense::findOrFail($id_pengeluaran); - $pengeluaran->update($request->only(['keterangan', 'jumlah_pengeluaran', 'tanggal_pengeluaran'])); + $pengeluaran = Expense::findOrFail($id_pengeluaran); - // Update data keuangan - $this->updateFinance(); + // Hilangkan titik/koma dari input user + $jumlah = str_replace(['.', ','], '', $request->jumlah_pengeluaran); - return redirect()->route('admin.expense')->with('success', 'Pengeluaran berhasil diperbarui.'); - } + $pengeluaran->update([ + 'keterangan' => $request->keterangan, + 'jumlah_pengeluaran' => $jumlah, + 'tanggal_pengeluaran' => $request->tanggal_pengeluaran, + ]); + + $this->updateFinance(); + + return redirect()->route('admin.expense')->with('success', 'Pengeluaran berhasil diperbarui.'); +} /** * Menghapus data pengeluaran dari database. @@ -104,16 +117,32 @@ public function destroy($id_pengeluaran) */ private function updateFinance() { + $tanggalHariIni = now()->format('Y-m-d'); + $totalPemasukan = Transaksi::sum('jumlah_pembayaran'); $totalPengeluaran = Expense::sum('jumlah_pengeluaran'); $totalKeuntungan = $totalPemasukan - $totalPengeluaran; - - Finance::create([ - 'tanggal' => now()->format('Y-m-d'), - 'pemasukan' => $totalPemasukan, - 'pengeluaran' => $totalPengeluaran, - 'keuntungan' => $totalKeuntungan, - 'keterangan' => 'Update otomatis dari data pengeluaran' - ]); + + // Cek apakah sudah ada data finance untuk hari ini + $finance = Finance::where('tanggal', $tanggalHariIni)->first(); + + if ($finance) { + // Update data yang sudah ada + $finance->update([ + 'pemasukan' => $totalPemasukan, + 'pengeluaran' => $totalPengeluaran, + 'keuntungan' => $totalKeuntungan, + 'keterangan' => 'Update otomatis dari data pengeluaran' + ]); + } else { + // Buat data baru + Finance::create([ + 'tanggal' => $tanggalHariIni, + 'pemasukan' => $totalPemasukan, + 'pengeluaran' => $totalPengeluaran, + 'keuntungan' => $totalKeuntungan, + 'keterangan' => 'Update otomatis dari data pengeluaran' + ]); + } } -} +} diff --git a/app/Http/Controllers/KamarController.php b/app/Http/Controllers/KamarController.php index 1e8122b..9ec36b6 100644 --- a/app/Http/Controllers/KamarController.php +++ b/app/Http/Controllers/KamarController.php @@ -1,18 +1,30 @@ -id())->orderBy('tanggal_booking', 'desc')->first(); + $booking = Booking::where('id_user', auth()->id()) + ->orderBy('tanggal_booking', 'desc') + ->first(); + $rooms = Room::all(); - return view('users.peta', compact('booking', 'rooms')); + + $daysLeft = null; + + if ($booking && $booking->status_booking === 'Dikonfirmasi' && $booking->tanggal_checkout) { + $today = Carbon::now(); + $checkoutDate = Carbon::parse($booking->tanggal_checkout); + $daysLeft = $today->diffInDays($checkoutDate, false); + } + + return view('users.peta', compact('booking', 'rooms', 'daysLeft')); } - } diff --git a/app/Http/Controllers/KeuanganController.php b/app/Http/Controllers/KeuanganController.php index 85461b9..4a78ee3 100644 --- a/app/Http/Controllers/KeuanganController.php +++ b/app/Http/Controllers/KeuanganController.php @@ -36,7 +36,15 @@ public function index(Request $request) $row->bulan = $months[$row->bulan] ?? $row->bulan; } - return view('admin.keuangan', compact('filteredLaporan', 'years', 'months')); + // Hitung total pemasukan, pengeluaran, dan keuntungan bersih + $totalPemasukan = $filteredLaporan->sum('total_pemasukan'); + $totalPengeluaran = $filteredLaporan->sum('total_pengeluaran'); + $totalKeuntungan = $filteredLaporan->sum('keuntungan_bersih'); + + // Kirim ke view + return view('admin.keuangan', compact( + 'filteredLaporan', 'years', 'months', + 'totalPemasukan', 'totalPengeluaran', 'totalKeuntungan' + )); } } - diff --git a/public/assets/users/1746684524_kamar.jpg b/public/assets/users/1746684524_kamar.jpg deleted file mode 100644 index 9b5854b..0000000 Binary files a/public/assets/users/1746684524_kamar.jpg and /dev/null differ diff --git a/public/assets/users/1746798080_pembayaran.jpg b/public/assets/users/1747925367_pembayaran.jpg similarity index 100% rename from public/assets/users/1746798080_pembayaran.jpg rename to public/assets/users/1747925367_pembayaran.jpg diff --git a/public/assets/users/1746901541_pembayaran.jpg b/public/assets/users/1747925679_pembayaran.jpg similarity index 100% rename from public/assets/users/1746901541_pembayaran.jpg rename to public/assets/users/1747925679_pembayaran.jpg diff --git a/resources/views/Admin/booking.blade.php b/resources/views/Admin/booking.blade.php index 7d69e76..eeffed4 100644 --- a/resources/views/Admin/booking.blade.php +++ b/resources/views/Admin/booking.blade.php @@ -49,22 +49,12 @@ onclick="return confirm('Apakah Anda yakin ingin menghapus booking ini?');"> - - {{-- - @if($booking->status_booking == 'Pending') -
+ + @if ($booking->status_booking === 'Dikonfirmasi') + + Tandai Selesai + @endif - - - @if($booking->status_booking == 'Dikonfirmasi') - - @endif --}} @endforeach diff --git a/resources/views/Admin/createexpense.blade.php b/resources/views/Admin/createexpense.blade.php index 86b3204..2bc4142 100644 --- a/resources/views/Admin/createexpense.blade.php +++ b/resources/views/Admin/createexpense.blade.php @@ -19,8 +19,8 @@Customer: {{ $booking->user->name }}
+Booking Kamar: {{ $booking->room->room_type }}
+ @php + $daysLeft = $daysLeftPerBooking[$booking->id_booking] ?? null; + @endphp + + @if(!is_null($daysLeft)) + @if($daysLeft > 0) +Total Customer
+Total Kamar
+Total Booking
Total Customer
Total Kamar
Total Booking
{!! nl2br(e($room->deskripsi)) !!}
-