// // // import 'package:auto_size_text/auto_size_text.dart'; // import 'package:cheminova/controller/get_order_placed_controller.dart'; // import 'package:cheminova/controller/get_rd_cancle_controller.dart'; // import 'package:cheminova/models/get_rd_cancelled_model.dart'; // import 'package:cheminova/models/oder_place_model.dart'; // import 'package:cheminova/models/order_item_model.dart'; // import 'package:cheminova/models/place_order_list_model.dart'; // import 'package:cheminova/models/rd_get_order_model.dart'; // // import 'package:flutter/cupertino.dart'; // import 'package:flutter/material.dart'; // import 'package:flutter_svg/svg.dart'; // import 'package:get/get.dart'; // import 'package:google_fonts/google_fonts.dart'; // import 'package:intl/intl.dart'; // import 'package:shared_preferences/shared_preferences.dart'; // // import '../../controller/cart_controller.dart'; // import '../../models/product_model1.dart'; // // class RdCancelledDetailScreen extends StatefulWidget { // //final Product? productModel; // // PlacedOrderList and PlacedOrderModel are optional parameters passed to this screen // GetRdCancelledModel? placedOrderList; // // PlacedOrderModel? placedOrderModel; // // Constructor for initializing the screen with placed order details // RdCancelledDetailScreen({super.key,this.placedOrderList}); // // @override // State createState() => // _RdCancelledDetailScreenState(); // } // // // class _RdCancelledDetailScreenState // extends State { // // Controllers for managing cart and placed orders // final CartController _cartController = Get.put(CartController()); // final GetPlacedOrderController _getPlacedOrderController = Get.put(GetPlacedOrderController()); // final GetRDCancleController _getRDCancleController = Get.put(GetRDCancleController()); // final List statusOptions = [ // "new", // "pending", // "processing", // "dispatched", // "cancelled", // "delivered", // ]; // String selectedStatus = "All"; // String _groupValue = "cheque"; // // Function to format date from the API to a more readable format // // // String formatDate(String apiDate) { // // Parse the API date string into a DateTime object // DateTime parsedDate = DateTime.parse(apiDate).toLocal(); // Convert to local time // // // Format the date and time according to your specified format // String formattedDate = DateFormat('EEE MMM dd yyyy').format(parsedDate); // // return formattedDate; // Return the formatted date string // } // // // Function to capitalize the first letter of a string // String capitalizeFirstLetter(String text) { // if (text.isEmpty) return text; // return text[0].toUpperCase() + text.substring(1).toLowerCase(); // } // // // void _onPaymentModeChanged(String? value) { // setState(() { // _groupValue = value!; // }); // _saveSelectedPaymentMode(); // } // // // void _saveSelectedPaymentMode() async { // SharedPreferences prefs = await SharedPreferences.getInstance(); // await prefs.setString('selectedPaymentMode', _groupValue); // } // // void _loadSelectedPaymentMode() async { // SharedPreferences prefs = await SharedPreferences.getInstance(); // setState(() { // _groupValue = prefs.getString('selectedPaymentMode') ?? 'cheque'; // }); // } // // Function to collect unique order IDs and corresponding order details // // Future adduni()async { // // final Set uniqueOrderIds = {}; // // final List uniqueOrders = []; // // // Loop through placed orders and add unique orders to the list // // for (var order in _getPlacedOrderController.placedOrders) { // // if (uniqueOrderIds.add(order.uniqueId)) { // // uniqueOrders.add(order); // // } // // } // // final order = uniqueOrders[0]; // // // // // Combine product names, categories, and quantities into strings // // final productNames = order.orderItem // // .map((item) => (item.name)) // // .join(', '); // // final categotyName = order.orderItem // // .map((item) => (item.categoryName)) // // .join(', '); // // final quantity = order.orderItem // // .map((item) => (item.quantity)) // // .join(', '); // // } // @override // void initState() { // // TODO: implement initState // super.initState(); // selectedStatus= widget.placedOrderList?.status ?? 'new'; // } // // @override // Widget build(BuildContext context) { // return Scaffold( // extendBodyBehindAppBar: true, // appBar: AppBar( // backgroundColor: Colors.transparent, // elevation: 0, // leading: GestureDetector( // onTap: () {}, // child: Padding( // padding: const EdgeInsets.all(16.0), // child: SvgPicture.asset( // 'assets/svg/menu.svg', // ), // ), // ), // actions: [ // GestureDetector( // onTap: () => Get.back(), // child: Padding( // padding: const EdgeInsets.all(8.0), // child: SvgPicture.asset( // 'assets/svg/back_arrow.svg', // ), // ), // ), // ], // title: const Text( // "RD Cancelled Order Detail", // ), // ), // body: Stack( // fit: StackFit.expand, // children: [ // Image.asset( // 'assets/images/image_1.png', // fit: BoxFit.cover, // ), // SafeArea( // child: SingleChildScrollView( // child: Column( // mainAxisSize: MainAxisSize.min, // mainAxisAlignment: MainAxisAlignment.start, // children: [ // SizedBox( // height: Get.height * 0.02, // ), // Card( // margin: const EdgeInsets.symmetric(horizontal: 18), // shape: RoundedRectangleBorder( // borderRadius: BorderRadius.circular(19), // side: const BorderSide(color: Color(0xFFFDFDFD)), // ), // color: const Color(0xFFB4D1E5).withOpacity(0.9), // child: Padding( // padding: const EdgeInsets.all(12.0), // child: Column( // mainAxisSize: MainAxisSize.min, // children: [ // Card( // child: Column( // children: [ // SizedBox( // width: Get.width, // child: Padding( // padding: // const EdgeInsets.fromLTRB(8, 8, 8, 0), // child: Text( // "Invoices", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.05, // fontWeight: FontWeight.bold, // ), // ), // ), // ), // SizedBox( // width: Get.width, // child: Padding( // padding: // const EdgeInsets.fromLTRB(8, 8, 8, 0), // child: Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, // children: [ // Text( // "Invoice ID:", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.04, // fontWeight: FontWeight.bold, // ), // ), // Text(widget.placedOrderList!.uniqueId), // // Text(widget.placedOrderList!.uniqueId), // ], // ), // ), // ), // SizedBox( // width: Get.width, // child: Padding( // padding: const EdgeInsets.fromLTRB(8, 8, 8, 0), // child: Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ // Text( // "Items: ", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.04, // fontWeight: FontWeight.bold, // ), // ), // SizedBox(height: 10), // Add spacing between the title and the list of items // Column( // children: widget.placedOrderList!.orderItems.map((item) { // return Padding( // padding: const EdgeInsets.symmetric(vertical: 4.0), // Add some spacing between items // child: Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, // children: [ // Expanded( // child: Text( // "${item.name.toString()} (${item.sku.toString()})", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.03, // ), // overflow: TextOverflow.ellipsis, // Handle long text // ), // ), // Text("x ${item.remainingQuantity.toString()}"), // ], // ), // ); // }).toList(), // ), // ], // ), // ), // ), // SizedBox( // width: Get.width, // child: Padding( // padding: // const EdgeInsets.fromLTRB(8, 8, 8, 0), // child: Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, // children: [ // Text( // "Sub Total : ", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.04, // fontWeight: FontWeight.bold, // ), // ), // Text("₹ ${widget.placedOrderList!.subtotal}"), // ], // ), // ), // ), // // // SizedBox( // // width: Get.width, // // child: Padding( // // padding: // // const EdgeInsets.fromLTRB(8, 8, 8, 0), // // child: Row( // // mainAxisAlignment: MainAxisAlignment.spaceBetween, // // children: [ // // Text( // // "Gst %: ", // // style: GoogleFonts.roboto( // // fontSize: Get.width * 0.04, // // fontWeight: FontWeight.bold, // // ), // // ), // // Text(" ${widget.placedOrderList!.orderItem[0].gst}%"), // // ], // // ), // // ), // // ), // SizedBox( // width: Get.width, // child: Padding( // padding: // const EdgeInsets.fromLTRB(8, 8, 8, 0), // child: Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, // children: [ // Text( // "GST : ", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.04, // fontWeight: FontWeight.bold, // ), // ), // Text("₹ ${widget.placedOrderList!.gstTotal}"), // ], // ), // ), // ), // SizedBox( // width: Get.width, // child: Padding( // padding: // const EdgeInsets.fromLTRB(8, 8, 8, 0), // child: Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, // children: [ // Text( // "Invoice Amount: ", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.04, // fontWeight: FontWeight.bold, // ), // ), // Text("₹ ${widget.placedOrderList!.grandTotal}"), // ], // ), // ), // ), // SizedBox( // width: Get.width, // child: Padding( // padding: // const EdgeInsets.fromLTRB(8, 8, 8, 0), // child: Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, // children: [ // Text( // "Courier Status : ", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.04, // fontWeight: FontWeight.bold, // ), // ), // ElevatedButton( // onPressed: (){}, // // Get.to(() => // // RdOrderDetailScreen( // // placedOrderList: uniqueOrders[index])), // Navigate to detail screen // style: ElevatedButton.styleFrom( // foregroundColor: Colors.white, // backgroundColor: Colors.orange, // shape: RoundedRectangleBorder( // borderRadius: BorderRadius.circular(10)), // ), // child: Text(widget.placedOrderList!.status, style: GoogleFonts.roboto(fontSize: 14, fontWeight: FontWeight.w400)), // ), // //Text("₹ ${widget.placedOrderList!.gstTotal}"), // ], // ), // ), // ), // ], // ), // ), // // // Card( // child: SizedBox( // height: Get.height * 0.35, // Adjust the height as per your requirement // child: Padding( // padding: EdgeInsets.all(Get.width * 0.02), // child: Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ // // Add title here // Padding( // padding: const EdgeInsets.symmetric(vertical: 8.0), // Adjust padding if needed // child: Text( // "Order Summary", // Title text // style: GoogleFonts.roboto( // fontSize: Get.width * 0.05, // Adjust font size as needed // fontWeight: FontWeight.bold, // ), // ), // ), // Expanded( // child: ListView.builder( // padding: EdgeInsets.zero, // itemCount: widget.placedOrderList?.orderItems.length ?? 0, // itemBuilder: (context, index) { // final orderItem = widget.placedOrderList!.orderItems[index]; // return orderItem != null // ? Card( // margin: const EdgeInsets.symmetric(vertical: 5.0), // shape: RoundedRectangleBorder( // borderRadius: BorderRadius.circular(10), // ), // child: Padding( // padding: const EdgeInsets.all(8.0), // child: Row( // children: [ // Image.asset( // "assets/images/product.png", // height: 50, // width: 50, // fit: BoxFit.cover, // ), // const SizedBox(width: 10), // Expanded( // child: Column( // crossAxisAlignment: CrossAxisAlignment.end, // children: [ // Text( // capitalizeFirstLetter(orderItem.name), // style: GoogleFonts.roboto( // fontSize: Get.width * 0.04, // fontWeight: FontWeight.bold, // ), // ), // Text( // "Quantity: ${orderItem.quantity}", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.03, // ), // ), // Text("Price: ${orderItem.price}"), // Text("Subtotal: ${widget.placedOrderList!.subtotal}"), // Text("Gst: ${orderItem.gst}%"), // Text("GST Total: ${widget.placedOrderList!.gstTotal}"), // Text("Total Amount: ${widget.placedOrderList!.grandTotal}"), // ], // ), // ), // ], // ), // ), // ) // : const SizedBox.shrink(); // }, // ), // ), // ], // ), // ), // ), // ), // // const SizedBox(height: 8), // Card( // child: SizedBox( // height: Get.height * 0.35, // Adjust the height as per your requirement // child: Padding( // padding: EdgeInsets.all(Get.width * 0.02), // child: Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ // // Add title here // Padding( // padding: const EdgeInsets.symmetric(vertical: 8.0), // Adjust padding if needed // child: Text( // "Order Itmes to processed", // Title text // style: GoogleFonts.roboto( // fontSize: Get.width * 0.05, // Adjust font size as needed // fontWeight: FontWeight.bold, // ), // ), // ), // Expanded( // child: ListView.builder( // padding: EdgeInsets.zero, // itemCount: widget.placedOrderList?.orderItems.length ?? 0, // itemBuilder: (context, index) { // final orderItem = widget.placedOrderList!.orderItems[index]; // return orderItem != null // ? Card( // margin: const EdgeInsets.symmetric(vertical: 5.0), // shape: RoundedRectangleBorder( // borderRadius: BorderRadius.circular(10), // ), // child: Padding( // padding: const EdgeInsets.all(8.0), // child: Row( // children: [ // Image.asset( // "assets/images/product.png", // height: 50, // width: 50, // fit: BoxFit.cover, // ), // const SizedBox(width: 10), // Expanded( // child: Column( // crossAxisAlignment: CrossAxisAlignment.end, // children: [ // Text( // capitalizeFirstLetter(orderItem.name), // style: GoogleFonts.roboto( // fontSize: Get.width * 0.04, // fontWeight: FontWeight.bold, // ), // ), // Text( // "Quantity: ${orderItem.remainingQuantity}", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.03, // ), // ), // Text("Price: ${orderItem.price}"), // Text("Subtotal: ${widget.placedOrderList!.subtotal}"), // Text("Gst: ${orderItem.gst}%"), // Text("GST Total: ${widget.placedOrderList!.gstTotal}"), // Text("Total Amount: ${widget.placedOrderList!.grandTotal}"), // ], // ), // ), // ], // ), // ), // ) // : const SizedBox.shrink(); // }, // ), // ), // ], // ), // ), // ), // ), // // const SizedBox(height: 8), // SizedBox( // height: Get.height* 0.19, // child: Card( // child: Column( // children: [ // SizedBox( // width: Get.width, // child: Padding( // padding: // const EdgeInsets.fromLTRB(8, 8, 8, 0), // child: Text( // "Customer Details", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.05, // fontWeight: FontWeight.w500, // ), // ), // ), // ), // SizedBox( // width: Get.width, // //height: Get.height*0.09, // child: Padding( // padding: // const EdgeInsets.fromLTRB(8, 8, 8, 0), // child: Row( // children: [ // Text( // "Name: ", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.04, // fontWeight: FontWeight.bold, // ), // ), // Text("${" Roshan Garg"}",maxLines: 4, // overflow:TextOverflow.ellipsis,) // , ], // ) // ), // ), // SizedBox( // width: Get.width, // // height: Get.height*0.09, // child: Padding( // padding: // const EdgeInsets.fromLTRB(8, 8, 8, 0), // child: Row( // children: [ // Text( // "Email: ", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.04, // fontWeight: FontWeight.bold, // ), // ), // Text("${"roshangarg28@gmail.com"}",maxLines: 4, // overflow:TextOverflow.ellipsis,) // , ], // ) // ), // ), // SizedBox( // width: Get.width, // // height: Get.height*0.09, // child: Padding( // padding: // const EdgeInsets.fromLTRB(8, 8, 8, 0), // child: Row( // children: [ // Text( // "Mobile Number: ", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.04, // fontWeight: FontWeight.bold, // ), // ), // Text("${"8876785448"}",maxLines: 4, // overflow:TextOverflow.ellipsis,) // , ], // ) // ), // ) // // ], // ), // ), // ), // const SizedBox(height: 8), // Card( // child: Column( // children: [ // SizedBox( // width: Get.width, // child: Padding( // padding: // const EdgeInsets.fromLTRB(8, 8, 8, 0), // child: Text( // "Billing Information", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.05, // fontWeight: FontWeight.w500, // ), // ), // ), // ), // SizedBox( // width: Get.width, // height: Get.height*0.06, // child: Padding( // padding: // const EdgeInsets.fromLTRB(8, 8, 8, 0), // child: Wrap( // crossAxisAlignment: WrapCrossAlignment.start, // children: [ // Text( // "Address: ", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.04, // fontWeight: FontWeight.bold, // ), // ), // Text("${widget.placedOrderList!.billTo}",maxLines: 4, // overflow:TextOverflow.ellipsis,) // ], // ), // ), // ), // // ], // ), // ), // const SizedBox(height: 8), // // Card for displaying shipping information // Card( // child: Column( // children: [ // SizedBox( // width: Get.width, // child: Padding( // padding: // const EdgeInsets.fromLTRB(8, 8, 8, 0), // child: Text( // "Shipping Information", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.05, // fontWeight: FontWeight.w500, // ), // ), // ), // ), // SizedBox( // width: Get.width, // height: Get.height*0.06, // child: Padding( // padding: // const EdgeInsets.fromLTRB(8, 8, 8, 0), // child: Wrap( // crossAxisAlignment: WrapCrossAlignment.start, // children: [ // Text( // "Address: ", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.04, // fontWeight: FontWeight.bold, // ), // ), // Text("${widget.placedOrderList!.shipTo}",maxLines: 4, // overflow:TextOverflow.ellipsis,) // ], // ), // ), // ), // // ], // ), // ), // const SizedBox(height: 8), // Card( // child: Column( // children: [ // SizedBox( // width: Get.width, // height: Get.height*0.05, // child: Padding( // padding: // const EdgeInsets.fromLTRB(8, 8, 8, 0), // child: Row( // children: [ // Text( // "Payment Mode : ", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.04, // fontWeight: FontWeight.w500, // ), // ), // Text(capitalizeFirstLetter(widget.placedOrderList!.paymentMode)), // // Text("${widget.placedOrderList!.paymentMode}",maxLines: 4, // // overflow:TextOverflow.ellipsis,) // ], // ), // ), // ), // // // ], // ), // ), // const SizedBox(height: 8), // Card( // child: Column( // children: [ // SizedBox( // width: Get.width, // height: Get.height*0.05, // child: Padding( // padding: // const EdgeInsets.fromLTRB(8, 8, 8, 0), // child: Row( // children: [ // Text( // "Order Status :", // style: GoogleFonts.roboto( // fontSize: Get.width * 0.04, // fontWeight: FontWeight.w500, // ), // ), // SizedBox(width: Get.width*0.01,), // //Text(capitalizeFirstLetter(widget.placedOrderList!.status)), // Text("${widget.placedOrderList!.status}",maxLines: 4, // overflow:TextOverflow.ellipsis,) // ], // ), // ), // ), // // // ], // ), // ), // const SizedBox(height: 8), // SizedBox( // height: Get.height * 0.05, // child: Row( // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // const Text( // "CancelledReason: ", // style: TextStyle(fontWeight: FontWeight.bold,), // ), // SizedBox(width: 10), // Space between label and dropdown // Text("${widget.placedOrderList!.orderCancelledReason}",maxLines: 4,style: TextStyle(color: Colors.red,fontSize: 15), // overflow:TextOverflow.ellipsis,) // ], // ), // ), // // SizedBox( // // width: Get.width * 0.4, // // child: Padding( // // padding: const EdgeInsets.all(8.0), // // child: ElevatedButton( // // onPressed: (){}, // // // Get.to(() => // // // RdOrderDetailScreen( // // // placedOrderList: uniqueOrders[index])), // Navigate to detail screen // // style: ElevatedButton.styleFrom( // // foregroundColor: Colors.white, // // backgroundColor: const Color(0xFF004791), // // shape: RoundedRectangleBorder( // // borderRadius: BorderRadius.circular(10)), // // ), // // child: Text("Update Status", style: GoogleFonts.roboto(fontSize: 14, fontWeight: FontWeight.w400)), // // ), // // ), // // ) // // ], // ), // ), // ), // SizedBox(height: Get.height * 0.04), // // ], // ), // ), // ), // ], // ), // ); // } // } // // import 'package:auto_size_text/auto_size_text.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:cheminova/controller/get_order_placed_controller.dart'; import 'package:cheminova/controller/get_rd_cancle_controller.dart'; import 'package:cheminova/controller/get_rd_pending_controller.dart'; import 'package:cheminova/controller/rd_get_order_controller.dart'; import 'package:cheminova/models/get_rd_cancelled_model.dart'; import 'package:cheminova/models/get_rd_pennding_model.dart'; import 'package:cheminova/models/oder_place_model.dart'; import 'package:cheminova/models/order_item_model.dart'; import 'package:cheminova/models/place_order_list_model.dart'; import 'package:cheminova/models/rd_get_order_model.dart'; import 'package:cheminova/models/single_get_order_model.dart'; import 'package:cheminova/screens/rd%20orders/partial_pending_dialog.dart'; import 'package:cheminova/screens/rd%20orders/partial_processing_dialog_screen.dart'; import 'package:cheminova/screens/rd%20orders/rd_cancelled_screen.dart'; import 'package:cheminova/screens/rd%20orders/rd_processing_screen.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:get/get.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:intl/intl.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../../controller/cart_controller.dart'; import '../../controller/get_single_invoice_controller.dart'; import '../../controller/rd_processing_order_controller.dart'; import '../../models/get_invoice_model.dart'; import '../../models/product_model1.dart'; import '../../models/rd_order_item_model.dart'; import '../../models/rd_placed_order_model.dart'; import '../../utils/show_snackbar.dart'; class RdOrderCancelledScreenDetailScreen extends StatefulWidget { //final Product? productModel; // PlacedOrderList and PlacedOrderModel are optional parameters passed to this screen final SingleGetOrderModel? placedOrderList; // GetRdPendingModel? productpendingModel; //final String orderId; // GetInvoiceModel? placeInvoiceList; // PlacedOrderModel? placedOrderModel; // Constructor for initializing the screen with placed order details RdOrderCancelledScreenDetailScreen({super.key,this.placedOrderList, // required this.orderId }); @override State createState() => _RdOrderCancelledScreenDetailScreenState(); } class _RdOrderCancelledScreenDetailScreenState extends State { // Controllers for managing cart and placed orders final CartController _cartController = Get.put(CartController()); final GetRDCancleController _getRDCancleController = Get.put(GetRDCancleController()); final GetSingleInvoiceController _getSingleInvoiceController = Get.put(GetSingleInvoiceController()); final GetProductRDController _getProductRDController = Get.put(GetProductRDController()); final RDOrderPlacedController controller = Get.put(RDOrderPlacedController()); final List statusOptions = [ "new", "pending", "processing", "dispatched", "cancelled", "delivered", ]; String selectedStatus = "pending"; String _groupValue = "cheque"; // Function to format date from the API to a more readable format List _statusList = ["pending", "processing", "partial processing", "cancelled"]; String formatDate(String apiDate) { // Parse the API date string into a DateTime object DateTime parsedDate = DateTime.parse(apiDate).toLocal(); // Convert to local time // Format the date and time according to your specified format String formattedDate = DateFormat('EEE MMM dd yyyy').format(parsedDate); return formattedDate; // Return the formatted date string } // Function to capitalize the first letter of a string String capitalizeFirstLetter(String text) { if (text.isEmpty) return text; return text[0].toUpperCase() + text.substring(1).toLowerCase(); } void _onPaymentModeChanged(String? value) { setState(() { _groupValue = value!; }); _saveSelectedPaymentMode(); } void _saveSelectedPaymentMode() async { SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setString('selectedPaymentMode', _groupValue); } void _loadSelectedPaymentMode() async { SharedPreferences prefs = await SharedPreferences.getInstance(); setState(() { _groupValue = prefs.getString('selectedPaymentMode') ?? 'cheque'; }); } // Function to collect unique order IDs and corresponding order details Future adduni()async { final Set uniqueOrderIds = {}; final List uniqueOrders = []; // Loop through placed orders and add unique orders to the list for (var order in _getRDCancleController.productRDList) { if (uniqueOrderIds.add(order.uniqueId)) { uniqueOrders.add(order); } } final order = uniqueOrders[0]; // Combine product names, categories, and quantities into strings final productNames = order.orderItems .map((item) => (item.name)) .join(', '); final categotyName = order.orderItems .map((item) => (item.categoryName)) .join(', '); final quantity = order.orderItems .map((item) => (item.quantity)) .join(', '); } @override void initState() { // TODO: implement initState super.initState(); //getOrder1(); selectedStatus= widget.placedOrderList?.status ?? 'new'; } // Future getOrder1() async { // await _getSingleInvoiceController.fetchInvoice(widget.placedOrderList!.id); // if (_getSingleInvoiceController.invoice.isEmpty) { // print("No orders found."); // } else { // print(" New Orders fetched successfully"); // } // } Color _getCourierStatusColor(String status) { switch (status.toLowerCase()) { case 'processing': return Colors.orange; case 'dispatched': return Colors.lightBlue; case 'delivered': return Colors.green; default: return Colors.grey; // Default color for unknown statuses } } @override Widget build(BuildContext context) { if (widget.placedOrderList == null) { return Center(child: Text('No order details available')); } // Safely get the order and invoice list final order = widget.placedOrderList!; final invoices = order.invoices; // Check if the invoices list contains at least 4 items List? invoiceIds; if (invoices.isNotEmpty) { // Ensure there are at least 4 invoices if (invoices.length >= 4) { // Get the ID of the 4th invoice (index 3) invoiceIds = [invoices[3].invoiceId!]; // Assuming invoiceId is a String } else { invoiceIds = []; // Fallback if not enough invoices } } else { invoiceIds = []; // Fallback if no invoices available } //int remainingQuantity = (widget.placedOrderList!.orderItem![0].quantity)! -(widget.placedOrderList!.orderItem![0].remainingQuantity!.toInt()); return Scaffold( extendBodyBehindAppBar: true, appBar: AppBar( backgroundColor: Colors.transparent, elevation: 0, leading: GestureDetector( onTap: () {}, child: Padding( padding: const EdgeInsets.all(16.0), child: SvgPicture.asset( 'assets/svg/menu.svg', ), ), ), actions: [ GestureDetector( onTap: () => Get.back(), child: Padding( padding: const EdgeInsets.all(8.0), child: SvgPicture.asset( 'assets/svg/back_arrow.svg', ), ), ), ], title: const Text( "Retailer Cancelled Order Details", ), ), body: Stack( fit: StackFit.expand, children: [ Image.asset( 'assets/images/image_1.png', fit: BoxFit.cover, ), SafeArea( child: SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox( height: Get.height * 0.02, ), Card( margin: const EdgeInsets.symmetric(horizontal: 18), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(19), side: const BorderSide(color: Color(0xFFFDFDFD)), ), color: const Color(0xFFB4D1E5).withOpacity(0.9), child: Padding( padding: const EdgeInsets.all(12.0), child: Column( mainAxisSize: MainAxisSize.min, children: [ Card( child: Column( children: [ SizedBox( width: Get.width, child: Padding( padding: const EdgeInsets.fromLTRB(8, 8, 8, 0), child: Text( "Invoices", style: GoogleFonts.roboto( fontSize: Get.width * 0.05, fontWeight: FontWeight.bold, ), ), ), ), // Displaying each invoice in a separate card if (widget.placedOrderList!.invoices.isNotEmpty) ...widget.placedOrderList!.invoices.map((invoice) { return Card( margin: const EdgeInsets.symmetric(vertical: 8, horizontal: 8), child: Padding( padding: const EdgeInsets.all(8.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Invoice ID Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "Invoice ID:", style: GoogleFonts.roboto( fontSize: Get.width * 0.04, fontWeight: FontWeight.bold, ), ), Text(invoice.invoiceId.toString()), ], ), const SizedBox(height: 10), // Add spacing // Items for this invoice Text( "Items: ", style: GoogleFonts.roboto( fontSize: Get.width * 0.04, fontWeight: FontWeight.bold, ), ), const SizedBox(height: 10), // Add spacing between title and items // List of items in this invoice Column( children: invoice.items!.map((item) { return Padding( padding: const EdgeInsets.symmetric(vertical: 4.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Text( "${item.name.toString()} (${item.sku.toString()})", style: GoogleFonts.roboto( fontSize: Get.width * 0.03, ), overflow: TextOverflow.ellipsis, ), ), Text("x ${item.processQuantity.toString()}"), ], ), ); }).toList(), ), const SizedBox(height: 10), // Add spacing between sections // Sub Total Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "Sub Total:", style: GoogleFonts.roboto( fontSize: Get.width * 0.04, fontWeight: FontWeight.bold, ), ), Text("₹ ${invoice.subtotal}"), ], ), // GST Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "GST:", style: GoogleFonts.roboto( fontSize: Get.width * 0.04, fontWeight: FontWeight.bold, ), ), Text("₹ ${invoice.gstTotal.toStringAsFixed(2)}"), ], ), // Invoice Amount Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "Invoice Amount:", style: GoogleFonts.roboto( fontSize: Get.width * 0.04, fontWeight: FontWeight.bold, ), ), Text("₹ ${invoice.invoiceAmount}"), ], ), // Courier Status Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "Courier Status:", style: GoogleFonts.roboto( fontSize: Get.width * 0.04, fontWeight: FontWeight.bold, ), ), ElevatedButton( onPressed: () {}, style: ElevatedButton.styleFrom( foregroundColor: Colors.white, backgroundColor: _getCourierStatusColor(invoice.courierStatus.toString()), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), ), ), child: Text( capitalizeFirstLetter(invoice.courierStatus.toString()), ), ), ], ), ], ), ), ); }).toList(), ], ), ), const SizedBox(height: 8), const SizedBox(height: 8), Card( child: SizedBox( height: Get.height * 0.35, // Adjust the height as per your requirement child: Padding( padding: EdgeInsets.all(Get.width * 0.02), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Add title here Padding( padding: const EdgeInsets.symmetric(vertical: 8.0), // Adjust padding if needed child: Text( "Order Summary", // Title text style: GoogleFonts.roboto( fontSize: Get.width * 0.05, // Adjust font size as needed fontWeight: FontWeight.bold, ), ), ), Expanded( child: ListView.builder( padding: EdgeInsets.zero, itemCount: order.orderItem!.length ?? 0, itemBuilder: (context, index) { final orderItem =order.orderItem![index]; final imageUrl = orderItem.image?.isNotEmpty == true ? orderItem.image![0].url : null; final subTotal = orderItem.price * orderItem.quantity!.toInt(); final GstTotalAmount = (orderItem.price * orderItem.quantity!.toInt()) *(orderItem.gst/100 ); final grandTotal = subTotal + GstTotalAmount; return orderItem != null ? Card( margin: const EdgeInsets.symmetric(vertical: 5.0), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), ), child: Padding( padding: const EdgeInsets.all(8.0), child: Row( children: [ // Image.asset( // "assets/images/new_product.jpeg", // // "assets/images/product.png", // height: 50, // width: 50, // fit: BoxFit.cover, // ), imageUrl != null && imageUrl.isNotEmpty && imageUrl.startsWith('http') // Check if it's a network URL/ Check if it's a network URL ? CachedNetworkImage( imageUrl: imageUrl, height: 50, width: 50, fit: BoxFit.cover, placeholder: (context, url) => const CircularProgressIndicator(), // Optional placeholder errorWidget: (context, url, error) => const Icon(Icons.error), // Optional error widget ) : Image.asset( //imageUrl!, 'assets/images/no_image_available.jpg', // Placeholder image when URL is empty height: 50, width: 50, fit: BoxFit.cover, ), const SizedBox(width: 10), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( capitalizeFirstLetter(orderItem.name.toString()), style: GoogleFonts.roboto( fontSize: Get.width * 0.04, fontWeight: FontWeight.bold, ), ), Text( "Quantity: ${orderItem.quantity}", style: GoogleFonts.roboto( fontSize: Get.width * 0.03, ), ), Text("Price: ${orderItem.price}"), Text("Subtotal: ${subTotal}"), Text("GSt: ${orderItem.gst}%"), Text("GST Amount (₹): ${GstTotalAmount.toStringAsFixed(2)}"), Text("Total Amount (₹): ${grandTotal}"), ], ), ), ], ), ), ) : const SizedBox.shrink(); }, ), ), ], ), ), ), ), const SizedBox(height: 8), Card( child: SizedBox( height: Get.height * 0.35, // Adjust the height as per your requirement child: Padding( padding: EdgeInsets.all(Get.width * 0.02), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Add title here Padding( padding: const EdgeInsets.symmetric(vertical: 8.0), // Adjust padding if needed child: Text( "Order Items to be processed", // Title text style: GoogleFonts.roboto( fontSize: Get.width * 0.05, // Adjust font size as needed fontWeight: FontWeight.bold, ), ), ), Expanded( child: ListView.builder( padding: EdgeInsets.zero, itemCount: order.orderItem ?.where((item) => item.remainingQuantity! > 0) .length ?? 0, itemBuilder: (context, index) { // Filter items with non-zero quantities final filteredItems =order!.orderItem! .where((item) => item.remainingQuantity! > 0) .toList(); final orderItem = filteredItems[index]; final imageUrl = orderItem.image?.isNotEmpty == true ? orderItem.image![0].url : null; final subTotalProcesssItem = orderItem.price! * orderItem.remainingQuantity!.toInt(); final GstTotalAmounProcessItem = (orderItem.price! * orderItem.remainingQuantity!.toInt()) *(orderItem.gst!/100 ); final grandTotalProcessItem = subTotalProcesssItem + GstTotalAmounProcessItem; return Card( margin: const EdgeInsets.symmetric(vertical: 5.0), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), ), child: Padding( padding: const EdgeInsets.all(8.0), child: Row( children: [ // Image.asset( // "assets/images/new_product.jpeg", // // "assets/images/product.png", // height: 50, // width: 50, // fit: BoxFit.cover, // ), imageUrl != null && imageUrl.isNotEmpty && imageUrl.startsWith('http') // Check if it's a network URL/ Check if it's a network URL ? CachedNetworkImage( imageUrl: imageUrl, height: 50, width: 50, fit: BoxFit.cover, placeholder: (context, url) => const CircularProgressIndicator(), // Optional placeholder errorWidget: (context, url, error) => const Icon(Icons.error), // Optional error widget ) : Image.asset( //imageUrl!, 'assets/images/no_image_available.jpg', // Placeholder image when URL is empty height: 50, width: 50, fit: BoxFit.cover, ), const SizedBox(width: 10), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( capitalizeFirstLetter(orderItem.name.toString()), style: GoogleFonts.roboto( fontSize: Get.width * 0.04, fontWeight: FontWeight.bold, ), ), Text("Quantity: ${orderItem.remainingQuantity}"), Text("Price: ${orderItem.price}"), Text("Subtotal: ${subTotalProcesssItem}"), Text("Gst: ${orderItem.gst}%"), Text("GST Total: ${GstTotalAmounProcessItem.toStringAsFixed(2)}"), Text("Total Amount: ${grandTotalProcessItem}"), ], ), ), ], ), ), ); }, ), ), ], ), ), ), ), const SizedBox(height: 8), SizedBox( height: Get.height* 0.19, child:_buildCustomerDetails(), ), const SizedBox(height: 8), _buildBillingInfo(), const SizedBox(height: 8), _buildShippingInfo(), const SizedBox(height: 8), Card( child: Column( children: [ SizedBox( width: Get.width, height: Get.height*0.05, child: Padding( padding: const EdgeInsets.fromLTRB(8, 8, 8, 0), child: Row( children: [ Text( "Payment Mode : ", style: GoogleFonts.roboto( fontSize: Get.width * 0.04, fontWeight: FontWeight.w500, ), ), Text(capitalizeFirstLetter(widget.placedOrderList!.paymentMode.toString())), // Text("${widget.placedOrderList!.paymentMode}",maxLines: 4, // overflow:TextOverflow.ellipsis,) ], ), ), ), ], ), ), const SizedBox(height: 8), Card( child: Column( children: [ SizedBox( width: Get.width, height: Get.height*0.05, child: Padding( padding: const EdgeInsets.fromLTRB(8, 8, 8, 0), child: Row( children: [ Text( "Order Status :", style: GoogleFonts.roboto( fontSize: Get.width * 0.04, fontWeight: FontWeight.w500, ), ), SizedBox(width: Get.width*0.01,), //Text(capitalizeFirstLetter(widget.placedOrderList!.status)), Text(capitalizeFirstLetter(order!.status.toString()),maxLines: 4, overflow:TextOverflow.ellipsis,) ], ), ), ), ], ), ), const SizedBox(height: 8), // SizedBox( // height: Get.height * 0.05, // child: Row( // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // const Text( // "Status: ", // style: TextStyle(fontWeight: FontWeight.bold), // ), // SizedBox(width: 10), // Space between label and dropdown // Expanded( // child: DropdownButtonFormField( // value: selectedStatus, // decoration: InputDecoration( // filled: true, // fillColor: Colors.white, // White background // contentPadding: EdgeInsets.symmetric( // vertical: 10, horizontal: 12), // border: OutlineInputBorder( // borderRadius: BorderRadius.circular(10), // borderSide: BorderSide( // color: Colors.grey, // width: 1, // ), // ), // ), // items: _statusList.map((String status) { // return DropdownMenuItem( // value: status, // child: Text(capitalizeFirstLetter(status)), // ); // }).toList(), // onChanged: (newValue) { // setState(() { // selectedStatus = newValue!; // }); // }, // ), // ), // ], // ), // ), SizedBox( height: Get.height * 0.05, child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ const Text( "CancelledReason: ", style: TextStyle(fontWeight: FontWeight.bold,), ), SizedBox(width: 10), // Space between label and dropdown Text("${_getRDCancleController.productRDList[0].orderCancelledReason}",maxLines: 4,style: TextStyle(color: Colors.red,fontSize: 15), overflow:TextOverflow.ellipsis,) ], ), ), ], ), ), ), SizedBox(height: Get.height * 0.04), ], ), ), ), ], ), ); } Widget _buildBillingInfo() { return Card( child: Column( children: [ _buildSectionTitle("Billing Information"), _buildInfoRow("Address", widget.placedOrderList!.billTo.toString(), Get.width * 0.04), ], ), ); } Widget _buildShippingInfo() { return Card( child: Column( children: [ _buildSectionTitle("Shipping Information"), _buildInfoRow("Address", widget.placedOrderList!.shipTo.toString(), Get.width * 0.04), ], ), ); } Widget _buildCustomerDetails() { return Card( child: Column( children: [ _buildSectionTitle("Customer Details"), _buildRow("Name:", widget.placedOrderList!.addedBy!.name, Get.width * 0.04), _buildRow("Email:", widget.placedOrderList!.addedBy!.email, Get.width * 0.04), _buildRow("Mobile Number:", widget.placedOrderList!.addedBy!.mobileNumber, Get.width * 0.04), ], ), ); } } Widget _buildInfoRow(String label, String value, double fontSize) { return Padding( padding: const EdgeInsets.all(8.0), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "$label: ", style: GoogleFonts.roboto(fontSize: fontSize, fontWeight: FontWeight.w500), ), Expanded( child: Text( value, style: GoogleFonts.roboto(fontSize: fontSize), ), ), ], ), ); } Widget _buildRow(String label, String value, double fontSize) { return Padding( padding: const EdgeInsets.fromLTRB(8, 2, 8, 2), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( label, style: GoogleFonts.roboto(fontSize: fontSize,fontWeight: FontWeight.bold), ), Text( value, style: GoogleFonts.roboto(fontSize: fontSize), ), ], ), ); } Widget _buildSectionTitle(String title) { return SizedBox( width: Get.width, child: Padding( padding: const EdgeInsets.fromLTRB(8, 8, 8, 0), child: Text( title, style: GoogleFonts.roboto(fontSize: Get.width * 0.05, fontWeight: FontWeight.bold), ), ), ); } class simple extends State { @override Widget build(BuildContext context) { return SizedBox( width: Get.width, child: Padding( padding: const EdgeInsets.fromLTRB(8, 8, 8, 0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "Courier Status : ", style: GoogleFonts.roboto( fontSize: Get.width * 0.04, fontWeight: FontWeight.bold, ), ), ElevatedButton( onPressed: () {}, style: ElevatedButton.styleFrom( foregroundColor: Colors.white, backgroundColor: _getCourierStatusColor(widget.placedOrderList!.invoices[0]!.courierStatus.toString()), // Call the method here shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), ), ), child: Text(widget.placedOrderList!.invoices[0]!.courierStatus.toString()), ), ], ), ), ); } // Method to get the color based on the status Color _getCourierStatusColor(String status) { switch (status.toLowerCase()) { case 'processing': return Colors.orange; // Orange for processing case 'dispatched': return Colors.lightBlue; // Light blue for dispatched case 'delivered': return Colors.green; // Green for delivered default: return Colors.grey; // Default color if status doesn't match } } }