diff --git a/lib/ui/work_list/work_list_screen.dart b/lib/ui/work_list/work_list_screen.dart index a19d6a5..35c3c17 100644 --- a/lib/ui/work_list/work_list_screen.dart +++ b/lib/ui/work_list/work_list_screen.dart @@ -1,5 +1,3 @@ -import 'dart:io'; - import 'package:easy_localization/src/public_ext.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -22,8 +20,7 @@ import 'package:mohem_flutter_app/models/worklist_response_model.dart'; import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/bottom_sheet.dart'; -import 'package:mohem_flutter_app/widgets/button/default_button.dart'; -import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; +import 'package:mohem_flutter_app/widgets/bottom_sheets/worklist_advance_search_bottom_sheet.dart'; import 'package:provider/provider.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; @@ -93,36 +90,16 @@ class _WorkListScreenState extends State { final RefreshController _refreshController = RefreshController(initialRefresh: false); - final Map advancedSearchViews = {}; - final Map advancedSearchSearchBy = {}; - final Map advancedSearchItemType = {}; - - int selectedViewID = 1; - String? selectedViewName; - - int selectedSearchByID = 0; - String? selectedSearchByName; - - String selectedItemTypeID = ""; - String? selectedItemTypeName; - - String searchByInput = ""; - String searchByDate = ""; - - DateTime selectedDate = DateTime.now(); final ScrollController _controller = ScrollController(); + int pNotificationType = 1; + @override void initState() { super.initState(); providerData = Provider.of(context, listen: false); calculateCounter(); getWorkList(); - setupAdvancedSearchParams(); - } - - void setupAdvancedSearchParams() { - advancedSearchViews.addAll({1: LocaleKeys.openNot.tr(), 2: LocaleKeys.fyi.tr(), 3: LocaleKeys.toDo.tr(), 4: LocaleKeys.all.tr(), 5: LocaleKeys.meNot.tr()}); } void calculateCounter() { @@ -162,7 +139,7 @@ class _WorkListScreenState extends State { } } else { itgRequestTypeIndex = null; - workList = await WorkListApiClient().getWorkList(pageNumber, workListItemTypes[workListItemIndex].key, selectedViewID.toString()); + workList = await WorkListApiClient().getWorkList(pageNumber, workListItemTypes[workListItemIndex].key, pNotificationType.toString()); AppState().setWorkList = workList; } if (showLoading) Utils.hideLoading(context); @@ -223,6 +200,9 @@ class _WorkListScreenState extends State { child: ("${workListItemTypes[index].name} ${workListItemTypes[index].value > 0 ? "(${workListItemTypes[index].value})" : ""}") .toText12(color: workListItemIndex == index ? MyColors.white : MyColors.black), ).onPress(() { + if (pNotificationType != 1) { + pNotificationType = 1; + } if (workListItemIndex != index && !workListItemTypes[index].disable) { workListItemIndex = index; if (workListItemTypes[index].value == 0) { @@ -249,7 +229,7 @@ class _WorkListScreenState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ workListItemTypes[workListItemIndex].fullName.toSectionHeading().paddingOnly(left: 21, right: 21), - LocaleKeys.advancedSearch.tr().toText14(isUnderLine: true).onPress(() { + LocaleKeys.advancedSearch.tr().toText14(isUnderLine: true, color: MyColors.textMixColor).onPress(() { openBottomSheet(context); }).paddingOnly(left: 21, right: 21) ], @@ -407,141 +387,32 @@ class _WorkListScreenState extends State { void openBottomSheet(BuildContext context) { showMyBottomSheet( context, - child: Padding( - padding: const EdgeInsets.all(21.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - LocaleKeys.advancedSearch.tr().toText18(), - IconButton( - icon: const Icon(Icons.close, color: MyColors.darkIconColor), - onPressed: () => Navigator.pop(context), - ), - ], - ), - 12.height, - PopupMenuButton( - child: DynamicTextFieldWidget( - LocaleKeys.view.tr(), - selectedViewName != null ? selectedViewName! : LocaleKeys.view.tr(), - isEnable: false, - isPopup: true, - isInputTypeNum: true, - isReadOnly: false, - ), - itemBuilder: (_) => >[ - PopupMenuItem(value: 1, child: Text(LocaleKeys.openNot.tr())), - PopupMenuItem(value: 2, child: Text(LocaleKeys.fyi.tr())), - PopupMenuItem(value: 3, child: Text(LocaleKeys.toDo.tr())), - PopupMenuItem(value: 4, child: Text(LocaleKeys.all.tr())), - PopupMenuItem(value: 5, child: Text(LocaleKeys.meNot.tr())), - ], - onSelected: (int popupIndex) { - selectedViewID = popupIndex; - selectedViewName = getSelectedViewName(popupIndex); - setState(() {}); - }, - ), - 12.height, - PopupMenuButton( - child: DynamicTextFieldWidget( - LocaleKeys.searchBy.tr(), - selectedSearchByName != null ? selectedSearchByName! : LocaleKeys.searchBy.tr(), - isEnable: false, - isPopup: true, - isInputTypeNum: true, - isReadOnly: false, - ), - itemBuilder: (_) => >[ - PopupMenuItem(value: 1, child: Text(LocaleKeys.fromUserName.tr())), - PopupMenuItem(value: 2, child: Text(LocaleKeys.subject.tr())), - PopupMenuItem(value: 3, child: Text(LocaleKeys.sentDate.tr())), - PopupMenuItem(value: 4, child: Text(LocaleKeys.itemTypeDisplayName.tr())), - PopupMenuItem(value: 5, child: Text(LocaleKeys.none.tr())), - ], - onSelected: (int popupIndex) { - selectedSearchByID = popupIndex; - selectedSearchByName = getSelectedSearchByName(popupIndex); - setState(() {}); - }, - ), - 12.height, - if (selectedSearchByID == 1 || selectedSearchByID == 2 || selectedSearchByID == 4) - DynamicTextFieldWidget( - LocaleKeys.searchBy.tr(), - LocaleKeys.searchBy.tr(), - isEnable: true, - isPopup: false, - lines: 1, - isInputTypeNum: false, - isReadOnly: false, - onChange: (String value) { - debugPrint(value); - searchByInput = value; - }, - ), - if (selectedSearchByID == 3) - DynamicTextFieldWidget( - LocaleKeys.searchBy.tr(), - LocaleKeys.sentDate.tr(), - suffixIconData: Icons.calendar_today, - isEnable: false, - onTap: () async { - selectedDate = await _selectDate(context, DateTime.now()); - searchByDate = selectedDate.day.toString() + "-" + getMonth(selectedDate.month) + "-" + selectedDate.year.toString(); - setState(() {}); - }, - ), - 12.height, - PopupMenuButton( - child: DynamicTextFieldWidget( - LocaleKeys.itemType.tr(), - selectedItemTypeName != null ? selectedItemTypeName! : LocaleKeys.itemType.tr(), - isEnable: false, - isPopup: true, - isInputTypeNum: true, - isReadOnly: false, - ), - itemBuilder: (_) => >[ - const PopupMenuItem(value: "HRSSA", child: Text("HR")), - const PopupMenuItem(value: "POAPPRV", child: Text("PO")), - const PopupMenuItem(value: "REQAPPRV", child: Text("PR")), - const PopupMenuItem(value: "INVMOA", child: Text("MR")), - const PopupMenuItem(value: "INVITEM", child: Text("IC")), - const PopupMenuItem(value: "STAMP", child: Text("STAMP")), - ], - onSelected: (String popupIndex) { - selectedItemTypeID = popupIndex; - selectedItemTypeName = getSelectedItemType(popupIndex); - setState(() {}); - }, - ), - 20.height, - DefaultButton(LocaleKeys.search.tr(), () async { - Navigator.pop(context); - itgRequestTypeIndex = null; - int index = -1; - for (int i = 0; i < workListItemTypes.length; i++) { - if (workListItemTypes[i].key == selectedItemTypeID) { - index = i; - break; - } - } - Utils.showLoading(context); - workList = await WorkListApiClient().getWorkList(pageNumber, selectedItemTypeID, selectedViewID.toString(), - pSearchUser: searchByInput, pSearchSubject: searchByInput, pSentDate: searchByDate, pSearchItemType: searchByInput); - workListItemIndex = index; - AppState().setWorkList = workList; - _animateToIndex(index, 50.0); - Utils.hideLoading(context); - setState(() {}); - }) - ], - ), - ), + child: WorkListAdvanceSearch((selectedViewID, selectedItemTypeID, searchByInput, searchByDate) async { + itgRequestTypeIndex = null; + pNotificationType = selectedViewID; + int index = -1; + for (int i = 0; i < workListItemTypes.length; i++) { + if (workListItemTypes[i].key == selectedItemTypeID) { + index = i; + break; + } + } + Utils.showLoading(context); + workList = await WorkListApiClient().getWorkList( + pageNumber, + selectedItemTypeID, + selectedViewID.toString(), + pSearchUser: searchByInput, + pSearchSubject: searchByInput, + pSentDate: searchByDate, + pSearchItemType: searchByInput, + ); + workListItemIndex = index; + AppState().setWorkList = workList; + Utils.hideLoading(context); + _animateToIndex(index, 50.0); + setState(() {}); + }), ); } @@ -631,133 +502,4 @@ class _WorkListScreenState extends State { curve: Curves.fastOutSlowIn, ); } - - String getSelectedViewName(int index) { - String returnVal = ""; - switch (index) { - case 1: - returnVal = LocaleKeys.openNot.tr(); - break; - case 2: - returnVal = LocaleKeys.fyi.tr(); - break; - case 3: - returnVal = LocaleKeys.toDo.tr(); - break; - case 4: - returnVal = LocaleKeys.all.tr(); - break; - case 5: - returnVal = LocaleKeys.meNot.tr(); - break; - } - return returnVal; - } - - String getSelectedSearchByName(int index) { - String returnVal = ""; - switch (index) { - case 1: - returnVal = LocaleKeys.fromUserName.tr(); - break; - case 2: - returnVal = LocaleKeys.subject.tr(); - break; - case 3: - returnVal = LocaleKeys.sentDate.tr(); - break; - case 4: - returnVal = LocaleKeys.itemType.tr(); - break; - case 5: - returnVal = LocaleKeys.none.tr(); - break; - } - return returnVal; - } - - String getSelectedItemType(String index) { - String returnVal = ""; - switch (index) { - case "HRSSA": - returnVal = "HR"; - break; - case "POAPPRV": - returnVal = "PO"; - break; - case "REQAPPRV": - returnVal = "PR"; - break; - case "INVMOA": - returnVal = "MR"; - break; - case "INVITEM": - returnVal = "IC"; - break; - case "STAMP": - returnVal = "STAMP"; - break; - } - return returnVal; - } - - Future _selectDate(BuildContext context, DateTime selectedDate) async { - DateTime time = selectedDate; - if (!Platform.isIOS) { - await showCupertinoModalPopup( - context: context, - builder: (cxt) => Container( - height: 250, - color: Colors.white, - child: CupertinoDatePicker( - backgroundColor: Colors.white, - mode: CupertinoDatePickerMode.date, - onDateTimeChanged: (value) { - if (value != null && value != selectedDate) { - time = value; - } - }, - initialDateTime: selectedDate, - ), - ), - ); - } else { - DateTime? picked = await showDatePicker(context: context, initialDate: selectedDate, initialEntryMode: DatePickerEntryMode.calendarOnly, firstDate: DateTime(2015, 8), lastDate: DateTime(2101)); - if (picked != null && picked != selectedDate) { - time = picked; - } - } - return time; - } - - String getMonth(int month) { - switch (month) { - case 1: - return "Jan"; - case 2: - return "Feb"; - case 3: - return "Mar"; - case 4: - return "Apr"; - case 5: - return "May"; - case 6: - return "June"; - case 7: - return "July"; - case 8: - return "Aug"; - case 9: - return "Sep"; - case 10: - return "Oct"; - case 11: - return "Nov"; - case 12: - return "Dec"; - default: - return ""; - } - } } diff --git a/lib/ui/work_list/worklist_detail_screen.dart b/lib/ui/work_list/worklist_detail_screen.dart index 0da21a6..c5d2914 100644 --- a/lib/ui/work_list/worklist_detail_screen.dart +++ b/lib/ui/work_list/worklist_detail_screen.dart @@ -377,33 +377,32 @@ class _WorkListDetailScreenState extends State { void handleFabAction(GetNotificationButtonsList notificationButton) { switch (notificationButton.bUTTONACTION) { case "DELEGATE": - // do something - showMyBottomSheet(context, child: DelegateSheet(title: "Delegate", apiMode: "DELEGATE", notificationID: workListData!.nOTIFICATIONID, actionHistoryList: actionHistoryList)); + showMyBottomSheet(context, child: DelegateSheet(title: LocaleKeys.delegate.tr(), apiMode: notificationButton.bUTTONACTION!, notificationID: workListData!.nOTIFICATIONID, actionHistoryList: actionHistoryList)); + break; case "REQUEST_INFO": // do something else - showMyBottomSheet(context, child: DelegateSheet(title: "Request Info", apiMode: "REQUEST_INFO", notificationID: workListData!.nOTIFICATIONID, actionHistoryList: actionHistoryList)); + showMyBottomSheet(context, child: DelegateSheet(title: LocaleKeys.request_info.tr(), apiMode: "REQUEST_INFO", notificationID: workListData!.nOTIFICATIONID, actionHistoryList: actionHistoryList)); break; case "RFC": // do something else break; + case "APPROVE": + performAction(notificationButton.bUTTONACTION!); + break; case "UPDATE_ACTION": // do something else case "APPROVE_AND_FORWARD": - // do something else showMyBottomSheet(context, child: DelegateSheet(title: "Approve and Forward", apiMode: "APPROVE_AND_FORWARD", notificationID: workListData!.nOTIFICATIONID, actionHistoryList: actionHistoryList)); break; case "FORWARD": - // do something else showMyBottomSheet(context, child: DelegateSheet(title: "Forward", apiMode: "FORWARD", notificationID: workListData!.nOTIFICATIONID, actionHistoryList: actionHistoryList)); break; case "REJECT": - // do something else performNetworkCall(context, email: "", userId: ""); break; case "RETURNED": - // do something else Navigator.pop(context); break; } diff --git a/lib/widgets/bottom_sheets/worklist_advance_search_bottom_sheet.dart b/lib/widgets/bottom_sheets/worklist_advance_search_bottom_sheet.dart new file mode 100644 index 0000000..b669218 --- /dev/null +++ b/lib/widgets/bottom_sheets/worklist_advance_search_bottom_sheet.dart @@ -0,0 +1,242 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/date_uitl.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/widgets/button/default_button.dart'; +import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; + +class WorkListAdvanceSearch extends StatefulWidget { + Function(int, String, String, String) onSearch; + + WorkListAdvanceSearch(this.onSearch, {Key? key}) : super(key: key); + + @override + _WorkListAdvanceSearchState createState() { + return _WorkListAdvanceSearchState(); + } +} + +class _WorkListAdvanceSearchState extends State { + final Map advancedSearchViews = {}; + final Map advancedSearchSearchBy = {}; + final Map advancedSearchItemType = {}; + + int selectedViewID = 1; + String? selectedViewName; + + int selectedSearchByID = 0; + String? selectedSearchByName; + + String selectedItemTypeID = ""; + String? selectedItemTypeName; + + String searchByInput = ""; + String searchByDate = ""; + + DateTime selectedDate = DateTime.now(); + + @override + void initState() { + super.initState(); + advancedSearchViews.addAll({1: LocaleKeys.openNot.tr(), 2: LocaleKeys.fyi.tr(), 3: LocaleKeys.toDo.tr(), 4: LocaleKeys.all.tr(), 5: LocaleKeys.meNot.tr()}); + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + LocaleKeys.advancedSearch.tr().toText18(), + IconButton( + icon: const Icon(Icons.close, color: MyColors.darkIconColor), + onPressed: () => Navigator.pop(context), + ), + ], + ), + 12.height, + PopupMenuButton( + child: DynamicTextFieldWidget( + LocaleKeys.view.tr(), + selectedViewName != null ? selectedViewName! : LocaleKeys.selectTypeT.tr(), + isEnable: false, + isPopup: true, + isInputTypeNum: true, + isReadOnly: false, + ), + itemBuilder: (_) => >[ + PopupMenuItem(value: 1, child: Text(LocaleKeys.openNot.tr())), + PopupMenuItem(value: 2, child: Text(LocaleKeys.fyi.tr())), + PopupMenuItem(value: 3, child: Text(LocaleKeys.toDo.tr())), + PopupMenuItem(value: 4, child: Text(LocaleKeys.all.tr())), + PopupMenuItem(value: 5, child: Text(LocaleKeys.meNot.tr())), + ], + onSelected: (int popupIndex) { + selectedViewID = popupIndex; + selectedViewName = getSelectedViewName(popupIndex); + setState(() {}); + }, + ), + 12.height, + PopupMenuButton( + child: DynamicTextFieldWidget( + LocaleKeys.searchBy.tr(), + selectedSearchByName != null ? selectedSearchByName! : LocaleKeys.selectTypeT.tr(), + isEnable: false, + isPopup: true, + isInputTypeNum: true, + isReadOnly: false, + ), + itemBuilder: (_) => >[ + PopupMenuItem(value: 1, child: Text(LocaleKeys.fromUserName.tr())), + PopupMenuItem(value: 2, child: Text(LocaleKeys.subject.tr())), + PopupMenuItem(value: 3, child: Text(LocaleKeys.sentDate.tr())), + PopupMenuItem(value: 4, child: Text(LocaleKeys.itemTypeDisplayName.tr())), + PopupMenuItem(value: 5, child: Text(LocaleKeys.none.tr())), + ], + onSelected: (int popupIndex) { + selectedSearchByID = popupIndex; + selectedSearchByName = getSelectedSearchByName(popupIndex); + setState(() {}); + }, + ), + 12.height, + if (selectedSearchByID == 1 || selectedSearchByID == 2 || selectedSearchByID == 4) + DynamicTextFieldWidget( + LocaleKeys.searchBy.tr(), + LocaleKeys.searchBy.tr(), + isEnable: true, + isPopup: false, + lines: 1, + isInputTypeNum: false, + isReadOnly: false, + onChange: (String value) { + searchByInput = value; + }, + ), + if (selectedSearchByID == 3) + DynamicTextFieldWidget( + LocaleKeys.searchBy.tr(), + searchByDate.isEmpty ? LocaleKeys.sentDate.tr() : searchByDate, + suffixIconData: Icons.calendar_today, + isEnable: false, + onTap: () async { + selectedDate = await Utils.selectDate(context, DateTime.now()); + searchByDate = selectedDate.day.toString() + "-" + DateUtil.getMonth(selectedDate.month) + "-" + selectedDate.year.toString(); + setState(() {}); + }, + ), + 12.height, + PopupMenuButton( + child: DynamicTextFieldWidget( + LocaleKeys.itemType.tr(), + selectedItemTypeName != null ? selectedItemTypeName! : LocaleKeys.selectTypeT.tr(), + isEnable: false, + isPopup: true, + isInputTypeNum: true, + isReadOnly: false, + ), + itemBuilder: (_) => >[ + const PopupMenuItem(value: "HRSSA", child: Text("HR")), + const PopupMenuItem(value: "POAPPRV", child: Text("PO")), + const PopupMenuItem(value: "REQAPPRV", child: Text("PR")), + const PopupMenuItem(value: "INVMOA", child: Text("MR")), + const PopupMenuItem(value: "INVITEM", child: Text("IC")), + const PopupMenuItem(value: "STAMP", child: Text("STAMP")), + ], + onSelected: (String popupIndex) { + selectedItemTypeID = popupIndex; + selectedItemTypeName = getSelectedItemType(popupIndex); + setState(() {}); + }, + ), + 20.height, + DefaultButton(LocaleKeys.search.tr(), () async { + Navigator.pop(context); + widget.onSearch(selectedViewID, selectedItemTypeID, searchByInput, searchByDate); + }) + ], + ).paddingOnly(left: 21, right: 21, bottom: 21); + } + + String getSelectedViewName(int index) { + String returnVal = ""; + switch (index) { + case 1: + returnVal = LocaleKeys.openNot.tr(); + break; + case 2: + returnVal = LocaleKeys.fyi.tr(); + break; + case 3: + returnVal = LocaleKeys.toDo.tr(); + break; + case 4: + returnVal = LocaleKeys.all.tr(); + break; + case 5: + returnVal = LocaleKeys.meNot.tr(); + break; + } + return returnVal; + } + + String getSelectedSearchByName(int index) { + String returnVal = ""; + switch (index) { + case 1: + returnVal = LocaleKeys.fromUserName.tr(); + break; + case 2: + returnVal = LocaleKeys.subject.tr(); + break; + case 3: + returnVal = LocaleKeys.sentDate.tr(); + break; + case 4: + returnVal = LocaleKeys.itemType.tr(); + break; + case 5: + returnVal = LocaleKeys.none.tr(); + break; + } + return returnVal; + } + + String getSelectedItemType(String index) { + String returnVal = ""; + switch (index) { + case "HRSSA": + returnVal = "HR"; + break; + case "POAPPRV": + returnVal = "PO"; + break; + case "REQAPPRV": + returnVal = "PR"; + break; + case "INVMOA": + returnVal = "MR"; + break; + case "INVITEM": + returnVal = "IC"; + break; + case "STAMP": + returnVal = "STAMP"; + break; + } + return returnVal; + } +}