118 lines
3.4 KiB
Dart
118 lines
3.4 KiB
Dart
import 'location_model.dart';
|
|
|
|
enum StopType { pickup, dropoff }
|
|
|
|
enum StopStatus { pending, inProgress, completed, failed }
|
|
|
|
class StopModel {
|
|
final String id;
|
|
final String customerId;
|
|
final String customerName;
|
|
final String? customerPhone;
|
|
final LocationModel location;
|
|
final StopType type;
|
|
final StopStatus status;
|
|
final DateTime scheduledTime;
|
|
final DateTime? completedTime;
|
|
final String? notes;
|
|
final List<String> items;
|
|
final int orderNumber;
|
|
final String? signature;
|
|
final String? photo;
|
|
|
|
StopModel({
|
|
required this.id,
|
|
required this.customerId,
|
|
required this.customerName,
|
|
this.customerPhone,
|
|
required this.location,
|
|
required this.type,
|
|
required this.status,
|
|
required this.scheduledTime,
|
|
this.completedTime,
|
|
this.notes,
|
|
required this.items,
|
|
required this.orderNumber,
|
|
this.signature,
|
|
this.photo,
|
|
});
|
|
|
|
factory StopModel.fromJson(Map<String, dynamic> json) {
|
|
return StopModel(
|
|
id: json['id'] as String,
|
|
customerId: json['customerId'] as String,
|
|
customerName: json['customerName'] as String,
|
|
customerPhone: json['customerPhone'] as String?,
|
|
location: LocationModel.fromJson(json['location'] as Map<String, dynamic>),
|
|
type: StopType.values.firstWhere(
|
|
(e) => e.toString() == 'StopType.${json['type']}',
|
|
),
|
|
status: StopStatus.values.firstWhere(
|
|
(e) => e.toString() == 'StopStatus.${json['status']}',
|
|
),
|
|
scheduledTime: DateTime.parse(json['scheduledTime'] as String),
|
|
completedTime: json['completedTime'] != null
|
|
? DateTime.parse(json['completedTime'] as String)
|
|
: null,
|
|
notes: json['notes'] as String?,
|
|
items: (json['items'] as List<dynamic>).cast<String>(),
|
|
orderNumber: json['orderNumber'] as int,
|
|
signature: json['signature'] as String?,
|
|
photo: json['photo'] as String?,
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'id': id,
|
|
'customerId': customerId,
|
|
'customerName': customerName,
|
|
'customerPhone': customerPhone,
|
|
'location': location.toJson(),
|
|
'type': type.toString().split('.').last,
|
|
'status': status.toString().split('.').last,
|
|
'scheduledTime': scheduledTime.toIso8601String(),
|
|
'completedTime': completedTime?.toIso8601String(),
|
|
'notes': notes,
|
|
'items': items,
|
|
'orderNumber': orderNumber,
|
|
'signature': signature,
|
|
'photo': photo,
|
|
};
|
|
}
|
|
|
|
StopModel copyWith({
|
|
String? id,
|
|
String? customerId,
|
|
String? customerName,
|
|
String? customerPhone,
|
|
LocationModel? location,
|
|
StopType? type,
|
|
StopStatus? status,
|
|
DateTime? scheduledTime,
|
|
DateTime? completedTime,
|
|
String? notes,
|
|
List<String>? items,
|
|
int? orderNumber,
|
|
String? signature,
|
|
String? photo,
|
|
}) {
|
|
return StopModel(
|
|
id: id ?? this.id,
|
|
customerId: customerId ?? this.customerId,
|
|
customerName: customerName ?? this.customerName,
|
|
customerPhone: customerPhone ?? this.customerPhone,
|
|
location: location ?? this.location,
|
|
type: type ?? this.type,
|
|
status: status ?? this.status,
|
|
scheduledTime: scheduledTime ?? this.scheduledTime,
|
|
completedTime: completedTime ?? this.completedTime,
|
|
notes: notes ?? this.notes,
|
|
items: items ?? this.items,
|
|
orderNumber: orderNumber ?? this.orderNumber,
|
|
signature: signature ?? this.signature,
|
|
photo: photo ?? this.photo,
|
|
);
|
|
}
|
|
}
|