feat(app): implement Product Scan review flow, dynamic batch expiry picker, custom PDFs, PO relationships, and aligned card layouts
This commit is contained in:
1 parent
9ff4a4a922
commit
577be04308
69 files changed
+5645
-1657
No files matched your search
@@ -0,0 +1,87 @@
|
||||
import '../../models/document_model.dart';
|
||||
|
||||
enum PendingDocumentStatus { uploading, processing, success, error, syncFailed }
|
||||
|
||||
class PendingDocument {
|
||||
final String id;
|
||||
final String imagePath;
|
||||
final PendingDocumentStatus status;
|
||||
final DocumentModel? document;
|
||||
final double? latitude;
|
||||
final double? longitude;
|
||||
final String? errorMessage;
|
||||
final DateTime createdAt;
|
||||
final String? scanMode;
|
||||
|
||||
PendingDocument({
|
||||
required this.id,
|
||||
required this.imagePath,
|
||||
this.status = PendingDocumentStatus.uploading,
|
||||
this.document,
|
||||
this.latitude,
|
||||
this.longitude,
|
||||
this.errorMessage,
|
||||
DateTime? createdAt,
|
||||
this.scanMode,
|
||||
}) : createdAt = createdAt ?? DateTime.now();
|
||||
|
||||
PendingDocument copyWith({
|
||||
PendingDocumentStatus? status,
|
||||
DocumentModel? document,
|
||||
double? latitude,
|
||||
double? longitude,
|
||||
String? errorMessage,
|
||||
String? scanMode,
|
||||
}) {
|
||||
return PendingDocument(
|
||||
id: id,
|
||||
imagePath: imagePath,
|
||||
status: status ?? this.status,
|
||||
document: document ?? this.document,
|
||||
latitude: latitude ?? this.latitude,
|
||||
longitude: longitude ?? this.longitude,
|
||||
errorMessage: errorMessage,
|
||||
createdAt: createdAt,
|
||||
scanMode: scanMode ?? this.scanMode,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'id': id,
|
||||
'image_path': imagePath,
|
||||
'status': status.name,
|
||||
'document': document?.toJson(),
|
||||
'latitude': latitude,
|
||||
'longitude': longitude,
|
||||
'error_message': errorMessage,
|
||||
'created_at': createdAt.toIso8601String(),
|
||||
'scan_mode': scanMode,
|
||||
};
|
||||
}
|
||||
|
||||
factory PendingDocument.fromJson(Map<String, dynamic> json) {
|
||||
PendingDocumentStatus status;
|
||||
try {
|
||||
status = PendingDocumentStatus.values.byName(json['status'] as String? ?? '');
|
||||
} catch (_) {
|
||||
status = PendingDocumentStatus.error;
|
||||
}
|
||||
|
||||
final rawDocument = json['document'];
|
||||
|
||||
return PendingDocument(
|
||||
id: json['id'] as String,
|
||||
imagePath: json['image_path'] as String,
|
||||
status: status,
|
||||
document: rawDocument is Map
|
||||
? DocumentModel.fromJson(Map<String, dynamic>.from(rawDocument))
|
||||
: null,
|
||||
latitude: (json['latitude'] as num?)?.toDouble(),
|
||||
longitude: (json['longitude'] as num?)?.toDouble(),
|
||||
errorMessage: json['error_message'] as String?,
|
||||
createdAt: json['created_at'] != null ? DateTime.parse(json['created_at'] as String) : null,
|
||||
scanMode: json['scan_mode'] as String?,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user