Login

Smart M-One Lab System: Catat Kehadiran Guru Lab Secara Digital

Memudahkan pencatatan kehadiran guru lab komputer secara digital, mengurangi beban administrasi, dan memastikan data presensi selalu akurat.

  • hero banner

Sesi Berjalan

Jadwal Pelajaran pada {{ now()->isoFormat('D MMMM Y') }}

@php $now = now(); $currentTime = $now->format('H:i:s'); $currentDay = strtolower($now->isoFormat('dddd')); $jadwalHariIni = App\Models\Jadwal::with(['guru', 'mapel', 'kelas']) ->where('hari', $currentDay) ->where('waktu_selesai', '>', $currentTime) ->orderBy('waktu_mulai') ->get(); $sedangBerlangsung = $jadwalHariIni->filter(function($jadwal) use ($currentTime) { return $currentTime >= $jadwal->waktu_mulai && $currentTime <= $jadwal->waktu_selesai; }); $akanDatang = $jadwalHariIni->filter(function($jadwal) use ($currentTime) { return $currentTime < $jadwal->waktu_mulai; })->take(4); @endphp @if($sedangBerlangsung->isEmpty() && $akanDatang->isEmpty())

Tidak Ada Jadwal Hari Ini

@php $nextDay = \Carbon\Carbon::tomorrow(); $nextDayName = $nextDay->isoFormat('dddd'); $nextDayDate = $nextDay->isoFormat('D MMMM Y'); @endphp @if(App\Models\Jadwal::where('hari', strtolower($nextDayName))->exists()) Jadwal akan dilanjutkan besok ({{ $nextDayDate }}) @else Tidak ada jadwal tersisa untuk minggu ini @endif

@else @if($sedangBerlangsung->isNotEmpty())
    @foreach($sedangBerlangsung as $jadwal)
  • {{ $jadwal->guru->nama }}

    Sedang Berlangsung
    Jam ke-{{ $jadwal->jam_ke }} ({{ \Carbon\Carbon::parse($jadwal->waktu_mulai)->format('H:i') }} - {{ \Carbon\Carbon::parse($jadwal->waktu_selesai)->format('H:i') }})

    {{ $jadwal->mapel->nama_mapel }} - {{ $jadwal->kelas->nama_kelas }}

    @php $startTime = \Carbon\Carbon::parse($jadwal->waktu_mulai); $diff = round($startTime->diffInMinutes(now())); echo "Sudah berjalan $diff menit"; @endphp

  • @endforeach
@endif @if($akanDatang->isNotEmpty())
    @foreach($akanDatang as $jadwal)
  • {{ $jadwal->guru->nama }}

    Jam ke-{{ $jadwal->jam_ke }} ({{ \Carbon\Carbon::parse($jadwal->waktu_mulai)->format('H:i') }} - {{ \Carbon\Carbon::parse($jadwal->waktu_selesai)->format('H:i') }})

    {{ $jadwal->mapel->nama_mapel }} - {{ $jadwal->kelas->nama_kelas }}

    @php $now = now(); $startTime = \Carbon\Carbon::parse($jadwal->waktu_mulai); if ($now > $startTime) { $diff = round($startTime->diffInMinutes($now)); echo "Sudah dimulai $diff menit yang lalu"; } else { echo "Akan dimulai " . $startTime->diffForHumans(); } @endphp

  • @endforeach
@endif @endif

Jadwal

Jadwal Akuntansi

Akuntansi
  • Akuntansi
  • Manajemen Perkantoran
@if(count($jadwalAkuntansi) > 0 || count($jadwalManajemen) > 0) {{-- @foreach($jadwalAkuntansi as $index => $jadwal) @endforeach @foreach($jadwalManajemen as $index => $jadwal) @endforeach --}} @php $dayOrder = ['senin', 'selasa', 'rabu', 'kamis', 'jumat']; $dayPatterns = [ 'senin' => ['1-2', '3-6', '7-10'], 'selasa' => ['2-5', '6-10'], 'rabu' => ['1-5', '6', '7-8', '9-10'], 'kamis' => ['1-5', '6', '7-10'], 'jumat' => ['1-4', '5-9'] ]; function processSchedules($schedules, $dayPatterns) { $dayOrder = ['senin', 'selasa', 'rabu', 'kamis', 'jumat']; $groupedByDay = []; foreach ($schedules as $jadwal) { $day = strtolower($jadwal->hari); if (!isset($groupedByDay[$day])) { $groupedByDay[$day] = []; } $groupedByDay[$day][] = $jadwal; } foreach ($groupedByDay as $day => $daySchedules) { usort($groupedByDay[$day], function($a, $b) { return $a->jam_ke <=> $b->jam_ke; }); } $finalData = []; $counter = 1; foreach ($dayOrder as $day) { if (!isset($groupedByDay[$day])) continue; $jadwalsInDay = $groupedByDay[$day]; $pattern = $dayPatterns[$day] ?? []; $firstBlockInDay = true; foreach ($pattern as $block) { list($startBlock, $endBlock) = array_pad(explode('-', $block), 2, null); $endBlock = $endBlock ?? $startBlock; $blockJadwals = array_filter($jadwalsInDay, function($j) use ($startBlock, $endBlock) { return $j->jam_ke >= $startBlock && $j->jam_ke <= $endBlock; }); if (!empty($blockJadwals)) { $currentBlock = null; $subBlocks = []; foreach ($blockJadwals as $jadwal) { if ($currentBlock === null) { $currentBlock = [ 'start_ke' => $jadwal->jam_ke, 'end_ke' => $jadwal->jam_ke, 'waktu_mulai' => $jadwal->waktu_mulai, 'waktu_selesai' => $jadwal->waktu_selesai, 'instruktur' => $jadwal->guru->nama ?? 'Unknown', 'mapel' => $jadwal->mapel->nama_mapel ?? 'Unknown', 'kelas' => $jadwal->kelas->nama_kelas ?? 'Unknown' ]; } else { if ($jadwal->jam_ke == $currentBlock['end_ke'] + 1 && $jadwal->guru_id == $jadwal->guru_id && $jadwal->mapel_id == $jadwal->mapel_id && $jadwal->kelas_id == $jadwal->kelas_id) { $currentBlock['end_ke'] = $jadwal->jam_ke; $currentBlock['waktu_selesai'] = $jadwal->waktu_selesai; } else { $subBlocks[] = $currentBlock; $currentBlock = [ 'start_ke' => $jadwal->jam_ke, 'end_ke' => $jadwal->jam_ke, 'waktu_mulai' => $jadwal->waktu_mulai, 'waktu_selesai' => $jadwal->waktu_selesai, 'instruktur' => $jadwal->guru->nama ?? 'Unknown', 'mapel' => $jadwal->mapel->nama_mapel ?? 'Unknown', 'kelas' => $jadwal->kelas->nama_kelas ?? 'Unknown' ]; } } } if ($currentBlock !== null) { $subBlocks[] = $currentBlock; } foreach ($subBlocks as $i => $subBlock) { $jamKe = $subBlock['start_ke'] == $subBlock['end_ke'] ? $subBlock['start_ke'] : $subBlock['start_ke'] . '-' . $subBlock['end_ke']; $finalData[] = [ 'no' => $counter, 'hari' => ucfirst($day), 'jam_ke' => $jamKe, 'kelas' => $subBlock['kelas'], 'waktu_mulai' => $subBlock['waktu_mulai'], 'waktu_selesai' => $subBlock['waktu_selesai'], 'instruktur' => $subBlock['instruktur'], 'mapel' => $subBlock['mapel'], 'is_first' => $firstBlockInDay && $i === 0 ]; } $firstBlockInDay = false; } } $counter++; } return $finalData; } $processedAkuntansi = processSchedules($jadwalAkuntansi, $dayPatterns); $processedManajemen = processSchedules($jadwalManajemen, $dayPatterns); function calculateRowspans($data) { $rowspanCounts = []; foreach ($data as $item) { $key = $item['no'] . '|' . $item['hari']; if (!isset($rowspanCounts[$key])) { $rowspanCounts[$key] = 0; } $rowspanCounts[$key]++; } return $rowspanCounts; } $rowspanAkuntansi = calculateRowspans($processedAkuntansi); $rowspanManajemen = calculateRowspans($processedManajemen); @endphp @foreach($processedAkuntansi as $index => $item) @php $key = $item['no'] . '|' . $item['hari']; $rowspan = $rowspanAkuntansi[$key] ?? 1; @endphp @if($item['is_first']) @endif @endforeach @foreach($processedManajemen as $index => $item) @php $key = $item['no'] . '|' . $item['hari']; $rowspan = $rowspanManajemen[$key] ?? 1; @endphp @if($item['is_first']) @endif @endforeach
No Hari Jam Ke- Kelas Jam Instruktur Mapel
Mulai Berakhir
{{ $index + 1 }} {{ ucfirst($jadwal->hari) }} {{ $jadwal->jam_ke }} {{ $jadwal->kelas->nama_kelas }} {{ \Carbon\Carbon::parse($jadwal->waktu_mulai)->format('H:i') }} {{ \Carbon\Carbon::parse($jadwal->waktu_selesai)->format('H:i') }} {{ $jadwal->guru->nama }} {{ $jadwal->mapel->nama_mapel }}
{{ $index + 1 }} {{ ucfirst($jadwal->hari) }} {{ $jadwal->jam_ke }} {{ $jadwal->kelas->nama_kelas }} {{ \Carbon\Carbon::parse($jadwal->waktu_mulai)->format('H:i') }} {{ \Carbon\Carbon::parse($jadwal->waktu_selesai)->format('H:i') }} {{ $jadwal->guru->nama }} {{ $jadwal->mapel->nama_mapel }}
{{ $item['no'] }} {{ $item['hari'] }}{{ $item['jam_ke'] }} {{ $item['kelas'] }} {{ \Carbon\Carbon::parse($item['waktu_mulai'])->format('H:i') }} {{ \Carbon\Carbon::parse($item['waktu_selesai'])->format('H:i') }} {{ $item['instruktur'] }} {{ $item['mapel'] }}
{{ $item['no'] }} {{ $item['hari'] }}{{ $item['jam_ke'] }} {{ $item['kelas'] }} {{ \Carbon\Carbon::parse($item['waktu_mulai'])->format('H:i') }} {{ \Carbon\Carbon::parse($item['waktu_selesai'])->format('H:i') }} {{ $item['instruktur'] }} {{ $item['mapel'] }}
@else

Data Kosong

Tidak ada data yang tersedia untuk saat ini

@endif

Pengecekan Hardware & Software

Jadwal Pengecekan Bulanan Tahun {{ $tahun }}

Semua
  • Semua
  • Hardware
  • Software
Semua Semester
  • Semua Semester
  • Semester 1
  • Semester 2
@if(count($jadwalPerawatan) > 0) @for ($i = 1; $i <= 12; $i++) @for ($j = 1; $j <= 4; $j++) @endfor @endfor @foreach($jadwalPerawatan as $index => $jadwal) @foreach(['januari', 'februari', 'maret', 'april', 'mei', 'juni', 'juli', 'agustus', 'september', 'oktober', 'november', 'desember'] as $bulan) @for ($minggu = 1; $minggu <= 4; $minggu++) @php $mingguField = 'minggu_'.$bulan; $checked = in_array($minggu, $jadwal->$mingguField ?? []) ? 'checked' : ''; @endphp @endfor @endforeach @endforeach
No Jenis Pengecekan Januari
Minggu Ke-
Februari
Minggu Ke-
Maret
Minggu Ke-
April
Minggu Ke-
Mei
Minggu Ke-
Juni
Minggu Ke-
Juli
Minggu Ke-
Agustus
Minggu Ke-
September
Minggu Ke-
Oktober
Minggu Ke-
November
Minggu Ke-
Desember
Minggu Ke-
{{ $j }}
{{ $index + 1 }} {{ $jadwal->jenisPerawatan->nama }}
@else

Data Kosong

Tidak ada data yang tersedia untuk saat ini

@endif
about banner

Mengapa Memilih Kami?

Solusi presensi digital yang dirancang khusus untuk lingkungan pendidikan.

  • Aplikasi kami memahami kebutuhan unik lab komputer dengan integrasi jadwal praktikum, deteksi lokasi GPS lab, dan mode offline untuk area dengan jaringan terbatas.

  • Sistem kami secara otomatis menghasilkan laporan harian/bulanan dalam format Excel dan PDF, mengurangi beban administrasi sekolah hingga 70%.

  • Tim support kami yang berdedikasi siap membantu via WhatsApp, email, atau telepon, bahkan di luar jam sekolah.

guide banner

Panduan Penggunaan

Sistem Presensi Digital yang Mudah Digunakan.

Berikut panduan singkat untuk memaksimalkan penggunaan aplikasi absensi GuruLab di lab komputer sekolah Anda.

  • Guru dapat melakukan rekap kehadiran mengajar disetiap jadwalnya.
  • Siswa dapat melakukan rekap kehadiran pengajar disetiap jadwalnya.
  • Guru dapat melihat hasil rekapan selama mengajar.
  • Siswa dapat melihat hasil rekapan selama diajar.
  • {{ $totalPengguna }} Pengguna

  • {{ $totalJadwal }} Jadwal

  • {{ $totalMapel }} Mata Pelajaran

  • {{ $totalKelas }} Kelas

Mulai Gunakan Sistem Presensi Digital untuk Lab Komputer Anda.

Hubungi Admin