|
|
|
|
@ -28,6 +28,12 @@ class _AllOrdersState extends State<AllOrders> {
|
|
|
|
|
final List<OrdersModel> orders =[];
|
|
|
|
|
List<OrdersModel> ordersList = [];
|
|
|
|
|
|
|
|
|
|
int todaysOrdersCount = 0;
|
|
|
|
|
int boreWaterCount = 0;
|
|
|
|
|
int drinkingWaterCount = 0;
|
|
|
|
|
|
|
|
|
|
String? selectedFilter;
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
void initState() {
|
|
|
|
|
super.initState();
|
|
|
|
|
@ -45,6 +51,38 @@ class _AllOrdersState extends State<AllOrders> {
|
|
|
|
|
if (!mounted) return;
|
|
|
|
|
setState(() {
|
|
|
|
|
ordersList = data;
|
|
|
|
|
|
|
|
|
|
ordersList.sort((a, b) {
|
|
|
|
|
try {
|
|
|
|
|
DateTime da = DateFormat("dd-MMM-yyyy").parse(a.date);
|
|
|
|
|
DateTime db = DateFormat("dd-MMM-yyyy").parse(b.date);
|
|
|
|
|
return db.compareTo(da);
|
|
|
|
|
} catch (_) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
DateTime today = DateTime.now();
|
|
|
|
|
|
|
|
|
|
todaysOrdersCount = data.where((o) {
|
|
|
|
|
try {
|
|
|
|
|
DateTime d = DateFormat("dd-MMM-yyyy").parse(o.date);
|
|
|
|
|
return d.year == today.year &&
|
|
|
|
|
d.month == today.month &&
|
|
|
|
|
d.day == today.day;
|
|
|
|
|
} catch (_) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}).length;
|
|
|
|
|
|
|
|
|
|
boreWaterCount = data
|
|
|
|
|
.where((o) => o.type_of_water.toLowerCase().contains("bore"))
|
|
|
|
|
.length;
|
|
|
|
|
|
|
|
|
|
drinkingWaterCount = data
|
|
|
|
|
.where((o) => o.type_of_water.toLowerCase().contains("drinking"))
|
|
|
|
|
.length;
|
|
|
|
|
|
|
|
|
|
isLoading = false;
|
|
|
|
|
});
|
|
|
|
|
} catch (e) {
|
|
|
|
|
@ -53,6 +91,42 @@ class _AllOrdersState extends State<AllOrders> {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void sortOrders(String type) {
|
|
|
|
|
setState(() {
|
|
|
|
|
selectedFilter = type;
|
|
|
|
|
|
|
|
|
|
if (type == "Building") {
|
|
|
|
|
ordersList.sort((a, b) =>
|
|
|
|
|
a.building_name.toLowerCase().compareTo(b.building_name.toLowerCase()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (type == "Status") {
|
|
|
|
|
ordersList.sort((a, b) =>
|
|
|
|
|
a.status.toLowerCase().compareTo(b.status.toLowerCase()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (type == "Date") {
|
|
|
|
|
ordersList.sort((a, b) {
|
|
|
|
|
try {
|
|
|
|
|
DateTime da = DateFormat("dd-MMM-yyyy").parse(a.date);
|
|
|
|
|
DateTime db = DateFormat("dd-MMM-yyyy").parse(b.date);
|
|
|
|
|
|
|
|
|
|
// newest first, oldest last
|
|
|
|
|
return db.compareTo(da);
|
|
|
|
|
} catch (_) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (type == "Amount") {
|
|
|
|
|
ordersList.sort((a, b) =>
|
|
|
|
|
double.parse(b.quoted_amount.toString())
|
|
|
|
|
.compareTo(double.parse(a.quoted_amount.toString())));
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
@ -105,7 +179,7 @@ class _AllOrdersState extends State<AllOrders> {
|
|
|
|
|
Column(
|
|
|
|
|
children: [
|
|
|
|
|
Text(
|
|
|
|
|
"12",
|
|
|
|
|
"$todaysOrdersCount",
|
|
|
|
|
style:fontTextStyle(64, Color(0XFFFF2D2E30), FontWeight.w700),
|
|
|
|
|
),
|
|
|
|
|
Text(
|
|
|
|
|
@ -124,7 +198,7 @@ class _AllOrdersState extends State<AllOrders> {
|
|
|
|
|
height: 40,
|
|
|
|
|
width: 40,
|
|
|
|
|
),
|
|
|
|
|
value: "16",
|
|
|
|
|
value: "$boreWaterCount",
|
|
|
|
|
label: "Bore Water",
|
|
|
|
|
),
|
|
|
|
|
OrderCategoryCard(
|
|
|
|
|
@ -134,7 +208,7 @@ class _AllOrdersState extends State<AllOrders> {
|
|
|
|
|
width: 40,
|
|
|
|
|
fit: BoxFit.contain,
|
|
|
|
|
),
|
|
|
|
|
value: "08",
|
|
|
|
|
value: "$drinkingWaterCount",
|
|
|
|
|
label: "Drinking Water",
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
@ -177,13 +251,13 @@ class _AllOrdersState extends State<AllOrders> {
|
|
|
|
|
padding: const EdgeInsets.symmetric(horizontal: 12),
|
|
|
|
|
child: Row(
|
|
|
|
|
children: [
|
|
|
|
|
FilterChipWidget(label: "Building"),
|
|
|
|
|
FilterChipWidget(label: "Building", onTap: () => sortOrders("Building")),
|
|
|
|
|
const SizedBox(width: 8),
|
|
|
|
|
FilterChipWidget(label: "Status"),
|
|
|
|
|
FilterChipWidget(label: "Status", onTap: () => sortOrders("Status")),
|
|
|
|
|
const SizedBox(width: 8),
|
|
|
|
|
FilterChipWidget(label: "Date"),
|
|
|
|
|
FilterChipWidget(label: "Date", onTap: () => sortOrders("Date")),
|
|
|
|
|
const SizedBox(width: 8),
|
|
|
|
|
FilterChipWidget(label: "Amount"),
|
|
|
|
|
FilterChipWidget(label: "Amount", onTap: () => sortOrders("Amount")),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
@ -265,14 +339,22 @@ class OrderCategoryCard extends StatelessWidget {
|
|
|
|
|
/// Filter Chip
|
|
|
|
|
class FilterChipWidget extends StatelessWidget {
|
|
|
|
|
final String label;
|
|
|
|
|
const FilterChipWidget({super.key, required this.label});
|
|
|
|
|
final VoidCallback? onTap;
|
|
|
|
|
|
|
|
|
|
const FilterChipWidget({
|
|
|
|
|
super.key,
|
|
|
|
|
required this.label,
|
|
|
|
|
this.onTap,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
return ChoiceChip(
|
|
|
|
|
label: Text(label),
|
|
|
|
|
selected: false,
|
|
|
|
|
onSelected: (_) {},
|
|
|
|
|
onSelected: (_) {
|
|
|
|
|
if (onTap != null) onTap!();
|
|
|
|
|
},
|
|
|
|
|
shape: RoundedRectangleBorder(
|
|
|
|
|
borderRadius: BorderRadius.circular(20),
|
|
|
|
|
),
|
|
|
|
|
@ -289,76 +371,88 @@ class OrderCard extends StatelessWidget {
|
|
|
|
|
const OrderCard({super.key, required this.order, this.onRefresh});
|
|
|
|
|
|
|
|
|
|
Color _getStatusColor() {
|
|
|
|
|
String st='';
|
|
|
|
|
String st = order.status.toLowerCase();
|
|
|
|
|
|
|
|
|
|
if(order.status.toLowerCase()=='advance_paid'){
|
|
|
|
|
st='pending';
|
|
|
|
|
}
|
|
|
|
|
else if(order.status.toLowerCase()=='accepted'){ // ⭐ ADDED
|
|
|
|
|
st='pending';
|
|
|
|
|
}
|
|
|
|
|
else if(order.status.toLowerCase()=='deliveryboy_assigned'){
|
|
|
|
|
st='assigned';
|
|
|
|
|
}
|
|
|
|
|
else if(order.status.toLowerCase()=='tanker_assigned'){
|
|
|
|
|
st='assigned';
|
|
|
|
|
if (st == 'advance_paid' || st == 'accepted') {
|
|
|
|
|
st = 'pending';
|
|
|
|
|
}
|
|
|
|
|
else if(order.status.toLowerCase()=='delivered'){
|
|
|
|
|
st='completed';
|
|
|
|
|
else if (st == 'deliveryboy_assigned' || st == 'tanker_assigned') {
|
|
|
|
|
st = 'assigned';
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
st=order.status.toLowerCase();
|
|
|
|
|
else if (st == 'delivered') {
|
|
|
|
|
st = 'completed';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (st.toLowerCase()) {
|
|
|
|
|
switch (st) {
|
|
|
|
|
case "completed":
|
|
|
|
|
return Color(0XFFC4E8C3);
|
|
|
|
|
|
|
|
|
|
case "in_progress":
|
|
|
|
|
return Color(0XFFC9DFFE);
|
|
|
|
|
|
|
|
|
|
case "cancelled":
|
|
|
|
|
return Color(0XFFFCEDEC);
|
|
|
|
|
|
|
|
|
|
case "assigned":
|
|
|
|
|
return Color(0XFFF9DBC6);
|
|
|
|
|
|
|
|
|
|
case "pickup_started":
|
|
|
|
|
case "start_loading":
|
|
|
|
|
case "loading_completed":
|
|
|
|
|
case "out_for_delivery":
|
|
|
|
|
case "arrived":
|
|
|
|
|
case "unloading_started":
|
|
|
|
|
case "unloading_stopped":
|
|
|
|
|
case "payment_pending":
|
|
|
|
|
return Color(0XFFF9DBC6);
|
|
|
|
|
|
|
|
|
|
case "pending":
|
|
|
|
|
return Color(0XFFFDF3D3);
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
return Colors.grey;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Color _getTextStatusColor() {
|
|
|
|
|
String st='';
|
|
|
|
|
String st = order.status.toLowerCase();
|
|
|
|
|
|
|
|
|
|
if(order.status.toLowerCase()=='advance_paid'){
|
|
|
|
|
st='pending';
|
|
|
|
|
if (st == 'advance_paid' || st == 'accepted') {
|
|
|
|
|
st = 'pending';
|
|
|
|
|
}
|
|
|
|
|
else if(order.status.toLowerCase()=='accepted'){ // ⭐ ADDED
|
|
|
|
|
st='pending';
|
|
|
|
|
else if (st == 'deliveryboy_assigned' || st == 'tanker_assigned') {
|
|
|
|
|
st = 'assigned';
|
|
|
|
|
}
|
|
|
|
|
else if(order.status.toLowerCase()=='deliveryboy_assigned'){
|
|
|
|
|
st='assigned';
|
|
|
|
|
}
|
|
|
|
|
else if(order.status.toLowerCase()=='delivered'){
|
|
|
|
|
st='completed';
|
|
|
|
|
}
|
|
|
|
|
else if(order.status.toLowerCase()=='tanker_assigned'){
|
|
|
|
|
st='assigned';
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
st=order.status.toLowerCase();
|
|
|
|
|
else if (st == 'delivered') {
|
|
|
|
|
st = 'completed';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (st.toLowerCase()) {
|
|
|
|
|
switch (st) {
|
|
|
|
|
case "completed":
|
|
|
|
|
return Color(0XFF0A9E04);
|
|
|
|
|
|
|
|
|
|
case "in_progress":
|
|
|
|
|
return Color(0XFF1D7AFC);
|
|
|
|
|
|
|
|
|
|
case "cancelled":
|
|
|
|
|
return Color(0XFFE2483D);
|
|
|
|
|
|
|
|
|
|
case "assigned":
|
|
|
|
|
return Color(0XFFE56910);
|
|
|
|
|
|
|
|
|
|
case "pickup_started":
|
|
|
|
|
case "start_loading":
|
|
|
|
|
case "loading_completed":
|
|
|
|
|
case "out_for_delivery":
|
|
|
|
|
case "arrived":
|
|
|
|
|
case "unloading_started":
|
|
|
|
|
case "unloading_stopped":
|
|
|
|
|
case "payment_pending":
|
|
|
|
|
return Color(0XFFE56910);
|
|
|
|
|
|
|
|
|
|
case "pending":
|
|
|
|
|
return Color(0XFFD0AE3C);
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
return Colors.grey;
|
|
|
|
|
}
|
|
|
|
|
@ -366,20 +460,47 @@ class OrderCard extends StatelessWidget {
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
final statusColor = _getStatusColor();
|
|
|
|
|
final textStatusColor = _getTextStatusColor();
|
|
|
|
|
|
|
|
|
|
String st = (order.status == 'advance_paid')
|
|
|
|
|
String s = order.status.toString().toLowerCase();
|
|
|
|
|
|
|
|
|
|
String st = (s == 'advance_paid')
|
|
|
|
|
? 'pending'
|
|
|
|
|
: (order.status.toLowerCase() == 'accepted') // ⭐ ADDED
|
|
|
|
|
: (s == 'accepted')
|
|
|
|
|
? 'pending'
|
|
|
|
|
: (order.status.toLowerCase() == 'delivered') // ⭐ ADDED
|
|
|
|
|
: (s == 'delivered')
|
|
|
|
|
? 'completed'
|
|
|
|
|
: (order.status.toString().toLowerCase() == 'deliveryboy_assigned')
|
|
|
|
|
: (s == 'deliveryboy_assigned')
|
|
|
|
|
? 'assigned'
|
|
|
|
|
: (order.status.toString().toLowerCase() == 'tanker_assigned')
|
|
|
|
|
: (s == 'tanker_assigned')
|
|
|
|
|
? 'assigned'
|
|
|
|
|
: order.status.toString().toLowerCase();
|
|
|
|
|
: (s == 'pickup_started' ||
|
|
|
|
|
s == 'start_loading' ||
|
|
|
|
|
s == 'loading_completed' ||
|
|
|
|
|
s == 'out_for_delivery' ||
|
|
|
|
|
s == 'arrived' ||
|
|
|
|
|
s == 'unloading_started' ||
|
|
|
|
|
s == 'unloading_stopped' ||
|
|
|
|
|
s == 'payment_pending')
|
|
|
|
|
? s
|
|
|
|
|
: s;
|
|
|
|
|
|
|
|
|
|
bool isTodayOrder = false;
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
DateTime orderDate = DateFormat("dd-MMM-yyyy").parse(order.date);
|
|
|
|
|
DateTime now = DateTime.now();
|
|
|
|
|
|
|
|
|
|
DateTime today = DateTime(now.year, now.month, now.day);
|
|
|
|
|
DateTime orderOnly = DateTime(orderDate.year, orderDate.month, orderDate.day);
|
|
|
|
|
|
|
|
|
|
if (orderOnly == today) {
|
|
|
|
|
isTodayOrder = true;
|
|
|
|
|
}
|
|
|
|
|
} catch (_) {}
|
|
|
|
|
|
|
|
|
|
return Padding(
|
|
|
|
|
padding: const EdgeInsets.fromLTRB(0, 8, 0, 0),
|
|
|
|
|
@ -469,7 +590,8 @@ class OrderCard extends StatelessWidget {
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
|
|
|
|
GestureDetector(
|
|
|
|
|
onTap: () async {
|
|
|
|
|
onTap: isTodayOrder
|
|
|
|
|
? () async {
|
|
|
|
|
final result = await Navigator.push(
|
|
|
|
|
context,
|
|
|
|
|
MaterialPageRoute(
|
|
|
|
|
@ -479,21 +601,25 @@ class OrderCard extends StatelessWidget {
|
|
|
|
|
if (result == true) {
|
|
|
|
|
onRefresh?.call();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
: null,
|
|
|
|
|
child: Container(
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
borderRadius: BorderRadius.circular(22),
|
|
|
|
|
border: Border.all(color: const Color(0XFF939495)),
|
|
|
|
|
border: Border.all(
|
|
|
|
|
color: isTodayOrder ? const Color(0XFF939495) : Colors.grey,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
child: const Padding(
|
|
|
|
|
child: Padding(
|
|
|
|
|
padding: EdgeInsets.fromLTRB(8, 4, 8, 4),
|
|
|
|
|
child: Text(
|
|
|
|
|
"Assign",
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
child: Text(
|
|
|
|
|
"Assign",
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
fontSize: 14,
|
|
|
|
|
color: Color(0XFF515253),
|
|
|
|
|
fontWeight: FontWeight.w400),
|
|
|
|
|
),
|
|
|
|
|
color: isTodayOrder ? const Color(0XFF515253) : Colors.grey,
|
|
|
|
|
fontWeight: FontWeight.w400,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
|