diff --git a/lib/api/pending_transactions_api_client.dart b/lib/api/pending_transactions_api_client.dart new file mode 100644 index 0000000..45e87af --- /dev/null +++ b/lib/api/pending_transactions_api_client.dart @@ -0,0 +1,36 @@ +import 'package:mohem_flutter_app/api/api_client.dart'; +import 'package:mohem_flutter_app/app_state/app_state.dart'; +import 'package:mohem_flutter_app/classes/consts.dart'; +import 'package:mohem_flutter_app/models/generic_response_model.dart'; +import 'package:mohem_flutter_app/models/pending_transactions/get_pending_transactions_details.dart'; +import 'package:mohem_flutter_app/models/pending_transactions/get_req_functions.dart'; + +class PendingTransactionsApiClient { + static final PendingTransactionsApiClient _instance = PendingTransactionsApiClient._internal(); + + PendingTransactionsApiClient._internal(); + + factory PendingTransactionsApiClient() => _instance; + + Future> getPendingReqFunctions() async { + String url = "${ApiConsts.erpRest}GET_PENDING_REQ_FUNCTIONS"; + Map postParams = {}; + + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getPendingTransactionsFunctions ?? []; + }, url, postParams); + } + + Future> getPendingTransactionsDetails(String functionID, String dateFrom, String dateTo) async { + String url = "${ApiConsts.erpRest}GET_PENDING_REQ_DETAILS"; + Map postParams = {"P_FUNCTION_ID": functionID, "P_PAGE_LIMIT": 20, "P_PAGE_NUM": 1, "P_CREATION_DATE_FROM": dateFrom, "P_CREATION_DATE_TO": dateTo}; + + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getPendingTransactionsDetails ?? []; + }, url, postParams); + } +} diff --git a/lib/classes/date_uitl.dart b/lib/classes/date_uitl.dart index c350cb6..7fb4b9f 100644 --- a/lib/classes/date_uitl.dart +++ b/lib/classes/date_uitl.dart @@ -61,7 +61,7 @@ class DateUtil { static String convertDateToString(DateTime date) { const start = "/Date("; - const end = "+0300)"; + const end = "+0300)/"; int milliseconds = date.millisecondsSinceEpoch; return start + "$milliseconds" + end; diff --git a/lib/classes/utils.dart b/lib/classes/utils.dart index 959333e..ea7b559 100644 --- a/lib/classes/utils.dart +++ b/lib/classes/utils.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'dart:typed_data'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/config/routes.dart'; @@ -118,6 +119,20 @@ class Utils { ); } + static Widget getNoDataWidget(BuildContext context) { + return Container( + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SvgPicture.asset('assets/images/not_found.svg', width: 110.0, height: 110.0), + Container(margin: const EdgeInsets.only(top: 15.0), child: const Text("No Result Found", style: TextStyle(fontSize: 14, fontWeight: FontWeight.w600, color: Color(0xFFBABABA)))), + ], + ), + ), + ); + } + static getPostBytes(img) { try { var b64 = img.replaceFirst('data:image/png;base64,', ''); diff --git a/lib/config/routes.dart b/lib/config/routes.dart index e181e9a..fad3e9d 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -23,6 +23,8 @@ import 'package:mohem_flutter_app/ui/profile/personal_info.dart'; import 'package:mohem_flutter_app/ui/screens/eit/add_eit.dart'; import 'package:mohem_flutter_app/ui/screens/mowadhafhi/mowadhafhi_hr_request.dart'; import 'package:mohem_flutter_app/ui/screens/mowadhafhi/request_details.dart'; +import 'package:mohem_flutter_app/ui/screens/pending_transactions/pending_transactions.dart'; +import 'package:mohem_flutter_app/ui/screens/pending_transactions/pending_transactions_details.dart'; import 'package:mohem_flutter_app/ui/screens/profile/profile_screen.dart'; import 'package:mohem_flutter_app/ui/screens/submenu_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/item_history_screen.dart'; @@ -83,6 +85,12 @@ class AppRoutes { static const String mowadhafhiDetails = "/mowadhafhiDetails"; static const String mowadhafhiHRRequest = "/mowadhafhiHRRequest"; + + static const String pendingTransactions = "/pendingTransactions"; + static const String pendingTransactionsDetails = "/pendingTransactionsDetails"; + + + static final Map routes = { login: (context) => LoginScreen(), verifyLogin: (context) => VerifyLoginScreen(), @@ -130,5 +138,8 @@ class AppRoutes { mowadhafhi: (context) => MowadhafhiHome(), mowadhafhiDetails: (context) => MowadhafhiRequestDetails(), mowadhafhiHRRequest: (context) => MowadhafhiHRRequest(), + + pendingTransactions: (context) => PendingTransactions(), + pendingTransactionsDetails: (context) => PendingTransactionsDetails() }; } diff --git a/lib/models/generic_response_model.dart b/lib/models/generic_response_model.dart index edc3b90..00404f4 100644 --- a/lib/models/generic_response_model.dart +++ b/lib/models/generic_response_model.dart @@ -34,6 +34,8 @@ import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_types.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_tickets_list.dart'; import 'package:mohem_flutter_app/models/notification_action_model.dart'; import 'package:mohem_flutter_app/models/notification_get_respond_attributes_list_model.dart'; +import 'package:mohem_flutter_app/models/pending_transactions/get_pending_transactions_details.dart'; +import 'package:mohem_flutter_app/models/pending_transactions/get_req_functions.dart'; import 'package:mohem_flutter_app/models/profile/basic_details_cols_structions.dart'; import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart'; import 'package:mohem_flutter_app/models/profile/phone_number_types_modek.dart'; @@ -168,8 +170,8 @@ class GenericResponseModel { List? getOrganizationsSalariesList; List? getPaymentInformationList; List? getPayslipList; - List? getPendingReqDetailsList; - List? getPendingReqFunctionsList; + // List? getPendingReqDetailsList; + // List? getPendingReqFunctionsList; List? getPerformanceAppraisalList; List? getPhonesNotificationBodyList; List? getPoItemHistoryList; @@ -202,6 +204,8 @@ class GenericResponseModel { List? getMowadhafhiProjects; List? getProjectDepartments; List? getDepartmentSections; + List? getPendingTransactionsFunctions; + List? getPendingTransactionsDetails; List? getUserItemTypesList; List? getVacationRulesList; List? getVaccinationOnHandList; @@ -429,8 +433,8 @@ class GenericResponseModel { this.getOrganizationsSalariesList, this.getPaymentInformationList, this.getPayslipList, - this.getPendingReqDetailsList, - this.getPendingReqFunctionsList, + // this.getPendingReqDetailsList, + // this.getPendingReqFunctionsList, this.getPerformanceAppraisalList, this.getPhonesNotificationBodyList, this.getPoItemHistoryList, @@ -463,6 +467,8 @@ class GenericResponseModel { this.getMowadhafhiProjects, this.getProjectDepartments, this.getDepartmentSections, + this.getPendingTransactionsFunctions, + this.getPendingTransactionsDetails, this.getUserItemTypesList, this.getVacationRulesList, this.getVaccinationOnHandList, @@ -800,8 +806,8 @@ class GenericResponseModel { getOrganizationsSalariesList = json['GetOrganizationsSalariesList']; getPaymentInformationList = json['GetPaymentInformationList']; getPayslipList = json['GetPayslipList']; - getPendingReqDetailsList = json['GetPendingReqDetailsList']; - getPendingReqFunctionsList = json['GetPendingReqFunctionsList']; + // getPendingReqDetailsList = json['GetPendingReqDetailsList']; + // getPendingReqFunctionsList = json['GetPendingReqFunctionsList']; getPerformanceAppraisalList = json['GetPerformanceAppraisalList']; getPhonesNotificationBodyList = json["GetPhonesNotificationBodyList"] == null ? null : List.from(json["GetPhonesNotificationBodyList"].map((x) => GetPhonesNotificationBodyList.fromJson(x))); @@ -924,6 +930,20 @@ class GenericResponseModel { }); } + if (json['GetPendingReqFunctionsList'] != null) { + getPendingTransactionsFunctions = []; + json['GetPendingReqFunctionsList'].forEach((v) { + getPendingTransactionsFunctions!.add(new GetPendingTransactionsFunctions.fromJson(v)); + }); + } + + if (json['GetPendingReqDetailsList'] != null) { + getPendingTransactionsDetails = []; + json['GetPendingReqDetailsList'].forEach((v) { + getPendingTransactionsDetails!.add(new GetPendingTransactionsDetails.fromJson(v)); + }); + } + getUserItemTypesList = json['GetUserItemTypesList']; getVacationRulesList = json['GetVacationRulesList']; getVaccinationOnHandList = json['GetVaccinationOnHandList']; @@ -1264,8 +1284,8 @@ class GenericResponseModel { data['GetOrganizationsSalariesList'] = this.getOrganizationsSalariesList; data['GetPaymentInformationList'] = this.getPaymentInformationList; data['GetPayslipList'] = this.getPayslipList; - data['GetPendingReqDetailsList'] = this.getPendingReqDetailsList; - data['GetPendingReqFunctionsList'] = this.getPendingReqFunctionsList; + // data['GetPendingReqDetailsList'] = this.getPendingReqDetailsList; + // data['GetPendingReqFunctionsList'] = this.getPendingReqFunctionsList; data['GetPerformanceAppraisalList'] = this.getPerformanceAppraisalList; data['GetPhonesNotificationBodyList'] = this.getPhonesNotificationBodyList; if (this.getPoItemHistoryList != null) { diff --git a/lib/models/pending_transactions/get_pending_transactions_details.dart b/lib/models/pending_transactions/get_pending_transactions_details.dart new file mode 100644 index 0000000..0752269 --- /dev/null +++ b/lib/models/pending_transactions/get_pending_transactions_details.dart @@ -0,0 +1,56 @@ +class GetPendingTransactionsDetails { + String? cREATIONDATE; + int? fROMROWNUM; + String? iTEMKEY; + int? nOOFROWS; + String? rEQUESTTYPE; + int? rOWNUM; + int? tOROWNUM; + String? tRANSACTIONCREATEDFOR; + int? tRANSACTIONID; + String? tRANSACTIONINITIATOR; + String? uSERFUNCTIONNAME; + + GetPendingTransactionsDetails( + {this.cREATIONDATE, + this.fROMROWNUM, + this.iTEMKEY, + this.nOOFROWS, + this.rEQUESTTYPE, + this.rOWNUM, + this.tOROWNUM, + this.tRANSACTIONCREATEDFOR, + this.tRANSACTIONID, + this.tRANSACTIONINITIATOR, + this.uSERFUNCTIONNAME}); + + GetPendingTransactionsDetails.fromJson(Map json) { + cREATIONDATE = json['CREATION_DATE']; + fROMROWNUM = json['FROM_ROW_NUM']; + iTEMKEY = json['ITEM_KEY']; + nOOFROWS = json['NO_OF_ROWS']; + rEQUESTTYPE = json['REQUEST_TYPE']; + rOWNUM = json['ROW_NUM']; + tOROWNUM = json['TO_ROW_NUM']; + tRANSACTIONCREATEDFOR = json['TRANSACTION_CREATED_FOR']; + tRANSACTIONID = json['TRANSACTION_ID']; + tRANSACTIONINITIATOR = json['TRANSACTION_INITIATOR']; + uSERFUNCTIONNAME = json['USER_FUNCTION_NAME']; + } + + Map toJson() { + final Map data = new Map(); + data['CREATION_DATE'] = this.cREATIONDATE; + data['FROM_ROW_NUM'] = this.fROMROWNUM; + data['ITEM_KEY'] = this.iTEMKEY; + data['NO_OF_ROWS'] = this.nOOFROWS; + data['REQUEST_TYPE'] = this.rEQUESTTYPE; + data['ROW_NUM'] = this.rOWNUM; + data['TO_ROW_NUM'] = this.tOROWNUM; + data['TRANSACTION_CREATED_FOR'] = this.tRANSACTIONCREATEDFOR; + data['TRANSACTION_ID'] = this.tRANSACTIONID; + data['TRANSACTION_INITIATOR'] = this.tRANSACTIONINITIATOR; + data['USER_FUNCTION_NAME'] = this.uSERFUNCTIONNAME; + return data; + } +} diff --git a/lib/models/pending_transactions/get_req_functions.dart b/lib/models/pending_transactions/get_req_functions.dart new file mode 100644 index 0000000..bfb5892 --- /dev/null +++ b/lib/models/pending_transactions/get_req_functions.dart @@ -0,0 +1,22 @@ +class GetPendingTransactionsFunctions { + int? fUNCTIONID; + String? fUNCTIONNAME; + String? fUNCTIONPROMPT; + + GetPendingTransactionsFunctions( + {this.fUNCTIONID, this.fUNCTIONNAME, this.fUNCTIONPROMPT}); + + GetPendingTransactionsFunctions.fromJson(Map json) { + fUNCTIONID = json['FUNCTION_ID']; + fUNCTIONNAME = json['FUNCTION_NAME']; + fUNCTIONPROMPT = json['FUNCTION_PROMPT']; + } + + Map toJson() { + final Map data = new Map(); + data['FUNCTION_ID'] = this.fUNCTIONID; + data['FUNCTION_NAME'] = this.fUNCTIONNAME; + data['FUNCTION_PROMPT'] = this.fUNCTIONPROMPT; + return data; + } +} diff --git a/lib/ui/landing/widget/app_drawer.dart b/lib/ui/landing/widget/app_drawer.dart index 4732d36..c19fab7 100644 --- a/lib/ui/landing/widget/app_drawer.dart +++ b/lib/ui/landing/widget/app_drawer.dart @@ -39,6 +39,16 @@ class _AppDrawerState extends State { ), onTap: () { drawerNavigator(context, AppRoutes.mowadhafhi); + }), + const Divider(), + InkWell( + child: const DrawerItem( + 'Pending Transactions', + icon: Icons.person, + color: Colors.grey, + ), + onTap: () { + drawerNavigator(context, AppRoutes.pendingTransactions); }) ])) ]))); diff --git a/lib/ui/screens/pending_transactions/pending_transactions.dart b/lib/ui/screens/pending_transactions/pending_transactions.dart new file mode 100644 index 0000000..e074ad7 --- /dev/null +++ b/lib/ui/screens/pending_transactions/pending_transactions.dart @@ -0,0 +1,182 @@ +import 'dart:io'; + +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/pending_transactions_api_client.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/config/routes.dart'; +import 'package:mohem_flutter_app/extensions/int_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/models/pending_transactions/get_req_functions.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'package:mohem_flutter_app/widgets/button/default_button.dart'; +import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; + +class PendingTransactions extends StatefulWidget { + const PendingTransactions({Key? key}) : super(key: key); + + @override + _PendingTransactionsState createState() => _PendingTransactionsState(); +} + +class _PendingTransactionsState extends State { + List getPendingTransactionsFunctions = []; + GetPendingTransactionsFunctions? selectedFunction; + + DateTime selectedDateFrom = DateTime.now(); + DateTime selectedDateTo = DateTime.now(); + + @override + void initState() { + getRequestTypes(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBarWidget( + context, + title: "Pending Transactions", + ), + body: SingleChildScrollView( + child: Container( + width: double.infinity, + padding: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), + margin: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + boxShadow: [ + BoxShadow( + color: const Color(0xff000000).withOpacity(.05), + blurRadius: 26, + offset: const Offset(0, -3), + ), + ], + ), + child: Column( + children: [ + 12.height, + PopupMenuButton( + child: DynamicTextFieldWidget( + "Please select request type", + selectedFunction?.fUNCTIONPROMPT ?? "", + isEnable: false, + isPopup: true, + isInputTypeNum: true, + isReadOnly: false, + ).paddingOnly(bottom: 12), + itemBuilder: (_) => >[ + for (int i = 0; i < getPendingTransactionsFunctions!.length; i++) PopupMenuItem(child: Text(getPendingTransactionsFunctions![i].fUNCTIONPROMPT!), value: i), + ], + onSelected: (int popupIndex) { + selectedFunction = getPendingTransactionsFunctions![popupIndex]; + setState(() {}); + }), + 12.height, + DynamicTextFieldWidget( + "Date From: ", + selectedDateFrom.toString().split(" ")[0], + suffixIconData: Icons.calendar_today, + isEnable: false, + onTap: () async { + selectedDateFrom = await _selectDate(context, DateTime.now()); + setState(() {}); + }, + ).paddingOnly(bottom: 12), + 12.height, + DynamicTextFieldWidget( + "Date To: ", + selectedDateTo.toString().split(" ")[0], + suffixIconData: Icons.calendar_today, + isEnable: false, + onTap: () async { + selectedDateTo = await _selectDate(context, DateTime.now()); + setState(() {}); + }, + ).paddingOnly(bottom: 12), + ], + ), + ), + ), + bottomSheet: Container( + decoration: const BoxDecoration( + color: MyColors.white, + boxShadow: [ + BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3), + ], + ), + child: DefaultButton( + LocaleKeys.submit.tr(), + selectedFunction == null + ? null + : () async { + openRequestDetails(); + }) + .insideContainer, + )); + } + + 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 { + final 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; + } + + void getRequestTypes() async { + try { + Utils.showLoading(context); + getPendingTransactionsFunctions = await PendingTransactionsApiClient().getPendingReqFunctions(); + Utils.hideLoading(context); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + void openRequestDetails() async { + await Navigator.pushNamed(context, AppRoutes.pendingTransactionsDetails, + arguments: {"selectedFunctionID": selectedFunction?.fUNCTIONID, "dateFrom": DateUtil.convertDateToString(selectedDateFrom), "dateTo": DateUtil.convertDateToString(selectedDateTo)}); + } + + void getPendingReqDetails() async { + try { + Utils.showLoading(context); + getPendingTransactionsFunctions = await PendingTransactionsApiClient().getPendingReqFunctions(); + Utils.hideLoading(context); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } +} diff --git a/lib/ui/screens/pending_transactions/pending_transactions_details.dart b/lib/ui/screens/pending_transactions/pending_transactions_details.dart new file mode 100644 index 0000000..931ba50 --- /dev/null +++ b/lib/ui/screens/pending_transactions/pending_transactions_details.dart @@ -0,0 +1,137 @@ +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/pending_transactions_api_client.dart'; +import 'package:mohem_flutter_app/classes/colors.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/models/pending_transactions/get_pending_transactions_details.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; + +class PendingTransactionsDetails extends StatefulWidget { + const PendingTransactionsDetails({Key? key}) : super(key: key); + + @override + _PendingTransactionsDetailsState createState() => _PendingTransactionsDetailsState(); +} + +class _PendingTransactionsDetailsState extends State { + String functionID = ""; + String dateFrom = ""; + String dateTo = ""; + + List getPendingTransactionsDetails = []; + + @override + void initState() { + super.initState(); + } + + getFunctionID() { + if (functionID == "") { + final arguments = (ModalRoute.of(context)?.settings.arguments ?? {}) as Map; + functionID = arguments["selectedFunctionID"].toString(); + dateFrom = arguments["dateFrom"]; + dateTo = arguments["dateTo"]; + getTicketTransactions(); + } + } + + @override + Widget build(BuildContext context) { + getFunctionID(); + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBarWidget( + context, + title: "Pending Transactions", + ), + body: getPendingTransactionsDetails.isNotEmpty + ? Container( + margin: const EdgeInsets.only(top: 10.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Expanded( + child: ListView.separated( + physics: const BouncingScrollPhysics(), + shrinkWrap: true, + itemBuilder: (BuildContext context, int index) { + return Container( + width: double.infinity, + padding: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), + margin: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + boxShadow: [ + BoxShadow( + color: const Color(0xff000000).withOpacity(.05), + blurRadius: 26, + offset: const Offset(0, -3), + ), + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + "Created For ".toText14(color: MyColors.grey57Color), + getPendingTransactionsDetails[index].tRANSACTIONCREATEDFOR!.toText14(color: MyColors.grey57Color), + ], + ), + Column( + children: [ + getPendingTransactionsDetails[index].cREATIONDATE!.split(" ")[0].toText12(color: MyColors.grey70Color), + getPendingTransactionsDetails[index].cREATIONDATE!.split(" ")[1].toText12(color: MyColors.grey70Color), + ], + ), + ], + ), + Container( + child: Row( + children: [ + "Request Name: ".toText14(color: MyColors.grey57Color), + getPendingTransactionsDetails[index].uSERFUNCTIONNAME!.toText12(color: MyColors.grey57Color), + ], + ), + ), + Container( + padding: const EdgeInsets.only(top: 0.0), + child: Row( + children: [ + "Request Type: ".toText14(color: MyColors.grey57Color), + getPendingTransactionsDetails[index].rEQUESTTYPE!.toText14(color: MyColors.redColor), + ], + ), + ), + ], + ), + ); + }, + separatorBuilder: (BuildContext context, int index) => 12.height, + itemCount: getPendingTransactionsDetails.length ?? 0)) + ], + ), + ) + : Utils.getNoDataWidget(context), + ); + } + + void getTicketTransactions() async { + try { + Utils.showLoading(context); + getPendingTransactionsDetails = await PendingTransactionsApiClient().getPendingTransactionsDetails(functionID, dateFrom, dateTo); + Utils.hideLoading(context); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } +}