Files
tasq/lib/models/leave_of_absence.model.dart
T
2026-04-27 06:20:39 +08:00

60 lines
1.8 KiB
Dart

import 'package:brick_offline_first_with_supabase/brick_offline_first_with_supabase.dart';
import 'package:brick_sqlite/brick_sqlite.dart';
import 'package:brick_supabase/brick_supabase.dart';
import '../utils/app_time.dart';
// Supabase table is singular: 'leave_of_absence' (not 'leave_of_absences').
@ConnectOfflineFirstWithSupabase(
supabaseConfig: SupabaseSerializable(tableName: 'leave_of_absence'),
)
class LeaveOfAbsence extends OfflineFirstWithSupabaseModel {
final String id;
final String userId;
final String leaveType;
final String justification;
final DateTime startTime;
final DateTime endTime;
final String status;
final String filedBy;
final DateTime createdAt;
LeaveOfAbsence({
required this.id,
required this.userId,
required this.leaveType,
required this.justification,
required this.startTime,
required this.endTime,
required this.status,
required this.filedBy,
required this.createdAt,
});
factory LeaveOfAbsence.fromMap(Map<String, dynamic> map) {
return LeaveOfAbsence(
id: map['id'] as String,
userId: map['user_id'] as String,
leaveType: map['leave_type'] as String,
justification: map['justification'] as String,
startTime: AppTime.parse(map['start_time'] as String),
endTime: AppTime.parse(map['end_time'] as String),
status: map['status'] as String? ?? 'pending',
filedBy: map['filed_by'] as String,
createdAt: AppTime.parse(map['created_at'] as String),
);
}
@Supabase(ignore: true)
@Sqlite(ignore: true)
String get leaveTypeLabel {
switch (leaveType) {
case 'emergency_leave': return 'Emergency Leave';
case 'parental_leave': return 'Parental Leave';
case 'sick_leave': return 'Sick Leave';
case 'vacation_leave': return 'Vacation Leave';
default: return leaveType;
}
}
}