# 📍 Dokumentasi Fitur GPS Absensi Guru

## Overview
Sistem absensi guru sekarang dilengkapi dengan validasi GPS yang memastikan guru hanya dapat melakukan absensi ketika berada di area sekolah.

---

## 🎯 Fitur Utama

### 1. **Validasi Lokasi Real-time**
- System otomatis mendeteksi lokasi GPS pengguna
- Menghitung jarak dari lokasi sekolah menggunakan Haversine Formula
- Memvalidasi apakah guru berada dalam radius yang diizinkan

### 2. **Radius Validasi Dinamis**
- Radius dapat dikonfigurasi melalui halaman Pengaturan
- Default: 100 meter dari titik koordinat sekolah
- Admin dapat mengubah sesuai kebutuhan sekolah

### 3. **Feedback Jelas untuk User**
- Menampilkan jarak aktual dari sekolah
- Error message yang informatif jika diluar radius
- Disable tombol capture jika tidak valid

---

## 🔧 Konfigurasi

### Pengaturan Koordinat Sekolah

**Via Database (Tabel: `pengaturans`):**
```sql
UPDATE pengaturans SET 
    latitude = -5.30134,    -- Koordinat sekolah Anda
    longitude = 122.29880,  -- Koordinat sekolah Anda
    radius = 100            -- Radius dalam meter
WHERE id = 1;
```

**Via Halaman Admin:**
1. Login sebagai Admin
2. Buka menu **Pengaturan**
3. Scroll ke bagian **Pengaturan Absensi**
4. Isi:
   - **Latitude**: Koordinat lintang sekolah (contoh: -5.30134)
   - **Longitude**: Koordinat bujur sekolah (contoh: 122.29880)
   - **Radius**: Jarak maksimal dalam meter (contoh: 100)
5. Klik **Simpan**

### Cara Mendapatkan Koordinat Sekolah

**Metode 1: Google Maps**
1. Buka https://maps.google.com
2. Cari lokasi sekolah
3. Klik kanan pada titik lokasi sekolah
4. Pilih koordinat yang muncul (format: -5.30134, 122.29880)
5. Copy dan paste ke pengaturan

**Metode 2: GPS Smartphone**
1. Buka aplikasi GPS/Maps di smartphone
2. Berdiri di lokasi sekolah yang diinginkan
3. Lihat koordinat yang ditampilkan
4. Catat dan masukkan ke pengaturan

---

## 💻 Implementasi Teknis

### Backend (Controller)

**File:** `app/Http/Controllers/Simaju/AbsensiGuruController.php`

**Perubahan Utama:**

1. **Method `create()`** - Mengirim koordinat sekolah ke view
2. **Method `apiCheckIn()`** - Validasi GPS untuk absen masuk
3. **Method `apiCheckOut()`** - Validasi GPS untuk absen pulang
4. **Method `calculateDistance()`** - Menghitung jarak dengan Haversine Formula

### Frontend (View)

**File:** `resources/views/simaju/absensi-guru/create.blade.php`

**Perubahan Utama:**

1. Variabel GPS untuk tracking validasi
2. Function `calculateDistance()` - Haversine di JavaScript
3. Function `getLocation()` - Validasi GPS dengan feedback
4. Function `capturePhoto()` - Cek validasi sebelum capture

---

**Dokumentasi dibuat:** 7 Agustus 2026  
**Versi:** 1.0  
**Status:** ✅ Implemented & Tested
