84 lines
2.1 KiB
Dart
84 lines
2.1 KiB
Dart
import '../core/utils/safe_convert.dart';
|
|
|
|
class AttendanceSummary {
|
|
final double percentage;
|
|
final int present;
|
|
final int absent;
|
|
final int late;
|
|
final int medicalLeave;
|
|
final int onDuty;
|
|
|
|
const AttendanceSummary({
|
|
required this.percentage,
|
|
required this.present,
|
|
required this.absent,
|
|
required this.late,
|
|
required this.medicalLeave,
|
|
required this.onDuty,
|
|
});
|
|
|
|
factory AttendanceSummary.fromJson(Map<String, dynamic> json) {
|
|
return AttendanceSummary(
|
|
percentage: SafeConvert.toSafeDouble(json['percentage']),
|
|
present: SafeConvert.toSafeInt(json['present']),
|
|
absent: SafeConvert.toSafeInt(json['absent']),
|
|
late: SafeConvert.toSafeInt(json['late']),
|
|
medicalLeave: SafeConvert.toSafeInt(json['medical_leave']),
|
|
onDuty: SafeConvert.toSafeInt(json['on_duty']),
|
|
);
|
|
}
|
|
|
|
factory AttendanceSummary.empty() => const AttendanceSummary(
|
|
percentage: 0.0,
|
|
present: 0,
|
|
absent: 0,
|
|
late: 0,
|
|
medicalLeave: 0,
|
|
onDuty: 0,
|
|
);
|
|
}
|
|
|
|
class AttendanceRecord {
|
|
final int id;
|
|
final String date;
|
|
final String status;
|
|
final String remarks;
|
|
|
|
const AttendanceRecord({
|
|
required this.id,
|
|
required this.date,
|
|
required this.status,
|
|
this.remarks = '',
|
|
});
|
|
|
|
factory AttendanceRecord.fromJson(Map<String, dynamic> json) {
|
|
return AttendanceRecord(
|
|
id: SafeConvert.toSafeInt(json['id']),
|
|
date: SafeConvert.toSafeString(json['date']),
|
|
status: SafeConvert.toSafeString(json['status'], 'absent'),
|
|
remarks: SafeConvert.toSafeString(json['remarks']),
|
|
);
|
|
}
|
|
}
|
|
|
|
class AttendanceData {
|
|
final AttendanceSummary summary;
|
|
final List<AttendanceRecord> records;
|
|
|
|
const AttendanceData({
|
|
required this.summary,
|
|
required this.records,
|
|
});
|
|
|
|
factory AttendanceData.fromJson(Map<String, dynamic> json) {
|
|
final summaryMap = SafeConvert.toNullableMap(json['summary']) ?? {};
|
|
return AttendanceData(
|
|
summary: AttendanceSummary.fromJson(summaryMap),
|
|
records: SafeConvert.toSafeList(
|
|
json['records'],
|
|
(item) => AttendanceRecord.fromJson(SafeConvert.toNullableMap(item) ?? {}),
|
|
),
|
|
);
|
|
}
|
|
}
|