diff --git a/.dart_tool/package_config_subset b/.dart_tool/package_config_subset index 3a19efa..60f3ef6 100644 --- a/.dart_tool/package_config_subset +++ b/.dart_tool/package_config_subset @@ -214,24 +214,24 @@ xdg_directories 3.3 file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/xdg_directories-1.1.0/ file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/xdg_directories-1.1.0/lib/ -shayog -3.6 -file:///C:/Users/Admin/Downloads/shayog/ -file:///C:/Users/Admin/Downloads/shayog/lib/ sky_engine 3.2 -file:///C:/src/flutter/flutter/bin/cache/pkg/sky_engine/ -file:///C:/src/flutter/flutter/bin/cache/pkg/sky_engine/lib/ +file:///C:/Users/Admin/Downloads/flutter_windows_3.27.1-stable/flutter/bin/cache/pkg/sky_engine/ +file:///C:/Users/Admin/Downloads/flutter_windows_3.27.1-stable/flutter/bin/cache/pkg/sky_engine/lib/ flutter 3.3 -file:///C:/src/flutter/flutter/packages/flutter/ -file:///C:/src/flutter/flutter/packages/flutter/lib/ +file:///C:/Users/Admin/Downloads/flutter_windows_3.27.1-stable/flutter/packages/flutter/ +file:///C:/Users/Admin/Downloads/flutter_windows_3.27.1-stable/flutter/packages/flutter/lib/ flutter_test 3.3 -file:///C:/src/flutter/flutter/packages/flutter_test/ -file:///C:/src/flutter/flutter/packages/flutter_test/lib/ +file:///C:/Users/Admin/Downloads/flutter_windows_3.27.1-stable/flutter/packages/flutter_test/ +file:///C:/Users/Admin/Downloads/flutter_windows_3.27.1-stable/flutter/packages/flutter_test/lib/ flutter_web_plugins 3.2 -file:///C:/src/flutter/flutter/packages/flutter_web_plugins/ -file:///C:/src/flutter/flutter/packages/flutter_web_plugins/lib/ +file:///C:/Users/Admin/Downloads/flutter_windows_3.27.1-stable/flutter/packages/flutter_web_plugins/ +file:///C:/Users/Admin/Downloads/flutter_windows_3.27.1-stable/flutter/packages/flutter_web_plugins/lib/ +shayog +3.6 +file:///C:/Users/Admin/Downloads/shayog%205/shayog/ +file:///C:/Users/Admin/Downloads/shayog%205/shayog/lib/ 2 diff --git a/.dart_tool/version b/.dart_tool/version index e25f6e7..b8b1d81 100644 --- a/.dart_tool/version +++ b/.dart_tool/version @@ -1 +1 @@ -3.27.3 \ No newline at end of file +3.27.1 \ No newline at end of file diff --git a/android/local.properties b/android/local.properties index 5fbcdd2..bda1772 100644 --- a/android/local.properties +++ b/android/local.properties @@ -1,5 +1,5 @@ -sdk.dir=C:\\Users\\Admin\\AppData\\Local\\Android\\sdk -flutter.sdk=C:\\src\\flutter\\flutter +sdk.dir=C:\\Users\\Admin\\.jdks\\openjdk-23.0.1 +flutter.sdk=C:\\Users\\Admin\\Downloads\\flutter_windows_3.27.1-stable\\flutter flutter.buildMode=release flutter.versionName=1.0.0 flutter.versionCode=1 \ No newline at end of file diff --git a/ios/Flutter/Generated.xcconfig b/ios/Flutter/Generated.xcconfig index fef6e64..0785e21 100644 --- a/ios/Flutter/Generated.xcconfig +++ b/ios/Flutter/Generated.xcconfig @@ -1,6 +1,6 @@ // This is a generated file; do not edit or check into version control. -FLUTTER_ROOT=C:\src\flutter\flutter -FLUTTER_APPLICATION_PATH=C:\Users\Admin\Downloads\shayog +FLUTTER_ROOT=C:\Users\Admin\Downloads\flutter_windows_3.27.1-stable\flutter +FLUTTER_APPLICATION_PATH=C:\Users\Admin\Downloads\shayog 5\shayog COCOAPODS_PARALLEL_CODE_SIGN=true FLUTTER_TARGET=lib\main.dart FLUTTER_BUILD_DIR=build diff --git a/ios/Flutter/flutter_export_environment.sh b/ios/Flutter/flutter_export_environment.sh index a5055b5..4a02634 100644 --- a/ios/Flutter/flutter_export_environment.sh +++ b/ios/Flutter/flutter_export_environment.sh @@ -1,7 +1,7 @@ #!/bin/sh # This is a generated file; do not edit or check into version control. -export "FLUTTER_ROOT=C:\src\flutter\flutter" -export "FLUTTER_APPLICATION_PATH=C:\Users\Admin\Downloads\shayog" +export "FLUTTER_ROOT=C:\Users\Admin\Downloads\flutter_windows_3.27.1-stable\flutter" +export "FLUTTER_APPLICATION_PATH=C:\Users\Admin\Downloads\shayog 5\shayog" export "COCOAPODS_PARALLEL_CODE_SIGN=true" export "FLUTTER_TARGET=lib\main.dart" export "FLUTTER_BUILD_DIR=build" diff --git a/lib/components/common/custom_drop_down.dart b/lib/components/common/custom_drop_down.dart index eadff8e..e90345a 100644 --- a/lib/components/common/custom_drop_down.dart +++ b/lib/components/common/custom_drop_down.dart @@ -1,6 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:get/get.dart'; - import 'package:shayog/components/styles/app_colors.dart'; import 'package:shayog/components/styles/textStyles.dart'; @@ -8,7 +6,8 @@ class CustomDropdown extends StatefulWidget { final List items; final String Function(T) itemLabel; final Function(T?) onSelected; - final String hintText; + VoidCallback? onTap; + late final String hintText; final bool enableSearch; final double? width; final EdgeInsetsGeometry padding; @@ -18,8 +17,9 @@ class CustomDropdown extends StatefulWidget { final Color? borderClr; final Color? backClr; final String? Function(T?)? validator; + Widget? icon; - const CustomDropdown({ + CustomDropdown({ super.key, required this.items, required this.itemLabel, @@ -34,6 +34,8 @@ class CustomDropdown extends StatefulWidget { this.borderClr, this.backClr, this.validator, + this.onTap, + this.icon, }); @override @@ -77,8 +79,6 @@ class _CustomDropdownState extends State> { }); } - - void _selectItem(T item) { setState(() { selectedItem = item; @@ -98,7 +98,13 @@ class _CustomDropdownState extends State> { _openDropdown(); } } + void clearField() { + setState(() { + selectedItem = null; // Clear the selected item + }); + _openDropdown(); + } void _openDropdown() { setState(() { isSearching = false; @@ -198,6 +204,7 @@ class _CustomDropdownState extends State> { style: 11.txtSBoldGrey, ), ), + // onTap: widget.onTap, onTap: () => _selectItem(item), ); }, @@ -226,30 +233,9 @@ class _CustomDropdownState extends State> { overlayEntry!.markNeedsBuild(); } } - // String? validateAndGetErrorText() { - // setState(() { - // _errorText = widget.validator?.call(selectedItem); - // }); - // return _errorText; - // } - String? validateAndGetErrorText() { - setState(() { - _errorText = selectedItem == null ? "This field is required" : null; - }); - return _errorText; - } - void _onDropdownTap() { - if (selectedItem == null) { - setState(() { - _errorText = "Please select an item."; - }); - } else { - setState(() { - _errorText = null; - }); - } - _toggleDropdown(); - } + + + @override Widget build(BuildContext context) { return Column( @@ -258,7 +244,7 @@ class _CustomDropdownState extends State> { CompositedTransformTarget( link: layerLink, child: GestureDetector( - onTap: _toggleDropdown, + onTap: _toggleDropdown, child: Container( padding: EdgeInsets.symmetric( vertical: widget.isHeight ? 12 : 6.4, horizontal: 16), @@ -277,338 +263,38 @@ class _CustomDropdownState extends State> { Expanded( child: Text( widget.hintText, - // selectedItem != null - // ? widget.itemLabel(selectedItem as T) - // : widget.hintText, + + // selectedItem == null ? widget.hintText : widget.itemLabel(selectedItem as T), + + style: 11.txtSBoldGrey, overflow: TextOverflow.ellipsis, ), - // Text( - // selectedItem != null - // ? widget.itemLabel(selectedItem as T) - // : widget.hintText, - // style: 12.txtSBoldGrey, - // overflow: TextOverflow.ellipsis, - // ), + ), - const Icon( - Icons.keyboard_arrow_down_outlined, - size: 20, - color: Colors.black, - ), - ], - ), - ), - ), - ), - if (_errorText != null) - Padding( - padding: const EdgeInsets.only(top: 8.0), - child: Text( - _errorText!, - style: TextStyle( - color: Colors.red, - fontSize: 12, - ), - ), - ) - ], - ); - } -} - - -class CustomDrop extends StatefulWidget { - final List items; - final String Function(T) itemLabel; - final Function(T?) onSelected; - final RxString hintText; - final bool enableSearch; - final double? width; - final EdgeInsetsGeometry padding; - final T? initialValue; - final bool showError; - final bool isHeight; - final Color? borderClr; - final Color? backClr; - final String? Function(T?)? validator; - - const CustomDrop({ - super.key, - required this.items, - required this.itemLabel, - required this.onSelected, - required this.hintText, - this.enableSearch = true, - this.width, - this.padding = const EdgeInsets.all(8.0), - this.initialValue, - this.showError = false, - this.isHeight = false, - this.borderClr, - this.backClr, - this.validator, - }); - - @override - _CustomDropdownState createState() => _CustomDropdownState(); -} - -class _CustomDropState extends State> { - T? selectedItem; - String? _errorText; - List filteredItems = []; - late TextEditingController searchController; - OverlayEntry? overlayEntry; - final LayerLink layerLink = LayerLink(); - bool isDropdownOpen = false; - bool isSearching = false; - final dropdownKey = GlobalKey<_CustomDropdownState>(); - - @override - void initState() { - super.initState(); - searchController = TextEditingController(); - filteredItems = List.from(widget.items); - - if (widget.initialValue != null) { - selectedItem = widget.initialValue; - } - - searchController.addListener(() { - final text = searchController.text; - if (text.isEmpty) { - setState(() { - isSearching = false; - filteredItems = List.from(widget.items); - }); - } else { - setState(() { - isSearching = true; - _filterList(text); - }); - } - }); - } - - - - void _selectItem(T item) { - setState(() { - selectedItem = item; - isDropdownOpen = false; - _errorText = null; // Clear error when an item is selected - }); - searchController.clear(); - widget.onSelected(item); - _closeDropdown(); - filteredItems = List.from(widget.items); - } - - void _toggleDropdown() { - if (isDropdownOpen) { - _closeDropdown(); - } else { - _openDropdown(); - } - } - - void _openDropdown() { - setState(() { - isSearching = false; - filteredItems = List.from(widget.items); - searchController.clear(); - }); - - overlayEntry = _createOverlayEntry(); - Overlay.of(context).insert(overlayEntry!); - - setState(() { - isDropdownOpen = true; - }); - } - - void _closeDropdown() { - overlayEntry?.remove(); - overlayEntry = null; - setState(() { - isDropdownOpen = false; - }); - } - - OverlayEntry _createOverlayEntry() { - final RenderBox renderBox = context.findRenderObject() as RenderBox; - - return OverlayEntry( - builder: (context) { - return GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: _closeDropdown, - child: Stack( - children: [ - Positioned( - width: widget.width ?? 250, - child: CompositedTransformFollower( - link: layerLink, - showWhenUnlinked: false, - offset: Offset(0, renderBox.size.height + 5), - child: Material( - elevation: 4, - borderRadius: BorderRadius.circular(8), - child: Container( - padding: EdgeInsets.all(8.0), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(8), - border: Border.all( - color: Colors.grey, - width: 1, - ), - ), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - if (widget.enableSearch && widget.items.length > 1) - Padding( - padding: const EdgeInsets.only(bottom: 8.0), - child: SizedBox( - height: 32, - child: TextFormField( - // validator: widget.validator, - enabled: widget.enableSearch, - controller: searchController, - style: 12.txtSBoldGrey, - autovalidateMode: - AutovalidateMode.onUserInteraction, - decoration: InputDecoration( - hintText: 'Search...', - contentPadding: const EdgeInsets.symmetric( - vertical: 8.0, - horizontal: 12.0, - ), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - ), - ), - ), - ), - ), - Container( - constraints: BoxConstraints(maxHeight: 200), - child: ListView.builder( - shrinkWrap: true, - itemCount: filteredItems.length, - itemBuilder: (context, index) { - final item = filteredItems[index]; - return ListTile( - contentPadding: EdgeInsets.all(0), - minVerticalPadding: 0, - dense: true, - visualDensity: VisualDensity.compact, - title: Tooltip( - message: widget.itemLabel(item), - child: Text( - widget.itemLabel(item), - style: 11.txtSBoldGrey, - ), - ), - onTap: () => _selectItem(item), - ); - }, - ), + // selectedItem != null + // ? InkWell( + // onTap: (){ + // setState(() { + // + // selectedItem = null; + // + // }); + // + // _openDropdown(); + // }, + // + // child: + // Icon(Icons.close, size: 14, color: Colors.black)) + // : + widget.icon ?? InkWell( + onTap: _toggleDropdown, + child: Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, ), - ], - ), - ), - ), - ), - ), - ], - ), - ); - }, - ); - } - - void _filterList(String query) { - filteredItems = widget.items - .where((item) => - widget.itemLabel(item).toLowerCase().contains(query.toLowerCase())) - .toList(); - - if (overlayEntry != null) { - overlayEntry!.markNeedsBuild(); - } - } - // String? validateAndGetErrorText() { - // setState(() { - // _errorText = widget.validator?.call(selectedItem); - // }); - // return _errorText; - // } - String? validateAndGetErrorText() { - setState(() { - _errorText = selectedItem == null ? "This field is required" : null; - }); - return _errorText; - } - void _onDropdownTap() { - if (selectedItem == null) { - setState(() { - _errorText = "Please select an item."; - }); - } else { - setState(() { - _errorText = null; - }); - } - _toggleDropdown(); - } - @override - Widget build(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - CompositedTransformTarget( - link: layerLink, - child: GestureDetector( - onTap: _toggleDropdown, - child: Container( - padding: EdgeInsets.symmetric( - vertical: widget.isHeight ? 12 : 6.4, horizontal: 16), - decoration: BoxDecoration( - color: widget.backClr ?? AppColors.white, - border: Border.all( - color: widget.borderClr ?? Colors.transparent, - width: 1, - ), - borderRadius: BorderRadius.circular(2), - ), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - child: Text( - selectedItem != null - ? widget.itemLabel(selectedItem as T) - : widget.hintText.value, - style: 11.txtSBoldGrey, - overflow: TextOverflow.ellipsis, - ), - // Text( - // selectedItem != null - // ? widget.itemLabel(selectedItem as T) - // : widget.hintText, - // style: 12.txtSBoldGrey, - // overflow: TextOverflow.ellipsis, - // ), - ), - const Icon( - Icons.keyboard_arrow_down_outlined, - size: 20, - color: Colors.black, - ), + ), ], ), ), diff --git a/lib/components/common/drop_down_ctrl.dart b/lib/components/common/drop_down_ctrl.dart new file mode 100644 index 0000000..c6bcaa8 --- /dev/null +++ b/lib/components/common/drop_down_ctrl.dart @@ -0,0 +1,16 @@ +import 'package:get/get.dart'; + +class DropdownController extends GetxController { + // Observable selected item + var selectedItem = Rxn(); // Replace `String` with your actual type if necessary + + // Set the selected value + void selectItem(String item) { + selectedItem.value = item; + } + + // Clear the selected value + void clearSelection() { + selectedItem.value = null; + } +} diff --git a/lib/components/common/drop_down_feild.dart b/lib/components/common/drop_down_feild.dart new file mode 100644 index 0000000..7b14c4c --- /dev/null +++ b/lib/components/common/drop_down_feild.dart @@ -0,0 +1,51 @@ +// import 'package:flutter/material.dart'; +// import 'package:get/get.dart'; +// +// import 'drop_down_ctrl.dart'; +// +// class Customdown extends StatelessWidget { +// // Instantiate the controller using Get.put() to make it accessible across the app +// final DropdownController dropdownController = Get.put(DropdownController()); +// +// @override +// Widget build(BuildContext context) { +// +// +// return Obx( +// () { +// return GestureDetector( +// onTap: () async { +// // Open the custom dropdown menu on tap +// String? selectedItem = await showMenu( +// context: context, +// position: RelativeRect.fromLTRB(100.0, 100.0, 100.0, 100.0), +// items: dropdownController.items +// .map((String value) { +// return PopupMenuItem( +// value: value, +// child: Text(value), +// ); +// }) +// .toList(), +// ); +// // Update the selected value using GetX when the user selects an item +// if (selectedItem != null) { +// dropdownController.updateValue(selectedItem); +// } +// }, +// child: Container( +// padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10), +// decoration: BoxDecoration( +// border: Border.all(color: Colors.blue), +// borderRadius: BorderRadius.circular(5), +// ), +// child: Text( +// dropdownController.selectedValue.value, // Reactive update +// style: TextStyle(fontSize: 18, color: Colors.black), +// ), +// ), +// ); +// }, +// ); +// } +// } \ No newline at end of file diff --git a/lib/feature/presentation/screens/admin/user_management/manage_user.dart b/lib/feature/presentation/screens/admin/user_management/manage_user.dart index fce832c..c4b4ba7 100644 --- a/lib/feature/presentation/screens/admin/user_management/manage_user.dart +++ b/lib/feature/presentation/screens/admin/user_management/manage_user.dart @@ -6,6 +6,7 @@ import '../../../../../components/common/common_btn.dart'; import '../../../../../components/common/common_button.dart'; import '../../../../../components/common/custom_drop_down.dart'; import '../../../../../components/common/data_cell.dart'; + import '../../../../../components/styles/app_colors.dart'; import '../../../../../components/styles/app_strings.dart'; import '../../../widgets/custom_pagination.dart'; @@ -43,19 +44,29 @@ class ManageUser extends StatelessWidget { text: "User Name", ), SizedBox(height: 4), - GetX( - builder: (ctrl) { - return CustomDropdown( - backClr: AppColors.clrD9, - borderClr: AppColors.clrGrey, - items: ctrl.userNames, - itemLabel: (item) => item, - onSelected: (selected) { - ctrl.selectUser.value = selected; - }, - hintText: ctrl.selectUser.value); - }, - ), + CustomDropdown( + icon: controller.selectUser.value == + "Select User Name" + ?Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, + ) : GestureDetector( + onTap: () { + controller.selectUser.value = + "Select User Name"; + }, + child: Icon(Icons.close,size: 14)), + + backClr: AppColors.clrD9, + borderClr: AppColors.clrGrey, + items: controller.userNames, + itemLabel: (item) => item, + onSelected: (selected) { + controller.selectUser.value = + selected ?? ""; + }, + hintText: controller.selectUser.value), ], )), SizedBox(width: 16), @@ -68,19 +79,27 @@ class ManageUser extends StatelessWidget { text: "User Type", ), SizedBox(height: 8), - GetX( - builder: (controller) { - return CustomDropdown( - backClr: AppColors.clrD9, - borderClr: AppColors.clrGrey, - items: controller.userTypesNames, - itemLabel: (item) => item, - onSelected: (selected) { - controller.selectType.value = selected; + CustomDropdown( + icon: controller.selectType.value == + "Select UserType" + ?Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, + ) : GestureDetector( + onTap: () { + controller.selectType.value = + "Select UserType"; }, - hintText: controller.selectType.value); - }, - ), + child: Icon(Icons.close,size: 14)), + backClr: AppColors.clrD9, + borderClr: AppColors.clrGrey, + items: controller.userTypesNames, + itemLabel: (item) => item, + onSelected: (selected) { + controller.selectType.value = selected; + }, + hintText: controller.selectType.value), ], )), SizedBox(width: 16), @@ -94,13 +113,24 @@ class ManageUser extends StatelessWidget { ), SizedBox(height: 8), CustomDropdown( + icon: controller.selectEmail.value == + "Select Email" + ?Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, + ) : GestureDetector( + onTap: () { + controller.selectEmail.value = + "Select Email"; + }, + child: Icon(Icons.close,size: 14)), backClr: AppColors.clrD9, borderClr: AppColors.clrGrey, items: controller.userEmail, itemLabel: (item) => item, onSelected: (selected) { controller.selectEmail.value = selected; - }, hintText: controller.selectEmail.value), ], @@ -120,6 +150,18 @@ class ManageUser extends StatelessWidget { ), SizedBox(height: 8), CustomDropdown( + icon: controller.selectCode.value == + "Select Employee Code" + ?Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, + ) : GestureDetector( + onTap: () { + controller.selectCode.value = + "Select Employee Code"; + }, + child: Icon(Icons.close,size: 14)), backClr: AppColors.clrD9, borderClr: AppColors.clrGrey, items: controller.userEmpCode, @@ -141,7 +183,18 @@ class ManageUser extends StatelessWidget { ), SizedBox(height: 8), CustomDropdown( - + icon: controller.selectUserStatus.value == + "Select Status" + ?Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, + ) : GestureDetector( + onTap: () { + controller.selectUserStatus.value = + "Select Status"; + }, + child: Icon(Icons.close,size: 14)), backClr: AppColors.clrD9, borderClr: AppColors.clrGrey, items: controller.userStatus, @@ -179,7 +232,6 @@ class ManageUser extends StatelessWidget { text: AppStrings.submit, textStyle: 14.txtSBoldWhite, clickAction: () { - //controller.isSelected.value = false; controller.getManageUser(); controller.getAllUser(); }, @@ -211,7 +263,7 @@ class ManageUser extends StatelessWidget { decoration: BoxDecoration(border: Border.all(color: AppColors.clrGrey)), child: RawScrollbar( - thumbColor: AppColors.clrD9, + thumbColor: AppColors.primaryClr.withOpacity(0.4), radius: Radius.circular(2), trackVisibility: true, thumbVisibility: true, @@ -220,7 +272,7 @@ class ManageUser extends StatelessWidget { child: SingleChildScrollView( controller: controller.verticalScrollController, child: RawScrollbar( - thumbColor: AppColors.clrD9, + thumbColor: AppColors.primaryClr.withOpacity(0.4), radius: Radius.circular(2), thickness: 14, trackVisibility: true, diff --git a/lib/feature/presentation/screens/dashboard/controller/dashboard_ctrl.dart b/lib/feature/presentation/screens/dashboard/controller/dashboard_ctrl.dart index 27a84a2..f6de1f8 100644 --- a/lib/feature/presentation/screens/dashboard/controller/dashboard_ctrl.dart +++ b/lib/feature/presentation/screens/dashboard/controller/dashboard_ctrl.dart @@ -111,6 +111,7 @@ class DashboardCtrl extends GetxController { RxList getAllUserMain = [].obs; RxInt limit = 20.obs; var userLoading = false.obs; + var changeColor = false.obs; setNextPage() { if (currentPage.value < totalPages.value.toInt()) { diff --git a/lib/feature/presentation/screens/transporter/invoice_management/payment_view/payment_view_screen.dart b/lib/feature/presentation/screens/transporter/invoice_management/payment_view/payment_view_screen.dart index 686c20b..e71bef3 100644 --- a/lib/feature/presentation/screens/transporter/invoice_management/payment_view/payment_view_screen.dart +++ b/lib/feature/presentation/screens/transporter/invoice_management/payment_view/payment_view_screen.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:intl/intl.dart'; import 'package:shayog/components/common/input_field.dart'; import 'package:shayog/components/styles/textStyles.dart'; import 'package:shayog/feature/presentation/screens/transporter/invoice_management/payment_view/ctrl/payment_view_ctrl.dart'; @@ -27,7 +28,7 @@ class PaymentView extends StatelessWidget { () => controller.isPaymentFilter.value ? Container( padding: const EdgeInsets.only( - left: 16.0, top: 8, right: 16, bottom: 16), + left: 16.0, top: 8, right: 16), color: AppColors.clrF2, child: Column( mainAxisAlignment: MainAxisAlignment.start, @@ -42,17 +43,68 @@ class PaymentView extends StatelessWidget { children: [ TextView(text: "Plant"), SizedBox(height: 8), - CustomDropdown( + + CustomDropdown( + icon: paymentCtrl.selectedPlant.value == + "Select Plant" + ? Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, + ) : GestureDetector( + onTap: () { + paymentCtrl.selectedPlant.value = + "Select Plant"; + }, + child: Icon(Icons.close,size: 14)), + + backClr: AppColors.clrD9, + borderClr: AppColors.clrGrey, + items: paymentCtrl.plant, + itemLabel: (item) => + "${item.plantCode} - ${item.plantDesc}", + onSelected: (selected) { + paymentCtrl.selectedPlant.value = + "${selected?.plantCode} - ${selected?.plantDesc}"; + }, + hintText: paymentCtrl.selectedPlant.value, + ), + + ], + ), + ), + SizedBox(width: 16), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + TextView(text: "Product"), + SizedBox(height: 8), + CustomDropdown( + icon: paymentCtrl.selectedProduct.value == + "Select Product Name" + ? Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, + ) : GestureDetector( + onTap: () { + paymentCtrl.selectedProduct.value = + "Select Product Name"; + }, + child: Icon(Icons.close,size: 14)), + width: 250, backClr: AppColors.clrD9, borderClr: AppColors.clrGrey, - items: paymentCtrl.plant, + items: paymentCtrl.product, itemLabel: (item) => - "${item.plantCode}-${item.plantDesc}", + "${item.materialCode} - ${item.materialDescription}", onSelected: (selected) { - paymentCtrl.selectedPlant.value = - "${selected?.plantCode}-${selected?.plantDesc}"; + paymentCtrl.selectedProduct.value = + "${selected.materialCode} - ${selected.materialDescription}"; }, - hintText: paymentCtrl.selectedPlant.value, + hintText: paymentCtrl.selectedProduct.value, ), ], ), @@ -66,11 +118,22 @@ class PaymentView extends StatelessWidget { TextView(text: "Freight Bill No."), SizedBox(height: 8), CustomDropdown( + icon: paymentCtrl.selectedFreightBill.value == + "Select Bill No." + ? Icon( + Icons.keyboard_arrow_down_outlined, + size: 20, + color: Colors.black, + ) : GestureDetector( + onTap: () { + paymentCtrl.selectedFreightBill.value = + "Select Bill No."; + }, + child: Icon(Icons.close,size: 14)), backClr: AppColors.clrD9, borderClr: AppColors.clrGrey, items: paymentCtrl.freightBill, itemLabel: (item) => item, - onSelected: (selected) { paymentCtrl.selectedFreightBill.value = selected.toString(); @@ -81,30 +144,7 @@ class PaymentView extends StatelessWidget { ], ), ), - SizedBox(width: 16), - Expanded( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TextView(text: "Product"), - SizedBox(height: 8), - CustomDropdown( - width: 250, - backClr: AppColors.clrD9, - borderClr: AppColors.clrGrey, - items: paymentCtrl.product, - itemLabel: (item) => - "${item.materialCode}-${item.materialDescription}", - onSelected: (selected) { - paymentCtrl.selectedProduct.value = - "${selected.materialCode}-${selected.materialDescription}"; - }, - hintText: paymentCtrl.selectedProduct.value, - ), - ], - ), - ), + ], ), SizedBox(height: 12), @@ -189,11 +229,10 @@ class PaymentView extends StatelessWidget { ? CircularProgressIndicator() : Container( margin: EdgeInsets.only(bottom: 16, top: 8), - // height: MediaQuery.of(context).size.height * 0.4, - decoration: BoxDecoration( + decoration: BoxDecoration( border: Border.all(color: AppColors.clrGrey)), child: RawScrollbar( - thumbColor: AppColors.clrD9, + thumbColor: AppColors.primaryClr.withOpacity(0.4), radius: Radius.circular(2), trackVisibility: true, thumbVisibility: true, @@ -202,7 +241,7 @@ class PaymentView extends StatelessWidget { child: SingleChildScrollView( controller: paymentCtrl.verticalScrollController, child: RawScrollbar( - thumbColor: AppColors.clrD9, + thumbColor: AppColors.primaryClr.withOpacity(0.4), radius: Radius.circular(2), thickness: 14, trackVisibility: true, @@ -274,8 +313,13 @@ class PaymentView extends StatelessWidget { index, "${stoppage.materialCode}"), editableCell( index, "${stoppage.freightbillCode}"), + editableCell( - index, "${stoppage.lastUpdatedOn}"), + index, + DateFormat('yyyy - MMM dd').format( + DateTime.parse(stoppage + .lastUpdatedOn + .toString()))), editableCell( index, "${stoppage.shipmentNetQty}"), diff --git a/lib/feature/presentation/screens/transporter/view/sub_views/generate_fright_bill.dart b/lib/feature/presentation/screens/transporter/view/sub_views/generate_fright_bill.dart index 982305e..e727876 100644 --- a/lib/feature/presentation/screens/transporter/view/sub_views/generate_fright_bill.dart +++ b/lib/feature/presentation/screens/transporter/view/sub_views/generate_fright_bill.dart @@ -344,206 +344,226 @@ class GenerateFrightBill extends StatelessWidget { ); } return Column( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.end, children: [ - Container( - padding: EdgeInsets.symmetric(horizontal: 10), - margin: EdgeInsets.only(top: 16), - height: 45, - color: AppColors.primaryClr, - child: Row( + SizedBox( + width: MediaQuery.sizeOf(context).width, + height: controller.isFilterVisibleGenerateFreight.value == true + ? MediaQuery.of(context).size.height * 0.3 + : MediaQuery.of(context).size.height * 0.64, + child: Column( children: [ - TextView( - text: AppStrings.viewGrnDetails, - style: 14.txtBoldWhite), - Spacer(), - CommonBtn( - width: 150, - bkClr: AppColors.white, - borderClr: AppColors.primaryClr, - style: 12.txtBoldBlue, - text: "Generate Freight Bill", - clickAction: () { - bool hasSelectedRows = controller.grnDetails - .any((element) => element.isSelected); - if (!hasSelectedRows) { - showPopup( - context: context, - onClick: () { - Get.back(); - }); - } else { - CommonAlertDialog.showDialog( - dismissable: false, - message: "Are you sure want to\nsave this?", - positiveText: "Save", - negativeText: "Cancel", - positiveBtCallback: () { - Get.back(); - controller.addFreightBill(); - showFreightBill(context); - }, - negativeBtCallback: () { - Get.back(); - }); - } - }), - ], - ), - ), - Container( - margin: EdgeInsets.only(bottom: 16, top: 16), - height: - controller.isFilterVisibleGenerateFreight.value == true - ? MediaQuery.of(context).size.height * 0.3 - : MediaQuery.of(context).size.height * 0.64, - child: RawScrollbar( - thumbColor: AppColors.clrD9, - radius: Radius.circular(2), - trackVisibility: true, - thumbVisibility: true, - thickness: 14, - controller: controller.verticalScrollController, - child: SingleChildScrollView( - controller: controller.verticalScrollController, - child: RawScrollbar( - thumbColor: AppColors.clrD9, - radius: Radius.circular(2), - thickness: 14, - trackVisibility: true, - thumbVisibility: true, - controller: controller.horizontalScrollController, - child: SingleChildScrollView( - scrollDirection: Axis.horizontal, - controller: controller.horizontalScrollController, - child: Container( - margin: EdgeInsets.only(bottom: 24), - decoration: BoxDecoration( - border: Border.all( - color: Colors.grey.shade400, - width: 1.0, - ), - ), - child: DataTable( - dataRowHeight: 40, - headingRowHeight: 40, - headingRowColor: - WidgetStateProperty.all(AppColors.clrF2), - border: TableBorder( - horizontalInside: - BorderSide(color: AppColors.clrGrey), - verticalInside: - BorderSide(color: AppColors.clrGrey), - bottom: BorderSide(color: AppColors.clrGrey), - left: BorderSide(color: AppColors.clrGrey), - right: BorderSide(color: AppColors.clrGrey), - top: BorderSide(color: AppColors.clrGrey), - ), - columns: [ - DataColumn( - label: Transform.scale( - scale: 0.80, - child: Checkbox( - value: controller.selectAllField.value, - onChanged: (value) { - controller.selectAll(value ?? false); - }, - activeColor: AppColors.primaryClr, - checkColor: Colors.white, - materialTapTargetSize: MaterialTapTargetSize - .shrinkWrap, + Container( + padding: EdgeInsets.symmetric(horizontal: 10), + margin: EdgeInsets.only(top: 16), + height: 45, + color: AppColors.primaryClr, + child: Row( + children: [ + TextView( + text: AppStrings.viewGrnDetails, + style: 14.txtBoldWhite), + Spacer(), + CommonBtn( + width: 150, + bkClr: AppColors.white, + borderClr: AppColors.primaryClr, + style: 12.txtBoldBlue, + text: "Generate Freight Bill", + clickAction: () { + bool hasSelectedRows = controller.grnDetails + .any((element) => element.isSelected); + if (!hasSelectedRows) { + showPopup( + context: context, + onClick: () { + Get.back(); + }); + } else { + CommonAlertDialog.showDialog( + dismissable: false, + message: + "Are you sure want to\nsave this?", + positiveText: "Save", + negativeText: "Cancel", + positiveBtCallback: () { + Get.back(); + controller.addFreightBill(); + showFreightBill(context); + }, + negativeBtCallback: () { + Get.back(); + }); + } + }), + ], + ), + ), + Container( + margin: EdgeInsets.only(bottom: 16, top: 16), + child: RawScrollbar( + thumbColor: AppColors.clrD9, + radius: Radius.circular(2), + trackVisibility: true, + thumbVisibility: true, + thickness: 14, + controller: controller.verticalScrollController, + child: SingleChildScrollView( + controller: controller.verticalScrollController, + child: RawScrollbar( + thumbColor: AppColors.clrD9, + radius: Radius.circular(2), + thickness: 14, + trackVisibility: true, + thumbVisibility: true, + controller: controller.horizontalScrollController, + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + controller: controller.horizontalScrollController, + child: Container( + margin: EdgeInsets.only(bottom: 24), + decoration: BoxDecoration( + border: Border.all( + color: Colors.grey.shade400, + width: 1.0, ), ), - ), - // dataColumn(AppStrings.srNo), - dataColumn(AppStrings.mrnNo), - dataColumn(AppStrings.plantNo), - dataColumn(AppStrings.product), - dataColumn(AppStrings.date), - dataColumn(AppStrings.fromLocation), - dataColumn(AppStrings.vehicleNo), - dataColumn(AppStrings.transporterLrNo), - dataColumn(AppStrings.transporterLrNoDate), - dataColumn(AppStrings.dispQty), - dataColumn(AppStrings.netQty), - dataColumn(AppStrings.billingQty), - dataColumn(AppStrings.uom), - dataColumn(AppStrings.freightRate), - dataColumn(AppStrings.freightAmount), - ], - rows: List.generate( - controller.grnDetails.length, (index) { - final stoppage = controller.grnDetails[index]; - return DataRow( - selected: stoppage.isSelected, - cells: [ - DataCell( - Transform.scale( - scale: 0.80, - child: Checkbox( - value: stoppage.isSelected, - onChanged: (value) { - controller.toggleSelection( - index, value ?? false); - }, - activeColor: AppColors.primaryClr, - checkColor: Colors.white, - materialTapTargetSize: - MaterialTapTargetSize.shrinkWrap, + child: DataTable( + dataRowHeight: 40, + headingRowHeight: 40, + headingRowColor: + WidgetStateProperty.all(AppColors.clrF2), + border: TableBorder( + horizontalInside: + BorderSide(color: AppColors.clrGrey), + verticalInside: + BorderSide(color: AppColors.clrGrey), + bottom: + BorderSide(color: AppColors.clrGrey), + left: BorderSide(color: AppColors.clrGrey), + right: BorderSide(color: AppColors.clrGrey), + top: BorderSide(color: AppColors.clrGrey), + ), + columns: [ + DataColumn( + label: Transform.scale( + scale: 0.80, + child: Checkbox( + value: + controller.selectAllField.value, + onChanged: (value) { + controller + .selectAll(value ?? false); + }, + activeColor: AppColors.primaryClr, + checkColor: Colors.white, + materialTapTargetSize: + MaterialTapTargetSize.shrinkWrap, + ), ), ), - ), - // editableCell(index, "0${index + 1}"), - editableCell(index, stoppage.grnNo ?? ""), - editableCell( - index, stoppage.plantCode ?? ""), - editableCell( - index, stoppage.materialCode ?? ""), - editableCell( - index, - DateFormat('yyyy-MM-dd').format( - stoppage.grnDate ?? - DateTime.now())), - editableCell( - index, stoppage.fromLocation ?? ""), - editableCell( - index, stoppage.vehicleNo ?? ""), - editableCell(index, stoppage.lrNo ?? ""), - editableCell( - index, - DateFormat('yyyy-MM-dd').format( - stoppage.lrDate ?? DateTime.now())), - editableCell(index, - stoppage.dispQty?.toString() ?? ""), - editableCell(index, - stoppage.netQty?.toString() ?? ""), - editableCell(index, - stoppage.billingQty?.toString() ?? ""), - editableCell(index, "-"), - editableCell(index, - stoppage.freightRate?.toString() ?? ""), - editableCell( - index, - stoppage.shipmentCost?.toString() ?? - ""), - ], - ); - }), + // dataColumn(AppStrings.srNo), + dataColumn(AppStrings.mrnNo), + dataColumn(AppStrings.plantNo), + dataColumn(AppStrings.product), + dataColumn(AppStrings.date), + dataColumn(AppStrings.fromLocation), + dataColumn(AppStrings.vehicleNo), + dataColumn(AppStrings.transporterLrNo), + dataColumn(AppStrings.transporterLrNoDate), + dataColumn(AppStrings.dispQty), + dataColumn(AppStrings.netQty), + dataColumn(AppStrings.billingQty), + dataColumn(AppStrings.uom), + dataColumn(AppStrings.freightRate), + dataColumn(AppStrings.freightAmount), + ], + rows: List.generate( + controller.grnDetails.length, (index) { + final stoppage = + controller.grnDetails[index]; + return DataRow( + selected: stoppage.isSelected, + cells: [ + DataCell( + Transform.scale( + scale: 0.80, + child: Checkbox( + value: stoppage.isSelected, + onChanged: (value) { + controller.toggleSelection( + index, value ?? false); + }, + activeColor: AppColors.primaryClr, + checkColor: Colors.white, + materialTapTargetSize: + MaterialTapTargetSize + .shrinkWrap, + ), + ), + ), + // editableCell(index, "0${index + 1}"), + editableCell( + index, stoppage.grnNo ?? ""), + editableCell( + index, stoppage.plantCode ?? ""), + editableCell( + index, stoppage.materialCode ?? ""), + editableCell( + index, + DateFormat('yyyy-MM-dd').format( + stoppage.grnDate ?? + DateTime.now())), + editableCell( + index, stoppage.fromLocation ?? ""), + editableCell( + index, stoppage.vehicleNo ?? ""), + editableCell( + index, stoppage.lrNo ?? ""), + editableCell( + index, + DateFormat('yyyy-MM-dd').format( + stoppage.lrDate ?? + DateTime.now())), + editableCell(index, + stoppage.dispQty?.toString() ?? ""), + editableCell(index, + stoppage.netQty?.toString() ?? ""), + editableCell( + index, + stoppage.billingQty?.toString() ?? + ""), + editableCell(index, "-"), + editableCell( + index, + stoppage.freightRate?.toString() ?? + ""), + editableCell( + index, + stoppage.shipmentCost?.toString() ?? + ""), + ], + ); + }), + ), + ), + ), ), ), ), ), - ), + ], ), ), - CustomPagination( - currentPage: controller.currentPageViewFreight.value + 1, - totalPages: controller.totalPagesViewFreight.value, - onPageChanged: (page) { - controller.viewFreightView(page: page - 1); - }, - ), + Padding( + padding: EdgeInsets.only(bottom: 4), + child: CustomPagination( + currentPage: controller.currentPageGenerateFreight.value + 1, + totalPages: controller.totalPagesGenerateFreight.value, + onPageChanged: (page) { + controller.postData(page: page - 1); + }, + ), + ) ], ); }), diff --git a/lib/feature/presentation/screens/transporter/view/sub_views/invoice_management_screen.dart b/lib/feature/presentation/screens/transporter/view/sub_views/invoice_management_screen.dart index ea29dec..58306c4 100644 --- a/lib/feature/presentation/screens/transporter/view/sub_views/invoice_management_screen.dart +++ b/lib/feature/presentation/screens/transporter/view/sub_views/invoice_management_screen.dart @@ -41,328 +41,83 @@ class _TransportViewState extends State { return Column( children: [ Container( - padding: EdgeInsets.only(bottom: 4), - margin: EdgeInsets.all(16), - child: Column( + margin: EdgeInsets.symmetric(horizontal: 16, vertical: 8), + height: 50, + color: AppColors.primaryClr, + child: Row( children: [ - Container( - margin: EdgeInsets.only(bottom: 12), - height: 55, - color: AppColors.primaryClr, - child: Row( - children: [ - ListView.separated( - padding: EdgeInsets.symmetric(horizontal: 16), - scrollDirection: Axis.horizontal, - shrinkWrap: true, - itemBuilder: (context, index) { - return Obx( - () => InkWell( - onTap: () { - ctrl.selectedState.value = index; - }, - child: Container( - margin: EdgeInsets.only(bottom: 10, top: 10), - decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - color: ctrl.selectedState.value == - index - ? Colors.white - : AppColors.primaryClr, - width: 3))), - child: Center( - child: Text( - ctrl.userTabs[index].title ?? "", - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w900, - color: Colors.white), - ), - ), - ), - ), - ); - }, - separatorBuilder: (context, index) { - return SizedBox(width: 16); - }, - itemCount: ctrl.userTabs.length), - Spacer(), - InkWell( - child: Image.asset(AppImages.refresh, - height: 10, width: 10)), - Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - AppStrings.refresh, - style: TextStyle( - color: AppColors.white, - fontSize: 10, - fontWeight: FontWeight.normal), - ), - ), - GestureDetector( - behavior: HitTestBehavior.translucent, + ListView.separated( + shrinkWrap: true, + padding: EdgeInsets.symmetric(horizontal: 16), + scrollDirection: Axis.horizontal, + itemBuilder: (context, index) { + return Obx( + () => InkWell( onTap: () { - print("cdgsa"); - ctrl.isSelected.value = !ctrl.isSelected.value; - if (ctrl.isSelected.value == 0) { - ctrl.toggleFilter(); - } else if (ctrl.isSelected.value == 1) { - ctrl.toggleViewFreight(); - } else if (ctrl.isSelected.value == 2) { - ctrl.togglePending(); - } + ctrl.selectedState.value = index; }, - child: Row( - children: [ - Image.asset(AppImages.filter, - height: 16, width: 16), - Padding( - padding: const EdgeInsets.all(8.0), - child: TextView( - text: AppStrings.filter, - style: 12.txtBoldWhite, - ), + child: Container( + margin: EdgeInsets.only(bottom: 10, top: 10), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: ctrl.selectedState.value == index + ? Colors.white + : AppColors.primaryClr, + width: 3))), + child: Center( + child: TextView( + text: ctrl.invoiceTabs[index].title ?? "", + style: 12.txtBoldWhite, ), - ], + ), ), ), - ], + ); + }, + separatorBuilder: (context, index) { + return SizedBox(width: 16); + }, + itemCount: ctrl.invoiceTabs.length, + ), + Spacer(), + InkWell( + onTap: (){ + paymentCtrl.resetDropdowns(); + }, + child: Image.asset(AppImages.refresh, height: 16, width: 16)), + Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + AppStrings.refresh, + style: 12.txtBoldWhite, + ), + ), + InkWell( + onTap: () { + switch (ctrl.selectedState.value) { + case 0: + return ctrl.invoiceFilter(); + case 1: + return ctrl.cancelledFilter(); + case 2: + return ctrl.paymentFilter(); + default: + return ctrl.ccnFilter(); + } + }, + child: Image.asset(AppImages.filter, height: 16, width: 16), + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: TextView( + text: AppStrings.filter, + style: 12.txtBoldWhite, ), ), ], ), ), - Obx( - () => ctrl.isSelected.value - ? Container( - padding: EdgeInsets.all(8), - color: AppColors.clrF2, - - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Expanded( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TextView(text: "Plant", isRequired: true), - SizedBox(height: 8), - CustomDropdown( - backClr: AppColors.clrD9, - borderClr: AppColors.clrGrey, - items: ctrl.plant, - - itemLabel: (item) => - "${item.plantCode} - ${item.plantDesc}", - onSelected: (selected) { - if (selected != null) { - ctrl.selectPlantFreight.value = - selected.plantCode ?? ""; - ctrl.showPlantErrorFreight.value = - false; - } - }, - hintText: "Select Plant", - ), - Obx(() => - ctrl.showPlantErrorFreight.value - ? Text( - 'Required', - style: TextStyle( - color: Colors.red, - fontSize: 12), - ) - : Text('')), - ], - ), - ), - SizedBox(width: 16), - Expanded( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TextView(text: "Freight Bill Date",isRequired: true,), - SizedBox(height: 8), - Container( - height: 35, - child: TextFormField( - key: ctrl.fromTextFieldKey, - controller: ctrl.fromController, - onTap: () async { - final pickedDate = - await showWebDatePicker( - width: 20.w, - context: ctrl - .fromTextFieldKey.currentContext!, - initialDate: - ctrl.fromSelectedDate, - firstDate: DateTime(2000), - lastDate: DateTime.now(), - ); - - if (pickedDate != null) { - ctrl.fromSelectedDate = - pickedDate; - String formattedDate = ctrl - .getFormattedDate(pickedDate); - ctrl.fromController.text = - formattedDate; - ctrl.dateCheck.value = true; - } - }, - decoration: InputDecoration( - fillColor: AppColors.clrD9, - filled: true, - hintText: 'Select Freight Bill Date ', - hintStyle: TextStyle( - fontSize: 12, - overflow: TextOverflow.ellipsis), - border: OutlineInputBorder( - borderRadius: - BorderRadius.circular(2.0), - borderSide: - BorderSide(color: AppColors.black), - ), - enabledBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(2.0), - borderSide: BorderSide( - color: AppColors.clrGrey), - ), - focusedBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(2.0), - borderSide: BorderSide( - color: AppColors.clrGrey), - ), - disabledBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(2.0), - borderSide: BorderSide( - color: AppColors.clrGrey), - ), - suffixIcon: ctrl.dateCheck.value - ? InkWell( - onTap: () { - ctrl.dateCheck.value = - false; - ctrl.fromController - .clear(); - ctrl.fromSelectedDate = - DateTime.now(); - }, - child: Icon(Icons.close, - size: 1.2.w), - ) - : null, - contentPadding: - const EdgeInsets.symmetric( - horizontal: 12.0, vertical: 0.0), - ), - ), - ), - ], - ), - ), - SizedBox(width: 16), - Expanded( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TextView( - text: "Freight Bill No.", isRequired: true), - SizedBox(height: 8), - CustomDropdown( - backClr: AppColors.clrD9, - borderClr: AppColors.clrGrey, - items: ctrl.freightBill, - itemLabel: (item) => item, - onSelected: (selected) { - if (selected != null) { - ctrl.selectFreightBillValidate.value = - selected; - ctrl.showTransactionErrorViewFreight - .value = false; - } - }, - hintText: "Select Freight Bill No.", - ), - Obx(() => ctrl - .showTransactionErrorViewFreight.value - ? Text( - 'Required', - style: TextStyle( - color: Colors.red, fontSize: 12), - ) - : Text('')), - ], - ), - ), - ], - ), - // Padding( - // padding: - // const EdgeInsets.only(top: 16.0, left: 0, right: 8), - // child: Row( - // children: [ - // Expanded( - // child: Column( - // mainAxisAlignment: MainAxisAlignment.start, - // crossAxisAlignment: CrossAxisAlignment.start, - // children: [ - // _commonText( - // "Freight Bill Date", - // ), - // SizedBox(height: 8), - // InputField( - // title: "Select Bill Date", - // ), - // ], - // )), - // ], - // ), - // ), - // Expanded( - // //flex: 2, - // child: Column( - // children: [ - // TextView( - // text: "", - // ), - // Padding( - // padding: const EdgeInsets.only(top: 8.0), - // child: Row( - // mainAxisAlignment: MainAxisAlignment.end, - // children: [ - // CommonBtn( - // bkClr: Colors.white, - // text: AppStrings.cancel, - // clickAction: () {}, - // ), - // SizedBox(width: 16), - // CommonBtn( - // text: AppStrings.submit, - // clickAction: () {}, - // ), - // ], - // ), - // ), - // ], - // )) - ], - ), - ) - : SizedBox(), - ), Obx(() { switch (ctrl.selectedState.value) { case 0: diff --git a/lib/feature/presentation/screens/transporter/view/sub_views/pending_generation.dart b/lib/feature/presentation/screens/transporter/view/sub_views/pending_generation.dart index 9756129..6921bb0 100644 --- a/lib/feature/presentation/screens/transporter/view/sub_views/pending_generation.dart +++ b/lib/feature/presentation/screens/transporter/view/sub_views/pending_generation.dart @@ -524,13 +524,13 @@ class PendingGeneration extends StatelessWidget { ], ); }), - // CustomPagination( - // currentPage: controller.currentPage.value, - // totalPages: controller.totalPages.value, - // onPageChanged: (int page) { - // // controller.onPageChanged(page); - // }, - // ), + CustomPagination( + currentPage: controller.currentPagePendingFreight.value, + totalPages: controller.totalPagesPendingFreight.value, + onPageChanged: (int page) { + // controller.grnPending(page: page -1); + }, + ), ], ); } diff --git a/lib/feature/presentation/screens/transporter/view/transport_view.dart b/lib/feature/presentation/screens/transporter/view/transport_view.dart index 17ba993..4dc6af9 100644 --- a/lib/feature/presentation/screens/transporter/view/transport_view.dart +++ b/lib/feature/presentation/screens/transporter/view/transport_view.dart @@ -161,8 +161,7 @@ class _TransportViewState extends State { child: Column( children: [ Container( - color: Colors.white, - padding: EdgeInsets.only(bottom: 16), + // padding: EdgeInsets.only(bottom: 16), margin: EdgeInsets.all(16), child: Column( children: [ @@ -258,26 +257,53 @@ class _TransportViewState extends State { ), ), Obx( - () => SimpleDropdown( - + () => ctrl.selectedUser.value == 0 + ? SimpleDropdown( + onSelected: (newValue) { + ctrl.selectedDropdownItemGenerateFreight.value = + newValue; + ctrl.postData(); + }, + items: ctrl.selectElementSize, + selectedItem: + ctrl.selectedDropdownItemGenerateFreight.value, + ) + : ctrl.selectedUser.value == 1 + ? SimpleDropdown( + onSelected: (newValue) { + ctrl.selectedDropdownItemViewFreight + .value = newValue; + ctrl.viewFreightView(); + }, + items: ctrl.selectElementSize, + selectedItem: ctrl + .selectedDropdownItemViewFreight.value, + ) + : ctrl.selectedUser.value == 2 + ? SimpleDropdown( onSelected: (newValue) { - ctrl.selectedDropdownItemViewFreight.value = newValue; + ctrl.selectedDropdownItemViewFreight + .value = newValue; ctrl.viewFreightView(); }, items: ctrl.selectElementSize, - selectedItem: ctrl.selectedDropdownItemViewFreight.value, + selectedItem: ctrl + .selectedDropdownItemViewFreight.value, + ) + : SimpleDropdown( + onSelected: (newValue) { + ctrl.selectedDropdownItemViewFreight + .value = newValue; + ctrl.viewFreightView(); + }, + items: ctrl.selectElementSize, + selectedItem: ctrl + .selectedDropdownItemViewFreight.value, ), ), - // Obx(() => SimpleDropdown( - // items: [1, 2, 3, 4], - // selectedItem: ctrl. selectedDropdownItem.value, // Bind external state - // onSelected: (val) => ctrl. selectedDropdownItem.value = val, - // width: 150, - // borderClr: Colors.blue, - // )), - - SizedBox(width: 10,), - + SizedBox( + width: 10, + ), ], ), ), diff --git a/lib/feature/presentation/screens/transporter/view_model/transport_controller.dart b/lib/feature/presentation/screens/transporter/view_model/transport_controller.dart index 5143e6e..dcc4a6a 100644 --- a/lib/feature/presentation/screens/transporter/view_model/transport_controller.dart +++ b/lib/feature/presentation/screens/transporter/view_model/transport_controller.dart @@ -153,9 +153,10 @@ class TransportController extends GetxController { getInvoiceView(); super.onInit(); } + Rxn selectedDropdownItemViewFreight = Rxn(); - - + Rxn selectedDropdownItemPendingFreight = Rxn(); + Rxn selectedDropdownItemGenerateFreight = Rxn(); refreshApis() { getFreightBills(); @@ -164,6 +165,8 @@ class TransportController extends GetxController { getSubFreightBillsView(); postData(); selectedDropdownItemViewFreight.value = null; + selectedDropdownItemPendingFreight.value = null; + selectedDropdownItemGenerateFreight.value = null; } getInvoiceView() async { @@ -220,7 +223,12 @@ class TransportController extends GetxController { var grnPendingLoader = false.obs; var errorMessage = ''.obs; - postData() async { +// for Generate + var totalElementsGenerateFreight = 0.obs; + RxInt currentPageGenerateFreight = 1.obs; + RxInt totalPagesGenerateFreight = 3.obs; + + postData({int page = 0}) async { try { isLoading.value = true; Map requestBody = { @@ -231,18 +239,24 @@ class TransportController extends GetxController { "grnFromDate": "", "grnToDate": "" }; - var response = await PostRequests.addFreightBill(requestBody); + var response = await PostRequests.addFreightBill( + page: page, + size: selectedDropdownItemGenerateFreight.value ?? 1, + requestBody: requestBody); if (response != null) { List flattenedContent = response.content!.expand((list) => list).toList(); grnDetails.assignAll(flattenedContent); + totalPagesGenerateFreight.value = response.totalPages ?? 0; + totalElementsGenerateFreight.value = response.totalElements ?? 0; + currentPageGenerateFreight.value = page; } } finally { isLoading.value = false; } } - void displayFilteredData() async { + void displayFilteredData({int page = 0}) async { try { isLoading.value = true; Map requestBody = { @@ -254,7 +268,10 @@ class TransportController extends GetxController { "grnToDate": "" }; - var response = await PostRequests.addFreightBill(requestBody); + var response = await PostRequests.addFreightBill( + page: page, + size: selectedDropdownItemGenerateFreight.value ?? 4, + requestBody: requestBody); if (response != null) { List flattenedContent = response.content!.expand((list) => list).toList(); @@ -272,12 +289,14 @@ class TransportController extends GetxController { selectTransactionTypeFreight.value.toUpperCase()); }).toList(); - print("Filtered Data: ${filteredData.length}"); - - grnDetails.assignAll(filteredData); - - print("✅ Filtered Data: ${filteredData.length} items displayed."); - print("✅ Filtered Data: ${grnDetails.length} items displayed."); + if (page == 0) { + grnDetails.assignAll(flattenedContent); + } else { + grnDetails.addAll(flattenedContent); + } + totalPagesGenerateFreight.value = response.totalPages ?? 0; + totalElementsGenerateFreight.value = response.totalElements ?? 0; + currentPageGenerateFreight.value = page; } else { print("❌ No response from API."); } @@ -411,13 +430,6 @@ class TransportController extends GetxController { } RxString selectedPlant = "".obs; - List plantList = [ - "Plant 1", - "Plant 2", - "Plant 3", - "Plant 4", - "Plant 5", - ]; RxString selectedFreight = "".obs; addFreightBill() async { @@ -457,23 +469,36 @@ class TransportController extends GetxController { ////////////////////////////////////////// PRIYA /////////////////////////////////////////////// var freightBillData = [].obs; - var totalElementsViewFreight = 0.obs; var pageSize = 2.obs; var sortField = "grn_date".obs; var sortDirection = "desc".obs; + // view freight + var totalElementsViewFreight = 0.obs; RxInt currentPageViewFreight = 1.obs; RxInt totalPagesViewFreight = 3.obs; - final int limit = 10; - RxList selectElementSize = [ - 4, - 8, - 12, - 16, - 20, - ].obs; - viewFreightView({int page = 0}) async { +// for pending + var totalElementsPendingFreight = 0.obs; + RxInt currentPagePendingFreight = 1.obs; + RxInt totalPagesPendingFreight = 3.obs; + + final int limit = 10; + // RxList selectElementSize = [ + // 4, + // 8, + // 12, + // 16, + // 20, + // ].obs; + RxList selectElementSize = [ + 2, + 4, + 6, + 8, + 10, + ].obs; + viewFreightView({int page = 0}) async { try { freightViewLoader.value = true; @@ -488,7 +513,9 @@ class TransportController extends GetxController { }; var response = await PostRequests.viewFreightBill( - page: page, size: selectedDropdownItemViewFreight.value ?? 4, requestBody: requestBody); + page: page, + size: selectedDropdownItemViewFreight.value ?? 4, + requestBody: requestBody); if (response != null) { List flattenedContent = @@ -514,6 +541,38 @@ class TransportController extends GetxController { var grnPendingData = [].obs; + // grnPending({int page = 0}) async { + // try { + // grnPendingLoader.value = true; + // + // Map requestBody = { + // "plant": "", + // "productNane": "", + // "transactionType": "", + // "fromLocation": "", + // "grnFromDate": "", + // "grnToDate": "" + // }; + // + // var response = await PostRequests.grnPending( + // page: page, + // size: selectedDropdownItemPendingFreight.value ?? 4, + // requestBody: requestBody, + // ); + // if (response != null) { + // List flattenedContent = + // response.content!.expand((list) => list).toList(); + // grnPendingData.assignAll(flattenedContent); + // totalPagesPendingFreight.value = response.totalPages ?? 0; + // totalElementsPendingFreight.value = response.totalElements ?? 0; + // currentPagePendingFreight.value = page; + // print( + // 'response from pending tab${response.first.toString()} and ${flattenedContent.length} and ${grnPendingData.value[0].codeValue} and ${grnPendingData.value[0].plantCode} and ${grnPendingData.value[0].materialCode}'); + // } + // } finally { + // grnPendingLoader.value = false; + // } + // } grnPending() async { try { grnPendingLoader.value = true; @@ -532,7 +591,7 @@ class TransportController extends GetxController { ); if (response != null) { List flattenedContent = - response.content!.expand((list) => list).toList(); + response.content!.expand((list) => list).toList(); grnPendingData.assignAll(flattenedContent); print( 'response from pending tab${response.first.toString()} and ${flattenedContent.length} and ${grnPendingData.value[0].codeValue} and ${grnPendingData.value[0].plantCode} and ${grnPendingData.value[0].materialCode}'); @@ -541,8 +600,7 @@ class TransportController extends GetxController { grnPendingLoader.value = false; } } - - void displayFilteredDataFromViewFreight({int page = 0, int size = 4}) async { + void displayFilteredDataFromViewFreight({int page = 0}) async { try { freightViewLoader.value = true; @@ -556,12 +614,10 @@ class TransportController extends GetxController { "grnToDate": "", }; - print( - "🔎 Filter Request - Page: $page, Size: $size, Plant: ${selectPlantViewFreight.value}, " - "Product: ${selectProductViewFreight.value}, Freight Bill: ${selectFreightBillValidate.value}"); - var response = await PostRequests.viewFreightBill( - page: page, size: size, requestBody: requestBody); // Pass pagination + page: page, + size: selectedDropdownItemViewFreight.value ?? 4, + requestBody: requestBody); // Pass pagination if (response != null && response.content != null) { List flattenedContent = @@ -594,6 +650,57 @@ class TransportController extends GetxController { } } + // void displayFilteredDataFromPending({int page = 0}) async { + // try { + // isLoading.value = true; + // Map requestBody = { + // "plant": selectPlantPending.value, + // "productNane": selectProductPending.value, + // "transactionType": selectTransactionTypePending.value.toUpperCase(), + // "fromLocation": selectLocation.value, + // "grnFromDate": "", + // "grnToDate": "" + // }; + // + // var response = await PostRequests.grnPending( + // page: page, + // size: selectedDropdownItemPendingFreight.value ?? 4, + // requestBody: requestBody, + // ); + // if (response != null) { + // List flattenedContent = + // response.content!.expand((list) => list).toList(); + // + // List filteredData = flattenedContent.where((item) { + // return (selectPlantFreight.value.isEmpty || + // item.plantCode == selectPlantFreight.value) && + // (selectProductFreight.value.isEmpty || + // item.materialCode == selectProductFreight.value) && + // (selectTransactionTypeFreight.value.isEmpty || + // item.codeValue == + // selectTransactionTypeFreight.value.toUpperCase()); + // }).toList(); + // + // if (page == 0) { + // grnPendingData.assignAll(flattenedContent); + // } else { + // grnPendingData.addAll(flattenedContent); + // } + // + // // Update pagination details + // totalPagesPendingFreight.value = response.totalPages ?? 0; + // totalElementsPendingFreight.value = response.totalElements ?? 0; + // currentPagePendingFreight.value = page; + // + // print( + // "✅ pending Data: ${filteredData.length} items displayed pending."); + // } else { + // print("❌ No response from API."); + // } + // } finally { + // isLoading.value = false; + // } + // } void displayFilteredDataFromPending() async { try { isLoading.value = true; @@ -609,11 +716,11 @@ class TransportController extends GetxController { var response = await PostRequests.grnPending(requestBody); if (response != null) { List flattenedContent = - response.content!.expand((list) => list).toList(); + response.content!.expand((list) => list).toList(); List filteredData = flattenedContent.where((item) { return (selectPlantFreight.value.isEmpty || - item.plantCode == selectPlantFreight.value) && + item.plantCode == selectPlantFreight.value) && (selectProductFreight.value.isEmpty || item.materialCode == selectProductFreight.value) && (selectTransactionTypeFreight.value.isEmpty || diff --git a/lib/services/network/ApiUrls.dart b/lib/services/network/ApiUrls.dart index b81a163..f7cd82e 100644 --- a/lib/services/network/ApiUrls.dart +++ b/lib/services/network/ApiUrls.dart @@ -2,7 +2,7 @@ class ApiUrls { ApiUrls._(); static const String baseUrl = "http://46.28.44.130:9092/"; static const addFreightBill = - 'bill/grndetails?page=0&size=20&sort=grn_date,desc'; + 'bill/grndetails'; static const getFreightBills = 'bill/dropdown'; static const getAllPayments = "http://46.28.44.130:9092/invoice/getPayments"; static const generateFreightBill = diff --git a/lib/services/network/post_request.dart b/lib/services/network/post_request.dart index 9394727..d64902f 100644 --- a/lib/services/network/post_request.dart +++ b/lib/services/network/post_request.dart @@ -20,12 +20,17 @@ import 'ApiUrls.dart'; class PostRequests { PostRequests._(); - static Future addFreightBill( + static Future addFreightBill({ + int page = 0, + int size = 15, + String sort = 'last_updated_on,desc', + Map? requestBody, - - Map requestBody) async { +} + ) async { var apiResponse = - await RemoteService.simplePost(requestBody, ApiUrls.addFreightBill); + await RemoteService.simplePost(requestBody ?? {},'${ApiUrls.addFreightBill}?page=$page&size=$size&sort=$sort' + ); if (apiResponse != null) { return generateFreightBillsFromJson(apiResponse.response!); @@ -34,8 +39,6 @@ class PostRequests { } } - - static Future freightBill( List> requestBody) async { var apiResponse = @@ -75,7 +78,7 @@ class PostRequests { static Future getAllPayments( Map requestBody) async { var apiResponse = - await RemoteService.postUser(requestBody, ApiUrls.getAllPayments); + await RemoteService.postUser(requestBody, ApiUrls.getAllPayments); if (apiResponse != null) { return paymentResModelFromJson(apiResponse.response!); @@ -83,6 +86,7 @@ class PostRequests { return null; } } + static Future editUser( Map requestBody, String id) async { var apiResponse = @@ -96,23 +100,13 @@ class PostRequests { } } - static Future viewFreightBillF( - Map requestBody, - ) async { - var apiResponse = await RemoteService.postUser(requestBody, - '${ApiUrls.viewFreightBill}'); - if (apiResponse != null) { - return viewFreightBillResModelFromJson(apiResponse.response!); - } else { - return null; - } - } + static Future viewFreightBill({ int page = 0, int size = 15, String sort = 'last_updated_on,desc', - Map? requestBody, + Map? requestBody, }) async { // Construct dynamic URL with query parameters String url = 'http://46.28.44.130:9092/bill/freightbill' @@ -120,9 +114,8 @@ class PostRequests { try { var apiResponse = await RemoteService.postUser( - requestBody ?? {}, // Use empty map if no request body - url - ); + requestBody ?? {}, // Use empty map if no request body + url); if (apiResponse == null) return null; if (apiResponse.response == null || apiResponse.response!.isEmpty) { @@ -223,21 +216,40 @@ class PostRequests { return null; } } - static Future grnPending( Map requestBody) async { var apiResponse = - await RemoteService.postUser(requestBody, ApiUrls.grnPendingDetails); + await RemoteService.postUser(requestBody, ApiUrls.grnPendingDetails); if (apiResponse != null) { return grnPendingBillsResModelFromJson(apiResponse.response!); } else { return null; } } + // static Future grnPending({ + // int page = 0, + // int size = 15, + // String sort = 'last_updated_on,desc', + // Map? requestBody, + // }) async { + // String url = 'http://46.28.44.130:9092/bill/grndetailsPanding' + // '?page=$page&size=$size&sort=$sort'; + // + // var apiResponse = await RemoteService.postUser( + // requestBody ?? {}, url + // ); + // print('response from pending ${apiResponse?.response.toString()} and ${requestBody.toString()}'); + // if (apiResponse != null) { + // return grnPendingBillsResModelFromJson(apiResponse.response!); + // } else { + // return null; + // } + // } + static Future getInvoice( Map requestBody) async { var apiResponse = - await RemoteService.postUser(requestBody, ApiUrls.getInvoiceDetails); + await RemoteService.postUser(requestBody, ApiUrls.getInvoiceDetails); print('response data from invoice ${apiResponse.toString()}'); if (apiResponse != null) { return getInvoiceResponseFromJson(apiResponse.response!); diff --git a/macos/Flutter/ephemeral/Flutter-Generated.xcconfig b/macos/Flutter/ephemeral/Flutter-Generated.xcconfig index b14e7b6..faeec8f 100644 --- a/macos/Flutter/ephemeral/Flutter-Generated.xcconfig +++ b/macos/Flutter/ephemeral/Flutter-Generated.xcconfig @@ -1,6 +1,6 @@ // This is a generated file; do not edit or check into version control. -FLUTTER_ROOT=C:\src\flutter\flutter -FLUTTER_APPLICATION_PATH=C:\Users\Admin\Downloads\shayog +FLUTTER_ROOT=C:\Users\Admin\Downloads\flutter_windows_3.27.1-stable\flutter +FLUTTER_APPLICATION_PATH=C:\Users\Admin\Downloads\shayog 5\shayog COCOAPODS_PARALLEL_CODE_SIGN=true FLUTTER_BUILD_DIR=build FLUTTER_BUILD_NAME=1.0.0 diff --git a/macos/Flutter/ephemeral/flutter_export_environment.sh b/macos/Flutter/ephemeral/flutter_export_environment.sh index c576a2f..4974bea 100644 --- a/macos/Flutter/ephemeral/flutter_export_environment.sh +++ b/macos/Flutter/ephemeral/flutter_export_environment.sh @@ -1,7 +1,7 @@ #!/bin/sh # This is a generated file; do not edit or check into version control. -export "FLUTTER_ROOT=C:\src\flutter\flutter" -export "FLUTTER_APPLICATION_PATH=C:\Users\Admin\Downloads\shayog" +export "FLUTTER_ROOT=C:\Users\Admin\Downloads\flutter_windows_3.27.1-stable\flutter" +export "FLUTTER_APPLICATION_PATH=C:\Users\Admin\Downloads\shayog 5\shayog" export "COCOAPODS_PARALLEL_CODE_SIGN=true" export "FLUTTER_BUILD_DIR=build" export "FLUTTER_BUILD_NAME=1.0.0"