From 4887c699509c11a12e488324373cd0193fdb7f08 Mon Sep 17 00:00:00 2001 From: venbaittech Date: Mon, 9 Jun 2025 18:43:20 +0530 Subject: [PATCH] ItineratRefresh --- lib/Screens/allTrips/list_all_plans.dart | 2 +- lib/Screens/approvals/approval_list.dart | 4 +- lib/Screens/itnerary/accomodations.dart | 2 + lib/Screens/itnerary/bus.dart | 9 ++- lib/Screens/itnerary/flights.dart | 1 + lib/Screens/itnerary/forex.dart | 2 + lib/Screens/itnerary/insurance.dart | 59 +++++++++++++++---- lib/Screens/itnerary/taxi.dart | 1 + lib/Screens/itnerary/train.dart | 12 +++- lib/Screens/itnerary/visa.dart | 1 + .../plans/dynamic_itinerary_stepper.dart | 15 +++++ lib/Screens/plans/list_plans.dart | 4 +- .../create_user/office_details.dart | 2 + .../create_user/personal_details.dart | 5 +- .../create_user/traveller_details.dart | 17 +++--- lib/app.dart | 4 +- 16 files changed, 107 insertions(+), 33 deletions(-) diff --git a/lib/Screens/allTrips/list_all_plans.dart b/lib/Screens/allTrips/list_all_plans.dart index 536b13f..87b6d1a 100644 --- a/lib/Screens/allTrips/list_all_plans.dart +++ b/lib/Screens/allTrips/list_all_plans.dart @@ -913,7 +913,7 @@ class _ListAllPlansState extends State { size: 18, ), tooltip: - 'Download The Trip Details', + 'Download The PDF', onPressed: () { Navigator.pop( context, diff --git a/lib/Screens/approvals/approval_list.dart b/lib/Screens/approvals/approval_list.dart index 0c464b4..43c9e15 100644 --- a/lib/Screens/approvals/approval_list.dart +++ b/lib/Screens/approvals/approval_list.dart @@ -931,7 +931,7 @@ class _ApprovalListState extends State { size: 18, ), tooltip: - 'Download The Trip Details', + 'Download The PDF', onPressed: () { Navigator.pop( context, @@ -1170,7 +1170,7 @@ class _ApprovalListState extends State { size: 18, ), tooltip: - 'Download The Trip Details', + 'Download The PDF', onPressed: () { Navigator.pop(context); apiService diff --git a/lib/Screens/itnerary/accomodations.dart b/lib/Screens/itnerary/accomodations.dart index 0149c0a..47c12ce 100644 --- a/lib/Screens/itnerary/accomodations.dart +++ b/lib/Screens/itnerary/accomodations.dart @@ -559,6 +559,7 @@ class _AccomodationScreenState extends State { initialDate: initialDate, firstDate: initialDate, lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); // DateTime? pickedDate = await showDatePicker( @@ -703,6 +704,7 @@ class _AccomodationScreenState extends State { initialDate: initialDate, firstDate: firstDate, lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); if (pickedDate != null && pickedDate != _selectedCheckOutDate) { diff --git a/lib/Screens/itnerary/bus.dart b/lib/Screens/itnerary/bus.dart index d0f30e7..241c925 100644 --- a/lib/Screens/itnerary/bus.dart +++ b/lib/Screens/itnerary/bus.dart @@ -376,6 +376,7 @@ class _BusScreenState extends State { : today, firstDate: today, lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); if (pickedDate != null && pickedDate != _selectedCheckOutDate) { @@ -418,8 +419,6 @@ class _BusScreenState extends State { if (isToday && isPastTime) { setState(() { errorMessages["time"] = "You can't select a past time."; - _selectedCheckOutTime = null; // ✅ Reset time variable - _timeController.text = ""; // ✅ Clear text field }); return; } else { @@ -585,7 +584,11 @@ class _BusScreenState extends State { child: SizedBox( height: 40, child: GestureDetector( - onTap: () => _selectCheckOutTime(context), + onTap: () { + // _selectedCheckOutTime = null; // ✅ Reset time variable + _timeController.text = ""; // ✅ Clear text field + _selectCheckOutTime(context); + }, child: AbsorbPointer( child: TextField( focusNode: _timeFocusNode, diff --git a/lib/Screens/itnerary/flights.dart b/lib/Screens/itnerary/flights.dart index f7c3407..a369c55 100644 --- a/lib/Screens/itnerary/flights.dart +++ b/lib/Screens/itnerary/flights.dart @@ -1208,6 +1208,7 @@ class FlightScreenState extends State { initialDate: initialDate, firstDate: firstDate, lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); if (pickedDate != null && pickedDate != _selectedCheckOutDate) { diff --git a/lib/Screens/itnerary/forex.dart b/lib/Screens/itnerary/forex.dart index 5c2c070..1994b19 100644 --- a/lib/Screens/itnerary/forex.dart +++ b/lib/Screens/itnerary/forex.dart @@ -819,6 +819,7 @@ class _ForexScreenState extends State { initialDate: initialDate, firstDate: initialDate, lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); // DateTime? pickedDate = await showDatePicker( @@ -870,6 +871,7 @@ class _ForexScreenState extends State { initialDate: initialDate, firstDate: initialDate, lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); // DateTime? pickedDate = await showDatePicker( diff --git a/lib/Screens/itnerary/insurance.dart b/lib/Screens/itnerary/insurance.dart index b5e50e1..6486cbc 100644 --- a/lib/Screens/itnerary/insurance.dart +++ b/lib/Screens/itnerary/insurance.dart @@ -576,6 +576,7 @@ class _InsuranceScreenState extends State { initialDate: initialDate, firstDate: initialDate, lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); // DateTime? pickedDate = await showDatePicker( @@ -602,12 +603,12 @@ class _InsuranceScreenState extends State { DateTime now = DateTime.now(); DateTime today = DateTime(now.year, now.month, now.day); - DateTime? checkInDate; - try { - checkInDate = DateTime.parse(_startdateController.text); - } catch (e) { - checkInDate = today; - } + // DateTime? checkInDate; + // try { + // checkInDate = DateTime.parse(_startdateController.text); + // } catch (e) { + // checkInDate = today; + // } // // Ensure at least today is used // DateTime firstDate = checkInDate.isAfter(today) ? checkInDate : today; @@ -616,20 +617,52 @@ class _InsuranceScreenState extends State { // ? _selectedCheckOutDate! // : firstDate; - DateTime firstDate = checkInDate; - DateTime initialDate = - _selectedCheckOutDate != null && - _selectedCheckOutDate!.isAfter(firstDate) - ? _selectedCheckOutDate! - : firstDate; + // DateTime firstDate = checkInDate; + // DateTime initialDate = + // _selectedCheckOutDate != null && + // _selectedCheckOutDate!.isAfter(firstDate) + // ? _selectedCheckOutDate! + // : firstDate; + DateTime? validFromDate; + + try { + String fromDateText = _startdateController.text.trim(); + print("Valid From Text: $fromDateText"); + if (fromDateText.isNotEmpty) { + validFromDate = DateFormat('dd-MM-yyyy').parseStrict(fromDateText); + print("Parsed Valid From: $validFromDate"); + } + } catch (e) { + print("Error parsing valid from date: $e"); + } + + // Use max(today, validFromDate) as firstDate + // DateTime firstDate = today; + DateTime firstDate = validFromDate ?? today; + if (validFromDate != null && validFromDate.isAfter(today)) { + firstDate = validFromDate; + } final pickedDate = await showDatePicker( context: context, - initialDate: initialDate, + // initialDate: initialDate, + // firstDate: initialDate, + // firstDate: DateTime(1900), + initialDate: firstDate, firstDate: firstDate, lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); + // final pickedDate = await showDatePicker( + // context: context, + // // initialDate: initialDate, + // initialDate: initialDate, + // firstDate: initialDate, + // lastDate: DateTime(2100), + // initialEntryMode: DatePickerEntryMode.calendarOnly, + // ); + // DateTime? pickedDate = await showDatePicker( // context: context, // initialDate: _selectedCheckOutDate != null && diff --git a/lib/Screens/itnerary/taxi.dart b/lib/Screens/itnerary/taxi.dart index ecf7116..116c2f9 100644 --- a/lib/Screens/itnerary/taxi.dart +++ b/lib/Screens/itnerary/taxi.dart @@ -484,6 +484,7 @@ class _TaxiScreenState extends State { : today, firstDate: today, lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); if (pickedDate != null && pickedDate != _selectedCheckOutDate) { diff --git a/lib/Screens/itnerary/train.dart b/lib/Screens/itnerary/train.dart index 72e4a08..8dfc0aa 100644 --- a/lib/Screens/itnerary/train.dart +++ b/lib/Screens/itnerary/train.dart @@ -243,6 +243,12 @@ class _TrainScreenState extends State { } } + if (selectedFrom == selectedTo) { + errorMessages["to_station"] = "Change Destination"; + } + + print("Error: to_place -> Change Destination (selectedFrom == selectedTo)"); + return errorMessages.isEmpty; // Valid if there are no errors } @@ -464,6 +470,7 @@ class _TrainScreenState extends State { : today, firstDate: today, lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); if (pickedDate != null && pickedDate != _selectedCheckOutDate) { @@ -801,7 +808,10 @@ class _TrainScreenState extends State { ), if (errorMessages["to_station"] != null) ...[ SizedBox(height: 5), // Space before error message - Text("Required", style: TextStyle(color: Colors.red, fontSize: 12)), + Text( + errorMessages["to_station"]!, + style: TextStyle(color: Colors.red, fontSize: 12), + ), ], ], ), diff --git a/lib/Screens/itnerary/visa.dart b/lib/Screens/itnerary/visa.dart index 2e8f2da..b560007 100644 --- a/lib/Screens/itnerary/visa.dart +++ b/lib/Screens/itnerary/visa.dart @@ -394,6 +394,7 @@ class _VisaScreenState extends State { initialDate: initialDate, firstDate: initialDate, lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); // DateTime? pickedDate = await showDatePicker( diff --git a/lib/Screens/plans/dynamic_itinerary_stepper.dart b/lib/Screens/plans/dynamic_itinerary_stepper.dart index be930a6..3b73751 100644 --- a/lib/Screens/plans/dynamic_itinerary_stepper.dart +++ b/lib/Screens/plans/dynamic_itinerary_stepper.dart @@ -107,6 +107,7 @@ class DynamicItineraryState extends State { // selectedIndex = null; // selectedItem = null; // }); + updateTripType(widget.tripType); } } @@ -166,6 +167,20 @@ class DynamicItineraryState extends State { } List getAllowedServiceNames() { + print( + "DID Updatee changee - $selectedOption $selectedListOption $isSelected $selectedItem $selectedIndex", + ); + setState(() { + selectedOption = ""; + selectedListOption = ""; + isSelected = false; + selectedIndex = null; + selectedItem = null; + }); + print( + "DID Updatee changee - $selectedOption $isSelected $selectedItem $selectedIndex", + ); + if (widget.tripType == "1") { return ["flight", "accomodation", "train", "bus", "taxi"]; } else if (widget.tripType == "2") { diff --git a/lib/Screens/plans/list_plans.dart b/lib/Screens/plans/list_plans.dart index 1ffebbf..5880d34 100644 --- a/lib/Screens/plans/list_plans.dart +++ b/lib/Screens/plans/list_plans.dart @@ -1009,7 +1009,7 @@ class _ListPlansState extends State { size: 18, ), tooltip: - 'Download The Trip Comments', + 'Download The PDF', onPressed: () { Navigator.pop( context, @@ -1256,7 +1256,7 @@ class _ListPlansState extends State { size: 18, ), tooltip: - 'Download The Trip Comments', + 'Download The PDF', onPressed: () { Navigator.pop(context); apiService diff --git a/lib/Screens/userManagement/create_user/office_details.dart b/lib/Screens/userManagement/create_user/office_details.dart index ac72ac4..cd69508 100644 --- a/lib/Screens/userManagement/create_user/office_details.dart +++ b/lib/Screens/userManagement/create_user/office_details.dart @@ -1342,6 +1342,7 @@ class _OfficeDetailsState extends State { : today, firstDate: today, lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); if (pickedDate != null && pickedDate != _selectedCheckOutDate) { @@ -1450,6 +1451,7 @@ class _OfficeDetailsState extends State { : minDate, firstDate: minDate, lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); if (pickedDate != null && pickedDate != _selectedEndDate) { diff --git a/lib/Screens/userManagement/create_user/personal_details.dart b/lib/Screens/userManagement/create_user/personal_details.dart index e4ae82b..81f6c01 100644 --- a/lib/Screens/userManagement/create_user/personal_details.dart +++ b/lib/Screens/userManagement/create_user/personal_details.dart @@ -639,7 +639,9 @@ class PersonalDetailsState extends State { children: [ if (!widget.apiselectedUser) ...[ buildPassword(), - SizedBox(width: MediaQuery.of(context).size.width*0.015), + SizedBox( + width: MediaQuery.of(context).size.width * 0.015, + ), buildRole(), ] else ...[ // TextButton( @@ -1046,6 +1048,7 @@ class PersonalDetailsState extends State { : today, firstDate: DateTime(1900), lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); if (pickedDate != null && pickedDate != _selectedDateOfBirth) { diff --git a/lib/Screens/userManagement/create_user/traveller_details.dart b/lib/Screens/userManagement/create_user/traveller_details.dart index a52d0c5..7aa96bc 100644 --- a/lib/Screens/userManagement/create_user/traveller_details.dart +++ b/lib/Screens/userManagement/create_user/traveller_details.dart @@ -163,8 +163,7 @@ class TravellerDetailsState extends State { if (!isValid) { setState(() { - errorMessages["passport_number"] = - "Enter 8 characters"; + errorMessages["passport_number"] = "Enter 8 characters"; }); return false; } else { @@ -177,8 +176,6 @@ class TravellerDetailsState extends State { return true; } - - Future apiCheckDuplicate( String label, String field, @@ -1370,6 +1367,7 @@ class TravellerDetailsState extends State { // firstDate: today, firstDate: DateTime(1900), lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); if (pickedDate != null && pickedDate != _selectedDateOfIssue) { @@ -1480,16 +1478,17 @@ class TravellerDetailsState extends State { DateTime? pickedDate = await showDatePicker( context: context, + // initialDate: // _selectedDateOfExpiry != null && // _selectedDateOfExpiry!.isAfter(firstDate) // ? _selectedDateOfExpiry! // : today, - - initialDate:firstDate, + initialDate: firstDate, firstDate: firstDate, // firstDate: DateTime(1900), lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); if (pickedDate != null) { @@ -2060,7 +2059,7 @@ class TravellerDetailsState extends State { vertical: 8, ), child: Text( - item['dropdown_value'] ?? "Select Seat", + item['dropdown_value'] ?? "Select Seat", style: GoogleFonts.poppins( fontSize: 12, color: Colors.black, @@ -2602,6 +2601,7 @@ class TravellerDetailsState extends State { : today, firstDate: DateTime(1900), lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); if (pickedDate != null && pickedDate != _selectedExpiryDate) { @@ -3790,6 +3790,7 @@ class TravellerDetailsState extends State { // firstDate: initialDate, firstDate: DateTime(1900), lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); if (pickedDate != null && pickedDate != _selectedCheckOutDate) { @@ -3866,7 +3867,6 @@ class TravellerDetailsState extends State { print("buildVisaValidUpTo "); print("buildVisaValidUpTo - ${entry["controller_valid_from"].text}"); - // Parse date from notifier if available, else use today DateTime initialDate = today; @@ -3903,6 +3903,7 @@ class TravellerDetailsState extends State { initialDate: firstDate, firstDate: firstDate, lastDate: DateTime(2100), + initialEntryMode: DatePickerEntryMode.calendarOnly, ); if (pickedDate != null && pickedDate != _selectedCheckOutDate) { diff --git a/lib/app.dart b/lib/app.dart index ff0f116..988c9f1 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -2,7 +2,7 @@ import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -// import 'package:flutter/rendering.dart'; +import 'package:flutter/rendering.dart'; import 'dart:html' as html; import 'package:frontend/config/apiUrl.dart'; // 1 newly added import 'package:frontend/services/apiService.dart'; @@ -31,7 +31,7 @@ class _MyAppState extends State { @override void initState() { super.initState(); - // SemanticsBinding.instance.ensureSemantics(); // ✅ Safe here + SemanticsBinding.instance.ensureSemantics(); // ✅ Safe here if (kIsWeb) { final uri = Uri.parse(html.window.location.href); if (uri.path == '/authredirection' &&