@extends('layouts.app') @section('title', 'Dashboard') @section('content') @php $filterDate = request('date', \Carbon\Carbon::now('Asia/Jakarta')->toDateString()); $filterCarbon = \Carbon\Carbon::parse($filterDate); $today = \Carbon\Carbon::now('Asia/Jakarta')->toDateString(); $isToday = $filterDate === $today; $dayLabels = ['Hari ini','Besok','2 Hari lagi','3 Hari lagi']; @endphp @push('styles') @endpush
{{-- NAVBAR --}} {{-- STATUS BAR --}}
๐Ÿ“… Filter: @for($i=0;$i<=3;$i++) @php $d=\Carbon\Carbon::now('Asia/Jakarta')->addDays($i)->toDateString(); @endphp {{ $dayLabels[$i] }} @endfor
@if($isToday)
{{ $available }} Tersedia
{{ $occupied }} Terpakai
{{ $upcoming }} Segera Mulai
{{ $pendingCount }} Pending
@else
Jadwal {{ $filterCarbon->format('d M Y') }}
@endif
Perbarui otomatis 60 detik  ยท  {{ \Carbon\Carbon::now('Asia/Jakarta')->format('d M Y') }}
{{-- GRID --}}
@foreach($rooms as $room) @php $nowTime = \Carbon\Carbon::now('Asia/Jakarta')->format('H:i'); $schedule = $room->requests()->where('status','approved')->where('date',$filterDate)->orderBy('start_time')->get(); if($isToday){ $status = $room->status; $current = $room->currentSession; $upcomings = $room->upcomingSessions; } else { $status = $schedule->isNotEmpty() ? 'upcoming' : 'available'; $current = null; $upcomings = $schedule; } $freeAfter = $schedule->last() ? substr($schedule->last()->end_time,0,5) : null; // Hanya jadwal yang BELUM selesai $activeSched = $isToday ? $schedule->filter(fn($s)=>substr($s->end_time,0,5)>$nowTime)->values() : $schedule->values(); @endphp
{{-- FOTO --}}
{{ $room->name }}
{{ $room->name }}
{{ $status==='occupied'?'Sedang Dipakai':($status==='upcoming'?'Ada Jadwal':'Tersedia') }}
{{-- INFO SESI --}}
@if($isToday && $status==='occupied' && $current) @php $sMin=(int)substr($current->start_time,0,2)*60+(int)substr($current->start_time,3,2); $eMin=(int)substr($current->end_time,0,2)*60+(int)substr($current->end_time,3,2); $nMin=\Carbon\Carbon::now('Asia/Jakarta')->hour*60+\Carbon\Carbon::now('Asia/Jakarta')->minute; $pct=min(100,max(0,round(($nMin-$sMin)/($eMin-$sMin)*100))); $sisaMenit=max(0,$eMin-$nMin); $nextAfter=$upcomings->isNotEmpty()?substr($upcomings->last()->end_time,0,5):substr($current->end_time,0,5); @endphp
Sedang Digunakan Free {{ $nextAfter }}
{{ $current->requester_name }}
@if($current->department)
{{ $current->department }}
@endif
Keperluan
{{ $current->purpose ?: '-' }}
โฐ {{ substr($current->start_time,0,5) }} โ€“ {{ substr($current->end_time,0,5) }} sisa {{ $sisaMenit }} menit
Mulai {{ substr($current->start_time,0,5) }} {{ $pct }}% selesai Selesai {{ substr($current->end_time,0,5) }}
@elseif($activeSched->isNotEmpty()) @php $next=$activeSched->first(); @endphp
โ— {{ $isToday?'Jadwal Berikutnya':'Jadwal '.$filterCarbon->format('d M') }} @if($freeAfter)Free {{ $freeAfter }}@endif
{{ $next->requester_name }}
@if($next->department)
{{ $next->department }}
@endif
Keperluan
{{ $next->purpose ?: '-' }}
โฐ {{ substr($next->start_time,0,5) }} โ€“ {{ substr($next->end_time,0,5) }}
@else
โœ“
Ruangan Tersedia
Tidak ada jadwal {{ $isToday?'hari ini':$filterCarbon->format('d M') }}
@endif
{{-- JADWAL LIST (hanya yang belum selesai) --}}
Jadwal {{ $isToday?'Hari Ini':$filterCarbon->format('d M Y') }} @if($activeSched->count()>0) {{ $activeSched->count() }} @endif
@if($activeSched->count()>0)
Nama ยท Dept
Keperluan
Jam
@foreach($activeSched as $i=>$sched) @php $isNow=$isToday && substr($sched->start_time,0,5)<=$nowTime && $nowTimeend_time,0,5); $border=$i<$activeSched->count()-1?'border-bottom:1px solid #f3f4f6;':''; @endphp
{{ $sched->requester_name }}
@if($sched->department)
{{ $sched->department }}
@endif
{{ Str::limit($sched->purpose,28) }}
{{ substr($sched->start_time,0,5) }}โ€“{{ substr($sched->end_time,0,5) }}
@if($isNow) AKTIF @else BERIKUTNYA @endif
@endforeach
@else
๐Ÿ“ญ
Belum ada jadwal {{ $isToday?'hari ini':$filterCarbon->format('d M Y') }}
@endif
@endforeach
{{-- end dash-outer --}} {{-- MOBILE BOTTOM NAV --}} {{-- MODAL: Kode Akses --}} @push('scripts') @endpush @endsection