Anda di halaman 1dari 31

MANUAL BOOK

-ABSENLOC-
APLIKASI LAYANAN ABSENSI BERBASIS LOKASI

UNIVERSITAS KRISTEN SATYA WACANA

SALATIGA

2020
DAFTAR ISI

DAFTAR ISI ........................................................................................................... ii


ABSTRAK ............................................................................................................. iii
BAB 1. PENDAHULUAN ..................................................................................... 1
1.1 Latar Belakang.......................................................................................... 1
1.2 Tujuan ....................................................................................................... 2
1.3 Manfaat ..................................................................................................... 2
BAB 2. METODE PENGEMBANGAN ................................................................ 3
2.1 Tahap pengembangan ............................................................................... 3
2.2 Identitas atau Keunikan Produk................................................................ 9
BAB 3. MANUAL BOOK .................................................................................... 10
3.1 Link Download Aplikasi ........................................................................ 10
3.2 Role Penyelenggara ................................................................................ 10
3.3 Role Anggota .......................................................................................... 18
3.4 Role Admin ............................................................................................ 22
BAB 4. KESIMPULAN ........................................................................................ 27
REFERENSI ......................................................................................................... 28

ii
ABSTRAK

Location Based Service (LBS) adalah sebuah layanan yang digunakan untuk
mengetahui posisi dari pengguna. Pada penelitian ini LBS diterapkan sebagai
layanan untuk memvalidasi kehadiran dalam suatu acara, yaitu aplikasi AbsenLoc
yang berbasis mobile Android agar peserta acara bisa langsung melakukan absensi
tanpa perlu mengantre.

Validasi AbsenLoc dilakukan dalam dua tahap. Pertama, aplikasi memverifikasi


lokasi smartphone dari peserta acara, di mana Global Positioning System (GPS)
pada smartphone akan melacak posisi dan menyediakan pengaturan waktu
pengguna. Kedua, aplikasi memverifikasi lokasi peserta acara dari informasi lokasi
swafoto yang harus dilakukan melalui aplikasi AbsenLoc dengan mengakses
kamera smartphone. Adapun kedua verifikasi tersebut akan dicocokkan dengan
jangkauan latitude dan longitude yang telah ditetapkan oleh penyelenggara acara.
Jika lokasi peserta acara di luar jangkauan tersebut, maka absensi tidak akan
terekam di AbsenLoc.

iii
BAB 1. PENDAHULUAN

1.1 Latar Belakang


Location Based Service (LBS) adalah sebuah layanan yang digunakan untuk
mengetahui posisi dari pengguna[1], kemudian menggunakan informasi tersebut
untuk meyediakan jasa dan aplikasi yang personal[2]. Dalam penggunaan layanan
ini, salah satu unsur utamanya adalah pengguna dapat menentukan lokasinya,
melacak gerakan/perpindahan, serta kedekatan dengan lokasi tertentu dengan
mendeteksi perpindahan[3].

Pada penelitian ini LBS diterapkan sebagai layanan untuk memvalidasi


kehadiran dalam suatu acara, yaitu aplikasi AbsenLoc. Pada beberapa perusahaan,
banyak acara diselenggarakan dan karyawan wajib untuk menghadirinya. Akan
tetapi absensi manual ataupun menggunakan alat pembaca fingerprint dirasa tidak
efisien dikarenakan akan menghabiskan banyak waktu untuk mengantre. Dengan
aplikasi AbsenLoc berbasis mobile Android, platform yang memiliki market share
global paling tinggi beberapa tahun terakhir [4], peserta acara bisa langsung
melakukan absensi tanpa perlu mengantre.

Validasi AbsenLoc dilakukan dalam dua tahap. Pertama, aplikasi


memverifikasi lokasi smartphone dari peserta acara, di mana Global Positioning
System (GPS) pada smartphone akan melacak posisi dan menyediakan pengaturan
waktu pengguna[5]. Kedua, aplikasi memverifikasi lokasi peserta acara dari
informasi lokasi swafoto yang harus dilakukan melalui aplikasi AbsenLoc dengan
mengakses kamera smartphone. Adapun kedua verifikasi tersebut akan dicocokkan
dengan jangkauan latitude dan longitude yang telah ditetapkan oleh penyelenggara
acara. Jika lokasi peserta acara di luar jangkauan tersebut, maka absensi tidak akan
terekam di AbsenLoc.

Selain proses validasi yang efektif, AbsenLoc juga memberikan laporan


kehadiran yang lengkap. Hal ini akan membantu perusahaan dalam mengelola
pengarsipan absensi di mana dapat menghasilkan informasi yang membantu dalam
pengambilan keputusan.

1
1.2 Tujuan
Tujuan aplikasi ini adalah:
• Membantu perusahaan sebagai penyelenggara acara untuk dapat merekam
kehadiran karyawannya dengan efisien dan efektif.
• Membantu pengarsipan riwayat acara-acara yang terselenggara dan peserta
yang hadir maupun yang absen.

1.3 Manfaat
Manfaat aplikasi ini adalah:
• Bagi penyelenggara, memberikan efisiensi dalam mengelola absensi serta
membuat acara lebih terorganisir.
• Bagi peserta, memudahkan peserta dalam melakukan absensi dan mengurangi
waktu antrean yang diperlukan.

2
BAB 2. METODE PENGEMBANGAN

2.1 Tahap pengembangan


Pengembangan aplikasi dilakukan berdasarkan tahapan metode Research
and Development (RnD) seperti terlihat pada Gambar 2.1.

Gambar 2.1 Tahapan Metode Research and Development (RnD)

Berdasarkan Gambar 2.1, pengembangan aplikasi dilakukan dalam beberapa


tahapan seperti yang dikemukakan oleh Sugiyono[6], yaitu:

1) Potensi dan masalah. Pada tahap ini dilakukan identifikasi adanya potensi
dan masalah. Potensi yang ada yaitu dibutuhkannya absensi kehadiran
karyawan atau pegawai pada acara-acara yang diwajibkan. Akan tetapi sering
muncul permasalahan yaitu tidak efisiennya absensi menggunakan perangkat
pembaca finger print.
2) Pengumpulan data. Setelah potensi dan masalah dapat ditunjukkan secara
faktual, langkah selanjutnya yaitu mengumpulkan berbagai informasi yang
didapatkan studi literatur dan wawancara kepada pemangku kebijakan dari
beberapa perusahaan. Dari wawancara yang dilakukan didapatkan bahwa
banyak karyawan menggunakan smartphone android, maka dari itu
direncanakan pembangunan aplikasi absensi online berbasis android. Selain
itu, dibutuhkan suatu mekanisme validasi lokasi karyawan ketika melakukan
absensi agar karyawan hanya bisa melakukan absensi hanya dalam range
lokasi yang telah ditentukan berdasarkan titik longitude latitude.

3
3) Desain produk. Tahap ini adalah hasil akhir dari serangkaian penelitian awal
yang dapat berupa rancangan kerja baru atau produk baru. Tahap ini diawali
dengan perancangan aplikasi menggunakan UML (Unified Modelling
Language) untuk menghasilkan gambaran dasar dari aplikasi AbsenLoc
online. Adapun salah satu diagram yang dibangun adalah use case diagram
yang terlihat pada Gambar 2.2.

Gambar 2.2 Use Case Diagram AbsenLoc online

Gambar 2.2 menjelaskan proses bisnis aplikasi AbsenLoc online yang


terdiri dari 3 aktor yaitu admin, penyelenggara acara dan anggota.
Penyelenggara acara dapat melakukan pendaftaran akun dan harus melakukan
proses login terlebih dahulu untuk dapat mengakses fungsi yang terdapat pada
sistem, hal tersebut juga berlaku untuk aktor anggota. Penyelenggara dapat
menambahkan data acara dengan menentukan lokasi acara kemudian mengisi
form acara yang meliputi nama acara, deskripsi lokasi, tanggal acara, jam
mulai, jam selesai, keterlambatan dan periode acara. Setelah acara berhasil

4
ditambahkan, penyelenggara dapat menambahkan atau mengkonfirmasi
anggota yang mendaftar pada setiap acara yang ditambahkan. Aktor anggota
dapat melakukan absensi dengan waktu acara harus pada rentang yang telah
ditentukan oleh penyelenggara acara dan lokasi anggota harus pada
jangkauan lokasi acara, anggota juga dapat menambah jadwal acara. Aktor
Admin dapat melakukan pengelolaan data acara, anggota dan penyelenggara.

Desain database pada aplikasi AbsenLoc online terdiri dari empat tabel
yaitu tabel absen, acara_detail, acara dan user. Berikut merupakan detail dari
empat tabel dan desain data model yang digunakan dalam aplikasi:

Tabel 1. Document Absen


Entitas Tipe data Deskripsi
_id Objectid Collection Primary key
id_acara string Id acara
id_user string Id user
nama_acara string Nama acara
nama_user string Nama user
tanggal_absen timestamp Tanggal absen
tanggal_acara string Tanggal acara

Tabel 2. Document Acara


Entitas Tipe data Deskripsi
_id Objectid Collection Primary key
id_penyelenggara string Id penyelenggara
nama_acara string Nama acara
nama_user string Nama user
des_lokasi string Deskripsi Lokasi
distance number Jarak lokasi
jam_terlambat string Jam keterlambatan
latitude string latitude

5
longtitude string longtitude
periode number periode acara
tanggal_dari timestamp tanggal mulai
tanggal_sampai timestamp tanggal selesai
tanggal_hari string nama hari

Tabel 3. Document Acara_detail


Entitas Tipe data Deskripsi
_id Objectid Collection Primary key
id_acara string Id acara
id_user string Id user
nama_user string Nama user

Tabel 4. Document User


Entitas Tipe data Deskripsi
_id Objectid Collection Primary key
email string Email
nama_user string Nama user
status number Status

6
Gambar 2.3 Desain data model document absen, acara_detail dan user

7
Gambar 2.4 Desain data model document acara

4) Validasi Desain. Dalam proses ini desain yang sudah dibuat dievaluasi, akan
tetapi hanya berdasarkan pemikiran rasional dan dilakukan secara internal.
5) Revisi desain produk. Berdasarkan validasi yang dilakukan pada tahap
sebelumnya, didapatkan beberapa revisi seperti desain antar muka, dan jenis
laporan yang diberikan. Dari revisi yang ada, produk dibangun menggunakan
bahasa pemrograman Java pada Android Studio dan Firebase untuk database.
6) Uji coba produk. Pada tahap ini dilakukan uji coba aplikasi AbsenLoc untuk
melihat apakah aplikasi sudah berjalan sesuai yang diharapkan.
7) Revisi produk. Pada tahap ini dilakukan revisi jika pada tahap sebelumnya
ditemukan hal-hal yang harus diubah atau ditambahkan pada aplikasi.

8
8) Uji coba pemakaian. Pada tahap ini dilakukan uji coba aplikasi AbsenLoc
dalam kondisi yang sesungguhnya, yaitu diuji pada beberapa acara. Dari
tahap ini ditemukan kekurangan, yaitu tidak kompatibel pada beberapa
device, sehingga beberapa anggota tidak dapat melakukan absensi.
9) Revisi produk. Pada tahap ini dilakukan revisi atau perbaikan dari
kelemahan yang ditemukan pada uji coba pemakaian.
10) Produksi Masal. Aplikasi AbsenLoc tidak/belum diproduksi secara masal
tetapi sudah diunggah di Google Store
https://play.google.com/store/apps/details?id=com.appabsensi.absensiku&hl
=en

2.2 Identitas atau Keunikan Produk


Berikut adalah hal yang membedakan aplikasi ini dengan aplikasi pada
umumnya :
• Teknologi Location Based Service (LBS): Teknologi LBS digunakan
untuk melakukan validasi saat anggota akan melakukan absensi di suatu
tempat.
• Sistem berbasis android: Sistem telah menggunakan smartphone berbasis
android sehingga anggota dan penyelenggara acara cukup mendaftar dan
mengunduh aplikasi. Penyelenggara acara dan anggota dapat melihat
riwayat absensi di smartphone yang sudah terpasang aplikasi.

9
BAB 3. MANUAL BOOK

3.1 Link Download Aplikasi


AbsenLoc online dapat didownload pada link berikut ini:
https://play.google.com/store/apps/details?id=com.appabsensi.absensiku&hl=en

3.2 Role Penyelenggara


• Pendaftaran dan login akun penyelenggara

Gambar 3.1 Halaman Pendaftaran Akun (1) Halaman Login (2)

Untuk menggunakan aplikasi AbsenLoc online pertama, penyelenggara harus


melakukan pendaftaran akun. Penyelenggara harus mengisi form nama lengkap,
email, password dan memilih role penyelenggara acara, kemudian daftar. Setelah
akun berhasil didaftarkan kemudian masuk ke halaman login dan memasukkan
username dan password yang sudah didaftarkan. Adapun kode program untuk
pendaftaran akun terlihat pada Kode Program 1 dan login akun pada Kode Program
2.

10
Kode Program 1 Pendaftaran Akun
1. private void signUp() {
2. progressDialog = new ProgressDialog(Daftar.this);
3. progressDialog.setMessage("Loading...");
4. progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
5. if(!validateForm()) {return;}
6. progressDialog.show();
7. String email = edtEmail.getText().toString();
8. String password = edtPass.getText().toString();
9. mAuth.createUserWithEmailAndPassword(email, password)
10. .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
11. @Override
12. public void onComplete(@NonNull Task<AuthResult> task) {
13. if (task.isSuccessful()) {
14. int selectedId = radioGroup.getCheckedRadioButtonId();
15. radioButton = (RadioButton) findViewById(selectedId);
16. String statusee = (String) radioButton.getText();
17. if (statusee.equalsIgnoreCase("Anggota")){
18. status = Long.valueOf(0);
19. } else {
20. status = Long.valueOf(1);
21. }
22. String id = task.getResult().getUser().getUid();
23. String email = task.getResult().getUser().getEmail();
24. onAuthSuccess(id,email,status);
25. } else {
26. Toast.makeText(Daftar.this, "Email sudah di gunakan!",
27. Toast.LENGTH_SHORT).show();
28. progressDialog.dismiss();}}});}
29. private void onAuthSuccess(String id, String email,Long status) {
30. String nama_user = edtNama.getText().toString();
31. writeNewUser(id, nama_user, email,status);
32. progressDialog.dismiss();
33. if (status == 0){
34. myIntent = new Intent(Daftar.this, AnggotaActivity.class);
35. bun = new Bundle();
36. bun.putString("email", email);
37. bun.putString("id_user", id);
38. bun.putString("nama_user", nama_user);
39. bun.putLong("status",status);
40. myIntent.putExtras(bun);
41. Daftar.this.startActivity(myIntent);
42. finish();
43. } else {
44. myIntent = new Intent(Daftar.this,PenyelenggaraActivity.class);
45. bun = new Bundle();
46. bun.putString("email", email);
47. bun.putString("id_user", id);
48. bun.putString("nama_user", nama_user);
49. bun.putLong("status",status);
50. myIntent.putExtras(bun);
51. Daftar.this.startActivity(myIntent);
52. finish();}}
53. private void writeNewUser(String userId, String name, String email, Long
status) {
54. Map<String, Object> users = new HashMap<>();
55. users.put("nama_user", name);
56. users.put("email", email);
57. users.put("status", status);
58. db.collection("User").document(userId)

11
59. .set(users).addOnSuccessListener(new OnSuccessListener<Void>() {
60. @Override
61. public void onSuccess(Void aVoid) {
62. Log.d("msg", "DocumentSnapshot successfully written!");}})
63. .addOnFailureListener(new OnFailureListener() {
64. @Override
65. public void onFailure(@NonNull Exception e) {
66. Log.w("msg", "Error writing document", e);}
67. });}

Kode Program 2 Login Akun


1. private void signIn() {
2. progressDialog = new ProgressDialog(Login.this);
3. progressDialog.setMessage("Loading...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
4. if (!validateForm()) {return;}
5. progressDialog.show();
6. String email = edtEmail.getText().toString();
7. String password = edtPass.getText().toString();
8. mAuth.signInWithEmailAndPassword(email, password)
9. .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
10. @Override
11. public void onComplete(@NonNull Task<AuthResult> task) {
12. if (task.isSuccessful()) {
13. onAuthSuccess(task.getResult().getUser());
14. } else {
15. progressDialog.dismiss();
16. Toast.makeText(Login.this, "Email atau Password salah!",
17. Toast.LENGTH_SHORT).show();
18. }}});}
19. private void onAuthSuccess(final FirebaseUser user) {
20. final String id_user = user.getUid();
21. db = FirebaseFirestore.getInstance();
22. DocumentReference docRef =
db.collection("User").document(user.getUid());
23. docRef.get().addOnCompleteListener(new
OnCompleteListener<DocumentSnapshot>() {
24. @Override
25. public void onComplete(@NonNull Task<DocumentSnapshot> task) {
26. if (task.isSuccessful()) {
27. DocumentSnapshot document = task.getResult();
28. if (document.exists()) {
29. progressDialog.dismiss();
30. if (document.getLong("status") == 0){
31. Intent myIntent = new Intent(Login.this, AnggotaActivity.class);
32. Login.this.startActivity(myIntent);
33. finish();
34. } else if(document.getLong("status") == 1){
35. Intent myIntent = new Intent(Login.this, PenyelenggaraActivity.class);
36. Login.this.startActivity(myIntent);
37. finish();
38. } else {
39. Intent myIntent = new Intent(Login.this, AdminActivity.class);
40. Login.this.startActivity(myIntent);
41. finish();}
42. } else {
43. progressDialog.dismiss();
44. Toast.makeText(Login.this, "Tidak ada data!",

12
45. Toast.LENGTH_SHORT).show();}} else {
46. progressDialog.dismiss();
47. Toast.makeText(Login.this, "Database error!"+task.getException(),
48. Toast.LENGTH_SHORT).show();}}});}

• Halaman Home Penyelenggara Acara

Gambar 3.2 Halaman home penyelenggara acara

Halaman ini merupakan halaman home untuk penyelanggara mengelola acara.


Terdapat tiga menu yaitu tambah acara, acara selesai dan acara berlangsung. Menu
tambah acara digunakan untuk menambahkan acara. Menu acara selesai digunakan
untuk melihat acara yang sudah selesai dan melihat rekap data absensi anggota.
Menu acara berlangsung digunakan untuk melihat data acara yang sedang
berlangsung dan pada menu ini penyelenggara juga dapat menambahkan anggota
pada setiap acara.

13
• Tambah Acara

Gambar 3.3 From Tambah Acara (1) Menentukan Lokasi Acara (2)

Pada menu tambah acara, penyelenggara dapat menambahkan acara dengan


mengisi semua field yang ada yaitu nama acara, tanggal, hari, jam mulai, jam
selesai, periode, jam keterlambatan, lokasi, jangkauan lokasi dan deskripsi lokasi.
Terdapat tombol maps digunakan untuk menentukan lokasi acara dengan
mengambil data latitude dan longtitude. Berikut adalah kode program untuk tambah
acara pada Kode Program 3.

14
Kode Program 3 Tambah Acara
1. btnSimpan.setOnClickListener(new View.OnClickListener() {
2. public void onClick(View v) {
3. progressDialog.show();
4. mAuth = FirebaseAuth.getInstance();
5. SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
6. SimpleDateFormat format_jam = new SimpleDateFormat("HH:mm:ss");
7. final String tanggal_mulai = String.valueOf(edtTanggal.getText())+"
"+String.valueOf(edtJam_mulai.getText());
8. final String tanggal_sampai = String.valueOf(edtTanggal.getText())+"
"+String.valueOf(edtJam_selesai.getText());
9. Date tgl_mulai = null;
10. Date tgl_sampai = null;
11. Date tgl_sampai2 = null;
12. int periode = Integer.valueOf(String.valueOf(edtPeriode.getText()));
13. try {
14. tgl_mulai = formatter.parse(tanggal_mulai);
15. tgl_sampai = formatter.parse(tanggal_sampai);
16. calendar2 = Calendar.getInstance();
17. calendar2.setTime(tgl_sampai);
18. calendar2.add(Calendar.WEEK_OF_YEAR, +periode-1);
19. tgl_sampai2 = calendar2.getTime();
20. } catch (ParseException e) {e.printStackTrace();}
21. Map<String, Object> acara = new HashMap<>();
22. acara.put("nama_acara", String.valueOf(edtNama_acara.getText()));
23. acara.put("des_lokasi", String.valueOf(edtDes_lokasi.getText()));
24. acara.put("id_penyelenggara", mAuth.getCurrentUser().getUid());
25. acara.put("nama_user", nama_user);
26. acara.put("latitude", edtLatitude.getText().toString());
27. acara.put("longtitude", edtLongtitude.getText().toString());
28. acara.put("tanggal_dari", tgl_mulai);
29. acara.put("tanggal_sampai", tgl_sampai2);
30. acara.put("periode", Long.valueOf(String.valueOf(edtPeriode.getText())));
31. acara.put("tanggal_hari", String.valueOf(edtTanggal_hari.getText()));
32. acara.put("jam_terlambat", edtJam_terlambat.getText().toString());
33. acara.put("distance", Long.valueOf(edtDistance.getText().toString()));
34. db.collection("Acara")
35. .add(acara)
36. .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
37. @Override
38. public void onSuccess(DocumentReference documentReference) {
39. progressDialog.dismiss();
40. Toast.makeText(TambahAcara.this, "Acara berhasil di simpan!, silakan pilih
anggota absensi pada menu (acara berlangsung -> tambah anggota)!",
41. Toast.LENGTH_LONG).show();
42. finish();
43. }}).addOnFailureListener(new OnFailureListener() {
44. @Override
45. public void onFailure(@NonNull Exception e) {
46. Toast.makeText(TambahAcara.this, "Opps, Ada kesalahan dalam input data
acara, silahkan coba input data lagi!",
47. Toast.LENGTH_LONG).show();
48. }});}});

15
• Tambah Anggota

Gambar 3.4 Data acara berlangsung (1) Tambah angota (2)

Setelah acara ditambahkan, langkah selanjutnya yaitu menambahkan anggota


dengan cara masuk menu acara berlangsung kemudian memilih anggota yang akan
masuk dalam acara tersebut. Berikut adalah kode program untuk tambah angota
pada Kode Program 4.

16
Kode Program 4 Tambah Anggota
1. btnPilih.setOnClickListener(new View.OnClickListener() {
2. @Override
3. public void onClick(View v) {
4. SelectMultiDialog multiSelectDialog;
5. multiSelectDialog = new SelectMultiDialog()
6. .title("Pilih Anggota") //setting title for dialog
7. .titleSize(25)
8. .positiveText("Simpan")
9. .negativeText("Batal")
10. .setMinSelectionLimit(0)
11. .setMaxSelectionLimit(listOfCountries.size())
12. .multiSelectList(listOfCountries)
13. .onSubmit(new SelectMultiDialog.SubmitCallbackListener() {
14. @Override
15. public void onSelected(ArrayList<Integer> selectedIds, final
ArrayList<String> selectedNames, final ArrayList<String> selectedID,
String dataString) {
16. int i = 0;
17. progressDialog.show();
18. for (i = 0; i < selectedIds.size(); i++) {
19. final String nama_user = selectedNames.get(i);
20. final String id_user = selectedID.get(i);
21. db.collection("Acara_detail").whereEqualTo("id_acara",id_acara).whereEqu
alTo("id_user",selectedID.get(i))
22. .get()
23. .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
24. @Override
25. public void onComplete(@NonNull Task<QuerySnapshot> task) {
26. QuerySnapshot document2 = task.getResult();
27. if (task.isSuccessful()) {
28. if (document2.isEmpty()){
29. Map<String, Object> acara = new HashMap<>();
30. acara.put("id_acara", id_acara);
31. acara.put("id_user", id_user);
32. acara.put("nama_user", nama_user);
33. db.collection("Acara_detail")
34. .add(acara)
35. .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
36. @Override
37. public void onSuccess(DocumentReference documentReference) {
38. }})
39. .addOnFailureListener(new OnFailureListener() {
40. @Override
41. public void onFailure(@NonNull Exception e) {}});
42. } else {}} else {
43. Log.w("gagal", "Error get document: ", task.getException());
44. }}});}
45. progressDialog.dismiss();
46. kosong = findViewById(R.id.empty);
47. kosong.setVisibility(View.GONE);}
48. @Override
49. public void onCancel() {}});
50. multiSelectDialog.show(getSupportFragmentManager(),
"multiSelectDialog");}});}

17
• Data Rekap Absensi

Gambar 3.5 Data acara selesai (1) Data rekap absensi (2) Data statistik
absensi (3)

Pada menu acara berlangsung penyelenggara dapat melihat rekap data absensi dan
statistik absensi. Penyelenggara juga dapat menghapus data acara.

3.3 Role Anggota


• Pendaftaran dan login akun anggota

Gambar 3.6 Halaman Pendaftaran Akun (1) Halaman Login (2)

18
Anggota yang akan menggunakan aplikasi AbsenLoc online harus melakukan
pendaftaran akun terlebih dahulu. Anggota harus mengisi form nama lengkap,
email, password dan memilih role anggota, kemudian daftar. Setelah akun berhasil
terdaftar kemudian masuk ke halaman login, masukkan username dan password
yang sudah didaftarkan.
• Halaman Home Anggota

Gambar 3.7 Halaman Home Anggota

Halaman ini merupakan halaman home untuk anggota. Terdapat tiga menu yaitu
absen hari ini, jadwal acara dan riwayat absen. Menu absen hari ini digunakan untuk
melakukan absen dengan jadwal hari ini. Menu jadwal acara digunakan untuk
melihat acara anggota dan melihat rekap data absensi anggota. Menu riwayat absen
digunakan untuk melihat history absensi anggota.

19
• Proses Absensi

Gambar 3.8 Menu Absen hari ini (1) Submit absen (2)

Pada menu absen hari ini, anggota dapat melakukan absensi dengan jadwal acara
pada hari ini jika acara tidak pada hari tersebut maka acara tidak muncul. Anggota
yang akan melakukan absensi harus memalui dua tahap validasi yang pertama
validasi LBS dengan mencocokan lokasi anggota dengan lokasi acara. Kemudian
yang kedua yaitu validasi foto wajah dengan melakukan foto wajah di dalam
aplikasi. Berikut adalah kode program untuk proses absensi pada Kode Program 5.

20
Kode Program 5 Proses absensi
1. private void cekLokasi(){
2. progressDialog = new ProgressDialog(AbsenSubmitActivity.this);
3. progressDialog.setMessage("Loading..."); // Setting Message
4. progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
5. float lat_a = Float.valueOf(lat);
6. float lng_a = Float.valueOf(longe);
7. float lat_b = (float) mLastLocation.getLatitude();
8. float lng_b = (float) mLastLocation.getLongitude();
9. double earthRadius = 3958.75;
10. double latDiff = Math.toRadians(lat_b-lat_a);
11. double lngDiff = Math.toRadians(lng_b-lng_a);
12. double a = Math.sin(latDiff /2) * Math.sin(latDiff /2) +
13. Math.cos(Math.toRadians(lat_a)) * Math.cos(Math.toRadians(lat_b))
14. Math.sin(lngDiff /2) * Math.sin(lngDiff /2);
15. double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
16. double distance = earthRadius * c;
17. int meterConversion = 1609;
18. float meter = (float) (distance * meterConversion);
19. if ((int) meter > distance2){
20. ada = false;
21. showToast("Anda tidak pada jangkauan lokasi acara ini!");
22. }
23. if (ada){
24. if (first) {
25. progressDialog.show();
26. mAuth = FirebaseAuth.getInstance();
27. Date currentTime = Calendar.getInstance().getTime();
28. SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
29. String tanggal = formatter.format(currentTime);
30. Map<String, Object> absen = new HashMap<>();
31. absen.put("id_acara", id_acara);
32. absen.put("nama_acara", nama_acara);
33. absen.put("id_user", mAuth.getCurrentUser().getUid());
34. absen.put("nama_user", nama_user);
35. absen.put("des_lokasi", des_lokasi);
36. absen.put("tanggal_acara", tanggal);
37. absen.put("tanggal_absen", currentTime);
38. db = FirebaseFirestore.getInstance();
39. db.collection("Absen")
40. .add(absen)
41. .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
42. @Override
43. public void onSuccess(DocumentReference documentReference) {
44. progressDialog.dismiss();
45. showToast("Anda berhasil absen!");
46. finish();}})
47. .addOnFailureListener(new OnFailureListener() {
48. @Override
49. public void onFailure(@NonNull Exception e) {
50. Log.w(TAG, "Error adding document", e);
51. }}); first = false;}}}

21
3.4 Role Admin
• Login akun admin

Gambar 3.9 Form Login

Login menggunakan akun admin yang sudah ditentukan, yaitu dengan


menggunakan username : admin@aplikasi.com dan password : 123456.

22
• Halaman home admin

Gambar 4.0 Halaman home admin

Halaman ini merupakan halaman home untuk admin. Terdapat tiga menu yaitu data
anggota, data penyelenggara dan data acara. Menu data anggota digunakan untuk
mengolah data anggota. Menu penyelenggara digunakan untuk mengolah data
penyelenggara. Menu data anggota digunakan mengolah data acara.

23
• Halaman data penyelenggara

Gambar 4.1 Halaman data penyelenggara

Halaman ini merupakan halaman menu data penyelenggara. Menu ini digunakan
untuk mengelola data penyelenggara.

24
• Halaman data anggota

Gambar 4.2 Halaman data anggota

Halaman ini merupakan halaman menu data anggota. Menu ini digunakan untuk
mengelola data anggota.

25
• Halaman data acara

Gambar 4.1 Halaman data acara

Halaman ini merupakan halaman menu data acara. Menu ini digunakan untuk
mengelola data acara.

26
BAB 4. KESIMPULAN

Aplikasi AbsenLoc online merupakan aplikasi yang dibangun berbasis


android. Dalam satu aplikasi terdapat tiga role yaitu role penyelenggara, anggota
dan admin. Role untuk penyelenggara diperuntukan bagi penyelenggara yang akan
menyelenggarakan acara dengan menentukan lokasi dan jadwal acara, role anggota
diperuntukan untuk peserta atau anggota yang akan melakukan absensi. Sedangkan
role admin diperuntukan bagi administrator yang bertugas dalam mengolah data
anggota, penyelenggara dan acara.

Aplikasi ini membantu dan memudahkan penyelanggara dalam mengelola


data peserta dan dengan menggunakan teknologi LBS dapat mengurangi antrian
panjang saat melakukan proses absensi. Aplikasi AbsenLoc online sedang dalam
tahap pengembangan yaitu memberikan peningkatan validasi terhadap anggota
yang akan melakukan absensi, dengan memanfaatkan teknologi face recognition
sehingga anggota yang akan melakukan absensi harus melalui dua tahap validasi
yaitu dengan validasi LBS dan face recognition.

27
REFERENSI

[1] Location Based Services on Mobile in India For IAMAI - Version: 14 April
2008 http://www.iamai.in/Upload/policy/LBS_Draft_Indicus.pdf.

[2] Mahmoud, Q. H. 2004. J2ME and Location based Services.


http://developers.sun.com/mobility/apis/articles/location. [Diakses 8 April
2020].

[3] Safaat, N. 2011. Pemrograman Aplikasi Mobile Smartphone dan Tablet PC


Berbasis Android. Bandung:Informatika.

[4] Mobile OS Market Share. August, 2018. [Online]. Tersedia:


https://www.statista.com/statistics/266136/global-market-share-held-by-
smartphone-operating-systems/. [Diakses 24 Januari, 2019].

[5] Yuliana. Location Based Service. 2013. [Online]. Tersedia:


http://yuliana.lecturer.pens.ac.id/Android/Materi/Google%20Map/LBS%2
02013.pdf [Diakses 10 April 2020].

[6] Sugiyono. 2013. Metode Penelitian Kuantitatif, Kualitatif, Dan R&D.


Bandung:Penerbit Alfabet

28

Anda mungkin juga menyukai