📸 Face Camera
+
+ + +
📋 Lịch sử điểm danh
+ +| Tên học sinh | +Thời gian | +Camera ID | +
|---|
diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..b2cf384 Binary files /dev/null and b/.DS_Store differ diff --git a/TrackingToolWeb/.DS_Store b/TrackingToolWeb/.DS_Store new file mode 100644 index 0000000..8a11fce Binary files /dev/null and b/TrackingToolWeb/.DS_Store differ diff --git a/TrackingToolWeb/.gitignore b/TrackingToolWeb/.gitignore new file mode 100644 index 0000000..d8a04bd --- /dev/null +++ b/TrackingToolWeb/.gitignore @@ -0,0 +1,2 @@ +path +__pycache__ \ No newline at end of file diff --git a/TrackingToolWeb/README.md b/TrackingToolWeb/README.md new file mode 100644 index 0000000..b39f14e --- /dev/null +++ b/TrackingToolWeb/README.md @@ -0,0 +1,3 @@ +Run client: npm run dev or npm run build && npm run preview + +Run server uvicorn main:app --reload diff --git a/TrackingToolWeb/a.json b/TrackingToolWeb/a.json new file mode 100644 index 0000000..c96fa9b --- /dev/null +++ b/TrackingToolWeb/a.json @@ -0,0 +1,2857 @@ +[ + { + "user": { + "id": 2, + "name": "PHAN QUOC BAO", + "email": "ryder.ph@apactech.io", + "email_verified_at": null, + "forgot_code": null, + "permission": "staff,admin", + "created_at": null, + "updated_at": "2025-09-25T00:15:44.000000Z", + "qrcode": "qrcode/qrcode_2.svg", + "avatar": "avatars/Us2SJQTDjqeORdlVMTUJG4E5exMi5VUhfQgGZfs3.jpg", + "is_permanent": 1, + "permanent_date": "0000-00-00", + "is_separated": 0, + "path_avatar": "https://ms.prology.net/storage/avatars/Us2SJQTDjqeORdlVMTUJG4E5exMi5VUhfQgGZfs3.jpg" + }, + "history": [ + { + "values": [ + { + "id": 18850, + "name": "PHAN QUOC BAO", + "user_id": 2, + "status": "check in", + "time_string": "2025-12-01 07:21:45.077630", + "created_at": "2025-12-01 07:21:45", + "updated_at": "2025-12-01 07:21:50", + "image": "screenshot/PHAN QUOC BAO_check in_at_2025_12_01_07_21_45.png" + }, + { + "id": 18868, + "name": "PHAN QUOC BAO", + "user_id": 2, + "status": "check out", + "time_string": "2025-12-01 16:31:01.846222", + "created_at": "2025-12-01 16:31:02", + "updated_at": "2025-12-01 16:31:07", + "image": "screenshot/PHAN QUOC BAO_check out_at_2025_12_01_16_31_01.png" + } + ], + "notes": [], + "total": 32957, + "day": 1 + }, + { + "values": [ + { + "id": 18881, + "name": "PHAN QUOC BAO", + "user_id": 2, + "status": "check in", + "time_string": "2025-12-02 07:17:54.948932", + "created_at": "2025-12-02 07:17:55", + "updated_at": "2025-12-02 07:18:00", + "image": "screenshot/PHAN QUOC BAO_check in_at_2025_12_02_07_17_54.png" + }, + { + "id": 18905, + "name": "PHAN QUOC BAO", + "user_id": 2, + "status": "check out", + "time_string": "2025-12-02 16:31:16.359912", + "created_at": "2025-12-02 16:31:16", + "updated_at": "2025-12-02 16:31:21", + "image": "screenshot/PHAN QUOC BAO_check out_at_2025_12_02_16_31_16.png" + } + ], + "notes": [], + "total": 33201, + "day": 2 + }, + { + "values": [ + { + "id": 18925, + "name": "PHAN QUOC BAO", + "user_id": 2, + "status": "check in", + "time_string": "2025-12-03 07:57:18.065627", + "created_at": "2025-12-03 07:57:18", + "updated_at": "2025-12-03 07:57:23", + "image": "screenshot/PHAN QUOC BAO_check in_at_2025_12_03_07_57_18.png" + }, + { + "id": 18933, + "name": "PHAN QUOC BAO", + "user_id": 2, + "status": "check out", + "time_string": "2025-12-03 16:31:54.601910", + "created_at": "2025-12-03 16:31:55", + "updated_at": "2025-12-03 16:32:01", + "image": "screenshot/PHAN QUOC BAO_check out_at_2025_12_03_16_31_54.png" + } + ], + "notes": [], + "total": 30877, + "day": 3 + }, + { + "values": [ + { + "id": 18948, + "name": "PHAN QUOC BAO", + "user_id": 2, + "status": "check in", + "time_string": "2025-12-04 07:23:54.346186", + "created_at": "2025-12-04 07:23:55", + "updated_at": "2025-12-04 07:24:01", + "image": "screenshot/PHAN QUOC BAO_check in_at_2025_12_04_07_23_54.png" + }, + { + "id": 18962, + "name": "PHAN QUOC BAO", + "user_id": 2, + "status": "check out", + "time_string": "2025-12-04 16:32:10.370090", + "created_at": "2025-12-04 16:32:11", + "updated_at": "2025-12-04 16:32:17", + "image": "screenshot/PHAN QUOC BAO_check out_at_2025_12_04_16_32_10.png" + } + ], + "notes": [], + "total": 32896, + "day": 4 + }, + { + "values": [ + { + "id": 18978, + "name": "PHAN QUOC BAO", + "user_id": 2, + "status": "check in", + "time_string": "2025-12-05 07:23:32.282770", + "created_at": "2025-12-05 07:23:32", + "updated_at": "2025-12-05 07:23:39", + "image": "screenshot/PHAN QUOC BAO_check in_at_2025_12_05_07_23_32.png" + }, + { + "id": 18992, + "name": "PHAN QUOC BAO", + "user_id": 2, + "status": "check out", + "time_string": "2025-12-05 16:32:12.333410", + "created_at": "2025-12-05 16:32:13", + "updated_at": "2025-12-05 16:32:19", + "image": "screenshot/PHAN QUOC BAO_check out_at_2025_12_05_16_32_12.png" + } + ], + "notes": [], + "total": 32921, + "day": 5 + }, + { + "values": [ + { + "id": 19011, + "name": "PHAN QUOC BAO", + "user_id": 2, + "status": "check in", + "time_string": "2025-12-06 07:43:21.777298", + "created_at": "2025-12-06 07:43:22", + "updated_at": "2025-12-06 07:43:29", + "image": "screenshot/PHAN QUOC BAO_check in_at_2025_12_06_07_43_21.png" + }, + { + "id": 19018, + "name": "PHAN QUOC BAO", + "user_id": 2, + "status": "check out", + "time_string": "2025-12-06 11:31:13.157186", + "created_at": "2025-12-06 11:31:13", + "updated_at": "2025-12-06 11:31:19", + "image": "screenshot/PHAN QUOC BAO_check out_at_2025_12_06_11_31_13.png" + } + ], + "notes": [], + "total": 13671, + "day": 6 + }, + { + "values": [ + { + "id": 19028, + "name": "PHAN QUOC BAO", + "user_id": 2, + "status": "check in", + "time_string": "2025-12-08 07:26:28.034998", + "created_at": "2025-12-08 07:26:28", + "updated_at": "2025-12-08 07:26:35", + "image": "screenshot/PHAN QUOC BAO_check in_at_2025_12_08_07_26_28.png" + }, + { + "id": 19047, + "name": "PHAN QUOC BAO", + "user_id": 2, + "status": "check out", + "time_string": "2025-12-08 16:32:32.889885", + "created_at": "2025-12-08 16:32:33", + "updated_at": "2025-12-08 16:32:38", + "image": "screenshot/PHAN QUOC BAO_check out_at_2025_12_08_16_32_32.png" + } + ], + "notes": [], + "total": 32765, + "day": 8 + }, + { + "values": [ + { + "id": 19063, + "name": "PHAN QUOC BAO", + "user_id": 2, + "status": "check in", + "time_string": "2025-12-09 07:22:55.510278", + "created_at": "2025-12-09 07:22:56", + "updated_at": "2025-12-09 07:23:01", + "image": "screenshot/PHAN QUOC BAO_check in_at_2025_12_09_07_22_55.png" + } + ], + "notes": [], + "total": 0, + "day": 9 + } + ] + }, + { + "user": { + "id": 3, + "name": "PHAM VAN HUYNH", + "email": "jon.ph@apactech.io", + "email_verified_at": null, + "forgot_code": "EKxX8fSpbtfviejK", + "permission": "staff,admin", + "created_at": null, + "updated_at": "2025-08-15T03:16:59.000000Z", + "qrcode": "qrcode/qrcode_3.svg", + "avatar": "", + "is_permanent": 1, + "permanent_date": "0000-00-00", + "is_separated": 0, + "path_avatar": "https://ms.prology.net/img/avatar.png" + }, + "history": [ + { + "values": [ + { + "id": 18855, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check in", + "time_string": "2025-12-01 07:31:58.942770", + "created_at": "2025-12-01 07:31:59", + "updated_at": "2025-12-01 07:32:04", + "image": "screenshot/PHAM VAN HUYNH_check in_at_2025_12_01_07_31_58.png" + }, + { + "id": 18864, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check out", + "time_string": "2025-12-01 11:48:57.255567", + "created_at": "2025-12-01 11:48:57", + "updated_at": "2025-12-01 11:49:02", + "image": "screenshot/PHAM VAN HUYNH_check out_at_2025_12_01_11_48_57.png" + }, + { + "id": 18866, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check in", + "time_string": "2025-12-01 13:02:25.532096", + "created_at": "2025-12-01 13:02:25", + "updated_at": "2025-12-01 13:02:30", + "image": "screenshot/PHAM VAN HUYNH_check in_at_2025_12_01_13_02_25.png" + }, + { + "id": 18891, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check out", + "time_string": "2025-12-01 17:00:00", + "created_at": "2025-12-01 17:00:00", + "updated_at": "2025-12-02 07:41:03", + "image": "" + } + ], + "notes": [], + "total": 29673, + "day": 1 + }, + { + "values": [ + { + "id": 18885, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check in", + "time_string": "2025-12-02 07:31:41.909615", + "created_at": "2025-12-02 07:31:42", + "updated_at": "2025-12-02 07:31:46", + "image": "screenshot/PHAM VAN HUYNH_check out_at_2025_12_02_07_31_41.png" + }, + { + "id": 18894, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check out", + "time_string": "2025-12-02 11:31:01.780303", + "created_at": "2025-12-02 11:31:02", + "updated_at": "2025-12-02 11:31:06", + "image": "screenshot/PHAM VAN HUYNH_check in_at_2025_12_02_11_31_01.png" + }, + { + "id": 18898, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check in", + "time_string": "2025-12-02 13:01:52.299142", + "created_at": "2025-12-02 13:01:52", + "updated_at": "2025-12-02 13:01:57", + "image": "screenshot/PHAM VAN HUYNH_check out_at_2025_12_02_13_01_52.png" + }, + { + "id": 18919, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check out", + "time_string": "2025-12-02 17:00:00", + "created_at": "2025-12-02 17:00:00", + "updated_at": "2025-12-03 07:29:10", + "image": "" + } + ], + "notes": [], + "total": 28648, + "day": 2 + }, + { + "values": [ + { + "id": 18922, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check in", + "time_string": "2025-12-03 07:36:42.101495", + "created_at": "2025-12-03 07:36:42", + "updated_at": "2025-12-03 07:36:47", + "image": "screenshot/PHAM VAN HUYNH_check in_at_2025_12_03_07_36_42.png" + }, + { + "id": 18928, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check out", + "time_string": "2025-12-03 11:34:52.521811", + "created_at": "2025-12-03 11:34:53", + "updated_at": "2025-12-03 11:34:58", + "image": "screenshot/PHAM VAN HUYNH_check out_at_2025_12_03_11_34_52.png" + }, + { + "id": 18931, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check in", + "time_string": "2025-12-03 13:01:58.361426", + "created_at": "2025-12-03 13:01:58", + "updated_at": "2025-12-03 13:02:03", + "image": "screenshot/PHAM VAN HUYNH_check in_at_2025_12_03_13_01_58.png" + }, + { + "id": 18941, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check out", + "time_string": "2025-12-03 16:56:11.045154", + "created_at": "2025-12-03 16:56:11", + "updated_at": "2025-12-03 16:56:17", + "image": "screenshot/PHAM VAN HUYNH_check out_at_2025_12_03_16_56_11.png" + } + ], + "notes": [], + "total": 28344, + "day": 3 + }, + { + "values": [ + { + "id": 18955, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check in", + "time_string": "2025-12-04 07:39:58.011662", + "created_at": "2025-12-04 07:39:58", + "updated_at": "2025-12-04 07:40:04", + "image": "screenshot/PHAM VAN HUYNH_check in_at_2025_12_04_07_39_58.png" + }, + { + "id": 18958, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check out", + "time_string": "2025-12-04 11:35:32.817275", + "created_at": "2025-12-04 11:35:33", + "updated_at": "2025-12-04 11:35:39", + "image": "screenshot/PHAM VAN HUYNH_check out_at_2025_12_04_11_35_32.png" + }, + { + "id": 18961, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check in", + "time_string": "2025-12-04 13:02:10", + "created_at": "2025-12-04 13:02:10", + "updated_at": "2025-12-04 13:02:34", + "image": "" + }, + { + "id": 18969, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check out", + "time_string": "2025-12-04 17:00:04.467978", + "created_at": "2025-12-04 17:00:05", + "updated_at": "2025-12-04 17:00:11", + "image": "screenshot/PHAM VAN HUYNH_check in_at_2025_12_04_17_00_04.png" + } + ], + "notes": [], + "total": 28410, + "day": 4 + }, + { + "values": [ + { + "id": 18981, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check in", + "time_string": "2025-12-05 07:28:05.428022", + "created_at": "2025-12-05 07:28:06", + "updated_at": "2025-12-05 07:28:12", + "image": "screenshot/PHAM VAN HUYNH_check out_at_2025_12_05_07_28_05.png" + }, + { + "id": 18986, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check out", + "time_string": "2025-12-05 11:43:33.885469", + "created_at": "2025-12-05 11:43:34", + "updated_at": "2025-12-05 11:43:41", + "image": "screenshot/PHAM VAN HUYNH_check in_at_2025_12_05_11_43_33.png" + }, + { + "id": 18991, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check in", + "time_string": "2025-12-05 13:01:00", + "created_at": "2025-12-05 13:01:00", + "updated_at": "2025-12-05 16:17:09", + "image": "" + }, + { + "id": 18998, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check out", + "time_string": "2025-12-05 16:55:45", + "created_at": "2025-12-05 16:55:45", + "updated_at": "2025-12-05 16:56:10", + "image": "" + } + ], + "notes": [], + "total": 29413, + "day": 5 + }, + { + "values": [ + { + "id": 19007, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check in", + "time_string": "2025-12-06 07:36:37.990316", + "created_at": "2025-12-06 07:36:38", + "updated_at": "2025-12-06 07:36:44", + "image": "screenshot/PHAM VAN HUYNH_check in_at_2025_12_06_07_36_37.png" + }, + { + "id": 19013, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check out", + "time_string": "2025-12-06 11:31:00", + "created_at": "2025-12-06 11:31:00", + "updated_at": "2025-12-06 09:35:42", + "image": "" + } + ], + "notes": [], + "total": 14062, + "day": 6 + }, + { + "values": [ + { + "id": 19031, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check in", + "time_string": "2025-12-08 07:37:27.191265", + "created_at": "2025-12-08 07:37:27", + "updated_at": "2025-12-08 07:37:34", + "image": "screenshot/PHAM VAN HUYNH_check in_at_2025_12_08_07_37_27.png" + }, + { + "id": 19039, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check out", + "time_string": "2025-12-08 11:34:00.622003", + "created_at": "2025-12-08 11:34:01", + "updated_at": "2025-12-08 11:34:07", + "image": "screenshot/PHAM VAN HUYNH_check out_at_2025_12_08_11_34_00.png" + }, + { + "id": 19052, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check in", + "time_string": "2025-12-08 13:01:00", + "created_at": "2025-12-08 13:01:00", + "updated_at": "2025-12-08 16:54:03", + "image": "" + }, + { + "id": 19053, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check out", + "time_string": "2025-12-08 16:59:00", + "created_at": "2025-12-08 16:59:00", + "updated_at": "2025-12-08 16:54:21", + "image": "" + } + ], + "notes": [], + "total": 28474, + "day": 8 + }, + { + "values": [ + { + "id": 19069, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check in", + "time_string": "2025-12-09 07:36:40.675248", + "created_at": "2025-12-09 07:36:41", + "updated_at": "2025-12-09 07:36:46", + "image": "screenshot/PHAM VAN HUYNH_check in_at_2025_12_09_07_36_40.png" + }, + { + "id": 19077, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check out", + "time_string": "2025-12-09 13:01:00", + "created_at": "2025-12-09 13:01:00", + "updated_at": "2025-12-09 14:19:42", + "image": "" + }, + { + "id": 19078, + "name": "PHAM VAN HUYNH", + "user_id": 3, + "status": "check in", + "time_string": "2025-12-09 13:05:00", + "created_at": "2025-12-09 13:05:00", + "updated_at": "2025-12-09 14:20:01", + "image": "" + } + ], + "notes": [], + "total": 19459, + "day": 9 + }, + { + "values": [], + "notes": [ + { + "id": 630, + "timeType": "ALL", + "timeTypeName": "C\u1ea3 Ng\u00e0y", + "reason": "ONLEAVE", + "reasonName": "Ngh\u1ec9 ph\u00e9p", + "note": "vi\u1ec7c gia \u0111inh" + } + ], + "total": 0, + "day": 19 + }, + { + "values": [], + "notes": [ + { + "id": 631, + "timeType": "ALL", + "timeTypeName": "C\u1ea3 Ng\u00e0y", + "reason": "ONLEAVE", + "reasonName": "Ngh\u1ec9 ph\u00e9p", + "note": "vi\u1ec7c gia \u0111\u00ecnh" + } + ], + "total": 0, + "day": 22 + }, + { + "values": [], + "notes": [ + { + "id": 632, + "timeType": "ALL", + "timeTypeName": "C\u1ea3 Ng\u00e0y", + "reason": "ONLEAVE", + "reasonName": "Ngh\u1ec9 ph\u00e9p", + "note": "vi\u1ec7c gia \u0111\u00ecnh" + } + ], + "total": 0, + "day": 23 + } + ] + }, + { + "user": { + "id": 4, + "name": "VO MINH TRUONG", + "email": "vincent.vo@apactech.io", + "email_verified_at": null, + "forgot_code": null, + "permission": "staff", + "created_at": null, + "updated_at": "2025-09-05T10:06:13.000000Z", + "qrcode": "qrcode/qrcode_4.svg", + "avatar": "avatars/UXk5UKfCmIrHMgF0sik7t0Gf0bOQ62lmwk2SVabb.jpg", + "is_permanent": 1, + "permanent_date": "0000-00-00", + "is_separated": 0, + "path_avatar": "https://ms.prology.net/storage/avatars/UXk5UKfCmIrHMgF0sik7t0Gf0bOQ62lmwk2SVabb.jpg" + }, + "history": [ + { + "values": [ + { + "id": 18858, + "name": "VO MINH TRUONG", + "user_id": 4, + "status": "check in", + "time_string": "2025-12-01 07:37:19.131223", + "created_at": "2025-12-01 07:37:19", + "updated_at": "2025-12-01 07:37:24", + "image": "screenshot/VO MINH TRUONG_check in_at_2025_12_01_07_37_19.png" + }, + { + "id": 18893, + "name": "VO MINH TRUONG", + "user_id": 4, + "status": "check out", + "time_string": "2025-12-01 17:00:00", + "created_at": "2025-12-01 17:00:00", + "updated_at": "2025-12-02 07:42:23", + "image": "" + } + ], + "notes": [], + "total": 33761, + "day": 1 + }, + { + "values": [ + { + "id": 18887, + "name": "VO MINH TRUONG", + "user_id": 4, + "status": "check in", + "time_string": "2025-12-02 07:33:44.428686", + "created_at": "2025-12-02 07:33:44", + "updated_at": "2025-12-02 07:33:49", + "image": "screenshot/VO MINH TRUONG_check out_at_2025_12_02_07_33_44.png" + }, + { + "id": 18910, + "name": "VO MINH TRUONG", + "user_id": 4, + "status": "check out", + "time_string": "2025-12-02 16:54:22.793843", + "created_at": "2025-12-02 16:54:24", + "updated_at": "2025-12-02 16:54:34", + "image": "screenshot/VO MINH TRUONG_check in_at_2025_12_02_16_54_22.png" + } + ], + "notes": [], + "total": 33640, + "day": 2 + }, + { + "values": [ + { + "id": 18924, + "name": "VO MINH TRUONG", + "user_id": 4, + "status": "check in", + "time_string": "2025-12-03 07:42:16.610797", + "created_at": "2025-12-03 07:42:17", + "updated_at": "2025-12-03 07:42:22", + "image": "screenshot/VO MINH TRUONG_check in_at_2025_12_03_07_42_16.png" + }, + { + "id": 18951, + "name": "VO MINH TRUONG", + "user_id": 4, + "status": "check out", + "time_string": "2025-12-03 17:00:00", + "created_at": "2025-12-03 17:00:00", + "updated_at": "2025-12-04 07:32:52", + "image": "" + } + ], + "notes": [], + "total": 33463, + "day": 3 + }, + { + "values": [ + { + "id": 18954, + "name": "VO MINH TRUONG", + "user_id": 4, + "status": "check in", + "time_string": "2025-12-04 07:39:03.808760", + "created_at": "2025-12-04 07:39:04", + "updated_at": "2025-12-04 07:39:10", + "image": "screenshot/VO MINH TRUONG_check out_at_2025_12_04_07_39_03.png" + }, + { + "id": 18971, + "name": "VO MINH TRUONG", + "user_id": 4, + "status": "check out", + "time_string": "2025-12-04 17:00:59.078275", + "created_at": "2025-12-04 17:00:59", + "updated_at": "2025-12-04 17:01:05", + "image": "screenshot/VO MINH TRUONG_check in_at_2025_12_04_17_00_59.png" + } + ], + "notes": [], + "total": 33715, + "day": 4 + }, + { + "values": [ + { + "id": 18984, + "name": "VO MINH TRUONG", + "user_id": 4, + "status": "check in", + "time_string": "2025-12-05 07:35:05.900729", + "created_at": "2025-12-05 07:35:06", + "updated_at": "2025-12-05 07:35:12", + "image": "screenshot/VO MINH TRUONG_check out_at_2025_12_05_07_35_05.png" + }, + { + "id": 19002, + "name": "VO MINH TRUONG", + "user_id": 4, + "status": "check out", + "time_string": "2025-12-05 17:12:33.779494", + "created_at": "2025-12-05 17:12:34", + "updated_at": "2025-12-05 17:12:40", + "image": "screenshot/VO MINH TRUONG_check in_at_2025_12_05_17_12_33.png" + } + ], + "notes": [], + "total": 34648, + "day": 5 + }, + { + "values": [ + { + "id": 19012, + "name": "VO MINH TRUONG", + "user_id": 4, + "status": "check in", + "time_string": "2025-12-06 07:47:33.468667", + "created_at": "2025-12-06 07:47:34", + "updated_at": "2025-12-06 07:47:40", + "image": "screenshot/VO MINH TRUONG_check in_at_2025_12_06_07_47_33.png" + }, + { + "id": 19019, + "name": "VO MINH TRUONG", + "user_id": 4, + "status": "check out", + "time_string": "2025-12-06 11:32:52.718995", + "created_at": "2025-12-06 11:32:53", + "updated_at": "2025-12-06 11:32:59", + "image": "screenshot/VO MINH TRUONG_check out_at_2025_12_06_11_32_52.png" + } + ], + "notes": [], + "total": 13519, + "day": 6 + }, + { + "values": [ + { + "id": 19032, + "name": "VO MINH TRUONG", + "user_id": 4, + "status": "check in", + "time_string": "2025-12-08 07:40:47.907764", + "created_at": "2025-12-08 07:40:48", + "updated_at": "2025-12-08 07:40:55", + "image": "screenshot/VO MINH TRUONG_check in_at_2025_12_08_07_40_47.png" + }, + { + "id": 19056, + "name": "VO MINH TRUONG", + "user_id": 4, + "status": "check out", + "time_string": "2025-12-08 16:59:29.583991", + "created_at": "2025-12-08 16:59:30", + "updated_at": "2025-12-08 16:59:35", + "image": "screenshot/VO MINH TRUONG_check out_at_2025_12_08_16_59_29.png" + } + ], + "notes": [], + "total": 33522, + "day": 8 + }, + { + "values": [ + { + "id": 19070, + "name": "VO MINH TRUONG", + "user_id": 4, + "status": "check in", + "time_string": "2025-12-09 07:38:17.786990", + "created_at": "2025-12-09 07:38:18", + "updated_at": "2025-12-09 07:38:23", + "image": "screenshot/VO MINH TRUONG_check in_at_2025_12_09_07_38_17.png" + } + ], + "notes": [], + "total": 0, + "day": 9 + } + ] + }, + { + "user": { + "id": 6, + "name": "NGUYEN VO TINH", + "email": "alex.ng@apactech.io", + "email_verified_at": null, + "forgot_code": null, + "permission": "staff", + "created_at": null, + "updated_at": "2024-09-10T17:07:07.000000Z", + "qrcode": "qrcode/qrcode_6.svg", + "avatar": "", + "is_permanent": 1, + "permanent_date": "0000-00-00", + "is_separated": 0, + "path_avatar": "https://ms.prology.net/img/avatar.png" + }, + "history": [ + { + "values": [ + { + "id": 18849, + "name": "NGUYEN VO TINH", + "user_id": 6, + "status": "check in", + "time_string": "2025-12-01 07:19:50.920048", + "created_at": "2025-12-01 07:19:51", + "updated_at": "2025-12-01 07:19:57", + "image": "screenshot/NGUYEN VO TINH_check in_at_2025_12_01_07_19_50.png" + }, + { + "id": 18872, + "name": "NGUYEN VO TINH", + "user_id": 6, + "status": "check out", + "time_string": "2025-12-01 16:39:41.581694", + "created_at": "2025-12-01 16:39:42", + "updated_at": "2025-12-01 16:39:46", + "image": "screenshot/NGUYEN VO TINH_check out_at_2025_12_01_16_39_41.png" + } + ], + "notes": [], + "total": 33591, + "day": 1 + }, + { + "values": [ + { + "id": 18878, + "name": "NGUYEN VO TINH", + "user_id": 6, + "status": "check in", + "time_string": "2025-12-02 07:14:37.858595", + "created_at": "2025-12-02 07:14:38", + "updated_at": "2025-12-02 07:14:43", + "image": "screenshot/NGUYEN VO TINH_check in_at_2025_12_02_07_14_37.png" + }, + { + "id": 18906, + "name": "NGUYEN VO TINH", + "user_id": 6, + "status": "check out", + "time_string": "2025-12-02 16:46:56.302372", + "created_at": "2025-12-02 16:46:56", + "updated_at": "2025-12-02 16:47:01", + "image": "screenshot/NGUYEN VO TINH_check out_at_2025_12_02_16_46_56.png" + } + ], + "notes": [], + "total": 34338, + "day": 2 + }, + { + "values": [ + { + "id": 18916, + "name": "NGUYEN VO TINH", + "user_id": 6, + "status": "check in", + "time_string": "2025-12-03 07:17:33.920103", + "created_at": "2025-12-03 07:17:34", + "updated_at": "2025-12-03 07:17:39", + "image": "screenshot/NGUYEN VO TINH_check in_at_2025_12_03_07_17_33.png" + }, + { + "id": 18937, + "name": "NGUYEN VO TINH", + "user_id": 6, + "status": "check out", + "time_string": "2025-12-03 16:40:19.167463", + "created_at": "2025-12-03 16:40:19", + "updated_at": "2025-12-03 16:40:25", + "image": "screenshot/NGUYEN VO TINH_check out_at_2025_12_03_16_40_19.png" + } + ], + "notes": [], + "total": 33765, + "day": 3 + }, + { + "values": [ + { + "id": 18945, + "name": "NGUYEN VO TINH", + "user_id": 6, + "status": "check in", + "time_string": "2025-12-04 07:12:56.057120", + "created_at": "2025-12-04 07:12:56", + "updated_at": "2025-12-04 07:13:02", + "image": "screenshot/NGUYEN VO TINH_check in_at_2025_12_04_07_12_56.png" + }, + { + "id": 18963, + "name": "NGUYEN VO TINH", + "user_id": 6, + "status": "check out", + "time_string": "2025-12-04 16:42:07.258174", + "created_at": "2025-12-04 16:42:08", + "updated_at": "2025-12-04 16:42:13", + "image": "screenshot/NGUYEN VO TINH_check out_at_2025_12_04_16_42_07.png" + } + ], + "notes": [], + "total": 34152, + "day": 4 + }, + { + "values": [ + { + "id": 18977, + "name": "NGUYEN VO TINH", + "user_id": 6, + "status": "check in", + "time_string": "2025-12-05 07:22:18.357220", + "created_at": "2025-12-05 07:22:19", + "updated_at": "2025-12-05 07:22:25", + "image": "screenshot/NGUYEN VO TINH_check in_at_2025_12_05_07_22_18.png" + }, + { + "id": 18993, + "name": "NGUYEN VO TINH", + "user_id": 6, + "status": "check out", + "time_string": "2025-12-05 16:40:35.865455", + "created_at": "2025-12-05 16:40:36", + "updated_at": "2025-12-05 16:40:42", + "image": "screenshot/NGUYEN VO TINH_check out_at_2025_12_05_16_40_35.png" + } + ], + "notes": [], + "total": 33497, + "day": 5 + }, + { + "values": [], + "notes": [ + { + "id": 660, + "timeType": "S", + "timeTypeName": "Bu\u1ed5i S\u00e1ng", + "reason": "ONLEAVE", + "reasonName": "Ngh\u1ec9 ph\u00e9p", + "note": "\u0110\u1ed5i ng\u00e0y 5 sang ng\u00e0y 6/12" + } + ], + "total": 0, + "day": 6 + }, + { + "values": [ + { + "id": 19023, + "name": "NGUYEN VO TINH", + "user_id": 6, + "status": "check in", + "time_string": "2025-12-08 07:13:13.001372", + "created_at": "2025-12-08 07:13:13", + "updated_at": "2025-12-08 07:13:24", + "image": "screenshot/NGUYEN VO TINH_check in_at_2025_12_08_07_13_13.png" + }, + { + "id": 19049, + "name": "NGUYEN VO TINH", + "user_id": 6, + "status": "check out", + "time_string": "2025-12-08 16:45:38.505760", + "created_at": "2025-12-08 16:45:39", + "updated_at": "2025-12-08 16:45:44", + "image": "screenshot/NGUYEN VO TINH_check in_at_2025_12_08_16_45_38.png" + } + ], + "notes": [], + "total": 34346, + "day": 8 + }, + { + "values": [ + { + "id": 19060, + "name": "NGUYEN VO TINH", + "user_id": 6, + "status": "check in", + "time_string": "2025-12-09 07:10:23.823526", + "created_at": "2025-12-09 07:10:24", + "updated_at": "2025-12-09 07:10:29", + "image": "screenshot/NGUYEN VO TINH_check out_at_2025_12_09_07_10_23.png" + } + ], + "notes": [], + "total": 0, + "day": 9 + } + ] + }, + { + "user": { + "id": 7, + "name": "DANG TRUNG KIEN", + "email": "kevin.dang@apactech.io", + "email_verified_at": null, + "forgot_code": null, + "permission": "staff", + "created_at": null, + "updated_at": "2024-09-23T19:32:25.000000Z", + "qrcode": "qrcode/qrcode_7.svg", + "avatar": "avatars/4kpcWpQhRYiWcB5B3N957ONN9w6jppcCZKzoIFxK.jpg", + "is_permanent": 1, + "permanent_date": "0000-00-00", + "is_separated": 0, + "path_avatar": "https://ms.prology.net/storage/avatars/4kpcWpQhRYiWcB5B3N957ONN9w6jppcCZKzoIFxK.jpg" + }, + "history": [ + { + "values": [ + { + "id": 18851, + "name": "DANG TRUNG KIEN", + "user_id": 7, + "status": "check in", + "time_string": "2025-12-01 07:23:10.232029", + "created_at": "2025-12-01 07:23:10", + "updated_at": "2025-12-01 07:23:15", + "image": "screenshot/DANG TRUNG KIEN_check in_at_2025_12_01_07_23_10.png" + }, + { + "id": 18870, + "name": "DANG TRUNG KIEN", + "user_id": 7, + "status": "check out", + "time_string": "2025-12-01 16:37:08.914068", + "created_at": "2025-12-01 16:37:09", + "updated_at": "2025-12-01 16:37:14", + "image": "screenshot/DANG TRUNG KIEN_check out_at_2025_12_01_16_37_08.png" + } + ], + "notes": [], + "total": 33239, + "day": 1 + }, + { + "values": [ + { + "id": 18879, + "name": "DANG TRUNG KIEN", + "user_id": 7, + "status": "check in", + "time_string": "2025-12-02 07:15:31.268305", + "created_at": "2025-12-02 07:15:31", + "updated_at": "2025-12-02 07:15:36", + "image": "screenshot/DANG TRUNG KIEN_check in_at_2025_12_02_07_15_31.png" + }, + { + "id": 18907, + "name": "DANG TRUNG KIEN", + "user_id": 7, + "status": "check out", + "time_string": "2025-12-02 16:47:28.469374", + "created_at": "2025-12-02 16:47:28", + "updated_at": "2025-12-02 16:47:33", + "image": "screenshot/DANG TRUNG KIEN_check out_at_2025_12_02_16_47_28.png" + } + ], + "notes": [], + "total": 34317, + "day": 2 + }, + { + "values": [ + { + "id": 18915, + "name": "DANG TRUNG KIEN", + "user_id": 7, + "status": "check in", + "time_string": "2025-12-03 07:15:32.407355", + "created_at": "2025-12-03 07:15:32", + "updated_at": "2025-12-03 07:15:39", + "image": "screenshot/DANG TRUNG KIEN_check in_at_2025_12_03_07_15_32.png" + }, + { + "id": 18936, + "name": "DANG TRUNG KIEN", + "user_id": 7, + "status": "check out", + "time_string": "2025-12-03 16:39:19.280399", + "created_at": "2025-12-03 16:39:19", + "updated_at": "2025-12-03 16:39:26", + "image": "screenshot/DANG TRUNG KIEN_check out_at_2025_12_03_16_39_19.png" + } + ], + "notes": [], + "total": 33827, + "day": 3 + }, + { + "values": [ + { + "id": 18947, + "name": "DANG TRUNG KIEN", + "user_id": 7, + "status": "check in", + "time_string": "2025-12-04 07:17:53.579924", + "created_at": "2025-12-04 07:17:54", + "updated_at": "2025-12-04 07:18:00", + "image": "screenshot/DANG TRUNG KIEN_check in_at_2025_12_04_07_17_53.png" + }, + { + "id": 18964, + "name": "DANG TRUNG KIEN", + "user_id": 7, + "status": "check out", + "time_string": "2025-12-04 16:42:18.008511", + "created_at": "2025-12-04 16:42:18", + "updated_at": "2025-12-04 16:42:24", + "image": "screenshot/DANG TRUNG KIEN_check out_at_2025_12_04_16_42_18.png" + } + ], + "notes": [], + "total": 33864, + "day": 4 + }, + { + "values": [ + { + "id": 18976, + "name": "DANG TRUNG KIEN", + "user_id": 7, + "status": "check in", + "time_string": "2025-12-05 07:15:57.156296", + "created_at": "2025-12-05 07:15:57", + "updated_at": "2025-12-05 07:16:03", + "image": "screenshot/DANG TRUNG KIEN_check in_at_2025_12_05_07_15_57.png" + }, + { + "id": 18994, + "name": "DANG TRUNG KIEN", + "user_id": 7, + "status": "check out", + "time_string": "2025-12-05 16:40:59.616812", + "created_at": "2025-12-05 16:40:59", + "updated_at": "2025-12-05 16:41:05", + "image": "screenshot/DANG TRUNG KIEN_check out_at_2025_12_05_16_40_59.png" + } + ], + "notes": [], + "total": 33902, + "day": 5 + }, + { + "values": [ + { + "id": 19005, + "name": "DANG TRUNG KIEN", + "user_id": 7, + "status": "check in", + "time_string": "2025-12-06 07:29:26.237961", + "created_at": "2025-12-06 07:29:26", + "updated_at": "2025-12-06 07:29:35", + "image": "screenshot/DANG TRUNG KIEN_check in_at_2025_12_06_07_29_26.png" + }, + { + "id": 19016, + "name": "DANG TRUNG KIEN", + "user_id": 7, + "status": "check out", + "time_string": "2025-12-06 11:12:11.403342", + "created_at": "2025-12-06 11:12:12", + "updated_at": "2025-12-06 11:12:18", + "image": "screenshot/DANG TRUNG KIEN_check out_at_2025_12_06_11_12_11.png" + } + ], + "notes": [], + "total": 13366, + "day": 6 + }, + { + "values": [ + { + "id": 19025, + "name": "DANG TRUNG KIEN", + "user_id": 7, + "status": "check in", + "time_string": "2025-12-08 07:22:13.273264", + "created_at": "2025-12-08 07:22:14", + "updated_at": "2025-12-08 07:22:23", + "image": "screenshot/DANG TRUNG KIEN_check in_at_2025_12_08_07_22_13.png" + }, + { + "id": 19034, + "name": "DANG TRUNG KIEN", + "user_id": 7, + "status": "check out", + "time_string": "2025-12-08 11:31:09.058502", + "created_at": "2025-12-08 11:31:09", + "updated_at": "2025-12-08 11:31:16", + "image": "screenshot/DANG TRUNG KIEN_check out_at_2025_12_08_11_31_09.png" + } + ], + "notes": [ + { + "id": 661, + "timeType": "C", + "timeTypeName": "Bu\u1ed5i Chi\u1ec1u", + "reason": "ONLEAVE", + "reasonName": "Ngh\u1ec9 ph\u00e9p", + "note": "B\u1ec7nh" + } + ], + "total": 14935, + "day": 8 + }, + { + "values": [ + { + "id": 19061, + "name": "DANG TRUNG KIEN", + "user_id": 7, + "status": "check in", + "time_string": "2025-12-09 07:13:30.948867", + "created_at": "2025-12-09 07:13:31", + "updated_at": "2025-12-09 07:13:36", + "image": "screenshot/DANG TRUNG KIEN_check in_at_2025_12_09_07_13_30.png" + } + ], + "notes": [], + "total": 0, + "day": 9 + } + ] + }, + { + "user": { + "id": 8, + "name": "HUYNH THI HONG GAM", + "email": "rose.h@apactech.io", + "email_verified_at": null, + "forgot_code": null, + "permission": "staff,hr,tester", + "created_at": null, + "updated_at": "2024-09-24T11:52:33.000000Z", + "qrcode": "qrcode/qrcode_8.svg", + "avatar": "avatars/ZDMxwwo5qkBqO5R1XjGPf0Vp2Q5YwsYhosOhmhDH.jpg", + "is_permanent": 1, + "permanent_date": "0000-00-00", + "is_separated": 0, + "path_avatar": "https://ms.prology.net/storage/avatars/ZDMxwwo5qkBqO5R1XjGPf0Vp2Q5YwsYhosOhmhDH.jpg" + }, + "history": [ + { + "values": [ + { + "id": 18854, + "name": "HUYNH THI HONG GAM", + "user_id": 8, + "status": "check in", + "time_string": "2025-12-01 07:26:21.422948", + "created_at": "2025-12-01 07:26:21", + "updated_at": "2025-12-01 07:26:26", + "image": "screenshot/HUYNH THI HONG GAM_check in_at_2025_12_01_07_26_21.png" + }, + { + "id": 18874, + "name": "HUYNH THI HONG GAM", + "user_id": 8, + "status": "check out", + "time_string": "2025-12-01 16:51:15.204775", + "created_at": "2025-12-01 16:51:15", + "updated_at": "2025-12-01 16:51:20", + "image": "screenshot/HUYNH THI HONG GAM_check out_at_2025_12_01_16_51_15.png" + } + ], + "notes": [], + "total": 33894, + "day": 1 + }, + { + "values": [ + { + "id": 18882, + "name": "HUYNH THI HONG GAM", + "user_id": 8, + "status": "check in", + "time_string": "2025-12-02 07:21:08.133899", + "created_at": "2025-12-02 07:21:08", + "updated_at": "2025-12-02 07:21:14", + "image": "screenshot/HUYNH THI HONG GAM_check in_at_2025_12_02_07_21_08.png" + }, + { + "id": 18918, + "name": "HUYNH THI HONG GAM", + "user_id": 8, + "status": "check out", + "time_string": "2025-12-02 17:00:00", + "created_at": "2025-12-02 17:00:00", + "updated_at": "2025-12-03 07:23:24", + "image": "" + } + ], + "notes": [], + "total": 34732, + "day": 2 + }, + { + "values": [ + { + "id": 18917, + "name": "HUYNH THI HONG GAM", + "user_id": 8, + "status": "check in", + "time_string": "2025-12-03 07:19:58.725355", + "created_at": "2025-12-03 07:19:59", + "updated_at": "2025-12-03 07:20:04", + "image": "screenshot/HUYNH THI HONG GAM_check in_at_2025_12_03_07_19_58.png" + }, + { + "id": 18935, + "name": "HUYNH THI HONG GAM", + "user_id": 8, + "status": "check out", + "time_string": "2025-12-03 16:38:18.157134", + "created_at": "2025-12-03 16:38:19", + "updated_at": "2025-12-03 16:38:29", + "image": "screenshot/HUYNH THI HONG GAM_check in_at_2025_12_03_16_38_18.png" + } + ], + "notes": [], + "total": 33500, + "day": 3 + }, + { + "values": [ + { + "id": 18949, + "name": "HUYNH THI HONG GAM", + "user_id": 8, + "status": "check in", + "time_string": "2025-12-04 07:24:52.821441", + "created_at": "2025-12-04 07:24:53", + "updated_at": "2025-12-04 07:24:59", + "image": "screenshot/HUYNH THI HONG GAM_check out_at_2025_12_04_07_24_52.png" + }, + { + "id": 18967, + "name": "HUYNH THI HONG GAM", + "user_id": 8, + "status": "check out", + "time_string": "2025-12-04 16:53:26.315094", + "created_at": "2025-12-04 16:53:28", + "updated_at": "2025-12-04 16:53:39", + "image": "screenshot/HUYNH THI HONG GAM_check in_at_2025_12_04_16_53_26.png" + } + ], + "notes": [], + "total": 34115, + "day": 4 + }, + { + "values": [ + { + "id": 18980, + "name": "HUYNH THI HONG GAM", + "user_id": 8, + "status": "check in", + "time_string": "2025-12-05 07:25:07.321090", + "created_at": "2025-12-05 07:25:08", + "updated_at": "2025-12-05 07:25:14", + "image": "screenshot/HUYNH THI HONG GAM_check in_at_2025_12_05_07_25_07.png" + }, + { + "id": 18996, + "name": "HUYNH THI HONG GAM", + "user_id": 8, + "status": "check out", + "time_string": "2025-12-05 16:44:14.299335", + "created_at": "2025-12-05 16:44:15", + "updated_at": "2025-12-05 16:44:26", + "image": "screenshot/HUYNH THI HONG GAM_check in_at_2025_12_05_16_44_14.png" + } + ], + "notes": [], + "total": 33547, + "day": 5 + }, + { + "values": [], + "notes": [ + { + "id": 656, + "timeType": "S", + "timeTypeName": "Bu\u1ed5i S\u00e1ng", + "reason": "ONLEAVE", + "reasonName": "Ngh\u1ec9 ph\u00e9p", + "note": "B\u1eadn vi\u1ec7c c\u00e1 nh\u00e2n" + } + ], + "total": 0, + "day": 6 + }, + { + "values": [ + { + "id": 19024, + "name": "HUYNH THI HONG GAM", + "user_id": 8, + "status": "check in", + "time_string": "2025-12-08 07:21:21.914622", + "created_at": "2025-12-08 07:21:22", + "updated_at": "2025-12-08 07:21:33", + "image": "screenshot/HUYNH THI HONG GAM_check in_at_2025_12_08_07_21_21.png" + }, + { + "id": 19055, + "name": "HUYNH THI HONG GAM", + "user_id": 8, + "status": "check out", + "time_string": "2025-12-08 16:58:44.330319", + "created_at": "2025-12-08 16:58:44", + "updated_at": "2025-12-08 16:58:50", + "image": "screenshot/HUYNH THI HONG GAM_check in_at_2025_12_08_16_58_44.png" + } + ], + "notes": [], + "total": 34642, + "day": 8 + }, + { + "values": [ + { + "id": 19065, + "name": "HUYNH THI HONG GAM", + "user_id": 8, + "status": "check in", + "time_string": "2025-12-09 07:24:54.748438", + "created_at": "2025-12-09 07:24:55", + "updated_at": "2025-12-09 07:25:00", + "image": "screenshot/HUYNH THI HONG GAM_check out_at_2025_12_09_07_24_54.png" + } + ], + "notes": [], + "total": 0, + "day": 9 + } + ] + }, + { + "user": { + "id": 9, + "name": "NGUYEN TRUNG THAT", + "email": "andrew.ng@apactech.io", + "email_verified_at": null, + "forgot_code": null, + "permission": "staff", + "created_at": null, + "updated_at": "2024-09-23T18:01:08.000000Z", + "qrcode": "qrcode/qrcode_9.svg", + "avatar": "avatars/MOo8dR7QsaUPbuVF92ALJf3P4mJKEmp9OD9jGi2M.jpg", + "is_permanent": 1, + "permanent_date": "0000-00-00", + "is_separated": 0, + "path_avatar": "https://ms.prology.net/storage/avatars/MOo8dR7QsaUPbuVF92ALJf3P4mJKEmp9OD9jGi2M.jpg" + }, + "history": [ + { + "values": [ + { + "id": 18853, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check in", + "time_string": "2025-12-01 07:25:59.554488", + "created_at": "2025-12-01 07:26:00", + "updated_at": "2025-12-01 07:26:04", + "image": "screenshot/NGUYEN TRUNG THAT_check in_at_2025_12_01_07_25_59.png" + }, + { + "id": 18863, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check out", + "time_string": "2025-12-01 11:44:35.055019", + "created_at": "2025-12-01 11:44:35", + "updated_at": "2025-12-01 11:44:40", + "image": "screenshot/NGUYEN TRUNG THAT_check out_at_2025_12_01_11_44_35.png" + }, + { + "id": 18865, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check in", + "time_string": "2025-12-01 13:01:21.978425", + "created_at": "2025-12-01 13:01:22", + "updated_at": "2025-12-01 13:01:27", + "image": "screenshot/NGUYEN TRUNG THAT_check in_at_2025_12_01_13_01_21.png" + }, + { + "id": 18875, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check out", + "time_string": "2025-12-01 16:56:19.304443", + "created_at": "2025-12-01 16:56:19", + "updated_at": "2025-12-01 16:56:24", + "image": "screenshot/NGUYEN TRUNG THAT_check out_at_2025_12_01_16_56_19.png" + } + ], + "notes": [], + "total": 29612, + "day": 1 + }, + { + "values": [ + { + "id": 18884, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check in", + "time_string": "2025-12-02 07:25:21.543753", + "created_at": "2025-12-02 07:25:22", + "updated_at": "2025-12-02 07:25:26", + "image": "screenshot/NGUYEN TRUNG THAT_check in_at_2025_12_02_07_25_21.png" + }, + { + "id": 18896, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check out", + "time_string": "2025-12-02 11:34:26.341165", + "created_at": "2025-12-02 11:34:26", + "updated_at": "2025-12-02 11:34:31", + "image": "screenshot/NGUYEN TRUNG THAT_check out_at_2025_12_02_11_34_26.png" + }, + { + "id": 18899, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check in", + "time_string": "2025-12-02 13:02:55.266459", + "created_at": "2025-12-02 13:02:55", + "updated_at": "2025-12-02 13:03:00", + "image": "screenshot/NGUYEN TRUNG THAT_check in_at_2025_12_02_13_02_55.png" + }, + { + "id": 18904, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check out", + "time_string": "2025-12-02 16:19:10.065340", + "created_at": "2025-12-02 16:19:10", + "updated_at": "2025-12-02 16:19:14", + "image": "screenshot/NGUYEN TRUNG THAT_check out_at_2025_12_02_16_19_10.png" + } + ], + "notes": [], + "total": 26719, + "day": 2 + }, + { + "values": [ + { + "id": 18920, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check in", + "time_string": "2025-12-03 07:29:39.176166", + "created_at": "2025-12-03 07:29:39", + "updated_at": "2025-12-03 07:29:44", + "image": "screenshot/NGUYEN TRUNG THAT_check in_at_2025_12_03_07_29_39.png" + }, + { + "id": 18940, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check out", + "time_string": "2025-12-03 16:55:54.563962", + "created_at": "2025-12-03 16:55:55", + "updated_at": "2025-12-03 16:56:01", + "image": "screenshot/NGUYEN TRUNG THAT_check out_at_2025_12_03_16_55_54.png" + } + ], + "notes": [], + "total": 33976, + "day": 3 + }, + { + "values": [ + { + "id": 18946, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check in", + "time_string": "2025-12-04 07:17:40.017479", + "created_at": "2025-12-04 07:17:40", + "updated_at": "2025-12-04 07:17:46", + "image": "screenshot/NGUYEN TRUNG THAT_check in_at_2025_12_04_07_17_40.png" + }, + { + "id": 18957, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check out", + "time_string": "2025-12-04 11:35:04.094579", + "created_at": "2025-12-04 11:35:04", + "updated_at": "2025-12-04 11:35:11", + "image": "screenshot/NGUYEN TRUNG THAT_check out_at_2025_12_04_11_35_04.png" + }, + { + "id": 18960, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check in", + "time_string": "2025-12-04 13:00:58.070187", + "created_at": "2025-12-04 13:00:58", + "updated_at": "2025-12-04 13:01:04", + "image": "screenshot/NGUYEN TRUNG THAT_check in_at_2025_12_04_13_00_58.png" + }, + { + "id": 18973, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check out", + "time_string": "2025-12-04 17:14:39.905679", + "created_at": "2025-12-04 17:14:40", + "updated_at": "2025-12-04 17:14:46", + "image": "screenshot/NGUYEN TRUNG THAT_check out_at_2025_12_04_17_14_39.png" + } + ], + "notes": [], + "total": 30666, + "day": 4 + }, + { + "values": [ + { + "id": 18979, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check in", + "time_string": "2025-12-05 07:23:54.728763", + "created_at": "2025-12-05 07:23:55", + "updated_at": "2025-12-05 07:24:01", + "image": "screenshot/NGUYEN TRUNG THAT_check in_at_2025_12_05_07_23_54.png" + }, + { + "id": 19000, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check out", + "time_string": "2025-12-05 16:59:59.857546", + "created_at": "2025-12-05 17:00:00", + "updated_at": "2025-12-05 17:00:06", + "image": "screenshot/NGUYEN TRUNG THAT_check out_at_2025_12_05_16_59_59.png" + } + ], + "notes": [], + "total": 34565, + "day": 5 + }, + { + "values": [ + { + "id": 19010, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check in", + "time_string": "2025-12-06 07:40:14.067358", + "created_at": "2025-12-06 07:40:14", + "updated_at": "2025-12-06 07:40:21", + "image": "screenshot/NGUYEN TRUNG THAT_check in_at_2025_12_06_07_40_14.png" + }, + { + "id": 19020, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check out", + "time_string": "2025-12-06 11:34:01.391984", + "created_at": "2025-12-06 11:34:02", + "updated_at": "2025-12-06 11:34:08", + "image": "screenshot/NGUYEN TRUNG THAT_check out_at_2025_12_06_11_34_01.png" + } + ], + "notes": [], + "total": 14028, + "day": 6 + }, + { + "values": [ + { + "id": 19026, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check in", + "time_string": "2025-12-08 07:22:30.001614", + "created_at": "2025-12-08 07:22:30", + "updated_at": "2025-12-08 07:22:37", + "image": "screenshot/NGUYEN TRUNG THAT_check in_at_2025_12_08_07_22_30.png" + }, + { + "id": 19037, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check out", + "time_string": "2025-12-08 11:33:30.509320", + "created_at": "2025-12-08 11:33:30", + "updated_at": "2025-12-08 11:33:35", + "image": "screenshot/NGUYEN TRUNG THAT_check out_at_2025_12_08_11_33_30.png" + }, + { + "id": 19042, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check in", + "time_string": "2025-12-08 13:00:38.842246", + "created_at": "2025-12-08 13:00:39", + "updated_at": "2025-12-08 13:00:45", + "image": "screenshot/NGUYEN TRUNG THAT_check in_at_2025_12_08_13_00_38.png" + }, + { + "id": 19048, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check out", + "time_string": "2025-12-08 16:44:13.025625", + "created_at": "2025-12-08 16:44:13", + "updated_at": "2025-12-08 16:44:18", + "image": "screenshot/NGUYEN TRUNG THAT_check out_at_2025_12_08_16_44_13.png" + } + ], + "notes": [], + "total": 28474, + "day": 8 + }, + { + "values": [ + { + "id": 19062, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check in", + "time_string": "2025-12-09 07:17:02.158191", + "created_at": "2025-12-09 07:17:02", + "updated_at": "2025-12-09 07:17:07", + "image": "screenshot/NGUYEN TRUNG THAT_check in_at_2025_12_09_07_17_02.png" + }, + { + "id": 19073, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check out", + "time_string": "2025-12-09 11:34:28.902346", + "created_at": "2025-12-09 11:34:29", + "updated_at": "2025-12-09 11:34:34", + "image": "screenshot/NGUYEN TRUNG THAT_check out_at_2025_12_09_11_34_28.png" + }, + { + "id": 19076, + "name": "NGUYEN TRUNG THAT", + "user_id": 9, + "status": "check in", + "time_string": "2025-12-09 13:00:42.802811", + "created_at": "2025-12-09 13:00:43", + "updated_at": "2025-12-09 13:00:48", + "image": "screenshot/NGUYEN TRUNG THAT_check in_at_2025_12_09_13_00_42.png" + } + ], + "notes": [], + "total": 15447, + "day": 9 + } + ] + }, + { + "user": { + "id": 10, + "name": "LE TAN LUAN", + "email": "joseph.le@apactech.io", + "email_verified_at": null, + "forgot_code": null, + "permission": "staff,admin", + "created_at": null, + "updated_at": "2024-09-20T12:21:42.000000Z", + "qrcode": "qrcode/qrcode_10.svg", + "avatar": "avatars/A1yEjVOqzeodoc2vL1E52PkZXwMomudWKxQTOZ35.png", + "is_permanent": 1, + "permanent_date": "0000-00-00", + "is_separated": 0, + "path_avatar": "https://ms.prology.net/storage/avatars/A1yEjVOqzeodoc2vL1E52PkZXwMomudWKxQTOZ35.png" + }, + "history": [ + { + "values": [ + { + "id": 18852, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check in", + "time_string": "2025-12-01 07:24:07.546904", + "created_at": "2025-12-01 07:24:08", + "updated_at": "2025-12-01 07:24:12", + "image": "screenshot/LE TAN LUAN_check in_at_2025_12_01_07_24_07.png" + }, + { + "id": 18869, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check out", + "time_string": "2025-12-01 16:31:28.472870", + "created_at": "2025-12-01 16:31:28", + "updated_at": "2025-12-01 16:31:33", + "image": "screenshot/LE TAN LUAN_check out_at_2025_12_01_16_31_28.png" + } + ], + "notes": [], + "total": 32840, + "day": 1 + }, + { + "values": [ + { + "id": 18883, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check in", + "time_string": "2025-12-02 07:21:57.219048", + "created_at": "2025-12-02 07:21:57", + "updated_at": "2025-12-02 07:22:02", + "image": "screenshot/LE TAN LUAN_check in_at_2025_12_02_07_21_57.png" + }, + { + "id": 18897, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check out", + "time_string": "2025-12-02 11:36:16.333130", + "created_at": "2025-12-02 11:36:16", + "updated_at": "2025-12-02 11:36:21", + "image": "screenshot/LE TAN LUAN_check out_at_2025_12_02_11_36_16.png" + }, + { + "id": 18901, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check in", + "time_string": "2025-12-02 13:03:31.816637", + "created_at": "2025-12-02 13:03:32", + "updated_at": "2025-12-02 13:03:37", + "image": "screenshot/LE TAN LUAN_check in_at_2025_12_02_13_03_31.png" + }, + { + "id": 18909, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check out", + "time_string": "2025-12-02 16:52:04.603511", + "created_at": "2025-12-02 16:52:05", + "updated_at": "2025-12-02 16:52:09", + "image": "screenshot/LE TAN LUAN_check out_at_2025_12_02_16_52_04.png" + } + ], + "notes": [], + "total": 28972, + "day": 2 + }, + { + "values": [], + "notes": [ + { + "id": 653, + "timeType": "ALL", + "timeTypeName": "C\u1ea3 Ng\u00e0y", + "reason": "ONLEAVE", + "reasonName": "Ngh\u1ec9 ph\u00e9p", + "note": "B\u1eadn vi\u1ec7c c\u00e1 nh\u00e2n" + } + ], + "total": 0, + "day": 3 + }, + { + "values": [ + { + "id": 18950, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check in", + "time_string": "2025-12-04 07:25:46.805780", + "created_at": "2025-12-04 07:25:47", + "updated_at": "2025-12-04 07:25:53", + "image": "screenshot/LE TAN LUAN_check in_at_2025_12_04_07_25_46.png" + }, + { + "id": 18972, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check out", + "time_string": "2025-12-04 17:04:24.467411", + "created_at": "2025-12-04 17:04:25", + "updated_at": "2025-12-04 17:04:31", + "image": "screenshot/LE TAN LUAN_check out_at_2025_12_04_17_04_24.png" + } + ], + "notes": [], + "total": 34718, + "day": 4 + }, + { + "values": [ + { + "id": 18988, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check in", + "time_string": "2025-12-05 13:00:00", + "created_at": "2025-12-05 13:00:00", + "updated_at": null, + "image": "" + }, + { + "id": 18989, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check out", + "time_string": "2025-12-05 17:00:00", + "created_at": "2025-12-05 17:00:00", + "updated_at": null, + "image": "" + } + ], + "notes": [ + { + "id": 654, + "timeType": "S", + "timeTypeName": "Bu\u1ed5i S\u00e1ng", + "reason": "LEAVE_WITHOUT_PAY", + "reasonName": "Kh\u00f4ng ph\u00e9p", + "note": "S\u1ed1t cao" + }, + { + "id": 655, + "timeType": "C", + "timeTypeName": "Bu\u1ed5i Chi\u1ec1u", + "reason": "WFH", + "reasonName": "Work From Home", + "note": "B\u1ec7nh kh\u00f4ng ng\u1ed3i \u0111\u01b0\u1ee3c m\u00e1y l\u1ea1nh" + } + ], + "total": 14400, + "day": 5 + }, + { + "values": [ + { + "id": 19008, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check in", + "time_string": "2025-12-06 07:30:00", + "created_at": "2025-12-06 07:30:00", + "updated_at": null, + "image": "" + }, + { + "id": 19009, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check out", + "time_string": "2025-12-06 11:30:00", + "created_at": "2025-12-06 11:30:00", + "updated_at": null, + "image": "" + } + ], + "notes": [ + { + "id": 659, + "timeType": "S", + "timeTypeName": "Bu\u1ed5i S\u00e1ng", + "reason": "WFH", + "reasonName": "Work From Home", + "note": "B\u1ec7nh kh\u00f4ng ng\u1ed3i \u0111\u01b0\u1ee3c m\u00e1y l\u1ea1nh" + } + ], + "total": 14400, + "day": 6 + }, + { + "values": [ + { + "id": 19027, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check in", + "time_string": "2025-12-08 07:24:48.001712", + "created_at": "2025-12-08 07:24:48", + "updated_at": "2025-12-08 07:24:59", + "image": "screenshot/LE TAN LUAN_check in_at_2025_12_08_07_24_48.png" + }, + { + "id": 19035, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check out", + "time_string": "2025-12-08 11:32:49.924406", + "created_at": "2025-12-08 11:32:50", + "updated_at": "2025-12-08 11:33:01", + "image": "screenshot/LE TAN LUAN_check in_at_2025_12_08_11_32_49.png" + }, + { + "id": 19041, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check in", + "time_string": "2025-12-08 13:00:27.163211", + "created_at": "2025-12-08 13:00:27", + "updated_at": "2025-12-08 13:00:34", + "image": "screenshot/LE TAN LUAN_check in_at_2025_12_08_13_00_27.png" + }, + { + "id": 19066, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check out", + "time_string": "2025-12-08 17:00:00", + "created_at": "2025-12-08 17:00:00", + "updated_at": "2025-12-09 07:30:04", + "image": "" + } + ], + "notes": [], + "total": 29255, + "day": 8 + }, + { + "values": [ + { + "id": 19064, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check in", + "time_string": "2025-12-09 07:24:09.062862", + "created_at": "2025-12-09 07:24:09", + "updated_at": "2025-12-09 07:24:14", + "image": "screenshot/LE TAN LUAN_check out_at_2025_12_09_07_24_09.png" + }, + { + "id": 19072, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check out", + "time_string": "2025-12-09 11:33:52.942863", + "created_at": "2025-12-09 11:33:53", + "updated_at": "2025-12-09 11:33:58", + "image": "screenshot/LE TAN LUAN_check in_at_2025_12_09_11_33_52.png" + }, + { + "id": 19075, + "name": "LE TAN LUAN", + "user_id": 10, + "status": "check in", + "time_string": "2025-12-09 13:00:30.473857", + "created_at": "2025-12-09 13:00:30", + "updated_at": "2025-12-09 13:00:36", + "image": "screenshot/LE TAN LUAN_check out_at_2025_12_09_13_00_30.png" + } + ], + "notes": [], + "total": 14984, + "day": 9 + } + ] + }, + { + "user": { + "id": 11, + "name": "VO VAN MINH", + "email": "michael.vo@apactech.io", + "email_verified_at": null, + "forgot_code": null, + "permission": "staff", + "created_at": null, + "updated_at": "2025-11-17T00:26:49.000000Z", + "qrcode": "qrcode/qrcode_11.svg", + "avatar": "", + "is_permanent": 1, + "permanent_date": "0000-00-00", + "is_separated": 0, + "path_avatar": "https://ms.prology.net/img/avatar.png" + }, + "history": [ + { + "values": [ + { + "id": 18857, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check in", + "time_string": "2025-12-01 07:33:15.138979", + "created_at": "2025-12-01 07:33:15", + "updated_at": "2025-12-01 07:33:20", + "image": "screenshot/VO VAN MINH_check in_at_2025_12_01_07_33_15.png" + }, + { + "id": 18862, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check out", + "time_string": "2025-12-01 11:31:40.649064", + "created_at": "2025-12-01 11:31:41", + "updated_at": "2025-12-01 11:31:45", + "image": "screenshot/VO VAN MINH_check out_at_2025_12_01_11_31_40.png" + }, + { + "id": 18892, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check out", + "time_string": "2025-12-01 13:00:00", + "created_at": "2025-12-01 13:00:00", + "updated_at": "2025-12-02 07:41:35", + "image": "" + }, + { + "id": 18877, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check in", + "time_string": "2025-12-01 17:00:38.613531", + "created_at": "2025-12-01 17:00:39", + "updated_at": "2025-12-01 17:00:44", + "image": "screenshot/VO VAN MINH_check in_at_2025_12_01_17_00_38.png" + } + ], + "notes": [], + "total": 33911, + "day": 1 + }, + { + "values": [ + { + "id": 18886, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check in", + "time_string": "2025-12-02 07:33:28", + "created_at": "2025-12-02 07:33:28", + "updated_at": "2025-12-02 13:05:49", + "image": "screenshot/VO VAN MINH_check out_at_2025_12_02_07_33_28.png" + }, + { + "id": 18895, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check out", + "time_string": "2025-12-02 11:31:40", + "created_at": "2025-12-02 11:31:40", + "updated_at": "2025-12-02 13:04:46", + "image": "screenshot/VO VAN MINH_check in_at_2025_12_02_11_31_40.png" + }, + { + "id": 18902, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check in", + "time_string": "2025-12-02 13:03:43", + "created_at": "2025-12-02 13:03:43", + "updated_at": "2025-12-02 13:04:35", + "image": "screenshot/VO VAN MINH_check out_at_2025_12_02_13_03_43.png" + }, + { + "id": 18912, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check out", + "time_string": "2025-12-02 16:57:34.433667", + "created_at": "2025-12-02 16:57:36", + "updated_at": "2025-12-02 16:57:46", + "image": "screenshot/VO VAN MINH_check in_at_2025_12_02_16_57_34.png" + } + ], + "notes": [], + "total": 28325, + "day": 2 + }, + { + "values": [ + { + "id": 18923, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check in", + "time_string": "2025-12-03 07:37:20.301659", + "created_at": "2025-12-03 07:37:20", + "updated_at": "2025-12-03 07:37:25", + "image": "screenshot/VO VAN MINH_check in_at_2025_12_03_07_37_20.png" + }, + { + "id": 18927, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check out", + "time_string": "2025-12-03 11:34:15.601281", + "created_at": "2025-12-03 11:34:16", + "updated_at": "2025-12-03 11:34:21", + "image": "screenshot/VO VAN MINH_check out_at_2025_12_03_11_34_15.png" + }, + { + "id": 18930, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check in", + "time_string": "2025-12-03 13:00:08.353836", + "created_at": "2025-12-03 13:00:09", + "updated_at": "2025-12-03 13:00:14", + "image": "screenshot/VO VAN MINH_check in_at_2025_12_03_13_00_08.png" + }, + { + "id": 18942, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check out", + "time_string": "2025-12-03 16:59:49.842972", + "created_at": "2025-12-03 16:59:50", + "updated_at": "2025-12-03 16:59:56", + "image": "screenshot/VO VAN MINH_check out_at_2025_12_03_16_59_49.png" + } + ], + "notes": [], + "total": 28597, + "day": 3 + }, + { + "values": [ + { + "id": 18953, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check in", + "time_string": "2025-12-04 07:37:11.243410", + "created_at": "2025-12-04 07:37:11", + "updated_at": "2025-12-04 07:37:18", + "image": "screenshot/VO VAN MINH_check in_at_2025_12_04_07_37_11.png" + }, + { + "id": 18956, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check out", + "time_string": "2025-12-04 11:31:40.974814", + "created_at": "2025-12-04 11:31:41", + "updated_at": "2025-12-04 11:31:48", + "image": "screenshot/VO VAN MINH_check out_at_2025_12_04_11_31_40.png" + }, + { + "id": 18959, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check in", + "time_string": "2025-12-04 13:00:24.472402", + "created_at": "2025-12-04 13:00:25", + "updated_at": "2025-12-04 13:00:31", + "image": "screenshot/VO VAN MINH_check in_at_2025_12_04_13_00_24.png" + }, + { + "id": 18970, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check out", + "time_string": "2025-12-04 17:00:16.666711", + "created_at": "2025-12-04 17:00:17", + "updated_at": "2025-12-04 17:00:23", + "image": "screenshot/VO VAN MINH_check out_at_2025_12_04_17_00_16.png" + } + ], + "notes": [], + "total": 28462, + "day": 4 + }, + { + "values": [ + { + "id": 18983, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check in", + "time_string": "2025-12-05 07:34:16.794839", + "created_at": "2025-12-05 07:34:17", + "updated_at": "2025-12-05 07:34:23", + "image": "screenshot/VO VAN MINH_check in_at_2025_12_05_07_34_16.png" + }, + { + "id": 18985, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check out", + "time_string": "2025-12-05 11:32:00.270545", + "created_at": "2025-12-05 11:32:01", + "updated_at": "2025-12-05 11:32:07", + "image": "screenshot/VO VAN MINH_check out_at_2025_12_05_11_32_00.png" + }, + { + "id": 18987, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check in", + "time_string": "2025-12-05 13:02:18.511658", + "created_at": "2025-12-05 13:02:19", + "updated_at": "2025-12-05 13:02:25", + "image": "screenshot/VO VAN MINH_check in_at_2025_12_05_13_02_18.png" + }, + { + "id": 19001, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check out", + "time_string": "2025-12-05 17:00:26.929632", + "created_at": "2025-12-05 17:00:27", + "updated_at": "2025-12-05 17:00:33", + "image": "screenshot/VO VAN MINH_check out_at_2025_12_05_17_00_26.png" + } + ], + "notes": [], + "total": 28552, + "day": 5 + }, + { + "values": [ + { + "id": 19006, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check in", + "time_string": "2025-12-06 07:34:50.105893", + "created_at": "2025-12-06 07:34:50", + "updated_at": "2025-12-06 07:34:57", + "image": "screenshot/VO VAN MINH_check in_at_2025_12_06_07_34_50.png" + }, + { + "id": 19017, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check out", + "time_string": "2025-12-06 11:30:54.831972", + "created_at": "2025-12-06 11:30:55", + "updated_at": "2025-12-06 11:31:01", + "image": "screenshot/VO VAN MINH_check out_at_2025_12_06_11_30_54.png" + } + ], + "notes": [], + "total": 14165, + "day": 6 + }, + { + "values": [ + { + "id": 19030, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check in", + "time_string": "2025-12-08 07:35:22.554061", + "created_at": "2025-12-08 07:35:23", + "updated_at": "2025-12-08 07:35:29", + "image": "screenshot/VO VAN MINH_check in_at_2025_12_08_07_35_22.png" + }, + { + "id": 19040, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check out", + "time_string": "2025-12-08 11:34:25.830200", + "created_at": "2025-12-08 11:34:26", + "updated_at": "2025-12-08 11:34:31", + "image": "screenshot/VO VAN MINH_check out_at_2025_12_08_11_34_25.png" + }, + { + "id": 19043, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check in", + "time_string": "2025-12-08 13:00:49.433050", + "created_at": "2025-12-08 13:00:50", + "updated_at": "2025-12-08 13:00:55", + "image": "screenshot/VO VAN MINH_check in_at_2025_12_08_13_00_49.png" + }, + { + "id": 19057, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check out", + "time_string": "2025-12-08 16:59:50.932941", + "created_at": "2025-12-08 16:59:51", + "updated_at": "2025-12-08 16:59:56", + "image": "screenshot/VO VAN MINH_check out_at_2025_12_08_16_59_50.png" + } + ], + "notes": [], + "total": 28684, + "day": 8 + }, + { + "values": [ + { + "id": 19067, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check in", + "time_string": "2025-12-09 07:33:41.999818", + "created_at": "2025-12-09 07:33:42", + "updated_at": "2025-12-09 07:33:48", + "image": "screenshot/VO VAN MINH_check in_at_2025_12_09_07_33_41.png" + }, + { + "id": 19071, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check out", + "time_string": "2025-12-09 11:33:25.975942", + "created_at": "2025-12-09 11:33:26", + "updated_at": "2025-12-09 11:33:32", + "image": "screenshot/VO VAN MINH_check out_at_2025_12_09_11_33_25.png" + }, + { + "id": 19074, + "name": "VO VAN MINH", + "user_id": 11, + "status": "check in", + "time_string": "2025-12-09 13:00:09.832917", + "created_at": "2025-12-09 13:00:10", + "updated_at": "2025-12-09 13:00:15", + "image": "screenshot/VO VAN MINH_check in_at_2025_12_09_13_00_09.png" + } + ], + "notes": [], + "total": 14384, + "day": 9 + } + ] + }, + { + "user": { + "id": 12, + "name": "TON GIA KHANH", + "email": "kai.t@apactech.io", + "email_verified_at": null, + "forgot_code": null, + "permission": "staff", + "created_at": null, + "updated_at": "2024-09-26T17:09:17.000000Z", + "qrcode": "qrcode/qrcode_12.svg", + "avatar": "", + "is_permanent": 1, + "permanent_date": "0000-00-00", + "is_separated": 0, + "path_avatar": "https://ms.prology.net/img/avatar.png" + }, + "history": [ + { + "values": [ + { + "id": 18847, + "name": "TON GIA KHANH", + "user_id": 12, + "status": "check in", + "time_string": "2025-12-01 06:53:06.034268", + "created_at": "2025-12-01 06:53:08", + "updated_at": "2025-12-01 06:53:18", + "image": "screenshot/TON GIA KHANH_check in_at_2025_12_01_06_53_06.png" + }, + { + "id": 18871, + "name": "TON GIA KHANH", + "user_id": 12, + "status": "check out", + "time_string": "2025-12-01 16:39:32.977703", + "created_at": "2025-12-01 16:39:37", + "updated_at": "2025-12-01 16:39:47", + "image": "screenshot/TON GIA KHANH_check in_at_2025_12_01_16_39_32.png" + } + ], + "notes": [], + "total": 35189, + "day": 1 + }, + { + "values": [ + { + "id": 18889, + "name": "TON GIA KHANH", + "user_id": 12, + "status": "check in", + "time_string": "2025-12-02 07:30:00", + "created_at": "2025-12-02 07:30:00", + "updated_at": null, + "image": "" + }, + { + "id": 18890, + "name": "TON GIA KHANH", + "user_id": 12, + "status": "check out", + "time_string": "2025-12-02 11:30:00", + "created_at": "2025-12-02 11:30:00", + "updated_at": null, + "image": "" + } + ], + "notes": [ + { + "id": 651, + "timeType": "S", + "timeTypeName": "Bu\u1ed5i S\u00e1ng", + "reason": "WFH", + "reasonName": "Work From Home", + "note": "Xe b\u1ecb c\u00e1n \u0111inh" + }, + { + "id": 652, + "timeType": "C", + "timeTypeName": "Bu\u1ed5i Chi\u1ec1u", + "reason": "ONLEAVE", + "reasonName": "Ngh\u1ec9 ph\u00e9p", + "note": "b\u1ec7nh b\u1ecb say n\u1eafng" + } + ], + "total": 14400, + "day": 2 + }, + { + "values": [ + { + "id": 18913, + "name": "TON GIA KHANH", + "user_id": 12, + "status": "check in", + "time_string": "2025-12-03 06:52:24.677542", + "created_at": "2025-12-03 06:52:27", + "updated_at": "2025-12-03 06:52:37", + "image": "screenshot/TON GIA KHANH_check in_at_2025_12_03_06_52_24.png" + }, + { + "id": 18934, + "name": "TON GIA KHANH", + "user_id": 12, + "status": "check out", + "time_string": "2025-12-03 16:36:30.358499", + "created_at": "2025-12-03 16:36:31", + "updated_at": "2025-12-03 16:36:37", + "image": "screenshot/TON GIA KHANH_check in_at_2025_12_03_16_36_30.png" + } + ], + "notes": [], + "total": 35044, + "day": 3 + }, + { + "values": [ + { + "id": 18943, + "name": "TON GIA KHANH", + "user_id": 12, + "status": "check in", + "time_string": "2025-12-04 06:57:58.024191", + "created_at": "2025-12-04 06:57:58", + "updated_at": "2025-12-04 06:58:04", + "image": "screenshot/TON GIA KHANH_check out_at_2025_12_04_06_57_58.png" + }, + { + "id": 18966, + "name": "TON GIA KHANH", + "user_id": 12, + "status": "check out", + "time_string": "2025-12-04 16:45:32.524843", + "created_at": "2025-12-04 16:45:33", + "updated_at": "2025-12-04 16:45:39", + "image": "screenshot/TON GIA KHANH_check in_at_2025_12_04_16_45_32.png" + } + ], + "notes": [], + "total": 35255, + "day": 4 + }, + { + "values": [ + { + "id": 18974, + "name": "TON GIA KHANH", + "user_id": 12, + "status": "check in", + "time_string": "2025-12-05 06:56:15.746687", + "created_at": "2025-12-05 06:56:16", + "updated_at": "2025-12-05 06:56:22", + "image": "screenshot/TON GIA KHANH_check out_at_2025_12_05_06_56_15.png" + }, + { + "id": 18995, + "name": "TON GIA KHANH", + "user_id": 12, + "status": "check out", + "time_string": "2025-12-05 16:42:06.462191", + "created_at": "2025-12-05 16:42:06", + "updated_at": "2025-12-05 16:42:12", + "image": "screenshot/TON GIA KHANH_check in_at_2025_12_05_16_42_06.png" + } + ], + "notes": [], + "total": 35150, + "day": 5 + }, + { + "values": [ + { + "id": 19004, + "name": "TON GIA KHANH", + "user_id": 12, + "status": "check in", + "time_string": "2025-12-06 07:02:25.136515", + "created_at": "2025-12-06 07:02:25", + "updated_at": "2025-12-06 07:02:32", + "image": "screenshot/TON GIA KHANH_check out_at_2025_12_06_07_02_25.png" + }, + { + "id": 19014, + "name": "TON GIA KHANH", + "user_id": 12, + "status": "check out", + "time_string": "2025-12-06 10:43:30.041243", + "created_at": "2025-12-06 10:43:30", + "updated_at": "2025-12-06 10:43:37", + "image": "screenshot/TON GIA KHANH_check in_at_2025_12_06_10_43_30.png" + } + ], + "notes": [], + "total": 13265, + "day": 6 + }, + { + "values": [ + { + "id": 19021, + "name": "TON GIA KHANH", + "user_id": 12, + "status": "check in", + "time_string": "2025-12-08 06:52:29.056759", + "created_at": "2025-12-08 06:52:32", + "updated_at": "2025-12-08 06:52:44", + "image": "screenshot/TON GIA KHANH_check in_at_2025_12_08_06_52_29.png" + }, + { + "id": 19038, + "name": "TON GIA KHANH", + "user_id": 12, + "status": "check out", + "time_string": "2025-12-08 11:33:42.631060", + "created_at": "2025-12-08 11:33:43", + "updated_at": "2025-12-08 11:33:54", + "image": "screenshot/TON GIA KHANH_check in_at_2025_12_08_11_33_42.png" + }, + { + "id": 19046, + "name": "TON GIA KHANH", + "user_id": 12, + "status": "check in", + "time_string": "2025-12-08 13:44:16.443104", + "created_at": "2025-12-08 13:44:17", + "updated_at": "2025-12-08 13:44:28", + "image": "screenshot/TON GIA KHANH_check in_at_2025_12_08_13_44_16.png" + }, + { + "id": 19051, + "name": "TON GIA KHANH", + "user_id": 12, + "status": "check out", + "time_string": "2025-12-08 16:50:47.786983", + "created_at": "2025-12-08 16:50:48", + "updated_at": "2025-12-08 16:50:53", + "image": "screenshot/TON GIA KHANH_check in_at_2025_12_08_16_50_47.png" + } + ], + "notes": [], + "total": 28062, + "day": 8 + }, + { + "values": [ + { + "id": 19058, + "name": "TON GIA KHANH", + "user_id": 12, + "status": "check in", + "time_string": "2025-12-09 07:00:12.887846", + "created_at": "2025-12-09 07:00:13", + "updated_at": "2025-12-09 07:00:19", + "image": "screenshot/TON GIA KHANH_check out_at_2025_12_09_07_00_12.png" + } + ], + "notes": [], + "total": 0, + "day": 9 + } + ] + }, + { + "user": { + "id": 14, + "name": "ADMIN AUS", + "email": "admin@apactech.io", + "email_verified_at": null, + "forgot_code": null, + "permission": "admin", + "created_at": null, + "updated_at": "2025-03-27T10:29:54.000000Z", + "qrcode": "qrcode/qrcode_14.svg", + "avatar": "", + "is_permanent": 1, + "permanent_date": "0000-00-00", + "is_separated": 0, + "path_avatar": "https://ms.prology.net/img/avatar.png" + }, + "history": [] + }, + { + "user": { + "id": 15, + "name": "PHAM NHUT KHANG", + "email": "zelda.pham@apactech.io", + "email_verified_at": null, + "forgot_code": null, + "permission": "staff", + "created_at": null, + "updated_at": "2025-06-18T00:58:46.000000Z", + "qrcode": "qrcode/qrcode_15.svg", + "avatar": "avatars/vfGHX5JSFsafcEWKj7aHMZyGopJLvTRgS5YfspQB.jpg", + "is_permanent": 1, + "permanent_date": "0000-00-00", + "is_separated": 0, + "path_avatar": "https://ms.prology.net/storage/avatars/vfGHX5JSFsafcEWKj7aHMZyGopJLvTRgS5YfspQB.jpg" + } + }, + { + "user": { + "id": 16, + "name": "NGUYEN HOANG VI", + "email": "hoangvi.ng@apactech.io", + "email_verified_at": null, + "forgot_code": null, + "permission": "staff", + "created_at": "2024-09-04T12:42:01.000000Z", + "updated_at": "2025-09-17T04:05:15.000000Z", + "qrcode": "qrcode/qrcode_16.svg", + "avatar": "avatars/xRt5FG92nL4mSpwNoHgM7iSfcCUNzs14oNoFGivw.jpg", + "is_permanent": 1, + "permanent_date": "0000-00-00", + "is_separated": 0, + "path_avatar": "https://ms.prology.net/storage/avatars/xRt5FG92nL4mSpwNoHgM7iSfcCUNzs14oNoFGivw.jpg" + } + }, + { + "user": { + "id": 17, + "name": "GA Accounting", + "email": "acct.apactech@gmail.com", + "email_verified_at": null, + "forgot_code": null, + "permission": "accountant", + "created_at": "2024-11-02T08:50:28.000000Z", + "updated_at": "2024-11-04T15:14:26.000000Z", + "qrcode": "qrcode/qrcode_17.svg", + "avatar": "", + "is_permanent": 1, + "permanent_date": "0000-00-00", + "is_separated": 0, + "path_avatar": "https://ms.prology.net/img/avatar.png" + }, + "history": [] + } +] diff --git a/TrackingToolWeb/api.py b/TrackingToolWeb/api.py new file mode 100644 index 0000000..8c0afbb --- /dev/null +++ b/TrackingToolWeb/api.py @@ -0,0 +1,59 @@ + +import os +import datetime +import requests +from fastapi import UploadFile + +URL_API = "https://ms.prology.net/api/v1" + +def send_image(id, file: UploadFile, student_name: str, status: str): + id = str(id) + + # Tạo folder theo ngày + today = datetime.datetime.now().strftime("%Y_%m_%d") + folder_path = f"./images/{today}" + + if not os.path.exists(folder_path): + os.makedirs(folder_path) + + # Tạo file name chuẩn + file_name = ( + f"{student_name}_" + f"{status}_at_{datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')}.png" + ) + + file_path = os.path.join(folder_path, file_name) + + # Lưu file UploadFile xuống + with open(file_path, "wb") as f: + f.write(file.file.read()) + + # Mở lại file để gửi API + with open(file_path, "rb") as image_file: + files = {"image": image_file} + data = {"id": id, "file_name": file_name} + + try: + response = requests.post( + URL_API + "/admin/tracking/send-image", + data=data, + files=files + ) + response.raise_for_status() + res = response.json() + except Exception as e: + return {"status": False, "message": str(e)} + + return res + + + + +def create_history(data): + # Gửi yêu cầu POST với dữ liệu đã chỉ định + response = requests.post(URL_API+"/admin/tracking/scan-create", data=data) + res = response.json() + + print(res) + + return res \ No newline at end of file diff --git a/TrackingToolWeb/camera.py b/TrackingToolWeb/camera.py new file mode 100644 index 0000000..c32a071 --- /dev/null +++ b/TrackingToolWeb/camera.py @@ -0,0 +1,45 @@ +import cv2 +import requests +# source path/to/venv/bin/activate +API_URL = "http://localhost:8000/checkin" # Đổi lại nếu backend chạy ở địa chỉ khác +CAMERA_ID = "cam_pc_01" + +def capture_and_checkin(): + cap = cv2.VideoCapture(0) # Dùng camera mặc định (webcam) + + if not cap.isOpened(): + print("Không mở được camera.") + return + + print("Đang mở camera. Nhấn phím 'c' để check-in, 'q' để thoát.") + while True: + ret, frame = cap.read() + if not ret: + print("Không đọc được frame.") + break + + cv2.imshow("Camera", frame) + + key = cv2.waitKey(1) + if key == ord("q"): + break + elif key == ord("c"): + # Ghi tạm ảnh ra file + filename = "frame.jpg" + cv2.imwrite(filename, frame) + + # Gửi ảnh lên server + with open(filename, "rb") as f: + response = requests.post( + API_URL, + files={"file": ("frame.jpg", f, "image/jpeg")}, + data={"camera_id": CAMERA_ID} + ) + + print("📡 Server:", response.json()) + + cap.release() + cv2.destroyAllWindows() + +if __name__ == "__main__": + capture_and_checkin() diff --git a/TrackingToolWeb/client/.gitignore b/TrackingToolWeb/client/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/TrackingToolWeb/client/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/TrackingToolWeb/client/README.md b/TrackingToolWeb/client/README.md new file mode 100644 index 0000000..86b2b11 --- /dev/null +++ b/TrackingToolWeb/client/README.md @@ -0,0 +1,75 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is enabled on this template. See [this documentation](https://react.dev/learn/react-compiler) for more information. + +Note: This will impact Vite dev & build performances. + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` diff --git a/TrackingToolWeb/client/components.json b/TrackingToolWeb/client/components.json new file mode 100644 index 0000000..2b0833f --- /dev/null +++ b/TrackingToolWeb/client/components.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/index.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "registries": {} +} diff --git a/TrackingToolWeb/client/eslint.config.js b/TrackingToolWeb/client/eslint.config.js new file mode 100644 index 0000000..3b48d83 --- /dev/null +++ b/TrackingToolWeb/client/eslint.config.js @@ -0,0 +1,26 @@ +import js from "@eslint/js"; +import globals from "globals"; +import reactHooks from "eslint-plugin-react-hooks"; +import reactRefresh from "eslint-plugin-react-refresh"; +import tseslint from "typescript-eslint"; +import { defineConfig, globalIgnores } from "eslint/config"; + +export default defineConfig([ + globalIgnores(["dist"]), + { + files: ["**/*.{ts,tsx}"], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + rules: { + "eslint-disable @typescript-eslint/no-explicit-any": "off", + }, + }, +]); diff --git a/TrackingToolWeb/client/index.html b/TrackingToolWeb/client/index.html new file mode 100644 index 0000000..a16cb6b --- /dev/null +++ b/TrackingToolWeb/client/index.html @@ -0,0 +1,13 @@ + + +
+ + + ++ {body} +
+ ) +} + +export { + useFormField, + Form, + FormItem, + FormLabel, + FormControl, + FormDescription, + FormMessage, + FormField, +} diff --git a/TrackingToolWeb/client/src/components/ui/input.tsx b/TrackingToolWeb/client/src/components/ui/input.tsx new file mode 100644 index 0000000..8916905 --- /dev/null +++ b/TrackingToolWeb/client/src/components/ui/input.tsx @@ -0,0 +1,21 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +function Input({ className, type, ...props }: React.ComponentProps<"input">) { + return ( + + ) +} + +export { Input } diff --git a/TrackingToolWeb/client/src/components/ui/label.tsx b/TrackingToolWeb/client/src/components/ui/label.tsx new file mode 100644 index 0000000..fb5fbc3 --- /dev/null +++ b/TrackingToolWeb/client/src/components/ui/label.tsx @@ -0,0 +1,24 @@ +"use client" + +import * as React from "react" +import * as LabelPrimitive from "@radix-ui/react-label" + +import { cn } from "@/lib/utils" + +function Label({ + className, + ...props +}: React.ComponentPropsChuẩn bị sẵn sàng
+Vui lòng nhìn thẳng vào camera
++ {count > 0 ? `Còn ${count} giây...` : "Đã hoàn thành!"} +
+Chưa có dữ liệu điểm danh
+{formatTime(log.time)}
++ {user.email} +
+Chưa có dữ liệu điểm danh
++ {currentUser.email} +
+i.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const o=i.slice(1,-1),r=o.indexOf(":"),f=o.slice(0,r);return f?zy+f:void 0})(),xy=i=>{const{theme:o,classGroups:r}=i;return _y(r,o)},_y=(i,o)=>{const r=Bm();for(const f in i){const d=i[f];uo(d,r,f,o)}return r},uo=(i,o,r,f)=>{const d=i.length;for(let v=0;v📸 Face Camera
+
+
+
+ 📋 Lịch sử điểm danh
+
+
+
+
+
+
+
+
+
+
+ Tên học sinh
+ Thời gian
+ Camera ID
+