# Fitur Lokasi ULD (Unit Layanan Disabilitas)

## Deskripsi
Fitur ini memungkinkan sekolah untuk mengelola data lokasi Unit Layanan Disabilitas (ULD) yang dimiliki. Setiap sekolah dapat memiliki beberapa ULD dengan lokasi yang berbeda.

## Tanggal Implementasi
4 Februari 2026

## Komponen yang Ditambahkan

### 1. Database Migration
**File:** `database/migrations/2026_02_04_000001_create_uld_locations_table.php`

Membuat tabel `uld_locations` dengan struktur:
- `id` - Primary key
- `school_id` - Foreign key ke tabel schools
- `name` - Nama ULD
- `address` - Alamat lengkap ULD
- `kecamatan` - Kecamatan lokasi ULD
- `timestamps` - Created at & Updated at

### 2. Model
**File:** `app/Models/UldLocation.php`

Model Eloquent untuk mengelola data lokasi ULD dengan relationship ke School.

### 3. Controller Update
**File:** `app/Http/Controllers/AdminSekolah/ProfilController.php`

Perubahan:
- Menambahkan import `UldLocation` model
- Update method `index()` untuk mengirim data `$uldLocations` ke view
- Update method `update()` untuk:
  - Validasi input array `uld_locations` 
  - Menghapus lokasi ULD yang lama
  - Menyimpan lokasi ULD yang baru sesuai dengan jumlah yang diinput

### 4. View Update
**File:** `resources/views/admin-sekolah/profil.blade.php`

Perubahan:
- Menambahkan container untuk form dinamis lokasi ULD
- Menambahkan card sidebar untuk menampilkan daftar lokasi ULD
- Menambahkan JavaScript untuk:
  - Generate form secara dinamis berdasarkan jumlah ULD
  - Load data existing saat edit
  - Handle show/hide form saat checkbox ULD diubah

## Cara Penggunaan

### Untuk Admin Sekolah:

1. **Login** ke sistem sebagai admin sekolah
2. Akses menu **Profil Sekolah** (http://127.0.0.1:8000/admin-sekolah/profil)
3. Di bagian **Unit Layanan Disabilitas (ULD)**:
   - Centang checkbox "Sekolah memiliki Unit Layanan Disabilitas (ULD)"
   - Input **Jumlah ULD Aktif** (misal: 3)
4. Form lokasi ULD akan muncul secara otomatis sesuai jumlah yang diinput
5. Untuk setiap ULD, isi:
   - **Nama ULD** - Contoh: "ULD Gedung A"
   - **Alamat ULD** - Alamat lengkap lokasi ULD
   - **Kecamatan** - Kecamatan tempat ULD berada
6. Klik **Simpan Perubahan**

### Contoh Pengisian:

**Jumlah ULD:** 3

**ULD 1:**
- Nama: ULD Gedung A
- Alamat: Jl. Sudirman No. 123, Lantai 2 Gedung A
- Kecamatan: Mergangsan

**ULD 2:**
- Nama: ULD Gedung B
- Alamat: Jl. Sudirman No. 123, Lantai 1 Gedung B
- Kecamatan: Mergangsan

**ULD 3:**
- Nama: ULD Ruang Inklusi
- Alamat: Jl. Sudirman No. 125 (Gedung Terpisah)
- Kecamatan: Mergangsan

## Fitur Teknis

### Dynamic Form Generation
- Form lokasi ULD di-generate secara dinamis menggunakan JavaScript
- Jumlah form menyesuaikan dengan nilai input "Jumlah ULD Aktif"
- Support untuk load existing data saat edit

### Validasi
- Field nama, alamat, dan kecamatan adalah **required** jika form ULD ditampilkan
- Array validation untuk memastikan data yang masuk sesuai format

### Data Persistence
- Saat update, semua data lokasi ULD yang lama dihapus
- Data baru disimpan sesuai dengan input terbaru
- Jika checkbox ULD di-uncheck, semua data lokasi ULD dihapus

### Profile Locking
- Setelah data profil di-save, profil akan terkunci
- Data ULD juga ikut terkunci dan tidak bisa diubah
- Untuk membuka kunci, hubungi Admin Dinas

## Database Relationship

```
schools (1) ----< (many) uld_locations
```

Satu sekolah dapat memiliki banyak lokasi ULD.

## API/Method yang Tersedia

### Dari Model School:
```php
$school->uldLocations // Mendapatkan semua lokasi ULD
$school->uldLocations()->create([...]) // Menambah lokasi ULD baru
$school->uldLocations()->delete() // Menghapus semua lokasi ULD
```

### Dari Model UldLocation:
```php
$uldLocation->school // Mendapatkan data sekolah
```

## Testing

Untuk testing manual:
1. Akses halaman profil sekolah
2. Aktifkan ULD dan masukkan jumlah (misal 2)
3. Isi form yang muncul
4. Save dan cek apakah data tersimpan
5. Reload halaman, pastikan data muncul kembali
6. Ubah jumlah ULD (misal jadi 3), pastikan form bertambah
7. Save lagi dan verifikasi data tersimpan dengan benar

## Catatan Penting

- Field `uld_count` di tabel `schools` tetap ada untuk menyimpan jumlah ULD
- Data lokasi detail disimpan di tabel `uld_locations` terpisah
- Implementasi ini **tidak mengurangi fitur sebelumnya**, semua fitur profil sekolah yang sudah ada tetap berfungsi
- Data ULD bersifat **cascade delete** - jika sekolah dihapus, semua lokasi ULD juga ikut terhapus

## Troubleshooting

**Form tidak muncul:**
- Pastikan checkbox ULD sudah dicentang
- Pastikan nilai jumlah ULD > 0
- Cek console browser untuk error JavaScript

**Data tidak tersimpan:**
- Cek validasi field (semua field wajib diisi)
- Pastikan profil belum terkunci
- Cek Laravel log di `storage/logs/laravel.log`

**Migration error:**
- Pastikan tabel `schools` sudah ada
- Jalankan `php artisan migrate:fresh` (HATI-HATI: akan hapus semua data)
- Atau jalankan `php artisan migrate:rollback` lalu `php artisan migrate` lagi

---

## Update: Fitur Detail Sekolah untuk Admin Dinas

### Tanggal Update: 4 Februari 2026

Admin Dinas kini dapat melihat detail lengkap sekolah termasuk data ULD melalui halaman detail sekolah.

### Komponen yang Ditambahkan:

#### 1. Controller Method
**File:** `app/Http/Controllers/AdminDinas/SekolahController.php`

Menambahkan method `show()` untuk menampilkan detail sekolah dengan:
- Data lengkap sekolah
- Statistik GTK (Guru dan Tendik)
- Data Kepala Sekolah
- **Data ULD dan lokasi-lokasinya**

#### 2. Route
**File:** `routes/web.php`

Menambahkan route:
```php
Route::get('/sekolah/{id}', 'SekolahController@show')->name('admin-dinas.sekolah.show');
```

#### 3. View
**File:** `resources/views/admin-dinas/sekolah-show.blade.php`

Halaman detail sekolah yang menampilkan:
- Informasi lengkap sekolah
- Data kontak
- Data Kepala Sekolah
- **Ringkasan ULD**
- **Detail lokasi ULD (nama, alamat, kecamatan)**
- Tombol aksi (Kembali, Buka Kunci, Edit)

#### 4. Update Daftar Sekolah
**File:** `resources/views/admin-dinas/sekolah.blade.php`

Menambahkan tombol "Lihat Detail" (icon mata) di kolom aksi tabel sekolah.

### Cara Mengakses:

1. Login sebagai **Admin Dinas**
2. Buka menu **Sekolah**
3. Klik icon **mata** (<i class="bi bi-eye"></i>) pada baris sekolah yang ingin dilihat
4. Halaman detail akan menampilkan semua informasi termasuk:
   - Data identitas sekolah
   - Lokasi dan wilayah
   - Kontak dan informasi
   - Data Kepala Sekolah
   - **Status ULD**
   - **Detail semua lokasi ULD** (jika ada)

### Fitur Detail ULD di Halaman Admin Dinas:

Jika sekolah memiliki ULD, Admin Dinas dapat melihat:
1. **Ringkasan ULD** di sidebar kanan:
   - Total jumlah ULD
   - Status apakah detail lokasi sudah diisi atau belum

2. **Detail Lokasi ULD** di konten utama:
   - Nama setiap ULD
   - Alamat lengkap
   - Kecamatan
   - Ditampilkan dalam card terpisah dengan nomor urut

### Screenshot Flow:

```
Daftar Sekolah → [Klik Icon Mata] → Detail Sekolah
                                         ↓
                              Melihat Data ULD & Lokasi
```

### API/Endpoint yang Tersedia:

- **GET** `/admin-dinas/sekolah/{id}` - Menampilkan detail sekolah (termasuk ULD)

### Keamanan:

- Halaman hanya dapat diakses oleh role `admin_dinas`
- Menggunakan middleware autentikasi dan role checking
- Data ULD di-load dengan eager loading untuk performa optimal

### Manfaat untuk Admin Dinas:

1. **Monitoring ULD**: Dapat melihat sekolah mana saja yang memiliki ULD
2. **Verifikasi Lokasi**: Dapat memverifikasi detail lokasi ULD yang diinput sekolah
3. **Kelengkapan Data**: Dapat mengecek apakah sekolah sudah mengisi detail lokasi ULD
4. **Pengambilan Keputusan**: Data ULD lengkap membantu perencanaan dan monitoring layanan disabilitas
