# Attendance Mobile Client (Flutter) v1.0.0+5

Client ini terhubung ke API Laravel:
- `POST /api/v1/attendance/login`
- `GET /api/v1/attendance/request-data`
- `POST /api/v1/attendance/checkin`
- `POST /api/v1/attendance/checkout`
- `GET /api/v1/attendance/report`
- `GET /api/v1/attendance/leave-requests`
- `POST /api/v1/attendance/leave-requests`
- `GET /api/v1/attendance/spl-requests`
- `POST /api/v1/attendance/spl-requests`
- `GET /api/v1/attendance/forgetting-clock-requests`
- `POST /api/v1/attendance/forgetting-clock-requests`
- `GET /api/v1/attendance/shift-schedule-requests`
- `POST /api/v1/attendance/shift-schedule-requests`
- `GET /api/v1/attendance/shift-schedule-refs`
- `GET /api/v1/attendance/salary-history`
- `GET /api/v1/attendance/salary-detail`
- `GET /api/v1/attendance/profile-assignment`

## Changelog v1.0.0+5

### Fitur Baru
- **Request Jadwal Shift**: Karyawan bisa request jadwal shift dari Android
  - Multi-date picker (bisa pilih beberapa tanggal sekaligus)
  - Pilih shift yang diinginkan
  - Alasan request
  - Lihat daftar request + status (Menunggu/Disetujui/Ditolak)
  - Batalkan request yang masih pending
- **Halaman Jadwal**: Tambah tombol `+` (ajukan request) dan tombol `??` (lihat request saya)
- **Sorting jadwal**: Dari tanggal terbaru ke terlama

### Perbaikan
- Approval flow: self-skip untuk leader yang sama dengan requester
- Approval flow: department/group tidak auto-skip massal
- Reimbursement: validator flow fixed ke table benar
- Reimbursement/Forgetting Clock: fallback default flow
- Shift schedule: auto-detect `profil_bulan_id` saat approve
- Salary page: tampilkan data dari profil bulan jika belum ada payment history
- Salary page: PDF link dinamis

## Run

```bash
cd attendance_mobile_client
flutter pub get
flutter run
```

## Build Release

```bash
cd attendance_mobile_client
flutter build apk --release
```

## Setup di App

1. Isi `Base URL` (contoh: `http://localhost:8087`).
2. Isi `API Key` dari menu web `master-api-key`.
3. Isi `Employee Code` atau `Finger ID`.
4. Login dengan password.
5. Navigasi ke halaman yang diinginkan.

## Halaman Mobile

### Jadwal Kerja
- Lihat jadwal shift (kalender/list)
- Request jadwal shift baru (multi-date)
- Lihat status request

### Laporan Absensi
- Lihat log IN/OUT per tanggal
- Lihat detail GPS, foto, overtime
- Calendar view dengan marker holiday/weekend

### Slip Gaji
- Lihat ringkasan gaji (Gross, PPh21, BPJS, Netto)
- Lihat rincian harian
- Buka slip gaji PDF

### Pengajuan
- Leave (cuti)
- SPL (surat perintah lembur)
- Forgetting Clock (lupa absen)

## Offline Queue

Jika kirim gagal (offline), payload disimpan ke SQLite lokal (`offline_events`).
Gunakan tombol `Sync Queue` saat online untuk kirim ulang otomatis.

## Face Photo

Tombol `Take Face Photo` menggunakan kamera perangkat (image_picker).
Foto dikirim ke API sebagai multipart field `face_image`.
