diff --git a/lib/api/worklist/worklist_api_client.dart b/lib/api/worklist/worklist_api_client.dart index 29805ec..611bcf4 100644 --- a/lib/api/worklist/worklist_api_client.dart +++ b/lib/api/worklist/worklist_api_client.dart @@ -24,6 +24,7 @@ import 'package:mohem_flutter_app/models/get_user_item_type_list.dart'; import 'package:mohem_flutter_app/models/itg_forms_models/itg_request_model.dart'; import 'package:mohem_flutter_app/models/member_information_list_model.dart'; import 'package:mohem_flutter_app/models/notification_get_respond_attributes_list_model.dart'; +import 'package:mohem_flutter_app/models/termination/termination_notification_body.dart'; import 'package:mohem_flutter_app/models/update_user_item_type_list.dart'; import 'package:mohem_flutter_app/models/worklist/GetRFCEmployeeList.dart'; import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart'; @@ -550,6 +551,22 @@ class WorkListApiClient { }, url, postParams); } + Future?> getTerminationNotificationBodyList(int? notificationId) async { + String url = "${ApiConsts.erpRest}GET_TERM_NOTIFICATION_BODY"; + Map postParams = { + "P_NOTIFICATION_ID": notificationId, + "P_PAGE_LIMIT": 100, + "P_PAGE_NUM": 1, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData.getTermNotificationBodyList; + }, url, postParams); + } + + + Future?> getFavoriteReplacementWithoutImage() async { String url = "${ApiConsts.erpRest}Mohemm_GetFavoriteReplacementsWithoutImage"; Map postParams = {}; diff --git a/lib/app_state/app_state.dart b/lib/app_state/app_state.dart index 1039b20..51469c2 100644 --- a/lib/app_state/app_state.dart +++ b/lib/app_state/app_state.dart @@ -90,7 +90,7 @@ class AppState { String get getHuaweiPushToken => _huaweiPushToken; - final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 31, versionID: 5.4, mobileType: Platform.isAndroid ? "android" : "ios"); + final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 31, versionID: 5.7, mobileType: Platform.isAndroid ? "android" : "ios"); void setPostParamsInitConfig() { isAuthenticated = false; diff --git a/lib/models/generic_response_model.dart b/lib/models/generic_response_model.dart index 5188b2c..893b5b9 100644 --- a/lib/models/generic_response_model.dart +++ b/lib/models/generic_response_model.dart @@ -92,6 +92,7 @@ import 'package:mohem_flutter_app/models/submit_term_transaction_list_model.dart import 'package:mohem_flutter_app/models/subordinates_on_leaves_model.dart'; import 'package:mohem_flutter_app/models/termination/get_term_cols_structure_list_model.dart'; import 'package:mohem_flutter_app/models/termination/get_term_dff_structure_list_model.dart'; +import 'package:mohem_flutter_app/models/termination/termination_notification_body.dart'; import 'package:mohem_flutter_app/models/update_item_type_success_list.dart'; import 'package:mohem_flutter_app/models/update_user_item_type_list.dart'; import 'package:mohem_flutter_app/models/vacation_rule/create_vacation_rule_list_model.dart'; @@ -223,7 +224,6 @@ class GenericResponseModel { List? getOrganizationsSalariesList; List? getPaymentInformationList; List? getPayslipList; - // List? getPendingReqDetailsList; // List? getPendingReqFunctionsList; List? getPerformanceAppraisalList; @@ -254,7 +254,7 @@ class GenericResponseModel { List? getSwipesList; List? getTermColsStructureList; List? getTermDffStructureList; - List? getTermNotificationBodyList; + List? getTermNotificationBodyList; List? getTimeCardSummaryList; List? getTicketsByEmployeeList; List? getTicketDetailsByEmployee; @@ -680,6 +680,7 @@ class GenericResponseModel { successMsg = json['SuccessMsg']; successMsgN = json['SuccessMsgN']; vidaUpdatedResponse = json['VidaUpdatedResponse']; + if (json['AddAttSuccessList'] != null) { addAttSuccessList = []; json['AddAttSuccessList'].forEach((v) { @@ -693,6 +694,14 @@ class GenericResponseModel { businessCardPrivilege = json['BusinessCardPrivilege']; calculateAbsenceDuration = json['CalculateAbsenceDuration'] != null ? new CalculateAbsenceDuration.fromJson(json['CalculateAbsenceDuration']) : null; cancelHRTransactionLIst = json['CancelHRTransactionLIst'] != null ? new CancelHRTransactionLIst.fromJson(json['CancelHRTransactionLIst']) : null; + + if (json['GetTermNotificationBodyList'] != null) { + getTermNotificationBodyList = []; + json['GetTermNotificationBodyList'].forEach((v) { + getTermNotificationBodyList!.add(TerminationNotificationBody.fromJson(v)); + }); + } + chatEmployeeLoginList = json['Chat_EmployeeLoginList']; companyBadge = json['CompanyBadge']; companyImage = json['CompanyImage']; @@ -1090,7 +1099,7 @@ class GenericResponseModel { }); } - getTermNotificationBodyList = json['GetTermNotificationBodyList']; + if (json['GetTimeCardSummaryList'] != null) { getTimeCardSummaryList = []; @@ -1612,6 +1621,9 @@ class GenericResponseModel { data['GetNotificationReassignModeList'] = getNotificationReassignModeList!.map((v) => v.toJson()).toList(); } + if(getTermNotificationBodyList !=null){ + data['GetTermNotificationBodyList'] = getTermNotificationBodyList!.map((v) => v.toJson()).toList(); + } data['GetObjectValuesList'] = this.getObjectValuesList; data['GetOpenMissingSwipesList'] = this.getOpenMissingSwipesList; data['GetOpenNotificationsList'] = this.getOpenNotificationsList; @@ -1688,7 +1700,6 @@ class GenericResponseModel { data['GetTermDffStructureList'] = this.getTermDffStructureList!.map((v) => v.toJson()).toList(); } - data['GetTermNotificationBodyList'] = this.getTermNotificationBodyList; if (this.getTimeCardSummaryList != null) { data['GetTimeCardSummaryList'] = this.getTimeCardSummaryList!.map((v) => v.toJson()).toList(); } diff --git a/lib/models/leave_balance/calculate_absence_duration_model.dart b/lib/models/leave_balance/calculate_absence_duration_model.dart index 0f0a48b..cf32a0e 100644 --- a/lib/models/leave_balance/calculate_absence_duration_model.dart +++ b/lib/models/leave_balance/calculate_absence_duration_model.dart @@ -1,6 +1,6 @@ class CalculateAbsenceDuration { - num? pABSENCEDAYS; - num? pABSENCEHOURS; + double? pABSENCEDAYS; + double? pABSENCEHOURS; String? pRETURNMSG; String? pRETURNSTATUS; diff --git a/lib/models/termination/termination_notification_body.dart b/lib/models/termination/termination_notification_body.dart new file mode 100644 index 0000000..2c2c709 --- /dev/null +++ b/lib/models/termination/termination_notification_body.dart @@ -0,0 +1,18 @@ +class TerminationNotificationBody { + String? sEGMENTPROMPT; + String? sEGMENTVALUEDSP; + + TerminationNotificationBody({this.sEGMENTPROMPT, this.sEGMENTVALUEDSP}); + + TerminationNotificationBody.fromJson(Map json) { + sEGMENTPROMPT = json['SEGMENT_PROMPT']; + sEGMENTVALUEDSP = json['SEGMENT_VALUE_DSP']; + } + + Map toJson() { + Map data = new Map(); + data['SEGMENT_PROMPT'] = this.sEGMENTPROMPT; + data['SEGMENT_VALUE_DSP'] = this.sEGMENTVALUEDSP; + return data; + } +} diff --git a/lib/ui/leave_balance/add_leave_balance_screen.dart b/lib/ui/leave_balance/add_leave_balance_screen.dart index a16e81d..830ca85 100644 --- a/lib/ui/leave_balance/add_leave_balance_screen.dart +++ b/lib/ui/leave_balance/add_leave_balance_screen.dart @@ -40,7 +40,7 @@ class _AddLeaveBalanceScreenState extends State { GetAbsenceAttendanceTypesList? selectedAbsenceType; DateTime? startDateTime; DateTime? endDateTime; - int? totalDays; + double? totalDays; String comment = ""; ReplacementList? selectedReplacementEmployee; String? selectedEmp; @@ -90,7 +90,7 @@ class _AddLeaveBalanceScreenState extends State { Utils.showLoading(context); CalculateAbsenceDuration duration = await LeaveBalanceApiClient() .calculateAbsenceDuration(selectedAbsenceType!.aBSENCEATTENDANCETYPEID!, Utils.getMonthNamedFormat(startDateTime!), Utils.getMonthNamedFormat(endDateTime!), -999, empID: selectedEmp); - totalDays = duration.pABSENCEDAYS?.toInt(); + totalDays = duration.pABSENCEDAYS?.toDouble(); Utils.hideLoading(context); setState(() {}); } catch (ex) { @@ -232,7 +232,7 @@ class _AddLeaveBalanceScreenState extends State { isInputTypeNum: true, isEnable: false, onChange: (input) { - totalDays = int.parse(input); + totalDays = double.tryParse(input); }, ), 12.height, diff --git a/lib/ui/work_list/worklist_detail_screen.dart b/lib/ui/work_list/worklist_detail_screen.dart index 0a4f8cc..c80f1b4 100644 --- a/lib/ui/work_list/worklist_detail_screen.dart +++ b/lib/ui/work_list/worklist_detail_screen.dart @@ -44,6 +44,8 @@ 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/dialogs/accept_reject_input_dialog.dart'; import 'package:mohem_flutter_app/widgets/dialogs/confirm_dialog.dart'; +import 'package:mohem_flutter_app/models/termination/termination_notification_body.dart'; + class WorkListDetailScreen extends StatefulWidget { WorkListDetailScreen({Key? key}) : super(key: key); @@ -80,6 +82,8 @@ class _WorkListDetailScreenState extends State { List? getAbsenceCollectionNotificationBodyList = []; GetContactNotificationBodyList? getContactNotificationBodyList; List? getAddressNotificationBodyList = []; + List? getTerminationNotificationBodyList = []; + GenericResponseModel? getBasicNTFBody; GenericResponseModel? getICBody; @@ -121,6 +125,7 @@ class _WorkListDetailScreenState extends State { getItemCreationNtfBody?.itemCreationHeader!.clear(); getPhonesNotificationBodyList!.clear(); getBasicDetNtfBodyList!.clear(); + getTerminationNotificationBodyList!.clear(); getAbsenceCollectionNotificationBodyList!.clear(); getContactNotificationBodyList = null; getAddressNotificationBodyList!.clear(); @@ -147,6 +152,8 @@ class _WorkListDetailScreenState extends State { getContactNotificationBody(); } else if (workListData!.rEQUESTTYPE == "ADDRESS") { getAddressNotificationBody(); + } else if(workListData!.rEQUESTTYPE =='TERMINATION'){ + getTerminationNotificationBody(); } } if (workListData!.iTEMTYPE == "STAMP") { @@ -257,6 +264,7 @@ class _WorkListDetailScreenState extends State { getAbsenceCollectionNotificationBodyList: getAbsenceCollectionNotificationBodyList, getContactNotificationBodyList: getContactNotificationBodyList, getPrNotificationBodyList: getPrNotificationBody, + getTerminationNotificationBodyList:getTerminationNotificationBodyList ), (workListData!.iTEMTYPE == "HRSSA" || workListData!.iTEMTYPE == "STAMP") ? DetailFragment(workListData, memberInformationListModel) @@ -854,6 +862,25 @@ class _WorkListDetailScreenState extends State { Utils.handleException(ex, context, null); } } + void getTerminationNotificationBody() async { + try { + if (apiCallCount == 0) + apiCallCount++; + getTerminationNotificationBodyList = await WorkListApiClient().getTerminationNotificationBodyList(workListData!.nOTIFICATIONID); + Utils.hideLoading(context); + apiCallCount--; + if (apiCallCount == 0) { + + setState(() {}); + } + } catch (ex) { + apiCallCount--; + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + void getStampNotificationBody() async { try { diff --git a/lib/ui/work_list/worklist_fragments/info_fragments.dart b/lib/ui/work_list/worklist_fragments/info_fragments.dart index 5edb6f1..7e1cd1c 100644 --- a/lib/ui/work_list/worklist_fragments/info_fragments.dart +++ b/lib/ui/work_list/worklist_fragments/info_fragments.dart @@ -20,6 +20,8 @@ import 'package:mohem_flutter_app/models/worklist/hr/get_phones_notification_bod import 'package:mohem_flutter_app/models/worklist_response_model.dart'; import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart'; +import 'package:mohem_flutter_app/models/termination/termination_notification_body.dart'; + class InfoFragment extends StatelessWidget { WorkListResponseModel? workListData; List poHeaderList; @@ -33,7 +35,7 @@ class InfoFragment extends StatelessWidget { GetContactNotificationBodyList? getContactNotificationBodyList; GetPrNotificationBodyList? getPrNotificationBodyList; List? getAddressNotificationBodyList = []; - + List? getTerminationNotificationBodyList =[]; InfoFragment( {this.workListData, this.poHeaderList = const [], @@ -46,7 +48,9 @@ class InfoFragment extends StatelessWidget { this.getAbsenceCollectionNotificationBodyList, this.getContactNotificationBodyList, this.getPrNotificationBodyList, - this.getAddressNotificationBodyList}); + this.getAddressNotificationBodyList, + this.getTerminationNotificationBodyList + }); double itemHeight = 0; double itemWidth = 0; @@ -93,6 +97,7 @@ class InfoFragment extends StatelessWidget { if (getAbsenceCollectionNotificationBodyList?.isNotEmpty ?? false) getAbsenceCollectionNotificationBodyListWidget(getAbsenceCollectionNotificationBodyList ?? []), if (getContactNotificationBodyList != null) getContactNotificationBodyListWidget(getContactNotificationBodyList ?? GetContactNotificationBodyList()).objectContainerView(), if (getAddressNotificationBodyList?.isNotEmpty ?? false) getAddressNotificationBodyListWidget(getAddressNotificationBodyList!), + if (getTerminationNotificationBodyList?.isNotEmpty ?? false) getTerminationNotificationBodyListWidget(getTerminationNotificationBodyList!), ]; return Container( width: double.infinity, @@ -499,6 +504,39 @@ class InfoFragment extends StatelessWidget { ).objectContainerView(); } + + Widget getTerminationNotificationBodyListWidget(List getterminationNotificationBodyList) { + bool isOdd = false; + try { + if (getterminationNotificationBodyList.length % 2 != 0) { + isOdd = true; + getterminationNotificationBodyList.add(TerminationNotificationBody(sEGMENTPROMPT: "--", sEGMENTVALUEDSP: "--")); + } + } catch (e) {} + + return GridView.builder( + itemCount: getterminationNotificationBodyList!.length, + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (context, index) => ItemDetailViewGridItem( + index, + getterminationNotificationBodyList[index].sEGMENTPROMPT, + getterminationNotificationBodyList[index].sEGMENTVALUEDSP, + isNeedToShowEmptyDivider: (getterminationNotificationBodyList.length == index + 1) + ? isOdd + ? true + : false + : false, + ), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + childAspectRatio: (itemWidth / itemHeight), + ), + ).objectContainerView(); + } + + + List getPRHeaderValues() { List pRHeaders = []; getPrNotificationBodyList!.pRHeader!.forEach((element) {