You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
5.3 KiB
152 lines
5.3 KiB
import 'package:flutter/material.dart';
|
|
import 'package:intl/intl.dart';
|
|
|
|
class MyOrdersModel {
|
|
String tankerName = '';
|
|
String bookingid = '';
|
|
String supplierId = '';
|
|
String dateOfOrder = '';
|
|
String typeofwater = '';
|
|
String delivery_agent_mobile = '';
|
|
String delivery_agent = '';
|
|
String capacity = '';
|
|
String address = '';
|
|
String price = '';
|
|
String customerId = '';
|
|
String startTime = '';
|
|
String stopTime = '';
|
|
String orderStatus = '';
|
|
String initialWaterLevel = '';
|
|
String finalWaterLevel = '';
|
|
String quantityDelivered = '';
|
|
String amountPaid = '';
|
|
String amountDue = '';
|
|
String paymentMode = '';
|
|
String deliverdWater = '';
|
|
String supplierName = '';
|
|
String deliveredDate = '';
|
|
String displayDeliveredDate = '';
|
|
String displayAddress = '';
|
|
String expectedDateOfDelivery = '';
|
|
String displayDateOfOrder = '';
|
|
String paymentStatus = '';
|
|
String tankName = '';
|
|
var tankerRunningStatus;
|
|
double lat = 0;
|
|
double lng = 0;
|
|
Color cardColor = Colors.white;
|
|
String tank_otp='';
|
|
String stop_otp='';
|
|
String dbId='';
|
|
|
|
MyOrdersModel();
|
|
|
|
factory MyOrdersModel.fromJson(Map<String, dynamic> json) {
|
|
final rtvm = MyOrdersModel();
|
|
|
|
rtvm.tankerName = json['tankerName']?.toString() ?? '';
|
|
rtvm.bookingid = json['bookingid']?.toString() ?? '';
|
|
rtvm.supplierId = json['supplierId']?.toString() ?? '';
|
|
rtvm.dateOfOrder = json['dateOfOrder']?.toString() ?? '';
|
|
rtvm.typeofwater = json['typeofwater']?.toString() ?? '';
|
|
rtvm.supplierName = json['supplierName']?.toString() ?? '';
|
|
rtvm.delivery_agent_mobile = json['delivery_agent_mobile']?.toString() ?? '';
|
|
rtvm.capacity = json['capacity']?.toString() ?? '';
|
|
rtvm.address = json['address']?.toString() ?? '';
|
|
rtvm.price = json['price']?.toString() ?? '';
|
|
rtvm.orderStatus = json['orderStatus']?.toString().toLowerCase() ?? '';
|
|
rtvm.customerId = json['customerId']?.toString() ?? '';
|
|
rtvm.startTime = json['start_time']?.toString() ?? '';
|
|
rtvm.stopTime = json['stop_time']?.toString() ?? '';
|
|
rtvm.initialWaterLevel = json['initial_water_level']?.toString() ?? '';
|
|
rtvm.finalWaterLevel = json['final_water_level']?.toString() ?? '';
|
|
rtvm.quantityDelivered = json['quantityDelivered']?.toString() ?? '';
|
|
rtvm.amountPaid = json['amount_paid']?.toString() ?? '';
|
|
rtvm.amountDue = json['amount_due']?.toString() ?? '';
|
|
rtvm.paymentMode = json['payment_mode']?.toString() ?? '';
|
|
rtvm.deliverdWater = json['quantityDelivered']?.toString() ?? '';
|
|
rtvm.deliveredDate = json['deliveredDate']?.toString() ?? '';
|
|
rtvm.expectedDateOfDelivery = json["expectedDateOfDelivery"]?.toString() ?? '';
|
|
rtvm.tankerRunningStatus = json['tankerRunningStatus'] ?? '';
|
|
rtvm.delivery_agent = json['delivery_agent']?.toString() ?? '';
|
|
rtvm.paymentStatus = json['payment_status']?.toString() ?? '';
|
|
rtvm.tankName = json['tankName']?.toString() ?? '';
|
|
rtvm.tank_otp = json['tank_otp']?.toString() ?? '';
|
|
rtvm.dbId = json['_id']?.toString() ?? '';
|
|
rtvm.stop_otp = json['stop_otp']?.toString() ?? '';
|
|
|
|
|
|
// ✅ Handle Delivered Date (Safe Parsing)
|
|
if (rtvm.deliveredDate.isNotEmpty) {
|
|
try {
|
|
final inputFormat = DateFormat("dd-MMM-yyyy - HH:mm");
|
|
final dateTime = inputFormat.parse(rtvm.deliveredDate);
|
|
final outputFormat = DateFormat("MMMM d yyyy, h:mm a");
|
|
rtvm.displayDeliveredDate = outputFormat.format(dateTime);
|
|
} catch (_) {
|
|
rtvm.displayDeliveredDate = rtvm.deliveredDate; // fallback to raw
|
|
}
|
|
}
|
|
|
|
// ✅ Handle Date of Order
|
|
if (rtvm.dateOfOrder.isNotEmpty) {
|
|
final raw = rtvm.dateOfOrder.trim();
|
|
DateTime? dt;
|
|
|
|
try {
|
|
// Normalize format
|
|
String s = raw.replaceAll(RegExp(r'\s*-\s*'), '-');
|
|
s = s.replaceAllMapped(RegExp(r'(\d{1,2})-([A-Za-z]{3,9})-(\d{4})'), (m) {
|
|
final mon = m.group(2)!;
|
|
final cap = mon[0].toUpperCase() + mon.substring(1).toLowerCase();
|
|
return "${m.group(1)}-$cap-${m.group(3)}";
|
|
});
|
|
|
|
final patterns = <String>[
|
|
"dd-MMM-yyyy-HH:mm",
|
|
"dd-MMM-yyyy HH:mm",
|
|
"dd-MMM-yyyy",
|
|
"dd-MM-yyyy HH:mm",
|
|
"dd-MM-yyyy",
|
|
"yyyy-MM-dd HH:mm:ss",
|
|
"yyyy-MM-dd",
|
|
];
|
|
|
|
for (final p in patterns) {
|
|
try {
|
|
dt = DateFormat(p, 'en_US').parseStrict(s);
|
|
break;
|
|
} catch (_) {}
|
|
}
|
|
|
|
if (dt == null) dt = DateTime.tryParse(raw);
|
|
} catch (_) {}
|
|
|
|
if (dt != null) {
|
|
final hasTime = RegExp(r'\d{1,2}:\d{2}').hasMatch(raw);
|
|
final fmt = DateFormat(hasTime ? "MMMM d yyyy, h:mm a" : "MMMM d yyyy");
|
|
rtvm.displayDateOfOrder = fmt.format(dt);
|
|
}
|
|
}
|
|
|
|
// ✅ Handle Address
|
|
final rawAddr = (rtvm.address ?? '').trim();
|
|
if (rawAddr.isNotEmpty) {
|
|
final parts = rawAddr.split(',').map((e) => e.trim()).toList();
|
|
parts.removeWhere((p) =>
|
|
p.toLowerCase().contains("india") ||
|
|
RegExp(r'\d{6}').hasMatch(p) ||
|
|
p.toLowerCase().contains("telangana"));
|
|
rtvm.displayAddress = parts.length >= 2 ? parts[parts.length - 2] : rawAddr;
|
|
} else {
|
|
rtvm.displayAddress = '';
|
|
}
|
|
|
|
// ✅ Latitude & Longitude Parsing
|
|
rtvm.lat = double.tryParse(json['latitude']?.toString() ?? '0') ?? 0;
|
|
rtvm.lng = double.tryParse(json['longitude']?.toString() ?? '0') ?? 0;
|
|
|
|
return rtvm;
|
|
}
|
|
}
|