Files
mobile/lib/features/booking/domain/booking.dart
T

46 lines
1.3 KiB
Dart

/// Modèle réservation de créneau machine.
class Booking {
const Booking({
required this.uuid,
required this.machineUuid,
required this.machineName,
required this.slotStart,
required this.slotEnd,
required this.status,
this.bookingFee = 0,
});
final String uuid;
final String machineUuid;
final String machineName;
final DateTime? slotStart;
final DateTime? slotEnd;
final String status;
final double bookingFee;
bool get canCancel =>
(status == 'confirmed' || status == 'pending') &&
slotStart != null &&
slotStart!.isAfter(DateTime.now());
bool get canModify => canCancel;
factory Booking.fromJson(Map<String, dynamic> json) {
final machine = json['machine'] as Map<String, dynamic>?;
return Booking(
uuid: json['uuid'] as String,
machineUuid: machine?['uuid'] as String? ?? json['machine_uuid'] as String? ?? '',
machineName: machine?['name'] as String? ?? 'Machine',
slotStart: json['slot_start'] != null
? DateTime.tryParse(json['slot_start'] as String)
: null,
slotEnd: json['slot_end'] != null
? DateTime.tryParse(json['slot_end'] as String)
: null,
status: json['status'] as String? ?? 'pending',
bookingFee: (json['booking_fee'] as num?)?.toDouble() ?? 0,
);
}
}