8.1 KiB
8.1 KiB
🚀 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
# gradle sync otomatis dilakukan saat membuka project
2. Build
# Dari Android Studio: Build > Make Project
3. Run
# Dari Android Studio: Run > Run 'app'
💡 Usage Examples
Inisialisasi
val courseService = CourseService(context)
courseService.initializeSampleData() // Load 5 sample courses
Ambil Mata Kuliah
val courses = courseService.getCourses()
val course = courses.first()
println("${course.courseCode} - ${course.courseName}")
Simpan Kehadiran
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
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
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
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
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
// 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:
fun getSampleCourses(): List<Course> {
return listOf(
Course(
courseId = "COURSE_001",
courseCode = "PBO2024",
// ... ubah di sini
),
// ...
)
}
Ubah Threshold Kehadiran
Edit CourseConfig.kt:
const val MINIMUM_ATTENDANCE_PERCENTAGE = 80.0
const val MAX_EXCUSED_ABSENCES = 3
Ubah Webhook URL
Edit AttendanceConfig.kt:
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
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
- CourseModels.kt dibuat
- CourseConfig.kt dibuat
- CourseService.kt dibuat
- AttendanceUtils.kt dibuat
- CourseComponents.kt dibuat
- CourseScreen.kt dibuat
- MainActivity.kt diupdate
- N8nService.kt diupdate dengan method submitAttendanceWithCourse
- Gson dependency ditambahkan
- Dokumentasi lengkap dibuat
🚀 Next Steps
- Test UI - Pastikan semua komponen tampil dengan benar
- Test Data Flow - Verify data tersimpan dan terkirim
- Test Integration - Check N8n webhook response
- Customize - Ubah mata kuliah sesuai kebutuhan
- Deploy - Build APK dan push ke device
📞 Support
Jika ada pertanyaan atau issue:
- Baca file dokumentasi yang relevan
- Check logcat untuk error details
- Verify SharedPreferences content di Device Explorer
- Test dengan webhook test URL dulu sebelum production
Last Updated: 14 Januari 2026 Version: 1.0 Status: ✅ Ready for Testing