# ๐Ÿš€ Quick Start Guide - Fitur Mata Kuliah dan Absensi ## ๐Ÿ“Œ TL;DR (Too Long; Didn't Read) Fitur baru ditambahkan: **Mata Kuliah** dan **Absen Kehadiran** dengan integrasi N8n dan penyimpanan lokal. --- ## ๐ŸŽฏ Feature Overview | Fitur | Deskripsi | Status | |-------|-----------|--------| | Daftar Mata Kuliah | Tampilkan 5 mata kuliah semester 4 | โœ… | | Pilih Mata Kuliah | Dialog selector sebelum absensi | โœ… | | Absensi dengan MK | Kirim data dengan informasi mata kuliah | โœ… | | Riwayat Kehadiran | Lihat history per mata kuliah | โœ… | | Laporan Statistik | Persentase dan summary kehadiran | โœ… | | Local Storage | SharedPreferences dengan Gson | โœ… | | N8n Integration | Send to webhook dengan data lengkap | โœ… | --- ## ๐Ÿ“ File-File Baru ``` app/src/main/java/id/ac/ubharajaya/sistemakademik/ โ”œโ”€โ”€ config/ โ”‚ โ””โ”€โ”€ CourseConfig.kt (Konfigurasi mata kuliah) โ”œโ”€โ”€ models/ โ”‚ โ””โ”€โ”€ CourseModels.kt (Data models) โ”œโ”€โ”€ utils/ โ”‚ โ”œโ”€โ”€ CourseService.kt (CRUD service) โ”‚ โ””โ”€โ”€ AttendanceUtils.kt (Helper utilities) โ”œโ”€โ”€ ui/ โ”‚ โ”œโ”€โ”€ components/ โ”‚ โ”‚ โ””โ”€โ”€ CourseComponents.kt (UI components) โ”‚ โ””โ”€โ”€ screens/ โ”‚ โ””โ”€โ”€ CourseScreen.kt (Course detail screens) โ””โ”€โ”€ MainActivity.kt (Modified - integrated course selection) ``` --- ## ๐Ÿ”ง Setup (5 Menit) ### 1. Gradle Sync ```bash # gradle sync otomatis dilakukan saat membuka project ``` ### 2. Build ```bash # Dari Android Studio: Build > Make Project ``` ### 3. Run ```bash # Dari Android Studio: Run > Run 'app' ``` --- ## ๐Ÿ’ก Usage Examples ### Inisialisasi ```kotlin val courseService = CourseService(context) courseService.initializeSampleData() // Load 5 sample courses ``` ### Ambil Mata Kuliah ```kotlin val courses = courseService.getCourses() val course = courses.first() println("${course.courseCode} - ${course.courseName}") ``` ### Simpan Kehadiran ```kotlin val attendance = Attendance( npm = "202310715082", nama = "Fazri Abdurrahman", courseId = "COURSE_001", courseCode = "PBO2024", courseName = "Pemrograman Berorientasi Objek", latitude = -6.123456, longitude = 106.654321, timestamp = System.currentTimeMillis(), date = courseService.getCurrentDate(), time = courseService.formatTime(System.currentTimeMillis()), status = AttendanceStatus.PRESENT, isValid = true ) courseService.saveAttendance(attendance) ``` ### Buat Laporan ```kotlin val report = courseService.generateAttendanceReport("COURSE_001") Log.d("Report", "Attendance: ${report.attendancePercentage}%") ``` --- ## ๐Ÿ–ผ๏ธ UI Flow ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Absensi Screen โ”‚ โ”‚ (MainActivity) โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”œโ”€โ–บ [Pilih Mata Kuliah] โ—„โ”€โ”€โ”€ Dialog โ”‚ โ†“ โ”‚ [Course Name] โ”‚ โ†“ โ”œโ”€โ–บ [Ambil Foto] โ”‚ โ†“ โ”‚ [Photo Preview] โ”‚ โ†“ โ”œโ”€โ–บ [Get Location] โ”‚ โ†“ โ”‚ [Lat/Long + Validation] โ”‚ โ†“ โ””โ”€โ–บ [Kirim Absensi] โ†“ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ†“ โ†“ N8n Save Local (Server) (SharedPreferences) โ†“ โ†“ Google Sheet History View ``` --- ## ๐Ÿ“Š Data Models ### Course ```kotlin Course( courseId = "COURSE_001", courseCode = "PBO2024", courseName = "Pemrograman Berorientasi Objek", lecturer = "Dr. Imam Riadi", credits = 3, schedule = "Senin 08:00-09:30", room = "A-101", semester = 4, isActive = true ) ``` ### Attendance ```kotlin Attendance( npm = "202310715082", nama = "Fazri Abdurrahman", courseId = "COURSE_001", courseCode = "PBO2024", courseName = "Pemrograman Berorientasi Objek", latitude = -6.123456, longitude = 106.654321, date = "2025-01-14", time = "08:15:30", status = AttendanceStatus.PRESENT, isValid = true ) ``` --- ## ๐Ÿงช Quick Test ### Test 1: Lihat Mata Kuliah ``` 1. Buka app 2. Scroll down di "Absensi Screen" 3. Lihat "Pilih Mata Kuliah" button 4. Klik button 5. Dialog muncul dengan 5 mata kuliah โœ… PASS jika 5 mata kuliah terlihat ``` ### Test 2: Pilih Mata Kuliah ``` 1. Dari dialog, pilih "Pemrograman Mobile" 2. Dialog tutup 3. Lihat card "Pilih Mata Kuliah" 4. Lihat "MOBILE2024" dan lecturer โœ… PASS jika info mata kuliah benar ``` ### Test 3: Absensi Lengkap ``` 1. Pilih mata kuliah 2. Ambil foto 3. Tunggu lokasi terdeteksi 4. Klik "Kirim Absensi" 5. Tunggu response sukses โœ… PASS jika pesan sukses muncul ``` --- ## ๐Ÿ” Debugging ### Check Local Database ```kotlin val courseService = CourseService(context) val courses = courseService.getCourses() val attendances = courseService.getAttendances() Log.d("DEBUG", "Courses: ${courses.size}") Log.d("DEBUG", "Attendances: ${attendances.size}") ``` ### View SharedPreferences ``` Android Studio > Device Explorer > data > data > id.ac.ubharajaya.sistemakademik > shared_prefs > course_attendance_db.xml ``` ### Enable Logging ```kotlin // Di CourseService.kt atau AttendanceUtils.kt Log.d("CourseService", "Save attendance: ${attendance.date}") Log.d("AttendanceUtils", "Validate: ${validateAttendance(attendance)}") ``` --- ## โš™๏ธ Konfigurasi Penting ### Ubah Mata Kuliah Edit `CourseConfig.kt`: ```kotlin fun getSampleCourses(): List { return listOf( Course( courseId = "COURSE_001", courseCode = "PBO2024", // ... ubah di sini ), // ... ) } ``` ### Ubah Threshold Kehadiran Edit `CourseConfig.kt`: ```kotlin const val MINIMUM_ATTENDANCE_PERCENTAGE = 80.0 const val MAX_EXCUSED_ABSENCES = 3 ``` ### Ubah Webhook URL Edit `AttendanceConfig.kt`: ```kotlin const val WEBHOOK_PRODUCTION = "https://n8n.lab.ubharajaya.ac.id/webhook/..." const val WEBHOOK_TEST = "https://n8n.lab.ubharajaya.ac.id/webhook-test/..." ``` --- ## ๐Ÿ› Common Issues | Issue | Cause | Solution | |-------|-------|----------| | "Tidak ada mata kuliah" | Data tidak di-initialize | Panggil `courseService.initializeSampleData()` | | Kehadiran tidak tersimpan | SharedPreferences permission | Cek logcat, restart app | | Data tidak terkirim N8n | Network error atau webhook URL salah | Cek network, verifikasi webhook | | Laporan tidak update | Cache stale | Clear app data atau restart | | Dialog mata kuliah tidak muncul | Courses list kosong | Lihat issue pertama | --- ## ๐Ÿ“ฑ Dependencies ```gradle implementation("com.google.code.gson:gson:2.10.1") implementation("com.google.android.gms:play-services-location:21.0.1") ``` --- ## ๐Ÿ”— Related Files | File | Purpose | |------|---------| | `COURSE_ATTENDANCE_FEATURE.md` | Dokumentasi lengkap fitur | | `IMPLEMENTATION_SUMMARY.md` | Ringkasan implementasi | | `SAMPLE_DATA.md` | Sample data dan contoh | | `ARCHITECTURE.md` | Arsitektur sistem | | `DOKUMENTASI.md` | Dokumentasi awal project | --- ## โœ… Checklist - [x] CourseModels.kt dibuat - [x] CourseConfig.kt dibuat - [x] CourseService.kt dibuat - [x] AttendanceUtils.kt dibuat - [x] CourseComponents.kt dibuat - [x] CourseScreen.kt dibuat - [x] MainActivity.kt diupdate - [x] N8nService.kt diupdate dengan method submitAttendanceWithCourse - [x] Gson dependency ditambahkan - [x] Dokumentasi lengkap dibuat --- ## ๐Ÿš€ Next Steps 1. **Test UI** - Pastikan semua komponen tampil dengan benar 2. **Test Data Flow** - Verify data tersimpan dan terkirim 3. **Test Integration** - Check N8n webhook response 4. **Customize** - Ubah mata kuliah sesuai kebutuhan 5. **Deploy** - Build APK dan push ke device --- ## ๐Ÿ“ž Support Jika ada pertanyaan atau issue: 1. Baca file dokumentasi yang relevan 2. Check logcat untuk error details 3. Verify SharedPreferences content di Device Explorer 4. Test dengan webhook test URL dulu sebelum production --- **Last Updated**: 14 Januari 2026 **Version**: 1.0 **Status**: โœ… Ready for Testing