From cf7843191bb5830fe48873be08ae849c19be077a Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 31 Aug 2022 16:15:57 +0300 Subject: [PATCH 1/2] leave balance added. --- lib/api/leave_balance_api_client.dart | 32 ++++++--- lib/models/generic_response_model.dart | 30 ++++++--- .../cancel_hr_transaction_list_model.dart | 18 +++++ ...sumbit_absence_transaction_list_model.dart | 22 +++++++ ...lidate_absence_transaction_list_model.dart | 18 +++++ lib/models/update_user_item_type_list.dart | 2 - .../add_leave_balance_screen.dart | 65 +++++++++++++++++-- .../leave_balance/leave_balance_screen.dart | 10 +-- lib/ui/misc/request_submit_screen.dart | 16 ++--- 9 files changed, 174 insertions(+), 39 deletions(-) create mode 100644 lib/models/leave_balance/cancel_hr_transaction_list_model.dart create mode 100644 lib/models/leave_balance/sumbit_absence_transaction_list_model.dart create mode 100644 lib/models/leave_balance/validate_absence_transaction_list_model.dart diff --git a/lib/api/leave_balance_api_client.dart b/lib/api/leave_balance_api_client.dart index 73793b3..e24b47d 100644 --- a/lib/api/leave_balance_api_client.dart +++ b/lib/api/leave_balance_api_client.dart @@ -3,9 +3,11 @@ 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/leave_balance/calculate_absence_duration_model.dart'; +import 'package:mohem_flutter_app/models/leave_balance/cancel_hr_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/get_absence_attendance_types_list_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/get_absence_dff_structure_list_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/get_absence_transaction_list_model.dart'; +import 'package:mohem_flutter_app/models/leave_balance/sumbit_absence_transaction_list_model.dart'; class LeaveBalanceApiClient { static final LeaveBalanceApiClient _instance = LeaveBalanceApiClient._internal(); @@ -38,8 +40,8 @@ class LeaveBalanceApiClient { String url = "${ApiConsts.erpRest}CALCULATE_ABSENCE_DURATION"; Map postParams = { "P_ABSENCE_ATTENDANCE_TYPE_ID": pAbsenceAttendanceTypeID, - "P_DATE_END": pDateStart, //"29-Sep-2022", - "P_DATE_START": pDateEnd, + "P_DATE_START": pDateStart, + "P_DATE_END": pDateEnd, "P_SELECTED_RESP_ID": pSelectedResopID, "P_MENU_TYPE": "E", "P_TIME_END": null, @@ -63,7 +65,7 @@ class LeaveBalanceApiClient { } Future validateAbsenceTransaction( - String pDescFlexContextCode, String pFunctionName, int pAbsenceAttendanceTypeID, String pReplacementUserName, String pDateStart, String pDateEnd, int pSelectedResopID, Map data, + String pDescFlexContextCode, String pFunctionName, int pAbsenceAttendanceTypeID, String pReplacementUserName, String pDateStart, String pDateEnd, int pSelectedResopID, Map data, {String comments = ""}) async { String url = "${ApiConsts.erpRest}VALIDATE_ABSENCE_TRANSACTION"; Map postParams = { @@ -74,8 +76,8 @@ class LeaveBalanceApiClient { "P_ABSENCE_COMMENTS": comments, "P_ABSENCE_ATTENDANCE_ID": pAbsenceAttendanceTypeID, "P_ABSENCE_ATTENDANCE_TYPE_ID": pAbsenceAttendanceTypeID, - "P_DATE_END": pDateStart, //"29-Sep-2022", - "P_DATE_START": pDateEnd, + "P_DATE_START": pDateStart, + "P_DATE_END": pDateEnd, //"29-Sep-2022", "P_SELECTED_RESP_ID": pSelectedResopID, "P_MENU_TYPE": "E", "P_TIME_END": null, @@ -89,8 +91,8 @@ class LeaveBalanceApiClient { }, url, postParams); } - Future submitAbsenceTransaction( - String pDescFlexContextCode, String pFunctionName, int pAbsenceAttendanceTypeID, String pReplacementUserName, String pDateStart, String pDateEnd, int pSelectedResopID, Map data, + Future submitAbsenceTransaction( + String pDescFlexContextCode, String pFunctionName, int pAbsenceAttendanceTypeID, String pReplacementUserName, String pDateStart, String pDateEnd, int pSelectedResopID, Map data, {String comments = ""}) async { String url = "${ApiConsts.erpRest}SUBMIT_ABSENCE_TRANSACTION"; Map postParams = { @@ -101,8 +103,8 @@ class LeaveBalanceApiClient { "P_ABSENCE_COMMENTS": comments, "P_ABSENCE_ATTENDANCE_ID": pAbsenceAttendanceTypeID, "P_ABSENCE_ATTENDANCE_TYPE_ID": pAbsenceAttendanceTypeID, - "P_DATE_END": pDateStart, //"29-Sep-2022", - "P_DATE_START": pDateEnd, + "P_DATE_START": pDateStart, + "P_DATE_END": pDateEnd, //"29-Sep-2022", "P_SELECTED_RESP_ID": pSelectedResopID, "P_MENU_TYPE": "E", "P_TIME_END": null, @@ -112,7 +114,17 @@ class LeaveBalanceApiClient { postParams.addAll(AppState().postParamsJson); return await ApiClient().postJsonForObject((json) { GenericResponseModel? responseData = GenericResponseModel.fromJson(json); - return responseData; + return responseData.sumbitAbsenceTransactionList!; + }, url, postParams); + } + + Future cancelHrTransaction(int pTransactionID) async { + String url = "${ApiConsts.erpRest}CANCEL_HR_TRANSACTION"; + Map postParams = {"P_TRANSACTION_ID": pTransactionID}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.cancelHRTransactionLIst!; }, url, postParams); } } diff --git a/lib/models/generic_response_model.dart b/lib/models/generic_response_model.dart index 97d005c..31e52fb 100644 --- a/lib/models/generic_response_model.dart +++ b/lib/models/generic_response_model.dart @@ -34,9 +34,12 @@ import 'package:mohem_flutter_app/models/get_stamp_ns_notification_body_list_mod import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart'; import 'package:mohem_flutter_app/models/get_user_item_type_list.dart'; import 'package:mohem_flutter_app/models/leave_balance/calculate_absence_duration_model.dart'; +import 'package:mohem_flutter_app/models/leave_balance/cancel_hr_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/get_absence_attendance_types_list_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/get_absence_dff_structure_list_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/get_absence_transaction_list_model.dart'; +import 'package:mohem_flutter_app/models/leave_balance/sumbit_absence_transaction_list_model.dart'; +import 'package:mohem_flutter_app/models/leave_balance/validate_absence_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/member_information_list_model.dart'; import 'package:mohem_flutter_app/models/member_login_list_model.dart'; import 'package:mohem_flutter_app/models/monthly_pay_slip/get_deductions_List_model.dart'; @@ -125,7 +128,7 @@ class GenericResponseModel { BasicMemberInformationModel? basicMemberInformation; bool? businessCardPrivilege; CalculateAbsenceDuration? calculateAbsenceDuration; - String? cancelHRTransactionLIst; + CancelHRTransactionLIst? cancelHRTransactionLIst; String? chatEmployeeLoginList; String? companyBadge; String? companyImage; @@ -330,7 +333,7 @@ class GenericResponseModel { String? submitSITTransactionList; String? submitTermTransactionList; List? subordinatesOnLeavesList; - String? sumbitAbsenceTransactionList; + SumbitAbsenceTransactionList? sumbitAbsenceTransactionList; String? tokenID; String? updateAttachmentList; String? updateEmployeeImageList; @@ -342,7 +345,7 @@ class GenericResponseModel { String? vHRGetManagersDetailsList; String? vHRGetProjectByCodeList; bool? vHRIsVerificationCodeValid; - String? validateAbsenceTransactionList; + ValidateAbsenceTransactionList? validateAbsenceTransactionList; ValidateEITTransactionList? validateEITTransactionList; String? validatePhonesTransactionList; List? vrItemTypesList; @@ -657,7 +660,7 @@ class GenericResponseModel { basicMemberInformation = json['BasicMemberInformation'] != null ? BasicMemberInformationModel.fromJson(json['BasicMemberInformation']) : null; businessCardPrivilege = json['BusinessCardPrivilege']; calculateAbsenceDuration = json['CalculateAbsenceDuration'] != null ? new CalculateAbsenceDuration.fromJson(json['CalculateAbsenceDuration']) : null; - cancelHRTransactionLIst = json['CancelHRTransactionLIst']; + cancelHRTransactionLIst = json['CancelHRTransactionLIst'] != null ? new CancelHRTransactionLIst.fromJson(json['CancelHRTransactionLIst']) : null; chatEmployeeLoginList = json['Chat_EmployeeLoginList']; companyBadge = json['CompanyBadge']; companyImage = json['CompanyImage']; @@ -1246,7 +1249,8 @@ class GenericResponseModel { }); } - sumbitAbsenceTransactionList = json['SumbitAbsenceTransactionList']; + sumbitAbsenceTransactionList = json['SumbitAbsenceTransactionList'] != null ? new SumbitAbsenceTransactionList.fromJson(json['SumbitAbsenceTransactionList']) : null; + tokenID = json['TokenID']; updateAttachmentList = json['UpdateAttachmentList']; updateEmployeeImageList = json['UpdateEmployeeImageList']; @@ -1263,7 +1267,8 @@ class GenericResponseModel { vHRGetManagersDetailsList = json['VHR_GetManagersDetailsList']; vHRGetProjectByCodeList = json['VHR_GetProjectByCodeList']; vHRIsVerificationCodeValid = json['VHR_IsVerificationCodeValid']; - validateAbsenceTransactionList = json['ValidateAbsenceTransactionList']; + + validateAbsenceTransactionList = json['ValidateAbsenceTransactionList'] != null ? ValidateAbsenceTransactionList.fromJson(json['ValidateAbsenceTransactionList']) : null; validateEITTransactionList = json['ValidateEITTransactionList'] != null ? ValidateEITTransactionList.fromJson(json['ValidateEITTransactionList']) : null; @@ -1331,11 +1336,12 @@ class GenericResponseModel { data['BasicMemberInformation'] = this.basicMemberInformation!.toJson(); } data['BusinessCardPrivilege'] = this.businessCardPrivilege; - if (this.calculateAbsenceDuration != null) { data['CalculateAbsenceDuration'] = this.calculateAbsenceDuration!.toJson(); } - data['CancelHRTransactionLIst'] = this.cancelHRTransactionLIst; + if (this.cancelHRTransactionLIst != null) { + data['CancelHRTransactionLIst'] = this.calculateAbsenceDuration!.toJson(); + } data['Chat_EmployeeLoginList'] = this.chatEmployeeLoginList; data['CompanyBadge'] = this.companyBadge; data['CompanyImage'] = this.companyImage; @@ -1683,7 +1689,9 @@ class GenericResponseModel { data['SubordinatesOnLeavesList'] = this.subordinatesOnLeavesList!.map((v) => v.toJson()).toList(); } - data['SumbitAbsenceTransactionList'] = this.sumbitAbsenceTransactionList; + if (this.sumbitAbsenceTransactionList != null) { + data['SumbitAbsenceTransactionList'] = this.sumbitAbsenceTransactionList!.toJson(); + } data['TokenID'] = this.tokenID; data['UpdateAttachmentList'] = this.updateAttachmentList; data['UpdateEmployeeImageList'] = this.updateEmployeeImageList; @@ -1699,8 +1707,10 @@ class GenericResponseModel { data['VHR_GetManagersDetailsList'] = this.vHRGetManagersDetailsList; data['VHR_GetProjectByCodeList'] = this.vHRGetProjectByCodeList; data['VHR_IsVerificationCodeValid'] = this.vHRIsVerificationCodeValid; - data['ValidateAbsenceTransactionList'] = this.validateAbsenceTransactionList; + if (validateAbsenceTransactionList != null) { + data['ValidateAbsenceTransactionList'] = validateAbsenceTransactionList!.toJson(); + } if (validateEITTransactionList != null) { data['ValidateEITTransactionList'] = validateEITTransactionList!.toJson(); } diff --git a/lib/models/leave_balance/cancel_hr_transaction_list_model.dart b/lib/models/leave_balance/cancel_hr_transaction_list_model.dart new file mode 100644 index 0000000..86383ee --- /dev/null +++ b/lib/models/leave_balance/cancel_hr_transaction_list_model.dart @@ -0,0 +1,18 @@ +class CancelHRTransactionLIst { + String? pRETURNMSG; + String? pRETURNSTATUS; + + CancelHRTransactionLIst({this.pRETURNMSG, this.pRETURNSTATUS}); + + CancelHRTransactionLIst.fromJson(Map json) { + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + } + + Map toJson() { + Map data = new Map(); + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + return data; + } +} diff --git a/lib/models/leave_balance/sumbit_absence_transaction_list_model.dart b/lib/models/leave_balance/sumbit_absence_transaction_list_model.dart new file mode 100644 index 0000000..3f5a2c4 --- /dev/null +++ b/lib/models/leave_balance/sumbit_absence_transaction_list_model.dart @@ -0,0 +1,22 @@ +class SumbitAbsenceTransactionList { + String? pRETURNMSG; + String? pRETURNSTATUS; + int? pTRANSACTIONID; + + SumbitAbsenceTransactionList( + {this.pRETURNMSG, this.pRETURNSTATUS, this.pTRANSACTIONID}); + + SumbitAbsenceTransactionList.fromJson(Map json) { + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + pTRANSACTIONID = json['P_TRANSACTION_ID']; + } + + Map toJson() { + Map data = new Map(); + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + data['P_TRANSACTION_ID'] = this.pTRANSACTIONID; + return data; + } +} \ No newline at end of file diff --git a/lib/models/leave_balance/validate_absence_transaction_list_model.dart b/lib/models/leave_balance/validate_absence_transaction_list_model.dart new file mode 100644 index 0000000..e75d18e --- /dev/null +++ b/lib/models/leave_balance/validate_absence_transaction_list_model.dart @@ -0,0 +1,18 @@ +class ValidateAbsenceTransactionList { + String? pRETURNMSG; + String? pRETURNSTATUS; + + ValidateAbsenceTransactionList({this.pRETURNMSG, this.pRETURNSTATUS}); + + ValidateAbsenceTransactionList.fromJson(Map json) { + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + } + + Map toJson() { + Map data = new Map(); + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + return data; + } +} \ No newline at end of file diff --git a/lib/models/update_user_item_type_list.dart b/lib/models/update_user_item_type_list.dart index 2253ebb..c6e938c 100644 --- a/lib/models/update_user_item_type_list.dart +++ b/lib/models/update_user_item_type_list.dart @@ -1,5 +1,3 @@ - - class UpdateUserItemTypesList { String? pRETURNMSG; String? pRETURNSTATUS; diff --git a/lib/ui/leave_balance/add_leave_balance_screen.dart b/lib/ui/leave_balance/add_leave_balance_screen.dart index d87fa88..0703caf 100644 --- a/lib/ui/leave_balance/add_leave_balance_screen.dart +++ b/lib/ui/leave_balance/add_leave_balance_screen.dart @@ -4,7 +4,9 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/leave_balance_api_client.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'; @@ -12,7 +14,9 @@ import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/calculate_absence_duration_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/get_absence_attendance_types_list_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/get_absence_dff_structure_list_model.dart'; +import 'package:mohem_flutter_app/models/leave_balance/sumbit_absence_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart'; +import 'package:mohem_flutter_app/ui/misc/request_submit_screen.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/bottom_sheets/search_employee_bottom_sheet.dart'; @@ -59,11 +63,11 @@ class _AddLeaveBalanceScreenState extends State { } } - void getAbsenceDffStructure(String flexCode) async { + void getAbsenceDffStructure() async { try { Utils.showLoading(context); getabsenceDffStructureList.clear(); - getabsenceDffStructureList = await LeaveBalanceApiClient().getAbsenceDffStructure(flexCode, "HR_LOA_SS", -999); + getabsenceDffStructureList = await LeaveBalanceApiClient().getAbsenceDffStructure(selectedAbsenceType!.dESCFLEXCONTEXTCODE!, "HR_LOA_SS", -999); Utils.hideLoading(context); setState(() {}); } catch (ex) { @@ -87,6 +91,50 @@ class _AddLeaveBalanceScreenState extends State { } } + void validateAbsenceTransaction() async { + try { + Utils.showLoading(context); + Map dffDataMap = {}; + for (int i = 1; i <= 20; i++) { + dffDataMap["P_ATTRIBUTE$i"] = null; + for (int dffIndex = 0; dffIndex < getabsenceDffStructureList.length; dffIndex++) { + if ("ATTRIBUTE$i" == getabsenceDffStructureList[dffIndex].aPPLICATIONCOLUMNNAME) { + if (getabsenceDffStructureList[dffIndex].fORMATTYPE == "X") { + dffDataMap["P_ATTRIBUTE$i"] = Utils.formatDate(getabsenceDffStructureList[dffIndex].eSERVICESDV!.pIDCOLUMNNAME!); + } else { + dffDataMap["P_ATTRIBUTE$i"] = getabsenceDffStructureList[dffIndex].eSERVICESDV?.pIDCOLUMNNAME; + } + break; + } + } + } + await LeaveBalanceApiClient().validateAbsenceTransaction(selectedAbsenceType!.dESCFLEXCONTEXTCODE!, "HR_LOA_SS", selectedAbsenceType!.aBSENCEATTENDANCETYPEID!, + selectedReplacementEmployee!.userName!, DateUtil.getFormattedDate(startDateTime!, "MM/dd/yyyy"), DateUtil.getFormattedDate(endDateTime!, "MM/dd/yyyy"), -999, dffDataMap, + comments: comment); + + SumbitAbsenceTransactionList submit = await LeaveBalanceApiClient().submitAbsenceTransaction( + selectedAbsenceType!.dESCFLEXCONTEXTCODE!, + "HR_LOA_SS", + selectedAbsenceType!.aBSENCEATTENDANCETYPEID!, + selectedReplacementEmployee!.userName!, + DateUtil.getFormattedDate(startDateTime!, "MM/dd/yyyy"), + DateUtil.getFormattedDate(endDateTime!, "MM/dd/yyyy"), + -999, + dffDataMap, + comments: comment); + + Utils.hideLoading(context); + + await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, arguments: RequestSubmitScreenParams(LocaleKeys.submit.tr(), submit.pTRANSACTIONID!, "", '')); + Utils.showLoading(context); + await LeaveBalanceApiClient().cancelHrTransaction(submit.pTRANSACTIONID!); + Utils.hideLoading(context); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + @override void dispose() { super.dispose(); @@ -121,7 +169,7 @@ class _AddLeaveBalanceScreenState extends State { } selectedAbsenceType = absenceList[popupIndex]; setState(() {}); - getAbsenceDffStructure(selectedAbsenceType!.dESCFLEXCONTEXTCODE!); + getAbsenceDffStructure(); }, ), 12.height, @@ -206,13 +254,22 @@ class _AddLeaveBalanceScreenState extends State { ).expanded, DefaultButton( LocaleKeys.next.tr(), - (selectedAbsenceType == null || startDateTime == null || endDateTime == null) ? null : () {}, + validateFieldData() + ? null + : () { + validateAbsenceTransaction(); + }, ).insideContainer ], ), ); } + bool validateFieldData() { + List filteredList = getabsenceDffStructureList.where((element) => element.rEQUIREDFLAG == "Y" && (element.eSERVICESDV?.pVALUECOLUMNNAME) == null).toList(); + return (selectedAbsenceType == null || startDateTime == null || endDateTime == null || filteredList.isNotEmpty); + } + Widget parseDynamicFormatType(GetAbsenceDffStructureList model, int index) { if (model.dISPLAYFLAG != "N") { if (model.vALIDATIONTYPE == "N") { diff --git a/lib/ui/leave_balance/leave_balance_screen.dart b/lib/ui/leave_balance/leave_balance_screen.dart index 70a7f7c..52d2613 100644 --- a/lib/ui/leave_balance/leave_balance_screen.dart +++ b/lib/ui/leave_balance/leave_balance_screen.dart @@ -35,15 +35,15 @@ class _LeaveBalanceState extends State { } void getAbsenceTransactions() async { - // try { + try { Utils.showLoading(context); absenceTransList = await LeaveBalanceApiClient().getAbsenceTransactions(-999); Utils.hideLoading(context); setState(() {}); - // } catch (ex) { - // Utils.hideLoading(context); - // Utils.handleException(ex, context, null); - // } + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } } @override diff --git a/lib/ui/misc/request_submit_screen.dart b/lib/ui/misc/request_submit_screen.dart index 63874c7..dd3d68f 100644 --- a/lib/ui/misc/request_submit_screen.dart +++ b/lib/ui/misc/request_submit_screen.dart @@ -27,6 +27,7 @@ class RequestSubmitScreenParams { int transactionId; String pItemId; String approvalFlag; + RequestSubmitScreenParams(this.title, this.transactionId, this.pItemId, this.approvalFlag); } @@ -147,17 +148,16 @@ class _RequestSubmitScreenState extends State { } return Scaffold( backgroundColor: Colors.white, - appBar: AppBarWidget( - context, - title: params!.title, - ), + appBar: AppBarWidget(context, title: params!.title), body: Column( children: [ ListView( padding: const EdgeInsets.all(21).copyWith(top: 14), physics: const BouncingScrollPhysics(), children: [ - attachmentView(LocaleKeys.attachments.tr(),), + attachmentView( + LocaleKeys.attachments.tr(), + ), 14.height, InputWidget( LocaleKeys.comments.tr(), @@ -207,15 +207,15 @@ class _RequestSubmitScreenState extends State { return Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - CircularAvatar(url: approver.eMPLOYEEIMAGE, isImageBase64: true, height: 40, width: 40), + CircularAvatar(url: approver.eMPLOYEEIMAGE, isImageBase64: approver.eMPLOYEEIMAGE != null, height: 40, width: 40), 9.width, Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - approver.aPPROVER!.toText16(), - approver.pOSITIONTITLE!.toText12(color: MyColors.lightTextColor), + (approver.aPPROVER ?? "").toText16(), + (approver.pOSITIONTITLE ?? "").toText12(color: MyColors.lightTextColor), ], ), ) From ee2c74b5dada0fbc80f53a1c0a760aa14972b2d4 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Thu, 1 Sep 2022 09:31:29 +0300 Subject: [PATCH 2/2] leave balance submit request added. --- lib/api/leave_balance_api_client.dart | 16 ++++++++++++++++ lib/models/generic_response_model.dart | 9 ++++++--- .../start_absence_approval_proccess_model.dart | 18 ++++++++++++++++++ .../add_leave_balance_screen.dart | 2 +- lib/ui/misc/request_submit_screen.dart | 15 ++++++++++----- 5 files changed, 51 insertions(+), 9 deletions(-) create mode 100644 lib/models/leave_balance/start_absence_approval_proccess_model.dart diff --git a/lib/api/leave_balance_api_client.dart b/lib/api/leave_balance_api_client.dart index e24b47d..cd577ba 100644 --- a/lib/api/leave_balance_api_client.dart +++ b/lib/api/leave_balance_api_client.dart @@ -7,6 +7,7 @@ import 'package:mohem_flutter_app/models/leave_balance/cancel_hr_transaction_lis import 'package:mohem_flutter_app/models/leave_balance/get_absence_attendance_types_list_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/get_absence_dff_structure_list_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/get_absence_transaction_list_model.dart'; +import 'package:mohem_flutter_app/models/leave_balance/start_absence_approval_proccess_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/sumbit_absence_transaction_list_model.dart'; class LeaveBalanceApiClient { @@ -127,4 +128,19 @@ class LeaveBalanceApiClient { return responseData.cancelHRTransactionLIst!; }, url, postParams); } + + Future startAbsenceApprovalProcess(int pTransactionID, String comments, int pSelectedResopID) async { + String url = "${ApiConsts.erpRest}START_ABSENCE_APPROVAL_PROCESS"; + Map postParams = { + "P_TRANSACTION_ID": pTransactionID, + "P_SELECTED_RESP_ID": pSelectedResopID, + "P_COMMENTS": comments, + "P_MENU_TYPE": "E", + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.startAbsenceApprovalProccess!; + }, url, postParams); + } } diff --git a/lib/models/generic_response_model.dart b/lib/models/generic_response_model.dart index 31e52fb..5fca9a3 100644 --- a/lib/models/generic_response_model.dart +++ b/lib/models/generic_response_model.dart @@ -38,6 +38,7 @@ import 'package:mohem_flutter_app/models/leave_balance/cancel_hr_transaction_lis import 'package:mohem_flutter_app/models/leave_balance/get_absence_attendance_types_list_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/get_absence_dff_structure_list_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/get_absence_transaction_list_model.dart'; +import 'package:mohem_flutter_app/models/leave_balance/start_absence_approval_proccess_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/sumbit_absence_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/validate_absence_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/member_information_list_model.dart'; @@ -312,7 +313,7 @@ class GenericResponseModel { String? resubmitHrTransactionList; String? sFHGetPoNotificationBodyList; String? sFHGetPrNotificationBodyList; - String? startAbsenceApprovalProccess; + StartAbsenceApprovalProccess? startAbsenceApprovalProccess; StartAddressApprovalProcess? startAddressApprovalProcessList; String? startBasicDetApprProcessList; String? startCeiApprovalProcess; @@ -1215,7 +1216,7 @@ class GenericResponseModel { resubmitHrTransactionList = json['ResubmitHrTransactionList']; sFHGetPoNotificationBodyList = json['SFH_GetPoNotificationBodyList']; sFHGetPrNotificationBodyList = json['SFH_GetPrNotificationBodyList']; - startAbsenceApprovalProccess = json['StartAbsenceApprovalProccess']; + startAbsenceApprovalProccess = json['StartAbsenceApprovalProccess'] != null ? StartAbsenceApprovalProccess.fromJson(json['StartAbsenceApprovalProccess']) : null; startAddressApprovalProcessList = json['StartAddressApprovalProcessList'] != null ? StartAddressApprovalProcess.fromJson(json['StartAddressApprovalProcessList']) : null; startBasicDetApprProcessList = json['StartBasicDetApprProcessList']; @@ -1650,7 +1651,9 @@ class GenericResponseModel { data['ResubmitHrTransactionList'] = this.resubmitHrTransactionList; data['SFH_GetPoNotificationBodyList'] = this.sFHGetPoNotificationBodyList; data['SFH_GetPrNotificationBodyList'] = this.sFHGetPrNotificationBodyList; - data['StartAbsenceApprovalProccess'] = this.startAbsenceApprovalProccess; + if (this.startAbsenceApprovalProccess != null) { + data['StartAbsenceApprovalProccess'] = this.startAbsenceApprovalProccess!.toJson(); + } data['StartAddressApprovalProcessList'] = this.startAddressApprovalProcessList; data['StartBasicDetApprProcessList'] = this.startBasicDetApprProcessList; data['StartCeiApprovalProcess'] = this.startCeiApprovalProcess; diff --git a/lib/models/leave_balance/start_absence_approval_proccess_model.dart b/lib/models/leave_balance/start_absence_approval_proccess_model.dart new file mode 100644 index 0000000..ca27cb1 --- /dev/null +++ b/lib/models/leave_balance/start_absence_approval_proccess_model.dart @@ -0,0 +1,18 @@ +class StartAbsenceApprovalProccess { + String? pRETURNMSG; + String? pRETURNSTATUS; + + StartAbsenceApprovalProccess({this.pRETURNMSG, this.pRETURNSTATUS}); + + StartAbsenceApprovalProccess.fromJson(Map json) { + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + } + + Map toJson() { + Map data = new Map(); + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + 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 0703caf..dc44085 100644 --- a/lib/ui/leave_balance/add_leave_balance_screen.dart +++ b/lib/ui/leave_balance/add_leave_balance_screen.dart @@ -125,7 +125,7 @@ class _AddLeaveBalanceScreenState extends State { Utils.hideLoading(context); - await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, arguments: RequestSubmitScreenParams(LocaleKeys.submit.tr(), submit.pTRANSACTIONID!, "", '')); + await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, arguments: RequestSubmitScreenParams(LocaleKeys.submit.tr(), submit.pTRANSACTIONID!, "", "add_leave_balance")); Utils.showLoading(context); await LeaveBalanceApiClient().cancelHrTransaction(submit.pTRANSACTIONID!); Utils.hideLoading(context); diff --git a/lib/ui/misc/request_submit_screen.dart b/lib/ui/misc/request_submit_screen.dart index dd3d68f..ba69ee8 100644 --- a/lib/ui/misc/request_submit_screen.dart +++ b/lib/ui/misc/request_submit_screen.dart @@ -4,6 +4,7 @@ import 'dart:io'; import 'package:easy_localization/easy_localization.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/leave_balance_api_client.dart'; import 'package:mohem_flutter_app/api/my_attendance_api_client.dart'; import 'package:mohem_flutter_app/api/profile_api_client.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; @@ -114,20 +115,24 @@ class _RequestSubmitScreenState extends State { params!.pItemId, params!.transactionId, ); - } else { + } else if (params!.approvalFlag == 'add_leave_balance') { + await LeaveBalanceApiClient().startAbsenceApprovalProcess( + params!.transactionId, + comments.text, + -999, + ); + } else if (params!.approvalFlag == 'eit') { await MyAttendanceApiClient().startEitApprovalProcess( LocaleKeys.submit.tr(), comments.text, params!.pItemId, params!.transactionId, ); - } + } else {} Utils.hideLoading(context); Utils.showToast(LocaleKeys.yourRequestHasBeenSubmittedForApprovals.tr(), longDuration: true); - Navigator.of(context).popUntil((route) { - return route.settings.name == AppRoutes.dashboard; - }); + Navigator.of(context).popUntil((route) => route.settings.name == AppRoutes.dashboard); Navigator.pushNamed(context, AppRoutes.workList); } catch (ex) { Utils.hideLoading(context);