import 'package:cheminova/models/rd_order_item_model.dart'; class SingleGetOrderModel { final String id; String? paymentMode; String? shipTo; String? billTo; List? orderItem; double? subtotal; double? gstTotal; double? grandTotal; String? status; List? invoices; AddedBy? addedBy; String? pd; bool? isCancelled; bool? isDelivered; String? deliveredDate; DateTime? statusUpdatedAt; String? uniqueId; DateTime? createdAt; DateTime? updatedAt; SingleGetOrderModel({ required this.id, this.paymentMode, this.shipTo, this.billTo, this.orderItem, this.subtotal, this.gstTotal, this.grandTotal, this.status, this.invoices, this.addedBy, this.pd, this.isCancelled, this.isDelivered, this.deliveredDate, this.statusUpdatedAt, this.uniqueId, this.createdAt, this.updatedAt, }); factory SingleGetOrderModel.fromJson(Map json) { return SingleGetOrderModel( id: json['_id'] ?? '', paymentMode: json['paymentMode'] ?? '', shipTo: json['shipTo'] ?? '', billTo: json['billTo'] ?? '', orderItem: (json['orderItem'] as List?) ?.map((item) => RDOrderItem.fromJson(item)) .toList() ?? [], subtotal: (json['subtotal'] as num?)?.toDouble() ?? 0.0, gstTotal: (json['gstTotal'] as num?)?.toDouble() ?? 0.0, grandTotal: (json['grandTotal'] as num?)?.toDouble() ?? 0.0, status: json['status'] ?? '', invoices: json['invoices'] ?? [], addedBy: AddedBy.fromJson(json['addedBy'] ?? {}), pd: json['pd'] ?? '', isCancelled: json['iscancelled'] ?? false, isDelivered: json['isDelivered'] ?? false, deliveredDate: json['DeliveredDate'] ?? '', statusUpdatedAt: DateTime.parse(json['statusUpdatedAt'] ?? DateTime.now().toString()), uniqueId: json['uniqueId'] ?? '', createdAt: DateTime.parse(json['createdAt'] ?? DateTime.now().toString()), updatedAt: DateTime.parse(json['updatedAt'] ?? DateTime.now().toString()), ); } Map toJson() { return { '_id': id, 'paymentMode': paymentMode, 'shipTo': shipTo, 'billTo': billTo, 'orderItem': orderItem?.map((item) => item.toJson()).toList(), 'subtotal': subtotal, 'gstTotal': gstTotal, 'grandTotal': grandTotal, 'status': status, 'invoices': invoices, 'addedBy': addedBy?.toJson(), 'pd': pd, 'iscancelled': isCancelled, 'isDelivered': isDelivered, 'DeliveredDate': deliveredDate, 'statusUpdatedAt': statusUpdatedAt?.toIso8601String(), 'uniqueId': uniqueId, 'createdAt': createdAt?.toIso8601String(), 'updatedAt': updatedAt?.toIso8601String(), }; } @override String toString() { return 'SingleGetOrderModel(id: $id, paymentMode: $paymentMode, shipTo: $shipTo, billTo: $billTo, ' 'orderItem: $orderItem, subtotal: $subtotal, gstTotal: $gstTotal, grandTotal: $grandTotal, ' 'status: $status, invoices: $invoices, addedBy: $addedBy, pd: $pd, ' 'isCancelled: $isCancelled, isDelivered: $isDelivered, deliveredDate: $deliveredDate, ' 'statusUpdatedAt: $statusUpdatedAt, uniqueId: $uniqueId, createdAt: $createdAt, updatedAt: $updatedAt)'; } } class OrderItem { final String productId; final String sku; final String name; final String categoryName; final String brandName; final int price; // Use int for price final int gst; // Use int for GST final int hsnCode; // Use int for HSN Code final String description; final List image; // Assuming images are stored as a list of strings final int quantity; final int remainingQuantity; int? processQuantity; final String id; // Use String for _id OrderItem({ required this.productId, required this.sku, required this.name, required this.categoryName, required this.brandName, required this.price, required this.gst, required this.hsnCode, required this.description, required this.image, required this.quantity, required this.remainingQuantity, this.processQuantity = 1, required this.id, }); factory OrderItem.fromJson(Map json) { return OrderItem( productId: json['productId'] ?? '', sku: json['SKU'] ?? '', name: json['name'] ?? '', categoryName: json['categoryName'] ?? '', brandName: json['brandName'] ?? '', price: (json['price'] as num?)?.toInt() ?? 0, // Handle as num gst: (json['GST'] as num?)?.toInt() ?? 0, // Handle as num hsnCode: (json['HSN_Code'] as num?)?.toInt() ?? 0, // Handle as num description: json['description'] ?? '', image: List.from(json['image'] ?? []), quantity: (json['quantity'] as num?)?.toInt() ?? 0, // Handle as num remainingQuantity: (json['remainingQuantity'] as num?)?.toInt() ?? 0, // Handle as num processQuantity: (json['processQuantity']as num?)?.toInt()??0, id: json['_id'] ?? '', ); } Map toJson() { return { 'productId': productId, 'SKU': sku, 'name': name, 'categoryName': categoryName, 'brandName': brandName, 'price': price, 'GST': gst, 'HSN_Code': hsnCode, 'description': description, 'image': image, 'quantity': quantity, 'remainingQuantity': remainingQuantity, '_id': id, }; } @override String toString() { return 'OrderItem(productId: $productId, SKU: $sku, name: $name, categoryName: $categoryName, ' 'brandName: $brandName, price: $price, GST: $gst, HSN_Code: $hsnCode, ' 'description: $description, image: $image, quantity: $quantity, ' 'remainingQuantity: $remainingQuantity, id: $id)'; } } class AddedBy { final String id; final String designation; final String name; final String email; final String mobileNumber; final String principalDistributor; final String addedBy; final String userType; final String kyc; String? fcmToken; final DateTime createdAt; final DateTime updatedAt; final String mappedSC; final String uniqueId; final String mappedTM; AddedBy({ required this.id, required this.designation, required this.name, required this.email, required this.mobileNumber, required this.principalDistributor, required this.addedBy, required this.userType, required this.kyc, this.fcmToken, required this.createdAt, required this.updatedAt, required this.mappedSC, required this.uniqueId, required this.mappedTM, }); factory AddedBy.fromJson(Map json) { return AddedBy( id: json['_id'] ?? '', designation: json['designation'] ?? '', name: json['name'] ?? '', email: json['email'] ?? '', mobileNumber: json['mobile_number'] ?? '', principalDistributor: json['principal_distributer'] ?? '', addedBy: json['addedBy'] ?? '', userType: json['userType'] ?? '', kyc: json['kyc'] ?? '', fcmToken: json['fcm_token']?.toString(), // Handle null safely createdAt: DateTime.parse(json['createdAt'] ?? DateTime.now().toString()), updatedAt: DateTime.parse(json['updatedAt'] ?? DateTime.now().toString()), mappedSC: json['mappedSC'] ?? '', uniqueId: json['uniqueId'] ?? '', mappedTM: json['mappedTM'] ?? '', ); } Map toJson() { return { '_id': id, 'designation': designation, 'name': name, 'email': email, 'mobile_number': mobileNumber, 'principal_distributer': principalDistributor, 'addedBy': addedBy, 'userType': userType, 'kyc': kyc, 'fcm_token': fcmToken, 'createdAt': createdAt.toIso8601String(), 'updatedAt': updatedAt.toIso8601String(), 'mappedSC': mappedSC, 'uniqueId': uniqueId, 'mappedTM': mappedTM, }; } @override String toString() { return 'AddedBy(id: $id, designation: $designation, name: $name, email: $email, ' 'mobileNumber: $mobileNumber, principalDistributor: $principalDistributor, ' 'addedBy: $addedBy, userType: $userType, kyc: $kyc, ' 'fcmToken: $fcmToken, createdAt: $createdAt, updatedAt: $updatedAt, ' 'mappedSC: $mappedSC, uniqueId: $uniqueId, mappedTM: $mappedTM)'; } }