import '../utils/app_time.dart'; class PassSlip { PassSlip({ required this.id, required this.userId, required this.dutyScheduleId, required this.reason, required this.status, required this.requestedAt, this.approvedBy, this.approvedAt, this.slipStart, this.slipEnd, }); final String id; final String userId; final String dutyScheduleId; final String reason; final String status; // 'pending', 'approved', 'rejected', 'completed' final DateTime requestedAt; final String? approvedBy; final DateTime? approvedAt; final DateTime? slipStart; final DateTime? slipEnd; /// Whether the slip is active (approved but not yet completed). bool get isActive => status == 'approved' && slipEnd == null; /// Whether the active slip has exceeded 1 hour. bool get isExceeded => isActive && slipStart != null && AppTime.now().difference(slipStart!) > const Duration(hours: 1); factory PassSlip.fromMap(Map map) { return PassSlip( id: map['id'] as String, userId: map['user_id'] as String, dutyScheduleId: map['duty_schedule_id'] as String, reason: map['reason'] as String, status: map['status'] as String? ?? 'pending', requestedAt: AppTime.parse(map['requested_at'] as String), approvedBy: map['approved_by'] as String?, approvedAt: map['approved_at'] == null ? null : AppTime.parse(map['approved_at'] as String), slipStart: map['slip_start'] == null ? null : AppTime.parse(map['slip_start'] as String), slipEnd: map['slip_end'] == null ? null : AppTime.parse(map['slip_end'] as String), ); } }