Dashboard
Ringkasan aktivitas lisensi KPBB ERP · BCA 7750538805 a.n. Agus Darasana
Menunggu Konfirmasi
0
Total Lunas
0
Total Pendapatan
Rp 0
💰
Lisensi Aktif
0
🟢
Total Pelanggan
0
👥
⏳ Menunggu Konfirmasi Pembayaran
🎉
Tidak ada pembayaran menunggu
🕐 Aktivitas Terbaru
📭
Belum ada aktivitas
Konfirmasi Pembayaran
Paste pesan WA user → sistem otomatis deteksi Order ID → konfirmasi → lisensi aktif
🔍 Cek & Konfirmasi Order
📲 Alur Kerja Admin (Otomatis)
1
User pilih paket di APK → dapat Order ID + info transfer BCA (tersimpan ke Firebase otomatis)
2
User transfer ke BCA 7750538805 a.n. Agus Darasana
3
User kirim pesan WA ke +62 812-2222-4549Paste pesan WA di kotak kuning atas → Order ID terdeteksi otomatis
4
Cek mutasi BCA → cocokkan nominal. Klik Cek Order Ini
5
Klik Konfirmasi Lunas → sistem auto-generate kode lisensi KPBB-XXXX-XXXX-XXXX-XXXX
6
Klik Buka WhatsApp → pesan sudah otomatis terisi → kirim ke user ✅
Pelanggan
Daftar seluruh pengguna yang terdaftar
👥 Semua Pelanggan
👤
Belum ada pelanggan
Riwayat Transaksi
Semua order pembayaran langganan
🧾
Belum ada transaksi
Aktivasi Manual
Generate atau aktifkan lisensi secara manual untuk pelanggan tertentu
🔑 Generate Kode Lisensi Manual
📋 Riwayat Aktivasi Manual
🔑
Belum ada aktivasi manual
⚙️ Pengaturan Cloudflare
Hubungkan admin panel ke Cloudflare Worker KV untuk sinkronisasi real-time dengan APK
🔥 Firebase Config

Isi dengan nilai dari Firebase Console → Project Settings → Your apps → SDK setup.
Perubahan disimpan di localStorage dan langsung aktif.

📡 Status Koneksi
Belum terhubung
Database Path: kpbb_db/
Orders: kpbb_db/orders/{orderId}
Customers: kpbb_db/customers/{custId}
📱 Panduan Integrasi APK
Di APK (Android), saat user pesan:
val db = Firebase.database.reference
val orderId = "KPBB-" + System.currentTimeMillis()
db.child("kpbb_db/orders/$orderId").setValue(mapOf(
  "id" to orderId,
  "customerId" to customerId,
  "plan" to "monthly",  // weekly/monthly/yearly
  "amount" to 199000,
  "status" to "pending",
  "licenseKey" to null,
  "createdAt" to ISO8601_NOW
))
Baca license key (polling/listener):
db.child("kpbb_db/orders/$orderId/licenseKey")
  .addValueEventListener(object : ValueEventListener {
    override fun onDataChange(snap: DataSnapshot) {
      val key = snap.getValue(String::class.java)
      if (key != null) activateLicense(key)
    }
    override fun onCancelled(e: DatabaseError) {}
  })
Validasi lisensi yang diinput user:
// Cari customer dengan licenseKey ini
db.child("kpbb_db/customers")
  .orderByChild("licenseKey")
  .equalTo(inputKey)
  .get().addOnSuccessListener { snap ->
    val cust = snap.children.firstOrNull()
    val status = cust?.child("status")?.value
    if (status == "active") { /* aktifkan */ }
  }