允许用户标记每天一次的出勤率

问题描述 投票:0回答:3

我正在研究出勤管理系统。我希望用户每天标记一次出勤率。

我如何设置一个限制允许用户每天标记一次..我点击按钮后点击或我可以在数据库逻辑中做一些事情。

           DBreference.addChildEventListener(new ChildEventListener() {
               @Override
               public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                   currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());

                   String present ="Present";
                   DBreference.child("Attendance").child(currentDateTimeString).setValue(present);
                   Toast.makeText(ProfileAct.this, "Marked as Present", Toast.LENGTH_SHORT).show();
               }

               @Override
               public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

               }

               @Override
               public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

               }

               @Override
               public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

               }

               @Override
               public void onCancelled(@NonNull DatabaseError databaseError) {

               }
           });
            break;
        case R.id.cardLeave:
            DBreference.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                    currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());
                    String present ="On Leave";
                    DBreference.child("Attendance").child(currentDateTimeString).setValue(present);
                    Toast.makeText(ProfileAct.this, "Marked As Leave", Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

                }

                @Override
                public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

                }

                @Override
                public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });`
android firebase firebase-realtime-database
3个回答
0
投票

只为当天而不是时间添加一个监听器到您的路径:

Date cDate = new Date();
String fDate = new SimpleDateFormat("yyyy-MM-dd").format(cDate);

e.g. DBreference.child("Attendance").(fDate)

并在此路径上添加值“Present”或“Absent”。

然后在此路径上附加ValueEventListener。并且您在onDataChange中获得此路径中存在的值的回调,如果找到值,您可以禁用按钮或视图。

ValueEventListener Documentation


0
投票

您的数据库需要根据日期创建每日条目,然后您将从前端检查用户是否参加,如果是,那么您需要在数据库中存储布尔标志,您必须在用户出席之前检查他/她已经给过或不使用那面旗帜。


0
投票

最好的事情是实际上有一个出勤节点。 Firebase鼓励平面数据而不是嵌套数据。然后,您可以为每天创建一个孩子,用户可以检查当天。这样即使您的数据查询也更容易。这是一个例子

attendance : {
    "12/03/2019" : {
        "UID" : "time stamp"
    },
    "11/03/2019" : {
        "UID" : "time stamp"
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.