Untitled

mail@pastecode.io avatar
unknown
plain_text
2 months ago
3.3 kB
0
Indexable
Never
//controller booking
<?php

namespace App\Http\Controllers\api;

use App\Http\Controllers\Controller; // Impor Controller
use App\Models\Booking; // Impor model yang digunakan
use App\Models\Fasilitas;
use Illuminate\Http\Request;
use Carbon\Carbon;

class BookingController extends Controller
{
    
    
    public function index($id, $date) {
        // Pastikan format tanggal sebelum menggunakannya
        if (!Carbon::hasFormat($date, 'Y-m-d')) {
            abort(400, 'Format tanggal tidak valid'); // Respons error jika format tidak sesuai
        }
    
        // Coba konversi parameter `date` ke objek `Carbon`
        $tanggalSekarang1 = Carbon::parse($date)->startOfDay(); // Awal hari
        $tanggalSekarang = $tanggalSekarang1->format('d-m-Y'); // Format tanggal
        try {
        } catch (\Exception $e) {
            abort(400, 'Tanggal tidak valid'); // Tangani kesalahan parsing
        }
    
        // Cari fasilitas berdasarkan ID
        $fasilitasItem = Fasilitas::find($id);
    
        if (!$fasilitasItem) {
            abort(404, 'Fasilitas tidak ditemukan'); // Jika fasilitas tidak ditemukan
        }
    
        // Dapatkan minggu depan berdasarkan `tanggalSekarang1`
        $mingguDepan = $tanggalSekarang1->copy()->addDay(6)->endOfDay(); // Akhir hari minggu depan
    
        // Ambil pemesanan berdasarkan ID fasilitas dan rentang tanggal
        $bookings = Booking::where('id_fasiliti', $id)
                            ->whereBetween('tgl_booking', [$tanggalSekarang1, $mingguDepan])
                            ->get(); // Kumpulkan hasil
    
        // dd($bookings, $tanggalSekarang1, $mingguDepan);

        // Atur pemesanan berdasarkan hari dalam seminggu
        $bookingsByDay = [];
        foreach ($bookings as $booking) {
            // Mendapatkan nama hari dalam seminggu
            $hari = Carbon::parse($booking->tgl_booking)->isoFormat('dddd'); 
            
            if (!isset($bookingsByDay[$hari])) {
                $bookingsByDay[$hari] = []; // Siapkan array kosong jika belum ada
            }
            
            $bookingsByDay[$hari][] = $booking; // Tambahkan pemesanan ke hari yang sesuai
        }
    
        // Buat daftar semua hari dalam minggu, mulai dari tanggal saat ini
        $allDays = [];
        for ($i = 0; $i < 7; $i++) {
            $tanggal = $tanggalSekarang1->copy()->addDays($i); // Tambahkan `i` hari
            $hari = $tanggal->isoFormat('dddd'); // Nama hari
            $tanggalFormatted = $tanggal->isoFormat('D'); // Hanya tanggal tanpa bulan/tahun
            
            $allDays[] = "{$hari} {$tanggalFormatted}"; // Tambahkan ke daftar hari
        }
    
        // Pastikan `bookingsByDay` memiliki entri untuk setiap hari dalam minggu
        foreach ($allDays as $day) {
            $namaHari = explode(' ', $day)[0]; // Dapatkan nama hari
            
            if (!isset($bookingsByDay[$namaHari])) {
                $bookingsByDay[$namaHari] = []; // Siapkan array kosong jika tidak ada pemesanan
            }
        }

        
        // Kembalikan data ke tampilan `booking.index`
        return view('booking.index', compact('bookings', 'fasilitasItem', 'tanggalSekarang', 'allDays', 'bookingsByDay'));

    }
    

}
Leave a Comment