60 lines
1.8 KiB
Dart
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;
|
|
}
|
|
}
|
|
}
|