advance search improvement, approve delegate added.

merge-requests/20/head
Sikander Saleem 2 years ago
parent b429b139c8
commit 02aff92726

@ -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<WorkListScreen> {
final RefreshController _refreshController = RefreshController(initialRefresh: false);
final Map<int, String> advancedSearchViews = {};
final Map<int, String> advancedSearchSearchBy = {};
final Map<String, String> 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<DashboardProviderModel>(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<WorkListScreen> {
}
} 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<WorkListScreen> {
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<WorkListScreen> {
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<WorkListScreen> {
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<int>>[
PopupMenuItem<int>(value: 1, child: Text(LocaleKeys.openNot.tr())),
PopupMenuItem<int>(value: 2, child: Text(LocaleKeys.fyi.tr())),
PopupMenuItem<int>(value: 3, child: Text(LocaleKeys.toDo.tr())),
PopupMenuItem<int>(value: 4, child: Text(LocaleKeys.all.tr())),
PopupMenuItem<int>(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<int>>[
PopupMenuItem<int>(value: 1, child: Text(LocaleKeys.fromUserName.tr())),
PopupMenuItem<int>(value: 2, child: Text(LocaleKeys.subject.tr())),
PopupMenuItem<int>(value: 3, child: Text(LocaleKeys.sentDate.tr())),
PopupMenuItem<int>(value: 4, child: Text(LocaleKeys.itemTypeDisplayName.tr())),
PopupMenuItem<int>(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: (_) => <PopupMenuItem<String>>[
const PopupMenuItem<String>(value: "HRSSA", child: Text("HR")),
const PopupMenuItem<String>(value: "POAPPRV", child: Text("PO")),
const PopupMenuItem<String>(value: "REQAPPRV", child: Text("PR")),
const PopupMenuItem<String>(value: "INVMOA", child: Text("MR")),
const PopupMenuItem<String>(value: "INVITEM", child: Text("IC")),
const PopupMenuItem<String>(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<WorkListScreen> {
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<DateTime> _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 "";
}
}
}

@ -377,33 +377,32 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
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;
}

@ -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<WorkListAdvanceSearch> {
final Map<int, String> advancedSearchViews = {};
final Map<int, String> advancedSearchSearchBy = {};
final Map<String, String> 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<int>>[
PopupMenuItem<int>(value: 1, child: Text(LocaleKeys.openNot.tr())),
PopupMenuItem<int>(value: 2, child: Text(LocaleKeys.fyi.tr())),
PopupMenuItem<int>(value: 3, child: Text(LocaleKeys.toDo.tr())),
PopupMenuItem<int>(value: 4, child: Text(LocaleKeys.all.tr())),
PopupMenuItem<int>(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<int>>[
PopupMenuItem<int>(value: 1, child: Text(LocaleKeys.fromUserName.tr())),
PopupMenuItem<int>(value: 2, child: Text(LocaleKeys.subject.tr())),
PopupMenuItem<int>(value: 3, child: Text(LocaleKeys.sentDate.tr())),
PopupMenuItem<int>(value: 4, child: Text(LocaleKeys.itemTypeDisplayName.tr())),
PopupMenuItem<int>(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: (_) => <PopupMenuItem<String>>[
const PopupMenuItem<String>(value: "HRSSA", child: Text("HR")),
const PopupMenuItem<String>(value: "POAPPRV", child: Text("PO")),
const PopupMenuItem<String>(value: "REQAPPRV", child: Text("PR")),
const PopupMenuItem<String>(value: "INVMOA", child: Text("MR")),
const PopupMenuItem<String>(value: "INVITEM", child: Text("IC")),
const PopupMenuItem<String>(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;
}
}
Loading…
Cancel
Save