|
|
|
@ -1,4 +1,7 @@
|
|
|
|
|
import 'dart:io';
|
|
|
|
|
|
|
|
|
|
import 'package:easy_localization/src/public_ext.dart';
|
|
|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:flutter_svg/svg.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/api/worklist/worklist_api_client.dart';
|
|
|
|
@ -18,6 +21,9 @@ import 'package:mohem_flutter_app/models/worklist_item_type_model.dart';
|
|
|
|
|
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:provider/provider.dart';
|
|
|
|
|
import 'package:pull_to_refresh/pull_to_refresh.dart';
|
|
|
|
|
|
|
|
|
@ -62,14 +68,7 @@ class _WorkListScreenState extends State<WorkListScreen> {
|
|
|
|
|
key: 'POAPPRV',
|
|
|
|
|
disable: false),
|
|
|
|
|
WorkListItemTypeModelData(
|
|
|
|
|
value: 0,
|
|
|
|
|
name: 'ITG',
|
|
|
|
|
fullName: LocaleKeys.ITGForms.tr(),
|
|
|
|
|
active: false,
|
|
|
|
|
color: [Color(0xffEB8C90), Color(0xffDE6C70)],
|
|
|
|
|
icon: "assets/images/miss_swipe.svg",
|
|
|
|
|
key: 'ITG',
|
|
|
|
|
disable: false),
|
|
|
|
|
value: 0, name: 'ITG', fullName: LocaleKeys.ITGForms.tr(), active: false, color: [Color(0xffEB8C90), Color(0xffDE6C70)], icon: "assets/images/miss_swipe.svg", key: 'ITG', disable: false),
|
|
|
|
|
WorkListItemTypeModelData(
|
|
|
|
|
value: 0,
|
|
|
|
|
name: 'IC',
|
|
|
|
@ -80,23 +79,9 @@ class _WorkListScreenState extends State<WorkListScreen> {
|
|
|
|
|
key: 'INVITEM',
|
|
|
|
|
disable: false),
|
|
|
|
|
WorkListItemTypeModelData(
|
|
|
|
|
value: 0,
|
|
|
|
|
name: 'STAMP',
|
|
|
|
|
fullName: LocaleKeys.stamp.tr(),
|
|
|
|
|
active: false,
|
|
|
|
|
color: [Color(0xff32D892), Color(0xff1AB170)],
|
|
|
|
|
icon: "assets/images/miss_swipe.svg",
|
|
|
|
|
key: 'STAMP',
|
|
|
|
|
disable: false),
|
|
|
|
|
value: 0, name: 'STAMP', fullName: LocaleKeys.stamp.tr(), active: false, color: [Color(0xff32D892), Color(0xff1AB170)], icon: "assets/images/miss_swipe.svg", key: 'STAMP', disable: false),
|
|
|
|
|
WorkListItemTypeModelData(
|
|
|
|
|
value: 0,
|
|
|
|
|
name: 'COC',
|
|
|
|
|
fullName: LocaleKeys.itemCreation.tr(),
|
|
|
|
|
active: false,
|
|
|
|
|
color: [Color(0xff787299), Color(0xff1AB170)],
|
|
|
|
|
icon: "assets/images/miss_swipe.svg",
|
|
|
|
|
key: 'COC',
|
|
|
|
|
disable: true)
|
|
|
|
|
value: 0, name: 'COC', fullName: LocaleKeys.itemCreation.tr(), active: false, color: [Color(0xff787299), Color(0xff1AB170)], icon: "assets/images/miss_swipe.svg", key: 'COC', disable: true)
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
int workListItemIndex = 0;
|
|
|
|
@ -108,13 +93,36 @@ 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();
|
|
|
|
|
|
|
|
|
|
@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() {
|
|
|
|
@ -124,10 +132,7 @@ class _WorkListScreenState extends State<WorkListScreen> {
|
|
|
|
|
} else if (workListElement.key == "COC") {
|
|
|
|
|
workListElement.value = providerData.cocFinalCount;
|
|
|
|
|
} else {
|
|
|
|
|
var tempList = providerData.getOpenNotificationsList
|
|
|
|
|
?.where((notificationElement) =>
|
|
|
|
|
notificationElement.itemType == workListElement.key)
|
|
|
|
|
.toList();
|
|
|
|
|
var tempList = providerData.getOpenNotificationsList?.where((notificationElement) => notificationElement.itemType == workListElement.key).toList();
|
|
|
|
|
if (tempList!.isNotEmpty) {
|
|
|
|
|
workListElement.value = tempList.first.openNtfNumber ?? 0;
|
|
|
|
|
}
|
|
|
|
@ -138,36 +143,45 @@ class _WorkListScreenState extends State<WorkListScreen> {
|
|
|
|
|
ItgFormsModel? itgFormsModel;
|
|
|
|
|
int? itgRequestTypeIndex;
|
|
|
|
|
|
|
|
|
|
void getWorkList() async {
|
|
|
|
|
Future<void> getWorkList({bool showLoading = true}) async {
|
|
|
|
|
try {
|
|
|
|
|
Utils.showLoading(context);
|
|
|
|
|
if (showLoading) Utils.showLoading(context);
|
|
|
|
|
if (workListItemTypes[workListItemIndex].key == "ITG") {
|
|
|
|
|
itgFormsModel = await WorkListApiClient().getITGTaskCountRequestType();
|
|
|
|
|
List<RequestDetails> requestAllList = [];
|
|
|
|
|
for (int i = 0; i < (itgFormsModel?.requestType!.length ?? 0); i++) {
|
|
|
|
|
itgFormsModel?.requestType![i].requestDetails?.forEach((element) {
|
|
|
|
|
element.requestType =
|
|
|
|
|
itgFormsModel?.requestType![i].requestTypeCode;
|
|
|
|
|
element.requestType = itgFormsModel?.requestType![i].requestTypeCode;
|
|
|
|
|
});
|
|
|
|
|
requestAllList = requestAllList +
|
|
|
|
|
(itgFormsModel?.requestType![i].requestDetails ?? []);
|
|
|
|
|
requestAllList = requestAllList + (itgFormsModel?.requestType![i].requestDetails ?? []);
|
|
|
|
|
}
|
|
|
|
|
AppState().setRequestAllList = requestAllList;
|
|
|
|
|
itgFormsModel?.requestType!.insert(
|
|
|
|
|
0,
|
|
|
|
|
RequestType(
|
|
|
|
|
requestDetails: requestAllList,
|
|
|
|
|
requestTypeCode: "all",
|
|
|
|
|
requestTypeName: "All"));
|
|
|
|
|
itgFormsModel?.requestType!.insert(0, RequestType(requestDetails: requestAllList, requestTypeCode: "all", requestTypeName: "All"));
|
|
|
|
|
if ((itgFormsModel?.requestType?.length ?? 0) > 0) {
|
|
|
|
|
itgRequestTypeIndex = 0;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
itgRequestTypeIndex = null;
|
|
|
|
|
workList = await WorkListApiClient()
|
|
|
|
|
.getWorkList(pageNumber, workListItemTypes[workListItemIndex].key);
|
|
|
|
|
workList = await WorkListApiClient().getWorkList(pageNumber, workListItemTypes[workListItemIndex].key, selectedViewID.toString());
|
|
|
|
|
AppState().setWorkList = workList;
|
|
|
|
|
}
|
|
|
|
|
if (showLoading) Utils.hideLoading(context);
|
|
|
|
|
if (showLoading) setState(() {});
|
|
|
|
|
} catch (ex) {
|
|
|
|
|
if (showLoading) Utils.hideLoading(context);
|
|
|
|
|
if (showLoading) Utils.handleException(ex, context, null);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void _onRefresh() async {
|
|
|
|
|
try {
|
|
|
|
|
_refreshController.refreshCompleted();
|
|
|
|
|
Utils.showLoading(context);
|
|
|
|
|
List dataOnRefresh = await Future.wait([
|
|
|
|
|
providerData.fetchWorkListCounter(context, showLoading: false),
|
|
|
|
|
getWorkList(showLoading: false),
|
|
|
|
|
]);
|
|
|
|
|
calculateCounter();
|
|
|
|
|
Utils.hideLoading(context);
|
|
|
|
|
setState(() {});
|
|
|
|
|
} catch (ex) {
|
|
|
|
@ -176,11 +190,6 @@ class _WorkListScreenState extends State<WorkListScreen> {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void _onRefresh() async {
|
|
|
|
|
getWorkList();
|
|
|
|
|
_refreshController.refreshCompleted();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
void dispose() {
|
|
|
|
|
super.dispose();
|
|
|
|
@ -205,25 +214,16 @@ class _WorkListScreenState extends State<WorkListScreen> {
|
|
|
|
|
SizedBox(
|
|
|
|
|
height: 40,
|
|
|
|
|
child: ListView.separated(
|
|
|
|
|
controller: _controller,
|
|
|
|
|
itemBuilder: (context, index) {
|
|
|
|
|
return Container(
|
|
|
|
|
padding: const EdgeInsets.only(
|
|
|
|
|
left: 21, right: 21, top: 8, bottom: 8),
|
|
|
|
|
padding: const EdgeInsets.only(left: 21, right: 21, top: 8, bottom: 8),
|
|
|
|
|
alignment: Alignment.center,
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
borderRadius: BorderRadius.circular(6),
|
|
|
|
|
color: workListItemIndex == index
|
|
|
|
|
? MyColors.darkIconColor
|
|
|
|
|
: MyColors.lightGreyEAColor),
|
|
|
|
|
child:
|
|
|
|
|
("${workListItemTypes[index].name} ${workListItemTypes[index].value > 0 ? "(${workListItemTypes[index].value})" : ""}")
|
|
|
|
|
.toText12(
|
|
|
|
|
color: workListItemIndex == index
|
|
|
|
|
? MyColors.white
|
|
|
|
|
: MyColors.black),
|
|
|
|
|
decoration: BoxDecoration(borderRadius: BorderRadius.circular(6), color: workListItemIndex == index ? MyColors.darkIconColor : MyColors.lightGreyEAColor),
|
|
|
|
|
child: ("${workListItemTypes[index].name} ${workListItemTypes[index].value > 0 ? "(${workListItemTypes[index].value})" : ""}")
|
|
|
|
|
.toText12(color: workListItemIndex == index ? MyColors.white : MyColors.black),
|
|
|
|
|
).onPress(() {
|
|
|
|
|
if (workListItemIndex != index &&
|
|
|
|
|
!workListItemTypes[index].disable) {
|
|
|
|
|
if (workListItemIndex != index && !workListItemTypes[index].disable) {
|
|
|
|
|
workListItemIndex = index;
|
|
|
|
|
if (workListItemTypes[index].value == 0) {
|
|
|
|
|
workList = [];
|
|
|
|
@ -245,7 +245,15 @@ class _WorkListScreenState extends State<WorkListScreen> {
|
|
|
|
|
padding: const EdgeInsets.only(left: 21, right: 21),
|
|
|
|
|
),
|
|
|
|
|
).paddingOnly(top: 21, bottom: 21),
|
|
|
|
|
workListItemTypes[workListItemIndex].fullName.toSectionHeading().paddingOnly(left: 21, right: 21),
|
|
|
|
|
Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
|
|
|
|
workListItemTypes[workListItemIndex].fullName.toSectionHeading().paddingOnly(left: 21, right: 21),
|
|
|
|
|
LocaleKeys.advancedSearch.tr().toText14(isUnderLine: true).onPress(() {
|
|
|
|
|
openBottomSheet(context);
|
|
|
|
|
}).paddingOnly(left: 21, right: 21)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SmartRefresher(
|
|
|
|
|
enablePullDown: true,
|
|
|
|
|
enablePullUp: false,
|
|
|
|
@ -316,17 +324,14 @@ class _WorkListScreenState extends State<WorkListScreen> {
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget itgRowItem(WorkListItemTypeModelData data,
|
|
|
|
|
RequestDetails requestDetails, int index) {
|
|
|
|
|
Widget itgRowItem(WorkListItemTypeModelData data, RequestDetails requestDetails, int index) {
|
|
|
|
|
return InkWell(
|
|
|
|
|
onTap: () async {
|
|
|
|
|
AppState().setItgWorkListIndex = index;
|
|
|
|
|
var shouldReloadData =
|
|
|
|
|
await Navigator.pushNamed(context, AppRoutes.itgDetail);
|
|
|
|
|
var shouldReloadData = await Navigator.pushNamed(context, AppRoutes.itgDetail);
|
|
|
|
|
if (shouldReloadData != null) {
|
|
|
|
|
if (shouldReloadData.toString() == "delegate_reload") {
|
|
|
|
|
providerData.itgFormsModel!.totalCount =
|
|
|
|
|
providerData.itgFormsModel!.totalCount! - 1;
|
|
|
|
|
providerData.itgFormsModel!.totalCount = providerData.itgFormsModel!.totalCount! - 1;
|
|
|
|
|
calculateCounter();
|
|
|
|
|
getWorkList();
|
|
|
|
|
}
|
|
|
|
@ -350,8 +355,7 @@ class _WorkListScreenState extends State<WorkListScreen> {
|
|
|
|
|
},
|
|
|
|
|
child: Container(
|
|
|
|
|
width: double.infinity,
|
|
|
|
|
padding:
|
|
|
|
|
const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10),
|
|
|
|
|
padding: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10),
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
color: Colors.white,
|
|
|
|
|
borderRadius: BorderRadius.circular(10),
|
|
|
|
@ -370,20 +374,11 @@ class _WorkListScreenState extends State<WorkListScreen> {
|
|
|
|
|
Container(
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
borderRadius: BorderRadius.circular(4),
|
|
|
|
|
gradient: LinearGradient(
|
|
|
|
|
transform: GradientRotation(.218),
|
|
|
|
|
begin: Alignment.topRight,
|
|
|
|
|
end: Alignment.bottomRight,
|
|
|
|
|
colors: data.color),
|
|
|
|
|
gradient: LinearGradient(transform: GradientRotation(.218), begin: Alignment.topRight, end: Alignment.bottomRight, colors: data.color),
|
|
|
|
|
),
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
|
children: [
|
|
|
|
|
SvgPicture.asset("assets/images/miss_swipe.svg",
|
|
|
|
|
width: 20, height: 20, color: Colors.white),
|
|
|
|
|
2.height,
|
|
|
|
|
data.name.toText10(color: Colors.white)
|
|
|
|
|
],
|
|
|
|
|
children: [SvgPicture.asset("assets/images/miss_swipe.svg", width: 20, height: 20, color: Colors.white), 2.height, data.name.toText10(color: Colors.white)],
|
|
|
|
|
).paddingAll(6),
|
|
|
|
|
),
|
|
|
|
|
8.width,
|
|
|
|
@ -409,15 +404,153 @@ class _WorkListScreenState extends State<WorkListScreen> {
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget rowItem(WorkListItemTypeModelData data, WorkListResponseModel workData,
|
|
|
|
|
int index) {
|
|
|
|
|
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(() {});
|
|
|
|
|
})
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget rowItem(WorkListItemTypeModelData data, WorkListResponseModel workData, int index) {
|
|
|
|
|
return InkWell(
|
|
|
|
|
onTap: () async {
|
|
|
|
|
AppState().setWorkListIndex = index;
|
|
|
|
|
var data = workList![index];
|
|
|
|
|
var shouldReloadData = await Navigator.pushNamed(
|
|
|
|
|
context, AppRoutes.workListDetail,
|
|
|
|
|
arguments: workData);
|
|
|
|
|
var shouldReloadData = await Navigator.pushNamed(context, AppRoutes.workListDetail, arguments: workData);
|
|
|
|
|
if (shouldReloadData != null) {
|
|
|
|
|
if (shouldReloadData.toString() == "delegate_reload") {
|
|
|
|
|
calculateCounter();
|
|
|
|
@ -442,8 +575,7 @@ class _WorkListScreenState extends State<WorkListScreen> {
|
|
|
|
|
},
|
|
|
|
|
child: Container(
|
|
|
|
|
width: double.infinity,
|
|
|
|
|
padding:
|
|
|
|
|
const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10),
|
|
|
|
|
padding: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10),
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
color: Colors.white,
|
|
|
|
|
borderRadius: BorderRadius.circular(10),
|
|
|
|
@ -462,20 +594,11 @@ class _WorkListScreenState extends State<WorkListScreen> {
|
|
|
|
|
Container(
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
borderRadius: BorderRadius.circular(4),
|
|
|
|
|
gradient: LinearGradient(
|
|
|
|
|
transform: GradientRotation(.218),
|
|
|
|
|
begin: Alignment.topRight,
|
|
|
|
|
end: Alignment.bottomRight,
|
|
|
|
|
colors: data.color),
|
|
|
|
|
gradient: LinearGradient(transform: GradientRotation(.218), begin: Alignment.topRight, end: Alignment.bottomRight, colors: data.color),
|
|
|
|
|
),
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
|
children: [
|
|
|
|
|
SvgPicture.asset("assets/images/miss_swipe.svg",
|
|
|
|
|
width: 20, height: 20, color: Colors.white),
|
|
|
|
|
2.height,
|
|
|
|
|
data.name.toText10(color: Colors.white)
|
|
|
|
|
],
|
|
|
|
|
children: [SvgPicture.asset("assets/images/miss_swipe.svg", width: 20, height: 20, color: Colors.white), 2.height, data.name.toText10(color: Colors.white)],
|
|
|
|
|
).paddingAll(6),
|
|
|
|
|
),
|
|
|
|
|
8.width,
|
|
|
|
@ -500,4 +623,141 @@ class _WorkListScreenState extends State<WorkListScreen> {
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void _animateToIndex(int index, double width) {
|
|
|
|
|
_controller.animateTo(
|
|
|
|
|
index * width,
|
|
|
|
|
duration: const Duration(seconds: 1),
|
|
|
|
|
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 "";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|