From 9dc86047edb23736f7b16138ca9811c5b63598a6 Mon Sep 17 00:00:00 2001 From: Sneha Date: Thu, 5 Mar 2026 12:43:21 +0530 Subject: [PATCH] changes --- lib/common/settings.dart | 58 ++++++++++++++++++++++++--- lib/orders/accept_order_requests.dart | 6 +-- lib/orders/all_orders.dart | 17 +++++++- lib/orders/cancel_order.dart | 38 +++++++++++++++++- lib/orders/edit_order_requests.dart | 4 +- lib/orders/order_requests_model.dart | 2 + lib/plans/all_plans.dart | 2 +- 7 files changed, 112 insertions(+), 15 deletions(-) diff --git a/lib/common/settings.dart b/lib/common/settings.dart index 4cc341c..9a697fa 100644 --- a/lib/common/settings.dart +++ b/lib/common/settings.dart @@ -189,10 +189,7 @@ class AppSettings{ static String respondRecurringBookingUrl = host + 'customer/recurring/respond'; static String getSupplierBookingsUrl = host + 'getuserRequestbookingsforplansforsupplier'; static String recurringDateActionUrl = host + 'recurring-booking/date-action'; - - - - + static String cancelTankerBookingUrl = host + 'update-tank-cancel-status'; static int driverAvailableCount = 0; static int driverOnDeliveryCount = 0; @@ -631,7 +628,14 @@ class AppSettings{ // display error toast return false; } - } else if (response.statusCode == 401) { + } + else if (response.statusCode == 2083) { + AppSettings.longFailedToast('Tanker name already exists'); + return false; + + } + + else if (response.statusCode == 401) { bool status = await AppSettings.resetToken(); if (status) { response = await http.post(uri, @@ -1447,6 +1451,50 @@ class AppSettings{ } } + static Future cancelTankerBooking( + String bookingId, + String status, + String reason, + ) async { + try { + var uri = Uri.parse("$cancelTankerBookingUrl/$bookingId"); + + var payload = json.encode({ + "status": status, // "cancelled" + "reason": reason, + }); + + var response = await http.put( + uri, + body: payload, + headers: await buildRequestHeaders(), + ); + + if (response.statusCode == 200) { + return true; + } + + // 🔁 Token expired → retry + if (response.statusCode == 401) { + bool refreshed = await resetToken(); + if (!refreshed) return false; + + response = await http.put( + uri, + body: payload, + headers: await buildRequestHeaders(), + ); + + return response.statusCode == 200; + } + + return false; + } catch (e) { + debugPrint("❌ cancelTankerBooking error: $e"); + return false; + } + } + /*Apis ends here*/ //save data local diff --git a/lib/orders/accept_order_requests.dart b/lib/orders/accept_order_requests.dart index 688ceed..be000be 100644 --- a/lib/orders/accept_order_requests.dart +++ b/lib/orders/accept_order_requests.dart @@ -197,7 +197,7 @@ class _AcceptOrderRequestsState extends State { "${widget.order.type_of_water}", "images/water.png", "Date of Delivery", - "${widget.order.time}", + "${widget.order.date}", "images/calendar_appbar.png", ), SizedBox( @@ -367,7 +367,7 @@ class _AcceptOrderRequestsState extends State { payload["supplierId"] = AppSettings.supplierId; payload["amount"] = int.parse(widget.order.quoted_amount); payload["delivery_charges"] = advance; - payload["action"] = 'rejected'; + payload["action"] = 'reject'; bool status = await AppSettings.acceptOrderRequests( payload, widget.order.dbId); @@ -424,7 +424,7 @@ class _AcceptOrderRequestsState extends State { payload["supplierId"] = AppSettings.supplierId; payload["amount"] = int.parse(widget.order.quoted_amount); payload["delivery_charges"] = advance; - payload["action"] = 'accepted'; + payload["action"] = 'accept'; bool status = await AppSettings.acceptOrderRequests( payload, widget.order.dbId); diff --git a/lib/orders/all_orders.dart b/lib/orders/all_orders.dart index bcc5b48..52ced1d 100644 --- a/lib/orders/all_orders.dart +++ b/lib/orders/all_orders.dart @@ -498,8 +498,8 @@ class OrderCard extends StatelessWidget { ), ), GestureDetector( - onTap: () { - Navigator.push( + onTap: () async{ + /*Navigator.push( context, MaterialPageRoute( builder: (context) => DeliveryUpdatesPage( @@ -507,7 +507,20 @@ class OrderCard extends StatelessWidget { initialStatus: order.status, ), ), + );*/ + final result = await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => CancelOrderScreen( + order: order, + status: order.status, + ), + ), ); + + if (result == true) { + onRefresh?.call(); + } }, child: Container( decoration: BoxDecoration( diff --git a/lib/orders/cancel_order.dart b/lib/orders/cancel_order.dart index 8db0dc6..b1bd0e9 100644 --- a/lib/orders/cancel_order.dart +++ b/lib/orders/cancel_order.dart @@ -152,8 +152,42 @@ class _CancelOrderScreenState extends State { // Primary Expanded( child: ElevatedButton( - onPressed: () { - // TODO: call cancel API + onPressed: () async { + if (selectedReason == null) { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text("Please select a reason")), + ); + return; + } + + String finalReason = + selectedReason == "Other" + ? reasonController.text.trim() + : selectedReason!; + + if (finalReason.isEmpty) { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text("Please enter cancellation reason")), + ); + return; + } + + bool success = await AppSettings.cancelTankerBooking( + widget.order.dbId, + "cancel", + finalReason, + ); + + if (success) { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text("Order cancelled successfully")), + ); + Navigator.pop(context, true); + } else { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text("Failed to cancel order")), + ); + } }, style: ElevatedButton.styleFrom( backgroundColor: const Color(0XFFE2483D), diff --git a/lib/orders/edit_order_requests.dart b/lib/orders/edit_order_requests.dart index 12b718a..9cd20f2 100644 --- a/lib/orders/edit_order_requests.dart +++ b/lib/orders/edit_order_requests.dart @@ -28,7 +28,7 @@ class _EditOrderRequestsState extends State { quantityController.text='${widget.order.quantity}'; capacityController.text='${widget.order.capacity}'; timeController.text='${widget.order.averageTime}'; - dateController.text='${widget.order.time}'; + dateController.text='${widget.order.date}'; advanceController.text='${widget.advance}'; // Update summary in real-time as user types tankerPriceController.addListener(() => setState(() {})); @@ -220,7 +220,7 @@ class _EditOrderRequestsState extends State { if (isOnline) { var payload = new Map(); payload["supplierId"] = AppSettings.supplierId; - payload["amount"] = int.parse(widget.order.quoted_amount); + payload["amount"] = int.parse(tankerPriceController.text); payload["delivery_charges"] = widget.advance; payload["action"] = 'accept'; diff --git a/lib/orders/order_requests_model.dart b/lib/orders/order_requests_model.dart index f57878e..1238070 100644 --- a/lib/orders/order_requests_model.dart +++ b/lib/orders/order_requests_model.dart @@ -18,6 +18,7 @@ class OrderRequestsModel { double distanceInKm=0.0; String dbId = ''; String status=''; + String date=''; OrderRequestsModel(); @@ -26,6 +27,7 @@ class OrderRequestsModel { rtvm.building_name = json['customer_details']['buildingName'] ?? ''; rtvm.dbId = json['_id']?? ''; + rtvm.date = json['date']?? ''; rtvm.address = json['customer_details']['profile']['address1'] ?? ''; rtvm.type_of_water = json['type_of_water'] ?? ''; rtvm.capacity = json['capacity'] ?? ''; diff --git a/lib/plans/all_plans.dart b/lib/plans/all_plans.dart index 55c57d9..cca416e 100644 --- a/lib/plans/all_plans.dart +++ b/lib/plans/all_plans.dart @@ -37,7 +37,7 @@ class PlansModel { return PlansModel( id: json["_id"], - status: json["status"] == "processed" ? "Active" : "Pending", + status: json["status"].toString().toLowerCase() == "payment_completed" ? "Active" : "Pending", apartment: json["customerId"], liters: "${json["capacity"]} - ${json["type_of_water"]}", price: "₹${supplier["quoted_amount"] ?? "--"}",