From 057da000785ba90669f70528fc9cf2a783a44b26 Mon Sep 17 00:00:00 2001 From: venbaittech Date: Thu, 29 May 2025 20:00:56 +0530 Subject: [PATCH] Travel Policy --- lib/Screens/myTemplates/templateTest.dart | 36 +++++++++++++ lib/Screens/policy/policy.dart | 10 +++- lib/Screens/policy/policyCriteria.dart | 61 ++++++++++++++++++++--- pubspec.lock | 50 +++++++++---------- 4 files changed, 125 insertions(+), 32 deletions(-) create mode 100644 lib/Screens/myTemplates/templateTest.dart diff --git a/lib/Screens/myTemplates/templateTest.dart b/lib/Screens/myTemplates/templateTest.dart new file mode 100644 index 0000000..baaad4a --- /dev/null +++ b/lib/Screens/myTemplates/templateTest.dart @@ -0,0 +1,36 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_quill/flutter_quill.dart'; + +class MyHomePage extends StatefulWidget { + const MyHomePage({Key? key, required String title}) : super(key: key); + + @override + MyHomePageState createState() => MyHomePageState(); +} + +class MyHomePageState extends State { + QuillController _controller = QuillController.basic(); + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.all(20), + child: Column( + children: [ + Text("data"), + QuillSimpleToolbar( + controller: _controller, + config: const QuillSimpleToolbarConfig(), + ), + Expanded( + child: QuillEditor.basic( + controller: _controller, + config: const QuillEditorConfig(), + ), + ), + ], + ), + ); + } +} diff --git a/lib/Screens/policy/policy.dart b/lib/Screens/policy/policy.dart index 844ca65..90b531a 100644 --- a/lib/Screens/policy/policy.dart +++ b/lib/Screens/policy/policy.dart @@ -311,7 +311,7 @@ class _PolicyState extends State { print("Services - $services"); print("USR Detail Submit - $policyData"); - policyCriteriaKey.currentState?.saveCurrentPolicy(); + policyCriteriaKey.currentState?.saveCurrentPolicy(services); // Now the full data is ready in policyDataFromChild print("Submitting full policyData: $policyData"); @@ -1006,6 +1006,7 @@ class _PolicyState extends State { children: services.asMap().entries.map((entry) { int index = entry.key + 1; String service = entry.value; + String serviceId = index.toString(); bool isSelected = selectedServiceIndex.value == index.toString(); return SizedBox( @@ -1022,11 +1023,18 @@ class _PolicyState extends State { selectedServiceIndex.value = index.toString(); selectedService = service; + print( + " selectedServiceIndex.value - ${selectedServiceIndex.value}"); + + // policyCriteriaKey.currentState?.fieldForPolicy(); + // policyCriteriaKey.currentState + // ?.addOrUpdatePolicy(selectedServiceIndex.value); if (selectedService == "Flight" || selectedService == "Train") { showClass = true; showCost = true; int serviceCode = selectedService == "Flight" ? 1 : 2; + policyCriteriaKey.currentState?.fetchTrainFlightClass(); } else if (selectedService == "Accommodation") { showClass = true; diff --git a/lib/Screens/policy/policyCriteria.dart b/lib/Screens/policy/policyCriteria.dart index eb81378..3cec293 100644 --- a/lib/Screens/policy/policyCriteria.dart +++ b/lib/Screens/policy/policyCriteria.dart @@ -87,6 +87,7 @@ class PolicyCriteriaState extends State { void initState() { super.initState(); fieldForPolicy(); + widget.selectedTabNotifier.addListener(() { print("selectedTab changed: ${widget.selectedTabNotifier.value}"); fieldForPolicy(); @@ -99,11 +100,57 @@ class PolicyCriteriaState extends State { userId = await getUserId(); } - void saveCurrentPolicy() { + // void saveCurrentPolicy(List> services) { + // print("saveCurrentPolicy- $services"); + // if (ServiceId != null) { + // print("Saving curremt Add or Update"); + // addOrUpdatePolicy(ServiceId!); + // } + // } + + void saveCurrentPolicy(List> services) { + print("saveCurrentPolicy- $services"); + + // Step 1: Save currently selected policy first (if not already saved) if (ServiceId != null) { - print("Saving curremt Add or Update"); + print("Saving current Add or Update"); addOrUpdatePolicy(ServiceId!); } + + // Step 2: Collect existing service_ids from policyData + final existingServiceIds = + policyData?.map((e) => e['service_id'].toString()).toSet(); + + // Step 3: Loop through all service definitions + for (var service in services) { + String id = service['service_id'].toString(); + + // Skip if already present + if (existingServiceIds!.contains(id)) continue; + + // Step 4: Initialize any missing controllers or data + costController.putIfAbsent(id, () => TextEditingController()); + classAction.putIfAbsent(id, () => "1"); + FirstApproverAction.putIfAbsent(id, () => "None"); + SecondApproverAction.putIfAbsent(id, () => "None"); + ThirdApproverAction.putIfAbsent(id, () => "None"); + SelectedParallelProcess.putIfAbsent(id, () => "3"); + + // Step 5: Add default policy entry + policyData?.add({ + "service_id": int.parse(id), + "cost": "", + "class": classAction[id], + "a1_action": FirstApproverAction[id], + "a2_action": SecondApproverAction[id], + "a3_action": ThirdApproverAction[id], + "parallel_process_from": SelectedParallelProcess[id], + "created_by": widget.userId, + }); + } + + // Step 6: Emit updated policy data + widget.onPolicyDataChanged(policyData); } // To set the data (update) @@ -148,6 +195,7 @@ class PolicyCriteriaState extends State { } void addOrUpdatePolicy(String serviceId) { + print("addOrUpdatePolicyserviceId - $serviceId"); // 1. First, find existing item if any final existingIndex = policyData!.indexWhere((item) => item["service_id"] == serviceId); @@ -297,6 +345,7 @@ class PolicyCriteriaState extends State { // Save current input to policyData before switching if (ServiceId != null) { + print("Calling addOrUpdatePolicy"); addOrUpdatePolicy( ServiceId!); // 👈 Save current values for existing service } @@ -304,12 +353,12 @@ class PolicyCriteriaState extends State { ServiceId = widget.selectedTabNotifier.value ?? "1"; // Initialize controllers and variables if not present costController.putIfAbsent(ServiceId!, () => TextEditingController()); - classAction.putIfAbsent(ServiceId!, () => null); + classAction.putIfAbsent(ServiceId!, () => "1"); // classController.putIfAbsent(ServiceId!, () => TextEditingController()); - FirstApproverAction.putIfAbsent(ServiceId!, () => null); - SecondApproverAction.putIfAbsent(ServiceId!, () => null); - ThirdApproverAction.putIfAbsent(ServiceId!, () => null); + FirstApproverAction.putIfAbsent(ServiceId!, () => "None"); + SecondApproverAction.putIfAbsent(ServiceId!, () => "None"); + ThirdApproverAction.putIfAbsent(ServiceId!, () => "None"); SelectedParallelProcess.putIfAbsent(ServiceId!, () => "3"); }); diff --git a/pubspec.lock b/pubspec.lock index 4e5e26c..9ab84f6 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: archive - sha256: "0c64e928dcbefddecd234205422bcfc2b5e6d31be0b86fef0d0dd48d7b4c9742" + sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "4.0.7" args: dependency: transitive description: @@ -149,10 +149,10 @@ packages: dependency: transitive description: name: ffi - sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" + sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" file: dependency: transitive description: @@ -165,10 +165,10 @@ packages: dependency: "direct main" description: name: file_picker - sha256: "36a1652d99cb6bf8ccc8b9f43aded1fd60b234d23ce78af422c07f950a436ef7" + sha256: "77f8e81d22d2a07d0dee2c62e1dda71dc1da73bf43bb2d45af09727406167964" url: "https://pub.dev" source: hosted - version: "10.0.0" + version: "10.1.9" file_selector_linux: dependency: transitive description: @@ -181,10 +181,10 @@ packages: dependency: transitive description: name: file_selector_macos - sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" + sha256: "8c9250b2bd2d8d4268e39c82543bacbaca0fda7d29e0728c3c4bbb7c820fd711" url: "https://pub.dev" source: hosted - version: "0.9.4+2" + version: "0.9.4+3" file_selector_platform_interface: dependency: transitive description: @@ -279,10 +279,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "5a1e6fb2c0561958d7e4c33574674bda7b77caaca7a33b758876956f2902eea3" + sha256: f948e346c12f8d5480d2825e03de228d0eb8c3a737e4cdaa122267b89c022b5e url: "https://pub.dev" source: hosted - version: "2.0.27" + version: "2.0.28" flutter_quill: dependency: "direct main" description: @@ -353,10 +353,10 @@ packages: dependency: "direct main" description: name: http - sha256: fe7ab022b76f3034adc518fb6ea04a82387620e19977665ea18d30a1cf43442f + sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" http_parser: dependency: "direct main" description: @@ -377,10 +377,10 @@ packages: dependency: transitive description: name: image_picker_android - sha256: "8bd392ba8b0c8957a157ae0dc9fcf48c58e6c20908d5880aea1d79734df090e9" + sha256: "317a5d961cec5b34e777b9252393f2afbd23084aa6e60fcf601dcf6341b9ebeb" url: "https://pub.dev" source: hosted - version: "0.8.12+22" + version: "0.8.12+23" image_picker_for_web: dependency: transitive description: @@ -617,18 +617,18 @@ packages: dependency: transitive description: name: posix - sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a + sha256: f0d7856b6ca1887cfa6d1d394056a296ae33489db914e365e2044fdada449e62 url: "https://pub.dev" source: hosted - version: "6.0.1" + version: "6.0.2" provider: dependency: transitive description: name: provider - sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c + sha256: "4abbd070a04e9ddc287673bf5a030c7ca8b685ff70218720abab8b092f53dd84" url: "https://pub.dev" source: hosted - version: "6.1.2" + version: "6.1.5" quill_native_bridge: dependency: transitive description: @@ -729,10 +729,10 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: "3ec7210872c4ba945e3244982918e502fa2bfb5230dff6832459ca0e1879b7ad" + sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac" url: "https://pub.dev" source: hosted - version: "2.4.8" + version: "2.4.10" shared_preferences_foundation: dependency: transitive description: @@ -942,10 +942,10 @@ packages: dependency: transitive description: name: video_player_android - sha256: "28dcc4122079f40f93a0965b3679aff1a5f4251cf79611bd8011f937eb6b69de" + sha256: "4a5135754a62dbc827a64a42ef1f8ed72c962e191c97e2d48744225c2b9ebb73" url: "https://pub.dev" source: hosted - version: "2.8.4" + version: "2.8.7" video_player_avfoundation: dependency: transitive description: @@ -990,10 +990,10 @@ packages: dependency: transitive description: name: win32 - sha256: dc6ecaa00a7c708e5b4d10ee7bec8c270e9276dfcab1783f57e9962d7884305f + sha256: "329edf97fdd893e0f1e3b9e88d6a0e627128cc17cc316a8d67fda8f1451178ba" url: "https://pub.dev" source: hosted - version: "5.12.0" + version: "5.13.0" xdg_directories: dependency: transitive description: @@ -1004,4 +1004,4 @@ packages: version: "1.1.0" sdks: dart: ">=3.7.0 <4.0.0" - flutter: ">=3.27.0" + flutter: ">=3.29.0"