EAS-202310715082-FAZRI-ABDU.../QUICK_START_COURSE.md

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")

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

  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