72 lines
2.1 KiB
Dart
72 lines
2.1 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';
|
|
|
|
@ConnectOfflineFirstWithSupabase(
|
|
supabaseConfig: SupabaseSerializable(tableName: 'pass_slips'),
|
|
)
|
|
class PassSlip extends OfflineFirstWithSupabaseModel {
|
|
final String id;
|
|
final String userId;
|
|
final String dutyScheduleId;
|
|
final String reason;
|
|
final String status;
|
|
final DateTime requestedAt;
|
|
final String? approvedBy;
|
|
final DateTime? approvedAt;
|
|
final DateTime? slipStart;
|
|
final DateTime? slipEnd;
|
|
final DateTime? requestedStart;
|
|
|
|
@Supabase(ignore: true)
|
|
@Sqlite(ignore: true)
|
|
bool get isActive => status == 'approved' && slipEnd == null;
|
|
|
|
@Supabase(ignore: true)
|
|
@Sqlite(ignore: true)
|
|
bool get isExceeded =>
|
|
isActive &&
|
|
slipStart != null &&
|
|
AppTime.now().difference(slipStart!) > const Duration(hours: 1);
|
|
|
|
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,
|
|
this.requestedStart,
|
|
});
|
|
|
|
factory PassSlip.fromMap(Map<String, dynamic> 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),
|
|
requestedStart: map['requested_start'] == null
|
|
? null
|
|
: AppTime.parse(map['requested_start'] as String),
|
|
);
|
|
}
|
|
}
|