# Mapping User & Sekolah - Dokumentasi

## Fitur yang Dibuat

### 1. **Menu Mapping User & Sekolah di Superadmin**
Lokasi: Sidebar Superadmin, setelah menu Pegawai

### 2. **Controller: UserSchoolMappingController**
Path: `app/Http/Controllers/Superadmin/UserSchoolMappingController.php`

**Methods:**
- `index()` - Menampilkan daftar mapping user dengan sekolah, dengan filter role, sekolah, dan search
- `create()` - Form untuk membuat mapping baru
- `store()` - Menyimpan mapping baru (membuat employee & assignment)
- `edit($id)` - Form edit mapping
- `update($id)` - Update mapping (bisa pindah sekolah)
- `destroy($id)` - Hapus mapping (non-aktifkan assignment)

### 3. **Views**
- `resources/views/superadmin/user-school-mapping/index.blade.php` - Daftar mapping
- `resources/views/superadmin/user-school-mapping/create.blade.php` - Form tambah mapping
- `resources/views/superadmin/user-school-mapping/edit.blade.php` - Form edit mapping

### 4. **Login dengan Email atau NPSN**
**File:** `app/Http/Controllers/Auth/LoginController.php`

**Cara Kerja:**
- Jika input adalah **email** (format email valid) → login dengan email
- Jika input adalah **angka (NPSN)** → cari sekolah dengan NPSN tersebut, lalu cari user yang ditugaskan ke sekolah tersebut, kemudian cek password
- Ini memungkinkan admin sekolah atau pegawai sekolah login dengan NPSN sekolah mereka

### 5. **Routes**
```php
Route::resource('user-school-mapping', 'App\Http\Controllers\Superadmin\UserSchoolMappingController');
```

Generates:
- GET `/superadmin/user-school-mapping` - Index
- GET `/superadmin/user-school-mapping/create` - Create Form
- POST `/superadmin/user-school-mapping` - Store
- GET `/superadmin/user-school-mapping/{id}/edit` - Edit Form
- PUT/PATCH `/superadmin/user-school-mapping/{id}` - Update
- DELETE `/superadmin/user-school-mapping/{id}` - Delete

## Cara Penggunaan

### Membuat Mapping User ke Sekolah

1. Login sebagai **Superadmin**
2. Klik menu **"Mapping User & Sekolah"**
3. Klik tombol **"Mapping Baru"**
4. Pilih **User** yang akan dipetakan
5. Pilih **Sekolah** tujuan
6. Isi **NIP**, **No. Telepon** (opsional)
7. Pilih **Tanggal Mulai** penugasan
8. Isi **Jabatan** (opsional)
9. Klik **"Simpan Mapping"**

### Edit Mapping

1. Di halaman index, klik tombol **Edit** (icon pensil)
2. Ubah data yang diperlukan
3. Jika ganti sekolah, mapping lama akan dinonaktifkan dan mapping baru akan dibuat
4. Klik **"Update Mapping"**

### Hapus Mapping

1. Di halaman index, klik tombol **Hapus** (icon trash)
2. Konfirmasi penghapusan
3. Assignment akan dinonaktifkan (soft delete dengan `is_active = false`)

## Login dengan NPSN

**Contoh:**
- User: Admin Sekolah di SMA Negeri 1 (NPSN: 20100001)
- Password: password123

**Cara Login:**
1. Di halaman login, masukkan **20100001** (NPSN)
2. Masukkan **password123**
3. Sistem akan:
   - Cari sekolah dengan NPSN 20100001
   - Cari semua user yang ditugaskan ke sekolah tersebut
   - Cek password untuk setiap user
   - Login user yang cocok

## Fitur Tambahan

### Filter di Index Page
- **Cari User**: Search by nama atau email
- **Filter by Role**: Admin Sekolah, Kepala Sekolah, Guru, Pengawas
- **Filter by Sekolah**: Pilih sekolah tertentu

### Status Display
- **Badge Hijau**: User sudah dipetakan dan aktif
- **Badge Abu**: User belum dipetakan
- **Info Sekolah**: Nama sekolah dan jabatan ditampilkan

### Relasi Database
```
User → Employee → EmployeeAssignment → School
```

- Satu user bisa punya satu employee record
- Satu employee bisa punya banyak assignments (riwayat)
- Satu employee hanya punya 1 active assignment (`is_active = true`)
- Field `active_assignment_id` di employee menunjuk ke assignment yang aktif

## Testing

1. Buat user dengan role `admin_sekolah` atau `guru`
2. Mapping user tersebut ke sekolah via menu "Mapping User & Sekolah"
3. Logout
4. Login dengan NPSN sekolah + password user tersebut
5. Harus berhasil masuk ke dashboard

## Catatan Penting

- Saat mapping baru dibuat untuk user yang sudah punya mapping, mapping lama akan dinonaktifkan
- Riwayat assignment tetap tersimpan untuk keperluan audit
- Login NPSN akan mencari semua user yang ditugaskan ke sekolah tersebut, jadi password harus unique per user
