81 lines
2.0 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;
const AttendanceRecord({
required this.id,
required this.date,
required this.status,
});
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'),
);
}
}
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) ?? {}),
),
);
}
}