2025-07-23 15:02:40 +04:00

81 lines
2.1 KiB
Dart

enum EntryType { work, leave, wfh }
enum LeaveType { sick, annual, nationalHoliday, companyWfh }
class AttendanceEntry {
final int? id;
final DateTime date;
final DateTime? loginTime;
final DateTime? logoutTime;
final String? notes;
final EntryType entryType;
final LeaveType? leaveType;
AttendanceEntry({
this.id,
required this.date,
this.loginTime,
this.logoutTime,
this.notes,
this.entryType = EntryType.work,
this.leaveType,
});
// Helper method to create a copy of the object with some fields updated.
AttendanceEntry copyWith({
int? id,
DateTime? date,
DateTime? loginTime,
DateTime? logoutTime,
String? notes,
EntryType? entryType,
LeaveType? leaveType,
}) {
return AttendanceEntry(
id: id ?? this.id,
date: date ?? this.date,
loginTime: loginTime ?? this.loginTime,
logoutTime: logoutTime ?? this.logoutTime,
notes: notes ?? this.notes,
entryType: entryType ?? this.entryType,
leaveType: leaveType ?? this.leaveType,
);
}
Map<String, dynamic> toMap() {
return {
'id': id,
'date': date.toIso8601String().substring(0, 10),
'loginTime': loginTime?.toIso8601String(),
'logoutTime': logoutTime?.toIso8601String(),
'notes': notes,
'entryType': entryType.name,
'leaveType': leaveType?.name,
};
}
factory AttendanceEntry.fromMap(Map<String, dynamic> map) {
// Check for null 'id' before casting
final int? id = map['id'] as int?;
return AttendanceEntry(
id: id,
date: DateTime.parse(map['date'] as String),
loginTime: map['loginTime'] != null
? DateTime.parse(map['loginTime'] as String)
: null,
logoutTime: map['logoutTime'] != null
? DateTime.parse(map['logoutTime'] as String)
: null,
notes: map['notes'] as String?,
entryType: EntryType.values.firstWhere(
(e) => e.name == map['entryType'],
orElse: () => EntryType.work,
),
leaveType: map['leaveType'] != null
? LeaveType.values.firstWhere((e) => e.name == map['leaveType'])
: null,
);
}
}