From 16e58dca0776ca0745dfcfac102078de081e15c8 Mon Sep 17 00:00:00 2001 From: venbaittech Date: Thu, 12 Jun 2025 13:05:15 +0530 Subject: [PATCH] forex validations --- assets/images/IconsImg/Frame.png | Bin 0 -> 391 bytes assets/images/IconsImg/ViceVersaArrow.png | Bin 0 -> 76432 bytes lib/Screens/approvals/approval_list.dart | 11 +- lib/Screens/itnerary/forex.dart | 93 +++- lib/Screens/itnerary_list/flight_list.dart | 117 ++++- lib/Screens/itnerary_list/train_list.dart | 416 +++++++++++------- lib/Screens/plans/create_plans.dart | 28 +- .../create_user/create_user.dart | 2 +- .../create_user/office_details.dart | 2 +- .../create_user/personal_details.dart | 14 +- .../create_user/traveller_details.dart | 27 +- lib/Screens/userManagement/user_List.dart | 108 ++--- lib/data/models/plan.dart | 42 +- lib/services/apiService.dart | 4 +- pubspec.yaml | 2 + 15 files changed, 546 insertions(+), 320 deletions(-) create mode 100644 assets/images/IconsImg/Frame.png create mode 100644 assets/images/IconsImg/ViceVersaArrow.png diff --git a/assets/images/IconsImg/Frame.png b/assets/images/IconsImg/Frame.png new file mode 100644 index 0000000000000000000000000000000000000000..7271a16e42256d5845ead7714c3bf62d2653b706 GIT binary patch literal 391 zcmV;20eJq2P)XS^p+9>GRqB~~WH#7DqKFt!%PH?Xv%v@(_!z&Pul zh!GHUOTGlMJ43$T?6A84l`6d|ObgnLvBW6!$uOPWv>n{!en)*FV%W|)11KPo8Vy6A z-=7RwDA*P3)ey-gLieri_2FrN89D$I@JJ>hyJ=@dK#m$0g(Va!&ubx|e>C6~<+UplpbL@<&;b$fP*$Q2;%A>IPtbKjSb7EL?aI}IR6m`Jh^y}f z$6S5XM54*5`gpLNb=^_`9p;$;UFJ%82Tk6YtAkd;T**iaS|8s_h(!&|=>KA_v|rCR l*830gRk18$Ua68E9RS|wvK~=m!)E{h002ovPDHLkV1h#woo4_5 literal 0 HcmV?d00001 diff --git a/assets/images/IconsImg/ViceVersaArrow.png b/assets/images/IconsImg/ViceVersaArrow.png new file mode 100644 index 0000000000000000000000000000000000000000..2b088011312b183b5ed6b4f45f1e99501a6946ae GIT binary patch literal 76432 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

oQ%I7-RNs;$8m@{r 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 KbewLBkN+Q+72 { setState(() { futurePlans = fetchPlans(); }); - + print("Token availa"); // Wait for futurePlans to be fetched and update allPlans futurePlans.then((plans) { setState(() { @@ -186,7 +186,9 @@ class _ApprovalListState extends State { if (response.statusCode == 200) { final data = json.decode(response.body); + print('plansJson1'); List plansJson = data['data']; + print('plansJson $plansJson'); return plansJson.map((json) => Plan.fromJson(json)).toList(); } else { throw Exception('Failed to load plans'); @@ -890,6 +892,9 @@ class _ApprovalListState extends State { print( "Approver Edit2 : ${plan.delegaterId}", ); + print( + "Approver Edit3 : ${plan.approver_status}", + ); Navigator.pop( context, ); @@ -1140,6 +1145,10 @@ class _ApprovalListState extends State { 'Edit The Trip Details', onPressed: () { Navigator.pop(context); + print( + "Approver Edit3 : ${plan.approver_status}", + ); + ApiService.viewPlanForApprover( context, plan.planId, diff --git a/lib/Screens/itnerary/forex.dart b/lib/Screens/itnerary/forex.dart index 9cc1058..4cb08f5 100644 --- a/lib/Screens/itnerary/forex.dart +++ b/lib/Screens/itnerary/forex.dart @@ -94,8 +94,8 @@ class _ForexScreenState extends State { final parts = date.split('-'); if (parts.length == 3) { parsedDate = DateTime( - int.parse(parts[2]), // year - int.parse(parts[1]), // month + int.parse(parts[2]), // year + int.parse(parts[1]), // month int.parse(parts[0]), // day ); } else { @@ -356,6 +356,9 @@ class _ForexScreenState extends State { print("card - $card"); print("cash - $cash"); + _validateCardAmount(card); + _validateCashAmount(cash); + if (!isValidForexData(data)) { // && errorMessages.isNotEmpty) { print("Validation Failed: Required fields are missing."); @@ -411,7 +414,6 @@ class _ForexScreenState extends State { textControllers["_forexStartDate"]?.addListener(_onFieldChanged); textControllers["_forexEndDate"]?.addListener(_onFieldChanged); - flightFirstTripDateNotifier = ValueNotifier(null); flightLastTripDateNotifier = ValueNotifier(null); @@ -428,26 +430,62 @@ class _ForexScreenState extends State { // ✅ Only set controller after value is updated // final parsedDate = // DateTime.tryParse(flightFirstTripDateNotifier.value ?? ''); - final parsedDate = DateFormat( - "dd-MM-yyyy", - ).parse(flightFirstTripDateNotifier.value ?? ''); - if (parsedDate != null) { - textControllers["_forexStartDate"]?.text = DateFormat( - 'dd-MM-yyyy', - ).format(parsedDate); + // ----------------------------------- + + // final parsedDate = DateFormat( + // "dd-MM-yyyy", + // ).parse(flightFirstTripDateNotifier.value ?? ''); + // if (parsedDate != null) { + // textControllers["_forexStartDate"]?.text = DateFormat( + // 'dd-MM-yyyy', + // ).format(parsedDate); + // } + final flightDateStr = flightFirstTripDateNotifier.value; + + if (flightDateStr != null && flightDateStr.trim().isNotEmpty) { + try { + final parsedDate = DateFormat( + "dd-MM-yyyy", + ).parse(flightDateStr.trim()); + textControllers["_forexStartDate"]?.text = DateFormat( + 'dd-MM-yyyy', + ).format(parsedDate); + } catch (e) { + print("Error parsing flightFirstTripDate: $e"); + // Optionally show an error message to the user or log it + } + } else { + print("flightFirstTripDateNotifier is null or empty"); } - final parsedEndDate = DateFormat( - "dd-MM-yyyy", - ).parse(flightLastTripDateNotifier.value ?? ''); - if (parsedEndDate != null) { - textControllers["_forexEndDate"]?.text = DateFormat( - 'dd-MM-yyyy', - ).format(parsedEndDate); + final flightDateEnd = flightFirstTripDateNotifier.value; + + if (flightDateEnd != null && flightDateEnd.trim().isNotEmpty) { + try { + final parsedDate = DateFormat( + "dd-MM-yyyy", + ).parse(flightDateEnd.trim()); + textControllers["_forexEndDate"]?.text = DateFormat( + 'dd-MM-yyyy', + ).format(parsedDate); + } catch (e) { + print("Error parsing flightEndTripDate: $e"); + // Optionally show an error message to the user or log it + } + } else { + print("flightEndTripDateNotifier is null or empty"); } + // final parsedEndDate = DateFormat( + // "dd-MM-yyyy", + // ).parse(flightLastTripDateNotifier.value ?? ''); + // if (parsedEndDate != null) { + // textControllers["_forexEndDate"]?.text = DateFormat( + // 'dd-MM-yyyy', + // ).format(parsedEndDate); + // } + handleUpdatedField(); - }); } @@ -468,16 +506,22 @@ class _ForexScreenState extends State { print("UPDATAED SELECTION"); textControllers["_forexStartDate"] = initController("start_date"); - textControllers["_forexStartDate"]?.addListener(_onFieldChanged); // Reattach + textControllers["_forexStartDate"]?.addListener( + _onFieldChanged, + ); // Reattach textControllers["_forexEndDate"] = initController("end_date"); - textControllers["_forexEndDate"]?.addListener(_onFieldChanged); // Reattach + textControllers["_forexEndDate"]?.addListener( + _onFieldChanged, + ); // Reattach textControllers["_transport"] = initController("transport"); textControllers["_accomodation"] = initController("accommodation"); textControllers["_telephone"] = initController("telephone"); textControllers["_cardNumber"] = initController("card_number"); textControllers["_card"] = initController("deposit_on_card"); textControllers["_cash"] = initController("deposit_on_cash"); - textControllers["_deliveryLocation"] = initController("delivery_location"); + textControllers["_deliveryLocation"] = initController( + "delivery_location", + ); textControllers["_comments"] = initController("comments"); // Set dropdown values @@ -571,8 +615,8 @@ class _ForexScreenState extends State { // final startDate = DateFormat('dd/mm/yyyy').parse(startDateString); // final endDate = DateFormat('dd/mm/yyyy').parse(endDateString); - final startDate = DateFormat('dd-MM-yyyy').parse(startDateString.trim()) ; - final endDate = DateFormat('dd-MM-yyyy').parse(endDateString.trim()) ; + final startDate = DateFormat('dd-MM-yyyy').parse(startDateString.trim()); + final endDate = DateFormat('dd-MM-yyyy').parse(endDateString.trim()); print("Calculate 4"); @@ -1162,7 +1206,8 @@ class _ForexScreenState extends State { errorMessages["end_date"]!, style: const TextStyle(color: Colors.red, fontSize: 12), maxLines: 2, // Allow it to wrap onto two lines - overflow: TextOverflow.ellipsis, // Add ellipsis if it still overflows + overflow: + TextOverflow.ellipsis, // Add ellipsis if it still overflows ), ], ], diff --git a/lib/Screens/itnerary_list/flight_list.dart b/lib/Screens/itnerary_list/flight_list.dart index 23cce10..54919a5 100644 --- a/lib/Screens/itnerary_list/flight_list.dart +++ b/lib/Screens/itnerary_list/flight_list.dart @@ -51,10 +51,15 @@ class _FlightListWidgetState extends State { Map tempCountryMap = {}; for (var country in result) { - String city = country['City'] ?? ''; - String airport = country['Airport'] ?? ''; - String displayName = '${country['City']} - ${country['Airport']}'; - // String displayName = '${country['City']} | ${country['Airport']}'; + // String city = country['City'] ?? ''; + // String airport = country['Airport'] ?? ''; + // String displayName = '${country['City']} - ${country['Airport']}'; + // // String displayName = '${country['City']} | ${country['Airport']}'; + + final code = country['Code'] ?? ''; + final city = country['City'] ?? ''; + final airport = country['Airport'] ?? ''; + final displayName = '$city ($code)\n$airport'; tempCountryMap[country['Code']] = displayName; } @@ -346,7 +351,7 @@ class _FlightListWidgetState extends State { ), ), Expanded( - flex: 4, + flex: 5, child: Text( "Sector", style: GoogleFonts.poppins(fontSize: 11), @@ -374,13 +379,38 @@ class _FlightListWidgetState extends State { if (isDesktop) if (item["trips"] != null && item["trips"].isNotEmpty) ...item["trips"].map((trip) { + print("werewrewrTrip - $trip"); + String fromPlaceCountry = countryMap[trip["from_place"]?.toString()] ?? "Unknown Country"; + + final parts = fromPlaceCountry.split('\n'); + final cityAndCode = parts[0]; + final fromairport = parts.length > 1 ? parts[1] : ''; + + // Extract city and code from "City (CODE)" + final cityMatch = RegExp( + r'^(.*)\s+\(([^)]+)\)$', + ).firstMatch(cityAndCode); + final fromcity = cityMatch?.group(1) ?? ''; + final fromcode = cityMatch?.group(2) ?? ''; + String toPlaceCountry = countryMap[trip["to_place"]?.toString()] ?? "Unknown Country"; + final toparts = toPlaceCountry.split('\n'); + final tocityAndCode = toparts[0]; + final toairport = toparts.length > 1 ? toparts[1] : ''; + + // Extract city and code from "City (CODE)" + final tocityMatch = RegExp( + r'^(.*)\s+\(([^)]+)\)$', + ).firstMatch(tocityAndCode); + final tocity = tocityMatch?.group(1) ?? ''; + final tocode = tocityMatch?.group(2) ?? ''; + return Padding( padding: const EdgeInsets.symmetric(vertical: 4.0), child: Row( @@ -398,36 +428,74 @@ class _FlightListWidgetState extends State { ), Expanded( flex: 4, - child: Column( + child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - "$fromPlaceCountry", - // "${trip["from_place"]?.toString()} - ${trip["to_place"]?.toString()}", - style: GoogleFonts.poppins( - fontSize: 12, - fontWeight: FontWeight.w700, + Expanded( + flex: 1, + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + "$fromcity ($fromcode)", + // "${trip["from_place"]?.toString()} - ${trip["to_place"]?.toString()}", + style: GoogleFonts.poppins( + fontSize: 12, + fontWeight: FontWeight.w700, + ), + ), + Text( + "$fromairport", + // "${trip["from_place"]?.toString()} - ${trip["to_place"]?.toString()}", + style: GoogleFonts.poppins( + fontSize: 10, + fontWeight: FontWeight.w400, + ), + ), + ], ), ), - Padding( - padding: const EdgeInsets.only(left: 10), - child: Image.asset( - 'assets/images/IconsImg/alternate.png', - width: 20, - height: 20, + Expanded( + flex: 1, + child: Padding( + padding: const EdgeInsets.only(left: 10), + child: Image.asset( + 'assets/images/IconsImg/Frame.png', + width: 20, + height: 20, + ), ), ), - Text( - "$toPlaceCountry", - // "${trip["from_place"]?.toString()} - ${trip["to_place"]?.toString()}", - style: GoogleFonts.poppins( - fontSize: 12, - fontWeight: FontWeight.w700, + Expanded( + flex: 1, + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + "$tocity ($tocode)", + // "${trip["from_place"]?.toString()} - ${trip["to_place"]?.toString()}", + style: GoogleFonts.poppins( + fontSize: 12, + fontWeight: FontWeight.w700, + ), + ), + Text( + "$toairport", + // "${trip["from_place"]?.toString()} - ${trip["to_place"]?.toString()}", + style: GoogleFonts.poppins( + fontSize: 10, + fontWeight: FontWeight.w400, + ), + ), + ], ), ), ], ), ), + Spacer(), Expanded( flex: 2, child: Text( @@ -478,6 +546,7 @@ class _FlightListWidgetState extends State { "Sector", "${trip["from_place"] ?? "N/A"} - ${trip["to_place"] ?? "N/A"}", ), + _buildKeyValueRow( "Date", formatDate(trip["date"] ?? ""), diff --git a/lib/Screens/itnerary_list/train_list.dart b/lib/Screens/itnerary_list/train_list.dart index bf3913f..3379e45 100644 --- a/lib/Screens/itnerary_list/train_list.dart +++ b/lib/Screens/itnerary_list/train_list.dart @@ -54,7 +54,8 @@ class _TrainListWidgetState extends State { return AlertDialog( title: const Text('Select Trip Type'), content: const Text( - 'Please select a trip type before adding a Train.'), + 'Please select a trip type before adding a Train.', + ), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(), @@ -109,21 +110,24 @@ class _TrainListWidgetState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ MouseRegion( - cursor: widget.isViewMode - ? SystemMouseCursors.forbidden - : SystemMouseCursors.click, + cursor: + widget.isViewMode + ? SystemMouseCursors.forbidden + : SystemMouseCursors.click, child: MouseRegion( - cursor: widget.isViewMode - ? SystemMouseCursors.forbidden - : SystemMouseCursors.click, + cursor: + widget.isViewMode + ? SystemMouseCursors.forbidden + : SystemMouseCursors.click, child: GestureDetector( - onTap: widget.isViewMode - ? null - : () { - print("New data"); - checkClass(); - }, + onTap: + widget.isViewMode + ? null + : () { + print("New data"); + checkClass(); + }, child: Row( mainAxisSize: MainAxisSize.min, // Ensures content fits nicely @@ -137,7 +141,7 @@ class _TrainListWidgetState extends State { Icons.add_circle_sharp, size: 30, color: Color(0xFF114D8B), - ) + ), ], ), ), @@ -193,9 +197,9 @@ class _TrainListWidgetState extends State { ], ), const SizedBox(height: 16), - // Scroll behavior based on device - _buildData(context, isDesktop) + // Scroll behavior based on device + _buildData(context, isDesktop), ], ), ), @@ -268,8 +272,11 @@ class _TrainListWidgetState extends State { if (hour == 24 && minute == 0) { // 24:00 is treated as 00:00 on the next day - dateTime = DateTime(now.year, now.month, now.day) - .add(const Duration(days: 1)); + dateTime = DateTime( + now.year, + now.month, + now.day, + ).add(const Duration(days: 1)); } else { if (hour < 0 || hour > 23 || minute < 0 || minute > 59) { throw FormatException("Invalid hour or minute"); @@ -356,109 +363,188 @@ class _TrainListWidgetState extends State { ), ], ), - Divider( - color: Colors.blueGrey.shade50, - ), + Divider(color: Colors.blueGrey.shade50), SizedBox(height: 4), isDesktop ? Row( - children: [ - Expanded( - flex: 2, - child: Text( - " Class", - style: GoogleFonts.poppins( - fontSize: 11, - ), - )), - Expanded( - flex: 2, - child: Text( - " Planned Trips", - style: GoogleFonts.poppins( - fontSize: 11, - ), - )), - Expanded( - flex: 2, - child: Text( - " Date", - style: GoogleFonts.poppins( - fontSize: 11, - ), - )), - Expanded( - flex: 2, - child: Text( - " Comments", - style: GoogleFonts.poppins( - fontSize: 11, - ), - )), - ], - ) + children: [ + Expanded( + flex: 2, + child: Text( + " Class", + style: GoogleFonts.poppins(fontSize: 11), + ), + ), + Expanded( + flex: 4, + child: Text( + " Planned Trips", + style: GoogleFonts.poppins(fontSize: 11), + ), + ), + Expanded( + flex: 2, + child: Text( + " Date", + style: GoogleFonts.poppins(fontSize: 11), + ), + ), + Expanded( + flex: 2, + child: Text( + " Comments", + style: GoogleFonts.poppins(fontSize: 11), + ), + ), + ], + ) : SizedBox.shrink(), SizedBox(height: 4), isDesktop ? Row( - children: [ - Expanded( - flex: 2, - child: Text( - "${getRequestForTrainClass(item["class"]!.toString())} ", - style: GoogleFonts.poppins( - fontSize: 12, - fontWeight: FontWeight.w600, - ), - )), - SizedBox(width: 10), - Expanded( - flex: 2, - child: Text( - "$fromPlaceCountry - $toPlaceCountry", - - // "${item["from_station"]!} - ${(item["to_station"])}", - style: GoogleFonts.poppins( - fontSize: 12, - fontWeight: FontWeight.w600, - ), - )), - SizedBox(width: 10), - Expanded( - flex: 2, - child: Text( - "${formatDate(item["date"]!)} ${formatTime(item["time"]!)}", - style: GoogleFonts.poppins( - fontSize: 12, - fontWeight: FontWeight.w600, - ), + children: [ + Expanded( + flex: 2, + child: Text( + "${getRequestForTrainClass(item["class"]!.toString())} ", + style: GoogleFonts.poppins( + fontSize: 12, + fontWeight: FontWeight.w600, ), ), - SizedBox(width: 10), - Expanded( - flex: 2, - child: _buildComments( - "Comments:", item["comments"] ?? "N/A"), + ), + SizedBox(width: 10), + Expanded( + flex: 3, + + // child: Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // Expanded( + // flex: 1, + // child: Text( + // "$fromPlaceCountry", + // // "${trip["from_place"]?.toString()} - ${trip["to_place"]?.toString()}", + // style: GoogleFonts.poppins( + // fontSize: 12, + // fontWeight: FontWeight.w700, + // ), + // ), + // ), + // Expanded( + // flex: 1, + // child: Padding( + // padding: const EdgeInsets.only(left: 10), + // child: Image.asset( + // 'assets/images/IconsImg/Frame.png', + // width: 20, + // height: 20, + // ), + // ), + // ), + // Expanded( + // flex: 1, + // child: Text( + // "$toPlaceCountry", + // // "${trip["from_place"]?.toString()} - ${trip["to_place"]?.toString()}", + // style: GoogleFonts.poppins( + // fontSize: 12, + // fontWeight: FontWeight.w700, + // ), + // ), + // ), + // ], + // ), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 1, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "$fromPlaceCountry ", + + // "${item["from_station"]!} - ${(item["to_station"])}", + style: GoogleFonts.poppins( + fontSize: 12, + fontWeight: FontWeight.w600, + ), + ), + ], + ), + ), + Expanded( + flex: 1, + child: Padding( + padding: const EdgeInsets.only(left: 10), + child: Image.asset( + 'assets/images/IconsImg/Frame.png', + width: 20, + height: 20, + ), + ), + ), + Expanded( + flex: 1, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "$toPlaceCountry", + + // "$fromPlaceCountry - $toPlaceCountry", + style: GoogleFonts.poppins( + fontSize: 12, + fontWeight: FontWeight.w600, + ), + ), + ], + ), + ), + ], ), - ], - ) + ), + Spacer(), + // SizedBox(width: 10), + Expanded( + flex: 2, + child: Text( + "${formatDate(item["date"]!)} ${formatTime(item["time"]!)}", + style: GoogleFonts.poppins( + fontSize: 12, + fontWeight: FontWeight.w600, + ), + ), + ), + SizedBox(width: 10), + Expanded( + flex: 2, + child: _buildComments( + "Comments:", + item["comments"] ?? "N/A", + ), + ), + ], + ) : Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - _buildRow( - "Class:", - getRequestForTrainClass( - item["class"]!.toString())), - _buildRow("From:", item["from_station"]!), - _buildRow("To:", item["to_station"]!), - _buildDateTimeRow( - "Date:", - formatDate(item["date"]!), - formatTime(item["time"]!), - ), - _buildRow("Comments:", item["comments"] ?? "N/A"), - ], - ) + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _buildRow( + "Class:", + getRequestForTrainClass(item["class"]!.toString()), + ), + _buildRow("From:", item["from_station"]!), + _buildRow("To:", item["to_station"]!), + _buildDateTimeRow( + "Date:", + formatDate(item["date"]!), + formatTime(item["time"]!), + ), + _buildRow("Comments:", item["comments"] ?? "N/A"), + ], + ), ], ), ), @@ -487,31 +573,37 @@ class _TrainListWidgetState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( - child: exceedsLimit - ? Tooltip( - message: wrapText(value, 50), - decoration: BoxDecoration( - color: Colors.grey.shade200, // Black background - borderRadius: BorderRadius.circular(6), - ), - textStyle: - TextStyle(color: Colors.black), // Tooltip text color - padding: EdgeInsets.all(8), - preferBelow: false, - child: Text(value.substring(0, limit) + "...", + child: + exceedsLimit + ? Tooltip( + message: wrapText(value, 50), + decoration: BoxDecoration( + color: Colors.grey.shade200, // Black background + borderRadius: BorderRadius.circular(6), + ), + textStyle: TextStyle( + color: Colors.black, + ), // Tooltip text color + padding: EdgeInsets.all(8), + preferBelow: false, + child: Text( + value.substring(0, limit) + "...", style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w600, - fontFamily: "Archivo"), - overflow: TextOverflow.ellipsis), - ) - : Text( - value, - style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w600, + fontFamily: "Archivo", + ), + overflow: TextOverflow.ellipsis, + ), + ) + : Text( + value, + style: TextStyle( fontSize: 12, fontWeight: FontWeight.w600, - fontFamily: "Archivo"), - ), + fontFamily: "Archivo", + ), + ), ), ], ); @@ -538,36 +630,30 @@ class _TrainListWidgetState extends State { children: [ Text( title, - style: GoogleFonts.poppins( - fontSize: 12, - fontWeight: FontWeight.w600, - ), + style: GoogleFonts.poppins(fontSize: 12, fontWeight: FontWeight.w600), ), SizedBox(width: 8), Expanded( - child: exceedsLimit - ? Tooltip( - message: wrapText(value, 50), - decoration: BoxDecoration( - color: Colors.grey.shade200, // Black background - borderRadius: BorderRadius.circular(6), - ), - textStyle: - TextStyle(color: Colors.black), // Tooltip text color - padding: EdgeInsets.all(8), - preferBelow: false, - child: Text(value.substring(0, limit) + "...", - style: GoogleFonts.poppins( - fontSize: 12, - ), - overflow: TextOverflow.ellipsis), - ) - : Text( - value, - style: GoogleFonts.poppins( - fontSize: 12, - ), - ), + child: + exceedsLimit + ? Tooltip( + message: wrapText(value, 50), + decoration: BoxDecoration( + color: Colors.grey.shade200, // Black background + borderRadius: BorderRadius.circular(6), + ), + textStyle: TextStyle( + color: Colors.black, + ), // Tooltip text color + padding: EdgeInsets.all(8), + preferBelow: false, + child: Text( + value.substring(0, limit) + "...", + style: GoogleFonts.poppins(fontSize: 12), + overflow: TextOverflow.ellipsis, + ), + ) + : Text(value, style: GoogleFonts.poppins(fontSize: 12)), ), ], ); @@ -579,18 +665,10 @@ class _TrainListWidgetState extends State { children: [ Text( title, - style: TextStyle( - fontWeight: FontWeight.w600, - fontSize: 12, - ), + style: TextStyle(fontWeight: FontWeight.w600, fontSize: 12), ), SizedBox(width: 8), - Expanded( - child: Text( - "$date, $time", - style: TextStyle(fontSize: 12), - ), - ), + Expanded(child: Text("$date, $time", style: TextStyle(fontSize: 12))), ], ); } diff --git a/lib/Screens/plans/create_plans.dart b/lib/Screens/plans/create_plans.dart index cee265f..aff0d40 100644 --- a/lib/Screens/plans/create_plans.dart +++ b/lib/Screens/plans/create_plans.dart @@ -1173,17 +1173,18 @@ class CreateNewPlansState extends State { print("ViewAAA - $planData"); print("Call viewPlanForApprover"); - ApiService.viewPlanForApprover( - context, - data['plan_id'], - data['approverId'], - data['delegaterId'], - data['approver_status'], - - isViewMode: false, - isApprover: true, - ); - + // ApiService.viewPlanForApprover( + // context, + // data['plan_id'], + // data['approverId'], + // data['delegaterId'], + // data['approver_status'], + // + // isViewMode: false, + // isApprover: true, + // ); + // Close loading dialog (ONLY if still mounted) + if (mounted) Navigator.of(context, rootNavigator: true).pop(); context.go('/approvallist'); } else { print("$methodName failed. Status: ${response.statusCode}"); @@ -3172,6 +3173,11 @@ class CreateNewPlansState extends State { statusValue = "Approved"; }); callApproveAPI(selectedPlanId!, planData['user_id']); + showDialog( + context: context, + barrierDismissible: false, + builder: (context) => const SavingLoader(), + ); } else if (result is String) { // User rejected with remarks _remarksController.text = result; diff --git a/lib/Screens/userManagement/create_user/create_user.dart b/lib/Screens/userManagement/create_user/create_user.dart index d6d265f..be64bee 100644 --- a/lib/Screens/userManagement/create_user/create_user.dart +++ b/lib/Screens/userManagement/create_user/create_user.dart @@ -720,7 +720,7 @@ class _CreateUserFormDetialsState extends State { if (start_Date != null && end_Date != null && end_Date.isBefore(start_Date)) { - print("End date cannot be earlier than start date"); + print("Invalid Date Range"); return; } } catch (e) { diff --git a/lib/Screens/userManagement/create_user/office_details.dart b/lib/Screens/userManagement/create_user/office_details.dart index 6c58f9c..49b1fd2 100644 --- a/lib/Screens/userManagement/create_user/office_details.dart +++ b/lib/Screens/userManagement/create_user/office_details.dart @@ -457,7 +457,7 @@ class _OfficeDetailsState extends State { SizedBox(height: 5), // Space before error message Text( widget.errorMessages["employee_code"]!, - style: TextStyle(color: Colors.red, fontSize: 12), + style: GoogleFonts.poppins(color: Colors.red, fontSize: 12), ), ], ], diff --git a/lib/Screens/userManagement/create_user/personal_details.dart b/lib/Screens/userManagement/create_user/personal_details.dart index f3e969e..3331b66 100644 --- a/lib/Screens/userManagement/create_user/personal_details.dart +++ b/lib/Screens/userManagement/create_user/personal_details.dart @@ -802,7 +802,7 @@ class PersonalDetailsState extends State { SizedBox(height: 5), // Space before error message Text( widget.errorMessages["first_name"]!, - style: TextStyle(color: Colors.red, fontSize: 12), + style: GoogleFonts.poppins(color: Colors.red, fontSize: 12), ), ], ], @@ -848,7 +848,7 @@ class PersonalDetailsState extends State { SizedBox(height: 5), // Space before error message Text( widget.errorMessages["last_name"]!, - style: TextStyle(color: Colors.red, fontSize: 12), + style: GoogleFonts.poppins(color: Colors.red, fontSize: 12), ), ], ], @@ -1168,7 +1168,7 @@ class PersonalDetailsState extends State { SizedBox(height: 5), // Space before error message Text( widget.errorMessages["email"]!, - style: TextStyle(color: Colors.red, fontSize: 12), + style: GoogleFonts.poppins(color: Colors.red, fontSize: 12), ), ], ], @@ -1229,7 +1229,7 @@ class PersonalDetailsState extends State { SizedBox(height: 5), // Space before error message Text( widget.errorMessages["mobile_no"]!, - style: TextStyle(color: Colors.red, fontSize: 12), + style: GoogleFonts.poppins(color: Colors.red, fontSize: 12), ), ], ], @@ -1281,7 +1281,7 @@ class PersonalDetailsState extends State { SizedBox(height: 5), // Space before error message Text( widget.errorMessages["alternate_mobile_no"]!, - style: TextStyle(color: Colors.red, fontSize: 12), + style: GoogleFonts.poppins(color: Colors.red, fontSize: 12), ), ], ], @@ -1612,7 +1612,7 @@ class PersonalDetailsState extends State { SizedBox(height: 5), // Space before error message Text( widget.errorMessages["role_id"]!, - style: TextStyle(color: Colors.red, fontSize: 12), + style: GoogleFonts.poppins(color: Colors.red, fontSize: 12), ), ], ], @@ -1703,7 +1703,7 @@ class PersonalDetailsState extends State { SizedBox(height: 5), // Space before error message Text( widget.errorMessages["password"]!, - style: TextStyle(color: Colors.red, fontSize: 12), + style: GoogleFonts.poppins(color: Colors.red, fontSize: 12), ), ], ], diff --git a/lib/Screens/userManagement/create_user/traveller_details.dart b/lib/Screens/userManagement/create_user/traveller_details.dart index 2d7a6d1..c8465e5 100644 --- a/lib/Screens/userManagement/create_user/traveller_details.dart +++ b/lib/Screens/userManagement/create_user/traveller_details.dart @@ -195,7 +195,7 @@ class TravellerDetailsState extends State { end_Date != null && end_Date.isBefore(start_Date)) { setState(() { - errorMessages["date_of_expiry"] = "End date cannot be earlier"; + errorMessages["date_of_expiry"] = "Invalid Date Range"; }); print("End date cannot be earlier than start date"); } @@ -203,6 +203,11 @@ class TravellerDetailsState extends State { print("Invalid passport date format"); } + if (errorMessages.isNotEmpty) { + print("Validation failed with errors: $errorMessages"); + return false; + } + // Additional validation starts - travelDetailsData passport // DateTime? start_Date = travelDetailsData?['date_of_issue']; // DateTime? end_Date = travelDetailsData?['date_of_expiry']; @@ -1379,7 +1384,7 @@ class TravellerDetailsState extends State { SizedBox(height: 5), // Space before error message Text( errorMessages["passport_number"]!, - style: TextStyle(color: Colors.red, fontSize: 12), + style: GoogleFonts.poppins(color: Colors.red, fontSize: 12), ), ], ], @@ -1458,8 +1463,7 @@ class TravellerDetailsState extends State { // Revalidate expiry if (_selectedDateOfExpiry != null && _selectedDateOfExpiry!.isBefore(_selectedDateOfIssue!)) { - errorMessages["date_of_expiry"] = - "Expiry date cannot be earlier than Issue date"; + errorMessages["date_of_expiry"] = "Invalid Date Range"; } else { errorMessages.remove("date_of_expiry"); } @@ -1585,8 +1589,7 @@ class TravellerDetailsState extends State { if (_selectedDateOfIssue != null && _selectedDateOfExpiry!.isBefore(_selectedDateOfIssue!)) { - errorMessages["date_of_expiry"] = - "Expiry date cannot be earlier than Issue date"; + errorMessages["date_of_expiry"] = "Invalid Date Range"; } else { errorMessages.remove("date_of_expiry"); } @@ -1668,7 +1671,7 @@ class TravellerDetailsState extends State { SizedBox(height: 5), // Space before error message Text( errorMessages["date_of_expiry"]!, - style: const TextStyle(color: Colors.red, fontSize: 10), + style: GoogleFonts.poppins(color: Colors.red, fontSize: 10), maxLines: 2, // Allow it to wrap onto two lines overflow: TextOverflow.ellipsis, // Add ellipsis if it still overflows @@ -2905,7 +2908,7 @@ class TravellerDetailsState extends State { SizedBox(height: 5), // Space before error message Text( errorMessages["forex_pre_paid_card_number"]!, - style: TextStyle(color: Colors.red, fontSize: 12), + style: GoogleFonts.poppins(color: Colors.red, fontSize: 12), ), ], ], @@ -4175,8 +4178,7 @@ class TravellerDetailsState extends State { // Revalidate expiry if (_selectedCheckOutDate != null && _selectedCheckOutDate!.isBefore(_selectedCheckInDate!)) { - errorMessages["valid_upto"] = - "valid upto cannot be earlier than valid from"; + errorMessages["valid_upto"] = "Invalid Date Range"; } else { errorMessages.remove("valid_upto"); } @@ -4293,8 +4295,7 @@ class TravellerDetailsState extends State { if (_selectedCheckInDate != null && _selectedCheckOutDate!.isBefore(_selectedCheckInDate!)) { - errorMessages["valid_upto"] = - "valid upto cannot be earlier than valid from"; + errorMessages["valid_upto"] = "Invalid Date Range"; } else { errorMessages.remove("valid_upto"); } @@ -4355,7 +4356,7 @@ class TravellerDetailsState extends State { SizedBox(height: 5), // Space before error message Text( errorMessages["valid_upto"]!, - style: const TextStyle(color: Colors.red, fontSize: 10), + style: GoogleFonts.poppins(color: Colors.red, fontSize: 10), maxLines: 2, // Allow it to wrap onto two lines overflow: TextOverflow.ellipsis, // Add ellipsis if it still overflows diff --git a/lib/Screens/userManagement/user_List.dart b/lib/Screens/userManagement/user_List.dart index ab9b547..9e10cdb 100644 --- a/lib/Screens/userManagement/user_List.dart +++ b/lib/Screens/userManagement/user_List.dart @@ -111,7 +111,7 @@ class _UserListScreenState extends State { Future> fetchUsers() async { orgId = await getOrgId(); - final String apiUrlData = '$apiUrl/api/users?org_id=$orgId'; + final String apiUrlData = '$apiUrl/api/users?org_id=$orgId&for=table_view'; final String? token = await getToken(); print("Fetch Users"); @@ -294,7 +294,13 @@ class _UserListScreenState extends State { // Refresh user list after update void refreshUserList() { setState(() { - futureUsers = fetchUsers(); // Re-fetch users after status update + futureUsers = fetchUsers(); + + futureUsers.then((users) { + setState(() { + allUsers = users; + }); + }); // Re-fetch users after status update // Wait for futurePlans to be fetched and update allPlans }); } @@ -724,25 +730,28 @@ class _UserListScreenState extends State { ), ), DataCell( - GestureDetector( - onTap: () { - handleToggleUserStatus( - user['user_id'], - user['is_active'], - user, - ); - }, - child: Text( - user['is_active'] == "1" - ? "Active" - : "Inactive", - style: TextStyle( - color: - user['is_active'] == "1" - ? Colors.green - : Colors.grey, - fontFamily: "Inter", - fontWeight: FontWeight.w400, + MouseRegion( + cursor: SystemMouseCursors.click, + child: GestureDetector( + onTap: () { + handleToggleUserStatus( + user['user_id'], + user['is_active'], + user, + ); + }, + child: Text( + user['is_active'] == "1" + ? "Active" + : "Inactive", + style: TextStyle( + color: + user['is_active'] == "1" + ? Colors.green + : Colors.grey, + fontFamily: "Inter", + fontWeight: FontWeight.w400, + ), ), ), ), @@ -1146,37 +1155,36 @@ class _UserListScreenState extends State { // ) // : buildMobileCardView(paginatedUser), // ), - Expanded( child: - isDesktop - ? (searchController.text.isNotEmpty && - filteredUsers.isEmpty - ? Center( - child: Text( - "No users found", - style: GoogleFonts.poppins( - fontSize: 14, - color: Colors.grey, - ), - ), - ) - : SingleChildScrollView( - scrollDirection: Axis.vertical, - child: table, - )) - : (searchController.text.isNotEmpty && - filteredUsers.isEmpty - ? Center( - child: Text( - "No users found", - style: GoogleFonts.poppins( - fontSize: 14, - color: Colors.grey, - ), - ), - ) - : buildMobileCardView(paginatedUser)), + isDesktop + ? (searchController.text.isNotEmpty && + filteredUsers.isEmpty + ? Center( + child: Text( + "No users found", + style: GoogleFonts.poppins( + fontSize: 14, + color: Colors.grey, + ), + ), + ) + : SingleChildScrollView( + scrollDirection: Axis.vertical, + child: table, + )) + : (searchController.text.isNotEmpty && + filteredUsers.isEmpty + ? Center( + child: Text( + "No users found", + style: GoogleFonts.poppins( + fontSize: 14, + color: Colors.grey, + ), + ), + ) + : buildMobileCardView(paginatedUser)), // child: isDesktop // ? SingleChildScrollView( // scrollDirection: Axis.vertical, diff --git a/lib/data/models/plan.dart b/lib/data/models/plan.dart index be2f706..ce2cdec 100644 --- a/lib/data/models/plan.dart +++ b/lib/data/models/plan.dart @@ -44,24 +44,32 @@ class Plan { factory Plan.fromJson(Map json) { print('Parsing Plan from JSON: $json'); return Plan( - planId: json['plan_id'], - employeeCode: json['employee_code'], - tripTitle: json['trip_title'], - tripType: json['trip_type_value'], - approver_status: json['approver_status'], + planId: json['plan_id']!.toString(), + employeeCode: json['employee_code']!.toString(), + tripTitle: json['trip_title']!.toString(), + tripType: json['trip_type_value']!.toString(), + approver_status: + json["approver_status"] == null + ? '' + : json['approver_status']!.toString(), status: json['status'] == "0" ? "Inactive" : "Active", - costCenter: json['cost_center_value'] ?? '', - functionalDepartment: json['functional_department_value'] ?? '', - purposeOfTravel: json['purpose_of_travel_value'] ?? '', - soNumber: json['so_number'] ?? '', - description: json['description'] ?? '', - isBillable: json['is_billable_value'] ?? '', - userName: json["user_name"] ?? '', - travellerName: json["traveller_name"] ?? '', - statusValue: json["status_value"] ?? '', - createdOn: json["created_on"] ?? '', - approverId: json['approver_id'], - delegaterId: json['delegater_id'], + costCenter: json['cost_center_value']!.toString(), + functionalDepartment: json['functional_department_value']!.toString(), + purposeOfTravel: json['purpose_of_travel_value']!.toString(), + soNumber: json['so_number']!.toString(), + description: json['description']!.toString(), + isBillable: json['is_billable_value']!.toString(), + userName: json["user_name"]!.toString(), + travellerName: + json["traveller_name"] == null + ? '' + : json["traveller_name"]!.toString(), + statusValue: json["status_value"]!.toString(), + createdOn: json["created_on"], + approverId: + json["approver_id"] == null ? '' : json['approver_id']!.toString(), + delegaterId: + json["delegater_id"] == null ? '' : json['delegater_id']!.toString(), ); } } diff --git a/lib/services/apiService.dart b/lib/services/apiService.dart index dca8153..f74b9c7 100644 --- a/lib/services/apiService.dart +++ b/lib/services/apiService.dart @@ -618,8 +618,8 @@ class ApiService { BuildContext context, String planId, String? approverId, - String? approver_status, - String? delegaterId, { + String? delegaterId, + String? approver_status, { bool isViewMode = false, bool isApprover = true, }) async { diff --git a/pubspec.yaml b/pubspec.yaml index 58aee17..a8f42c4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -101,6 +101,8 @@ flutter: - assets/images/login/microsoft.png - assets/images/IconsImg/path.png - assets/images/IconsImg/alternate.png + - assets/images/IconsImg/ViceVersaArrow.png + - assets/images/IconsImg/Frame.png - assets/images/IconsImg/delete.png - assets/images/IconsImg/edit.png - assets/images/IconsImg/planPdf_icon.png