46 lines
1.3 KiB
Dart
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,
|
|
);
|
|
}
|
|
}
|