Attendance log now record both check in and out photos and allow IT Staffs, Dispatchers and Admins to view for verification

This commit is contained in:
2026-03-08 18:45:31 +08:00
parent f8502f01b6
commit 0f675d4274
7 changed files with 503 additions and 35 deletions
+14 -3
View File
@@ -91,10 +91,16 @@ class AttendanceController {
required String attendanceId,
required double lat,
required double lng,
String? justification,
}) async {
await _client.rpc(
'attendance_check_out',
params: {'p_attendance_id': attendanceId, 'p_lat': lat, 'p_lng': lng},
params: {
'p_attendance_id': attendanceId,
'p_lat': lat,
'p_lng': lng,
if (justification != null) 'p_justification': justification,
},
);
}
@@ -118,10 +124,12 @@ class AttendanceController {
required Uint8List bytes,
required String fileName,
required String status, // 'verified', 'unverified'
bool isCheckOut = false,
}) async {
final userId = _client.auth.currentUser!.id;
final ext = fileName.split('.').last.toLowerCase();
final path = '$userId/$attendanceId.$ext';
final prefix = isCheckOut ? 'checkout' : 'checkin';
final path = '$userId/${prefix}_$attendanceId.$ext';
await _client.storage
.from('attendance-verification')
.uploadBinary(
@@ -132,9 +140,12 @@ class AttendanceController {
final url = _client.storage
.from('attendance-verification')
.getPublicUrl(path);
final column = isCheckOut
? 'check_out_verification_photo_url'
: 'check_in_verification_photo_url';
await _client
.from('attendance_logs')
.update({'verification_status': status, 'verification_photo_url': url})
.update({'verification_status': status, column: url})
.eq('id', attendanceId);
}
@@ -102,12 +102,13 @@ class VerificationSessionController {
})
.eq('id', session.userId);
} else if (session.type == 'verification' && session.contextId != null) {
// Update attendance log verification status
// Update attendance log verification status.
// Cross-device verification defaults to check-in photo column.
await _client
.from('attendance_logs')
.update({
'verification_status': 'verified',
'verification_photo_url': session.imageUrl,
'check_in_verification_photo_url': session.imageUrl,
})
.eq('id', session.contextId!);
}