diff --git a/lib/api/profile_api_client.dart b/lib/api/profile_api_client.dart index 53a13b2..9f772da 100644 --- a/lib/api/profile_api_client.dart +++ b/lib/api/profile_api_client.dart @@ -1,9 +1,10 @@ import 'dart:async'; -import 'dart:convert'; 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/get_approves_list_model.dart'; +import 'package:mohem_flutter_app/models/get_contact_dff_structure_list.dart'; import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; import 'package:mohem_flutter_app/models/get_employee_address_model.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; @@ -13,6 +14,10 @@ import 'package:mohem_flutter_app/models/profile/get_countries_list_model.dart'; import 'package:mohem_flutter_app/models/profile/phone_number_types_model.dart'; import 'package:mohem_flutter_app/models/profile/start_address_approval_process_model.dart'; import 'package:mohem_flutter_app/models/profile/submit_address_transaction.dart'; +import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart'; +import 'package:mohem_flutter_app/models/profile/get_contact_clos_structure_list.dart'; +import 'package:mohem_flutter_app/models/profile/get_contact_details_list.dart'; +import 'package:mohem_flutter_app/models/profile/submit_contact_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/profile/submit_phone_transactions.dart'; import 'package:mohem_flutter_app/models/start_phone_approval_process_model.dart'; import 'package:mohem_flutter_app/api/api_client.dart'; @@ -137,6 +142,56 @@ class ProfileApiClient { }, url, postParams); } + Future submetConatctTransaction( + String pFunctionName, + String actionType, + int contactRelationId, + String date, + ) async { + String url = "${ApiConsts.erpRest}SUBMIT_CONTACT_TRANSACTION"; + Map postParams = { + "P_MENU_TYPE": "E", + "P_SELECTED_RESP_ID": -999, + "P_FUNCTION_NAME": pFunctionName, + "EITTransactionTBL": [ + { + "TRANSACTION_NUMBER": 1, + "NAME": "DATE_END", + "VARCHAR2_VALUE": null, + "NUMBER_VALUE": null, + "DATE_VALUE": date, + } + ], + "P_CONTACT_RELATIONSHIP_ID": contactRelationId, + "P_ACTION": actionType, + "PayrollCodeStr": "CS", + "LegislationCodeStr": "SA", + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.submitContactTransactionList; + }, url, postParams); + } + + Future getApproves(String action, String comments, int transactionId, String itemKey) async { + String url = "${ApiConsts.erpRest}GET_APPROVERS_LIST"; + Map postParams = { + "P_AME_TRANSACTION_TYPE": "SSHRMS", + "P_PAGE_LIMIT": 1000, + "P_PAGE_NUM": 1, + "P_TRANSACTION_ID": transactionId, + "P_ACTION_MODE": action, + "P_COMMENTS": comments, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + // return responseData.getApprovesList; + return (responseData.getApprovesList?.length ?? 0) > 0 ? responseData.getApprovesList!.first : null; + }, url, postParams); + } + Future submitPhoneNumbers(List empList) async { String url = "${ApiConsts.erpRest}SUBMIT_PHONES_TRANSACTION"; Map postParams = { @@ -246,4 +301,77 @@ class ProfileApiClient { return responseData.getCountriesList ?? []; }, url, postParams); } + + // add & update family member + Future> getBasicDetDffStructure() async { + String url = "${ApiConsts.erpRest}GET_BASIC_DET_DFF_STRUCTURE"; + Map postParams = {"P_FUNCTION_NAME": "HR_PERINFO_SS", "P_MENU_TYPE": "E", "P_REQUEST_TYPE": "CONTACT", "P_SELECTED_RESP_ID": -999}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getBasicDetDffStructureList ?? []; + }, url, postParams); + } + + // add & update family member + Future> getContactColsStructureList(String actionType) async { + String url = "${ApiConsts.erpRest}GET_CONTACT_COLS_STRUCTURE"; + Map postParams = { + "P_ACTION": actionType, + "P_FUNCTION_NAME": "HR_PERINFO_SS", + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getContactColsStructureList ?? []; + }, url, postParams); + } + + // update family member + Future> getContactDetailsList(int contactRelationId) async { + String url = "${ApiConsts.erpRest}GET_CONTACT_DETAILS"; + Map postParams = { + "P_MENU_TYPE": "E", + "P_SELECTED_RESP_ID": -999, + "P_CONTACT_RELATIONSHIP_ID": contactRelationId, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getContactDetailsList ?? []; + }, url, postParams); + } + + // add & update family member + Future> getContactDffStructureList() async { + String url = "${ApiConsts.erpRest}GET_CONTACT_DFF_STRUCTURE"; + Map postParams = { + "P_DESC_FLEX_CONTEXT_CODE": "HMG_ADD_CONTACT_DETAILS", + "P_FUNCTION_NAME": "HR_PERINFO_SS", + "P_MENU_TYPE": "E", + "P_SELECTED_RESP_ID": -999, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getContactDffStructureList ?? []; + }, url, postParams); + } + + Future submetConatctTransactionAddAndUpdate(String actionType, int relationId, List> list) async { + String url = "${ApiConsts.erpRest}SUBMIT_CONTACT_TRANSACTION"; + Map postParams = { + "P_MENU_TYPE": "E", + "P_SELECTED_RESP_ID": -999, + "P_FUNCTION_NAME": "HR_PERINFO_SS", + "P_ACTION": actionType, + "P_CONTACT_RELATIONSHIP_ID": relationId, + }; + postParams["EITTransactionTBL"] = list; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.submitContactTransactionList; + }, url, postParams); + } } diff --git a/lib/config/routes.dart b/lib/config/routes.dart index e204a77..89f8435 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -15,13 +15,16 @@ import 'package:mohem_flutter_app/ui/my_attendance/my_attendance_screen.dart'; import 'package:mohem_flutter_app/ui/payslip/monthly_pay_slip_screen.dart'; import 'package:mohem_flutter_app/ui/profile/basic_details.dart'; import 'package:mohem_flutter_app/ui/profile/contact_details.dart'; -import 'package:mohem_flutter_app/ui/profile/delete_familyMember.dart'; import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_address_screen.dart'; import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart'; import 'package:mohem_flutter_app/ui/profile/family_members.dart'; import 'package:mohem_flutter_app/ui/profile/personal_info.dart'; import 'package:mohem_flutter_app/ui/screens/announcements/announcement_details.dart'; import 'package:mohem_flutter_app/ui/screens/announcements/announcements.dart'; +import 'package:mohem_flutter_app/ui/profile/delete_family_member.dart'; +import 'package:mohem_flutter_app/ui/profile/family_members.dart'; +import 'package:mohem_flutter_app/ui/profile/personal_info.dart'; +import 'package:mohem_flutter_app/ui/profile/add_update_family_member.dart'; // import 'package:mohem_flutter_app/ui/my_attendance/work_from_home_screen.dart'; import 'package:mohem_flutter_app/ui/screens/eit/add_eit.dart'; @@ -82,6 +85,7 @@ class AppRoutes { static const String contactDetails = "/contactDetails"; static const String familyMembers = "/familyMembers"; static const String deleteFamilyMember = "/deleteFamilyMember"; + static const String addUpdateFamilyMember = "/addUpdateFamilyMember"; // Mowadhafhi static const String mowadhafhi = "/mowadhafhi"; @@ -140,8 +144,10 @@ class AppRoutes { addDynamicInput: (context) => DynamicInputScreen(), addDynamicInputProfile: (context) => DynamicInputScreenProfile(), addDynamicAddressScreen: (context) => DynamicInputScreenAddress(), - deleteFamilyMember: (context) => DeleteFamilyMember(), + + deleteFamilyMember: (context) => DeleteFamilyMember(ModalRoute.of(context)!.settings.arguments as int), requestSubmitScreen: (context) => RequestSubmitScreen(), + addUpdateFamilyMember: (context) => AddUpdateFamilyMember(), //mowadhafhi mowadhafhi: (context) => MowadhafhiHome(), diff --git a/lib/models/generic_response_model.dart b/lib/models/generic_response_model.dart index 613ca59..a0fd49b 100644 --- a/lib/models/generic_response_model.dart +++ b/lib/models/generic_response_model.dart @@ -11,6 +11,7 @@ import 'package:mohem_flutter_app/models/get_absence_collection_notification_bod import 'package:mohem_flutter_app/models/get_action_history_list_model.dart'; import 'package:mohem_flutter_app/models/get_approves_list_model.dart'; import 'package:mohem_flutter_app/models/get_attachement_list_model.dart'; +import 'package:mohem_flutter_app/models/get_contact_dff_structure_list.dart'; import 'package:mohem_flutter_app/models/get_day_hours_type_details_list_model.dart'; import 'package:mohem_flutter_app/models/get_default_value_list_model.dart'; import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; @@ -58,7 +59,8 @@ import 'package:mohem_flutter_app/models/profile/get_countries_list_model.dart'; import 'package:mohem_flutter_app/models/profile/phone_number_types_model.dart'; import 'package:mohem_flutter_app/models/profile/start_address_approval_process_model.dart'; import 'package:mohem_flutter_app/models/profile/submit_address_transaction.dart'; -import 'package:mohem_flutter_app/models/profile/submit_phone_transactions.dart'; +import 'package:mohem_flutter_app/models/profile/get_contact_clos_structure_list.dart'; +import 'package:mohem_flutter_app/models/profile/get_contact_details_list.dart'; import 'package:mohem_flutter_app/models/start_eit_approval_process_model.dart'; import 'package:mohem_flutter_app/models/start_phone_approval_process_model.dart'; import 'package:mohem_flutter_app/models/submit_eit_transaction_list_model.dart'; @@ -71,6 +73,7 @@ import 'package:mohem_flutter_app/models/worklist/hr/get_contact_notification_bo import 'package:mohem_flutter_app/models/worklist/hr/get_phones_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart'; import 'package:mohem_flutter_app/models/worklist_response_model.dart'; +import 'package:mohem_flutter_app/models/profile/submit_contact_transaction_list_model.dart'; class GenericResponseModel { String? date; @@ -143,9 +146,9 @@ class GenericResponseModel { List? getCcpTransactionsList; List? getCcpTransactionsListNew; List? getConcurrentProgramsList; - List? getContactColsStructureList; - List? getContactDetailsList; - List? getContactDffStructureList; + List? getContactColsStructureList; + List? getContactDetailsList; + List? getContactDffStructureList; GetContactNotificationBodyList? getContactNotificationBodyList; List? getCountriesList; List? getDayHoursTypeDetailsList; @@ -304,7 +307,7 @@ class GenericResponseModel { Map? submitBasicDetTransactionList; String? submitCEITransactionList; String? submitCcpTransactionList; - String? submitContactTransactionList; + SubmitContactTransactionList? submitContactTransactionList; SubmitEITTransactionList? submitEITTransactionList; String? submitHrTransactionList; Map? submitPhonesTransactionList; @@ -714,6 +717,13 @@ class GenericResponseModel { getBasicDetDffStructureList!.add(new GetBasicDetDffStructureList.fromJson(v)); }); } + if (json['GetContactDffStructureList'] != null) { + getContactDffStructureList = []; + json['GetContactDffStructureList'].forEach((v) { + getContactDffStructureList!.add(new GetContactDffStructureList.fromJson(v)); + }); + } + if (json['GetBasicDetNtfBodyList'] != null) { getBasicDetNtfBodyList = []; json['GetBasicDetNtfBodyList'].forEach((v) { @@ -729,9 +739,18 @@ class GenericResponseModel { getCcpTransactionsList = json['GetCcpTransactionsList']; getCcpTransactionsListNew = json['GetCcpTransactionsList_New']; getConcurrentProgramsList = json['GetConcurrentProgramsList']; - getContactColsStructureList = json['GetContactColsStructureList']; - getContactDetailsList = json['GetContactDetailsList']; - getContactDffStructureList = json['GetContactDffStructureList']; + if (json['GetContactDetailsList'] != null) { + getContactDetailsList = []; + json['GetContactDetailsList'].forEach((v) { + getContactDetailsList!.add(new GetContactDetailsList.fromJson(v)); + }); + } + if (json['GetContactColsStructureList'] != null) { + getContactColsStructureList = []; + json['GetContactColsStructureList'].forEach((v) { + getContactColsStructureList!.add(new GetContactColsStructureList.fromJson(v)); + }); + } getContactNotificationBodyList = json["GetContactNotificationBodyList"] == null ? null : GetContactNotificationBodyList.fromJson(json["GetContactNotificationBodyList"]); if (json['GetCountriesList'] != null) { @@ -1137,7 +1156,7 @@ class GenericResponseModel { submitBasicDetTransactionList = json['SubmitBasicDetTransactionList']; submitCEITransactionList = json['SubmitCEITransactionList']; submitCcpTransactionList = json['SubmitCcpTransactionList']; - submitContactTransactionList = json['SubmitContactTransactionList']; + submitContactTransactionList = json['SubmitContactTransactionList'] != null ? new SubmitContactTransactionList.fromJson(json['SubmitContactTransactionList']) : null; submitEITTransactionList = json['SubmitEITTransactionList'] != null ? new SubmitEITTransactionList.fromJson(json['SubmitEITTransactionList']) : null; submitHrTransactionList = json['SubmitHrTransactionList']; @@ -1282,9 +1301,15 @@ class GenericResponseModel { data['GetCcpTransactionsList'] = this.getCcpTransactionsList; data['GetCcpTransactionsList_New'] = this.getCcpTransactionsListNew; data['GetConcurrentProgramsList'] = this.getConcurrentProgramsList; - data['GetContactColsStructureList'] = this.getContactColsStructureList; - data['GetContactDetailsList'] = this.getContactDetailsList; - data['GetContactDffStructureList'] = this.getContactDffStructureList; + if (this.getContactDetailsList != null) { + data['GetContactDetailsList'] = this.getContactDetailsList!.map((v) => v.toJson()).toList(); + } + if (this.getContactColsStructureList != null) { + data['GetContactColsStructureList'] = this.getContactColsStructureList!.map((v) => v.toJson()).toList(); + } + if (this.getContactDffStructureList != null) { + data['GetContactDffStructureList'] = this.getContactDffStructureList!.map((v) => v.toJson()).toList(); + } data['GetContactNotificationBodyList'] = this.getContactNotificationBodyList; data['GetCountriesList'] = this.getCountriesList; if (this.getDayHoursTypeDetailsList != null) { diff --git a/lib/models/get_contact_dff_structure_list.dart b/lib/models/get_contact_dff_structure_list.dart new file mode 100644 index 0000000..44a86be --- /dev/null +++ b/lib/models/get_contact_dff_structure_list.dart @@ -0,0 +1,179 @@ + + +import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; +import 'package:mohem_flutter_app/models/profile/get_contact_details_list.dart'; + +class GetContactDffStructureList { + String? aLPHANUMERICALLOWEDFLAG; + String? aPPLICATIONCOLUMNNAME; + String? cHILDSEGMENTSVS; + dynamic? cHILDSEGMENTSVSSplited; + String? dEFAULTTYPE; + String? dEFAULTVALUE; + String? dESCFLEXCONTEXTCODE; + String? dESCFLEXCONTEXTNAME; + String? dESCFLEXNAME; + String? dISPLAYFLAG; + String? eNABLEDFLAG; + ESERVICESDV? eSERVICESDV; + List? eSERVICESVS; + String? fLEXVALUESETNAME; + String? fORMATTYPE; + String? fORMATTYPEDSP; + String? lONGLISTFLAG; + int? mAXIMUMSIZE; + String? mAXIMUMVALUE; + String? mINIMUMVALUE; + String? mOBILEENABLED; + String? nUMBERPRECISION; + String? nUMERICMODEENABLEDFLAG; + String? pARENTSEGMENTSDV; + List? pARENTSEGMENTSDVSplited; + String? pARENTSEGMENTSVS; + List? pARENTSEGMENTSVSSplitedVS; + String? rEADONLY; + String? rEQUIREDFLAG; + String? sEGMENTNAME; + String? sEGMENTPROMPT; + int? sEGMENTSEQNUM; + String? uPPERCASEONLYFLAG; + String? uSEDFLAG; + String? vALIDATIONTYPE; + String? vALIDATIONTYPEDSP; + GetContactDetailsList? getContactDetailsList; + + GetContactDffStructureList( + {this.aLPHANUMERICALLOWEDFLAG, + this.aPPLICATIONCOLUMNNAME, + this.cHILDSEGMENTSVS, + this.cHILDSEGMENTSVSSplited, + this.dEFAULTTYPE, + this.dEFAULTVALUE, + this.dESCFLEXCONTEXTCODE, + this.dESCFLEXCONTEXTNAME, + this.dESCFLEXNAME, + this.dISPLAYFLAG, + this.eNABLEDFLAG, + this.eSERVICESDV, + this.eSERVICESVS, + this.fLEXVALUESETNAME, + this.fORMATTYPE, + this.fORMATTYPEDSP, + this.lONGLISTFLAG, + this.mAXIMUMSIZE, + this.mAXIMUMVALUE, + this.mINIMUMVALUE, + this.mOBILEENABLED, + this.nUMBERPRECISION, + this.nUMERICMODEENABLEDFLAG, + this.pARENTSEGMENTSDV, + this.pARENTSEGMENTSDVSplited, + this.pARENTSEGMENTSVS, + this.pARENTSEGMENTSVSSplitedVS, + this.rEADONLY, + this.rEQUIREDFLAG, + this.sEGMENTNAME, + this.sEGMENTPROMPT, + this.sEGMENTSEQNUM, + this.uPPERCASEONLYFLAG, + this.uSEDFLAG, + this.vALIDATIONTYPE, + this.vALIDATIONTYPEDSP, + this.getContactDetailsList}); + + GetContactDffStructureList.fromJson(Map json) { + aLPHANUMERICALLOWEDFLAG = json['ALPHANUMERIC_ALLOWED_FLAG']; + aPPLICATIONCOLUMNNAME = json['APPLICATION_COLUMN_NAME']; + cHILDSEGMENTSVS = json['CHILD_SEGMENTS_VS']; + cHILDSEGMENTSVSSplited = json['CHILD_SEGMENTS_VS_Splited']; + dEFAULTTYPE = json['DEFAULT_TYPE']; + dEFAULTVALUE = json['DEFAULT_VALUE']; + dESCFLEXCONTEXTCODE = json['DESC_FLEX_CONTEXT_CODE']; + dESCFLEXCONTEXTNAME = json['DESC_FLEX_CONTEXT_NAME']; + dESCFLEXNAME = json['DESC_FLEX_NAME']; + dISPLAYFLAG = json['DISPLAY_FLAG']; + eNABLEDFLAG = json['ENABLED_FLAG']; + eSERVICESDV = json['E_SERVICES_DV'] != null + ? new ESERVICESDV.fromJson(json['E_SERVICES_DV']) + : null; + if (json['E_SERVICES_VS'] != null) { + eSERVICESVS = []; + json['E_SERVICES_VS'].forEach((v) { + eSERVICESVS!.add(new ESERVICESVS.fromJson(v)); + }); + } + fLEXVALUESETNAME = json['FLEX_VALUE_SET_NAME']; + fORMATTYPE = json['FORMAT_TYPE']; + fORMATTYPEDSP = json['FORMAT_TYPE_DSP']; + lONGLISTFLAG = json['LONGLIST_FLAG']; + mAXIMUMSIZE = json['MAXIMUM_SIZE']; + mAXIMUMVALUE = json['MAXIMUM_VALUE']; + mINIMUMVALUE = json['MINIMUM_VALUE']; + mOBILEENABLED = json['MOBILE_ENABLED']; + nUMBERPRECISION = json['NUMBER_PRECISION']; + nUMERICMODEENABLEDFLAG = json['NUMERIC_MODE_ENABLED_FLAG']; + pARENTSEGMENTSDV = json['PARENT_SEGMENTS_DV']; + pARENTSEGMENTSVS = json['PARENT_SEGMENTS_VS']; + rEADONLY = json['READ_ONLY']; + rEQUIREDFLAG = json['REQUIRED_FLAG']; + sEGMENTNAME = json['SEGMENT_NAME']; + sEGMENTPROMPT = json['SEGMENT_PROMPT']; + sEGMENTSEQNUM = json['SEGMENT_SEQ_NUM']; + uPPERCASEONLYFLAG = json['UPPERCASE_ONLY_FLAG']; + uSEDFLAG = json['USED_FLAG']; + vALIDATIONTYPE = json['VALIDATION_TYPE']; + vALIDATIONTYPEDSP = json['VALIDATION_TYPE_DSP']; + } + + Map toJson() { + final Map data = new Map(); + data['ALPHANUMERIC_ALLOWED_FLAG'] = this.aLPHANUMERICALLOWEDFLAG; + data['APPLICATION_COLUMN_NAME'] = this.aPPLICATIONCOLUMNNAME; + data['CHILD_SEGMENTS_VS'] = this.cHILDSEGMENTSVS; + data['CHILD_SEGMENTS_VS_Splited'] = this.cHILDSEGMENTSVSSplited; + data['DEFAULT_TYPE'] = this.dEFAULTTYPE; + data['DEFAULT_VALUE'] = this.dEFAULTVALUE; + data['DESC_FLEX_CONTEXT_CODE'] = this.dESCFLEXCONTEXTCODE; + data['DESC_FLEX_CONTEXT_NAME'] = this.dESCFLEXCONTEXTNAME; + data['DESC_FLEX_NAME'] = this.dESCFLEXNAME; + data['DISPLAY_FLAG'] = this.dISPLAYFLAG; + data['ENABLED_FLAG'] = this.eNABLEDFLAG; + if (this.eSERVICESDV != null) { + data['E_SERVICES_DV'] = this.eSERVICESDV!.toJson(); + } + if (this.eSERVICESVS != null) { + data['E_SERVICES_VS'] = this.eSERVICESVS!.map((v) => v.toJson()).toList(); + } + data['FLEX_VALUE_SET_NAME'] = this.fLEXVALUESETNAME; + data['FORMAT_TYPE'] = this.fORMATTYPE; + data['FORMAT_TYPE_DSP'] = this.fORMATTYPEDSP; + data['LONGLIST_FLAG'] = this.lONGLISTFLAG; + data['MAXIMUM_SIZE'] = this.mAXIMUMSIZE; + data['MAXIMUM_VALUE'] = this.mAXIMUMVALUE; + data['MINIMUM_VALUE'] = this.mINIMUMVALUE; + data['MOBILE_ENABLED'] = this.mOBILEENABLED; + data['NUMBER_PRECISION'] = this.nUMBERPRECISION; + data['NUMERIC_MODE_ENABLED_FLAG'] = this.nUMERICMODEENABLEDFLAG; + data['PARENT_SEGMENTS_DV'] = this.pARENTSEGMENTSDV; + if (this.pARENTSEGMENTSDVSplited != null) { + data['PARENT_SEGMENTS_DV_Splited'] = + this.pARENTSEGMENTSDVSplited!.map((v) => v.toJson()).toList(); + } + data['PARENT_SEGMENTS_VS'] = this.pARENTSEGMENTSVS; + if (this.pARENTSEGMENTSVSSplitedVS != null) { + data['PARENT_SEGMENTS_VS_SplitedVS'] = + this.pARENTSEGMENTSVSSplitedVS!.map((v) => v.toJson()).toList(); + } + data['READ_ONLY'] = this.rEADONLY; + data['REQUIRED_FLAG'] = this.rEQUIREDFLAG; + data['SEGMENT_NAME'] = this.sEGMENTNAME; + data['SEGMENT_PROMPT'] = this.sEGMENTPROMPT; + data['SEGMENT_SEQ_NUM'] = this.sEGMENTSEQNUM; + data['UPPERCASE_ONLY_FLAG'] = this.uPPERCASEONLYFLAG; + data['USED_FLAG'] = this.uSEDFLAG; + data['VALIDATION_TYPE'] = this.vALIDATIONTYPE; + data['VALIDATION_TYPE_DSP'] = this.vALIDATIONTYPEDSP; + return data; + } +} + diff --git a/lib/models/profile/basic_details_dff_structure.dart b/lib/models/profile/basic_details_dff_structure.dart index db3312e..9d44b85 100644 --- a/lib/models/profile/basic_details_dff_structure.dart +++ b/lib/models/profile/basic_details_dff_structure.dart @@ -1,11 +1,12 @@ import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; +import 'package:mohem_flutter_app/models/profile/get_contact_details_list.dart'; class GetBasicDetDffStructureList { String? aLPHANUMERICALLOWEDFLAG; String? aPPLICATIONCOLUMNNAME; String? cHILDSEGMENTSVS; - Null? cHILDSEGMENTSVSSplited; + dynamic? cHILDSEGMENTSVSSplited; String? dEFAULTTYPE; String? dEFAULTVALUE; String? dESCFLEXCONTEXTCODE; @@ -27,9 +28,9 @@ class GetBasicDetDffStructureList { String? nUMBERPRECISION; String? nUMERICMODEENABLEDFLAG; String? pARENTSEGMENTSDV; - List? pARENTSEGMENTSDVSplited; + List? pARENTSEGMENTSDVSplited; String? pARENTSEGMENTSVS; - List? pARENTSEGMENTSVSSplitedVS; + List? pARENTSEGMENTSVSSplitedVS; String? rEADONLY; String? rEQUIREDFLAG; String? sEGMENTNAME; @@ -40,6 +41,7 @@ class GetBasicDetDffStructureList { String? vALIDATIONTYPE; String? vALIDATIONTYPEDSP; GetEmployeeBasicDetailsList? userBasicDetail; + GetContactDetailsList? getContactDetailsList; GetBasicDetDffStructureList( {this.aLPHANUMERICALLOWEDFLAG, @@ -79,7 +81,9 @@ class GetBasicDetDffStructureList { this.uSEDFLAG, this.vALIDATIONTYPE, this.vALIDATIONTYPEDSP, - this.userBasicDetail}); + this.userBasicDetail, + this.getContactDetailsList + }); GetBasicDetDffStructureList.fromJson(Map json) { aLPHANUMERICALLOWEDFLAG = json['ALPHANUMERIC_ALLOWED_FLAG']; @@ -134,6 +138,7 @@ class GetBasicDetDffStructureList { uSEDFLAG = json['USED_FLAG']; vALIDATIONTYPE = json['VALIDATION_TYPE']; vALIDATIONTYPEDSP = json['VALIDATION_TYPE_DSP']; + } Map toJson() { diff --git a/lib/models/profile/get_contact_clos_structure_list.dart b/lib/models/profile/get_contact_clos_structure_list.dart new file mode 100644 index 0000000..7f3ad90 --- /dev/null +++ b/lib/models/profile/get_contact_clos_structure_list.dart @@ -0,0 +1,93 @@ + + +import 'package:mohem_flutter_app/models/profile/get_contact_details_list.dart'; + +class GetContactColsStructureList { + String? aPPLICATIONCOLUMNNAME; + String? dATATYPE; + String? dISPLAYFLAG; + int? gROUPNUM; + dynamic? mAXIMUMSIZE; + String? oBJECTNAME; + String? oBJECTTYPE; + List? objectValuesList; + //List? objectValuesList; + String? rEQUIREDFLAG; + String? sEGMENTPROMPT; + int? sEGMENTSEQNUM; + GetContactDetailsList? getContactDetailsList; + + GetContactColsStructureList( + {this.aPPLICATIONCOLUMNNAME, + this.dATATYPE, + this.dISPLAYFLAG, + this.gROUPNUM, + this.mAXIMUMSIZE, + this.oBJECTNAME, + this.oBJECTTYPE, + this.objectValuesList, + this.rEQUIREDFLAG, + this.sEGMENTPROMPT, + this.sEGMENTSEQNUM, + this.getContactDetailsList}); + + GetContactColsStructureList.fromJson(Map json) { + aPPLICATIONCOLUMNNAME = json['APPLICATION_COLUMN_NAME']; + dATATYPE = json['DATATYPE']; + dISPLAYFLAG = json['DISPLAY_FLAG']; + gROUPNUM = json['GROUP_NUM']; + mAXIMUMSIZE = json['MAXIMUM_SIZE']; + oBJECTNAME = json['OBJECT_NAME']; + oBJECTTYPE = json['OBJECT_TYPE']; + if (json['ObjectValuesList'] != null) { + objectValuesList = []; + json['ObjectValuesList'].forEach((v) { + objectValuesList!.add(new ObjectValuesList.fromJson(v)); + }); + } + rEQUIREDFLAG = json['REQUIRED_FLAG']; + sEGMENTPROMPT = json['SEGMENT_PROMPT']; + sEGMENTSEQNUM = json['SEGMENT_SEQ_NUM']; + } + + Map toJson() { + final Map data = new Map(); + data['APPLICATION_COLUMN_NAME'] = this.aPPLICATIONCOLUMNNAME; + data['DATATYPE'] = this.dATATYPE; + data['DISPLAY_FLAG'] = this.dISPLAYFLAG; + data['GROUP_NUM'] = this.gROUPNUM; + data['MAXIMUM_SIZE'] = this.mAXIMUMSIZE; + data['OBJECT_NAME'] = this.oBJECTNAME; + data['OBJECT_TYPE'] = this.oBJECTTYPE; + if (this.objectValuesList != null) { + data['ObjectValuesList'] = + this.objectValuesList!.map((v) => v.toJson()).toList(); + } + data['REQUIRED_FLAG'] = this.rEQUIREDFLAG; + data['SEGMENT_PROMPT'] = this.sEGMENTPROMPT; + data['SEGMENT_SEQ_NUM'] = this.sEGMENTSEQNUM; + return data; + } +} + +class ObjectValuesList { + String? cODE; + String? dESCRIPTION; + String? mEANING; + + ObjectValuesList({this.cODE, this.dESCRIPTION, this.mEANING}); + + ObjectValuesList.fromJson(Map json) { + cODE = json['CODE']; + dESCRIPTION = json['DESCRIPTION']; + mEANING = json['MEANING']; + } + + Map toJson() { + final Map data = new Map(); + data['CODE'] = this.cODE; + data['DESCRIPTION'] = this.dESCRIPTION; + data['MEANING'] = this.mEANING; + return data; + } +} \ No newline at end of file diff --git a/lib/models/profile/get_contact_details_list.dart b/lib/models/profile/get_contact_details_list.dart new file mode 100644 index 0000000..9097291 --- /dev/null +++ b/lib/models/profile/get_contact_details_list.dart @@ -0,0 +1,54 @@ + + +class GetContactDetailsList { + String? aPPLICATIONCOLUMNNAME; + String? dATATYPE; + String? dATEVALUE; + String? dISPLAYFLAG; + int? gROUPNUM; + dynamic? nUMBERVALUE; + String? sEGMENTPROMPT; + int? sEGMENTSEQNUM; + String? sEGMENTVALUEDSP; + String? vARCHAR2VALUE; + + GetContactDetailsList( + {this.aPPLICATIONCOLUMNNAME, + this.dATATYPE, + this.dATEVALUE, + this.dISPLAYFLAG, + this.gROUPNUM, + this.nUMBERVALUE, + this.sEGMENTPROMPT, + this.sEGMENTSEQNUM, + this.sEGMENTVALUEDSP, + this.vARCHAR2VALUE}); + + GetContactDetailsList.fromJson(Map json) { + aPPLICATIONCOLUMNNAME = json['APPLICATION_COLUMN_NAME']; + dATATYPE = json['DATATYPE']; + dATEVALUE = json['DATE_VALUE']; + dISPLAYFLAG = json['DISPLAY_FLAG']; + gROUPNUM = json['GROUP_NUM']; + nUMBERVALUE = json['NUMBER_VALUE']; + sEGMENTPROMPT = json['SEGMENT_PROMPT']; + sEGMENTSEQNUM = json['SEGMENT_SEQ_NUM']; + sEGMENTVALUEDSP = json['SEGMENT_VALUE_DSP']; + vARCHAR2VALUE = json['VARCHAR2_VALUE']; + } + + Map toJson() { + final Map data = new Map(); + data['APPLICATION_COLUMN_NAME'] = this.aPPLICATIONCOLUMNNAME; + data['DATATYPE'] = this.dATATYPE; + data['DATE_VALUE'] = this.dATEVALUE; + data['DISPLAY_FLAG'] = this.dISPLAYFLAG; + data['GROUP_NUM'] = this.gROUPNUM; + data['NUMBER_VALUE'] = this.nUMBERVALUE; + data['SEGMENT_PROMPT'] = this.sEGMENTPROMPT; + data['SEGMENT_SEQ_NUM'] = this.sEGMENTSEQNUM; + data['SEGMENT_VALUE_DSP'] = this.sEGMENTVALUEDSP; + data['VARCHAR2_VALUE'] = this.vARCHAR2VALUE; + return data; + } +} \ No newline at end of file diff --git a/lib/models/profile/submit_contact_transaction_list_model.dart b/lib/models/profile/submit_contact_transaction_list_model.dart new file mode 100644 index 0000000..3510473 --- /dev/null +++ b/lib/models/profile/submit_contact_transaction_list_model.dart @@ -0,0 +1,34 @@ + +class SubmitContactTransactionList { + String? pITEMKEY; + String? pRETURNMSG; + String? pRETURNSTATUS; + int? pTRANSACTIONID; + + SubmitContactTransactionList( + {this.pITEMKEY, + this.pRETURNMSG, + this.pRETURNSTATUS, + this.pTRANSACTIONID}); + + SubmitContactTransactionList.fromJson(Map json) { + pITEMKEY = json['P_ITEM_KEY']; + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + pTRANSACTIONID = json['P_TRANSACTION_ID']; + } + + Map toJson() { + final Map data = new Map(); + data['P_ITEM_KEY'] = this.pITEMKEY; + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + data['P_TRANSACTION_ID'] = this.pTRANSACTIONID; + return data; + } +} + +// if (this.submitContactTransactionList != null) { +// data['SubmitContactTransactionList'] = +// this.submitContactTransactionList!.toJson(); +// } \ No newline at end of file diff --git a/lib/ui/misc/request_submit_screen.dart b/lib/ui/misc/request_submit_screen.dart index 9ebe34a..64c8f6b 100644 --- a/lib/ui/misc/request_submit_screen.dart +++ b/lib/ui/misc/request_submit_screen.dart @@ -99,6 +99,13 @@ class _RequestSubmitScreenState extends State { params!.pItemId, params!.transactionId, ); + } else if (params!.approvalFlag == 'family_member') { + await ProfileApiClient().getApproves( + "SUBMIT", + comments.text, + params!.transactionId!.toInt(), + params!.pItemId.toString(), + ); } else { await MyAttendanceApiClient().startEitApprovalProcess( "SUBMIT", diff --git a/lib/ui/profile/add_update_family_member.dart b/lib/ui/profile/add_update_family_member.dart new file mode 100644 index 0000000..e5a59f9 --- /dev/null +++ b/lib/ui/profile/add_update_family_member.dart @@ -0,0 +1,483 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/profile_api_client.dart'; +import 'package:mohem_flutter_app/classes/colors.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/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/models/dyanmic_forms/validate_eit_transaction_model.dart'; +import 'package:mohem_flutter_app/models/get_approves_list_model.dart'; +import 'package:mohem_flutter_app/models/get_contact_dff_structure_list.dart'; +import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart'; +import 'package:mohem_flutter_app/models/profile/get_contact_clos_structure_list.dart'; +import 'package:mohem_flutter_app/models/profile/get_contact_details_list.dart'; +import 'package:mohem_flutter_app/models/profile/submit_contact_transaction_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 'dart:io'; +import 'package:flutter/cupertino.dart'; +import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; +import 'package:easy_localization/src/public_ext.dart'; + +class AddUpdateFamilyMember extends StatefulWidget { + const AddUpdateFamilyMember({Key? key}) : super(key: key); + + @override + _AddUpdateFamilyMemberState createState() => _AddUpdateFamilyMemberState(); +} + +class _AddUpdateFamilyMemberState extends State { + List getBasicDetDffStructureList = []; + List getContactColsStructureList = []; + List getContactDffStructureList = []; + List getContactDetailsList = []; + SubmitContactTransactionList? submitContactTransactionList; + dynamic args; + String? date="MM/DD/YYYY"; + // String actionType = "UPDATE"; + + GetApprovesList? getApprovesList; + + @override + void initState() { + // + super.initState(); + } + + // void callFamilyMemberData() async { + // try { + // Utils.showLoading(context); + // callAddAndUpdateFamilyMember(); + // Utils.hideLoading(context); + // setState(() {}); + // } catch (ex) { + // Utils.hideLoading(context); + // Utils.handleException(ex, context, null); + // } + // } + + void callAddAndUpdateFamilyMember() async { + try { + Utils.showLoading(context); + getBasicDetDffStructureList = await ProfileApiClient().getBasicDetDffStructure(); + getContactColsStructureList = await ProfileApiClient().getContactColsStructureList(args['actionType']); + getContactDffStructureList = await ProfileApiClient().getContactDffStructureList(); +if(args['actionType']== "ADD"){ + + getBasicDetDffStructureList?.forEach((element) { + element?.getContactDetailsList = new GetContactDetailsList(); + }); + getContactColsStructureList?.forEach((element) { + element?.getContactDetailsList = new GetContactDetailsList(); + }); + getContactDffStructureList?.forEach((element) { + element?.getContactDetailsList = new GetContactDetailsList(); + }); +} +else if(args['actionType']== "UPDATE") { + getContactDetailsList = await ProfileApiClient().getContactDetailsList(args['relationID']); + + getBasicDetDffStructureList?.forEach((element) { + element?.getContactDetailsList = getContactDetailsList?.singleWhere((userDetail) => userDetail?.aPPLICATIONCOLUMNNAME == element?.aPPLICATIONCOLUMNNAME); + }); + getContactColsStructureList?.forEach((element) { + element?.getContactDetailsList = getContactDetailsList?.singleWhere((userDetail) => userDetail?.aPPLICATIONCOLUMNNAME == element?.aPPLICATIONCOLUMNNAME); + }); + + + getContactDffStructureList?.forEach((element) { + element?.getContactDetailsList = getContactDetailsList?.singleWhere((userDetail) => userDetail?.aPPLICATIONCOLUMNNAME == element?.aPPLICATIONCOLUMNNAME); + }); +} + Utils.hideLoading(context); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + + @override + Widget build(BuildContext context) { + if (args == null) { + args = ModalRoute.of(context)!.settings.arguments; + callAddAndUpdateFamilyMember(); + + } + return Scaffold( + appBar: AppBarWidget( + context, + title: LocaleKeys.profile_familyDetails.tr(), + ), + backgroundColor: MyColors.backgroundColor, + bottomSheet: footer(), + body: args['flag'] == 1 + ? Column( + children: [ + ListView(physics: const BouncingScrollPhysics(), padding: const EdgeInsets.all(21), children: [ + ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (BuildContext cxt, int parentIndex) { + return parseDynamicFormatTypeCols(getContactColsStructureList![parentIndex], parentIndex); + }, + separatorBuilder: (cxt, index) => 0.height, + itemCount: getContactColsStructureList!.length), + 12.height, + ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (BuildContext cxt, int parentIndex) { + return parseDynamicFormatTypeBasicDetDff(getBasicDetDffStructureList![parentIndex], parentIndex); + }, + separatorBuilder: (cxt, index) => 0.height, + itemCount: getBasicDetDffStructureList!.length), + ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (BuildContext cxt, int parentIndex) { + return parseDynamicFormatTypeContactDff(getContactDffStructureList![parentIndex], parentIndex); + }, + separatorBuilder: (cxt, index) => 0.height, + itemCount: getContactDffStructureList!.length), + ]).expanded, + SizedBox( + height: 50, + ), + ], + ) + : args['flag'] == 2 + ? Column( + children: [ + getContactDetailsList!.isEmpty + ? LocaleKeys.noDataAvailable.tr().toText16().center + : ListView(physics: const BouncingScrollPhysics(), padding: const EdgeInsets.all(21), children: [ + ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (BuildContext cxt, int parentIndex) { + return parseDynamicFormatTypeCols(getContactColsStructureList![parentIndex], parentIndex); + }, + separatorBuilder: (cxt, index) => 0.height, + itemCount: getContactColsStructureList!.length), + 12.height, + ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (BuildContext cxt, int parentIndex) { + return parseDynamicFormatTypeBasicDetDff(getBasicDetDffStructureList![parentIndex], parentIndex); + }, + separatorBuilder: (cxt, index) => 0.height, + itemCount: getBasicDetDffStructureList!.length), + ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (BuildContext cxt, int parentIndex) { + return parseDynamicFormatTypeContactDff(getContactDffStructureList![parentIndex], parentIndex); + }, + separatorBuilder: (cxt, index) => 0.height, + itemCount: getContactDffStructureList!.length), + ]).expanded, + SizedBox( + height: 50, + ), + ], + ) + : Container(), + ); + } + + Widget parseDynamicFormatTypeCols(GetContactColsStructureList? model, int index) { + if (model!.dISPLAYFLAG != "N") { + } else { + return const SizedBox(); + } + if (model.dATATYPE == "VARCHAR2") { + if (model!.objectValuesList?.isNotEmpty ?? false) { + return PopupMenuButton( + child: DynamicTextFieldWidget( + (model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""), + model!.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + isEnable: false, + isPopup: true, + ).paddingOnly(bottom: 12), + itemBuilder: (_) => + >[ + for (int i = 0; i < getContactColsStructureList[index]!.objectValuesList!.length; i++) + PopupMenuItem(child: Text(getContactColsStructureList[index]!.objectValuesList![i].mEANING.toString()), value: i), + ], + onSelected: (int popupIndex) { + model.getContactDetailsList!.sEGMENTVALUEDSP = getContactColsStructureList[index]!.objectValuesList![popupIndex].mEANING.toString(); + model.getContactDetailsList!.vARCHAR2VALUE = getContactColsStructureList[index]!.objectValuesList![popupIndex].cODE.toString(); + setState(() {}); + }); + } else { + return DynamicTextFieldWidget( + (model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""), + model!.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + onChange: (text) { + model!.getContactDetailsList!.sEGMENTVALUEDSP = text; + }, + ).paddingOnly(bottom: 12); + } + }else if (model.dATATYPE == "DATE") { + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model!.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + suffixIconData: Icons.calendar_today, + isEnable: false, + onTap: () async { + DateTime dateValue = await _selectDate(context); + date = DateFormat('yyyy/MM/dd').format(dateValue); + model!.getContactDetailsList!.sEGMENTVALUEDSP = date; + setState(() {}); + }, + ).paddingOnly(bottom: 12); + } + return Container(); + } + + Widget parseDynamicFormatTypeBasicDetDff(GetBasicDetDffStructureList? model, int index) { + if (model!.dISPLAYFLAG != "N") { + } else { + return const SizedBox(); + } + if (model!.fORMATTYPE == "C") { + if (model!.eSERVICESVS?.isNotEmpty ?? false) { + return PopupMenuButton( + child: DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + isEnable: false, + isPopup: true, + ).paddingOnly(bottom: 12), + itemBuilder: (_) => >[ + for (int i = 0; i < getBasicDetDffStructureList[index]!.eSERVICESVS!.length; i++) + PopupMenuItem(child: Text(getBasicDetDffStructureList[index]!.eSERVICESVS![i].vALUECOLUMNNAME.toString()), value: i), + ], + onSelected: (int popupIndex) { + model.getContactDetailsList!.sEGMENTVALUEDSP = getBasicDetDffStructureList[index]!.eSERVICESVS![popupIndex].vALUECOLUMNNAME.toString(); + model.getContactDetailsList!.vARCHAR2VALUE = getBasicDetDffStructureList[index]!.eSERVICESVS![popupIndex].iDCOLUMNNAME.toString(); + + setState(() {}); + }); + } else { + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + onChange: (text) { + model.getContactDetailsList!.sEGMENTVALUEDSP = text; + }, + ).paddingOnly(bottom: 12); + } + }else if (model.fORMATTYPE == "X") { + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model!.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + suffixIconData: Icons.calendar_today, + isEnable: false, + onTap: () async { + DateTime dateValue = await _selectDate(context); + date = DateFormat('yyyy/MM/dd').format(dateValue); + model!.getContactDetailsList!.sEGMENTVALUEDSP = date; + setState(() {}); + }, + ).paddingOnly(bottom: 12); + } + return Container(); + } + + Widget parseDynamicFormatTypeContactDff(GetContactDffStructureList? model, int index) { + if (model!.dISPLAYFLAG != "N") { + } else { + return const SizedBox(); + } + if (model!.fORMATTYPE == "C") { + if (model.eSERVICESVS?.isNotEmpty ?? false) { + return PopupMenuButton( + child: DynamicTextFieldWidget( + (model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""), + model!.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + isEnable: false, + isPopup: true, + ).paddingOnly(bottom: 12), + itemBuilder: (_) => >[ + for (int i = 0; i < getContactDffStructureList[index]!.eSERVICESVS!.length; i++) + PopupMenuItem(child: Text(getContactDffStructureList[index]!.eSERVICESVS![i].vALUECOLUMNNAME.toString()), value: i), + ], + onSelected: (int popupIndex) { + model.getContactDetailsList!.sEGMENTVALUEDSP = getContactDffStructureList[index]!.eSERVICESVS![popupIndex].vALUECOLUMNNAME.toString(); + model.getContactDetailsList!.vARCHAR2VALUE = getContactDffStructureList[index]!.eSERVICESVS![popupIndex].iDCOLUMNNAME.toString(); + setState(() {}); + }); + } else { + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + onChange: (text) { + model.getContactDetailsList!.sEGMENTVALUEDSP = text; + }, + ).paddingOnly(bottom: 12); + } + }else if (model.fORMATTYPE == "X") { + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model!.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + suffixIconData: Icons.calendar_today, + isEnable: false, + onTap: () async { + DateTime dateValue = await _selectDate(context); + date = DateFormat('yyyy/MM/dd').format(dateValue); + model!.getContactDetailsList!.sEGMENTVALUEDSP = date; + setState(() {}); + }, + ).paddingOnly(bottom: 12); + } + return Container(); + } + + DateTime selectedDate = DateTime.now(); + + Future _selectDate(BuildContext context) 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; + } + + footer() { + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + color: MyColors.gradiantEndColor, + margin: EdgeInsets.only(bottom: 20, top: 20), + padding: EdgeInsets.only(left: 50, right: 50), + child: TextButton( + style: TextButton.styleFrom( + primary: MyColors.white, + onSurface: MyColors.white, + backgroundColor: MyColors.gradiantEndColor, + ), + onPressed: () { + submitUpdateForm(); + }, + child: Text( + LocaleKeys.next.tr(), + style: TextStyle(fontStyle: FontStyle.normal, fontSize: 16, color: Colors.white, fontWeight: FontWeight.w600), + ), + )), + ], + ); + } + + void submitUpdateForm() async { + try { + List> values1 = getBasicDetDffStructureList!.map((e) { + String? dateVal =''; + String? vatcherVal =''; + int? numberVal; + if(e!.fORMATTYPE =='N'){ + dateVal= null; + vatcherVal= null; + numberVal = e!.getContactDetailsList!.nUMBERVALUE; + } else if(e.fORMATTYPE =='X'){ + dateVal= e!.getContactDetailsList!.dATEVALUE.toString(); + vatcherVal= null; + numberVal = null; + }else{ + dateVal= null; + vatcherVal= e!.getContactDetailsList!.vARCHAR2VALUE.toString(); + numberVal = null; + } + return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: vatcherVal.toString()).toJson(); + }).toList(); + List> values2 = getContactDffStructureList!.map((e) { + //String tempVar = e!.getContactDetailsList!.vARCHAR2VALUE ?? ""; + String? dateVal =''; + String? vatcherVal =''; + int? numberVal; + if(e!.fORMATTYPE =='N'){ + dateVal= null; + vatcherVal= null; + numberVal= e!.getContactDetailsList!.nUMBERVALUE; + } else if(e.fORMATTYPE =='X'){ + dateVal= e!.getContactDetailsList!.dATEVALUE.toString(); + vatcherVal= null; + numberVal= null; + }else{ + dateVal= null; + numberVal= null; + vatcherVal= e!.getContactDetailsList!.vARCHAR2VALUE.toString(); + } + return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: vatcherVal.toString()).toJson(); + }).toList(); + List> values3 = getContactColsStructureList!.map((e) { + // String tempVar = e!.getContactDetailsList!.sEGMENTVALUEDSP ?? ""; + String? dateVal =''; + String? vatcherVal =''; + int? numberVal; + if(e!.dATATYPE =='VARCHAR2'){ + dateVal= null; + numberVal= null; + vatcherVal= e!.getContactDetailsList!.vARCHAR2VALUE.toString(); + } else if(e.dATATYPE =='DATE'){ + dateVal= e!.getContactDetailsList!.dATEVALUE.toString(); + vatcherVal= null; + numberVal= null; + }else if(e.dATATYPE =='NUMBER'){ + dateVal= null; + vatcherVal= null; + numberVal= e!.getContactDetailsList!.nUMBERVALUE; + }else{ + } + return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: vatcherVal.toString()).toJson(); + }).toList(); + List> valuesFinal = [...values1, ...values2,...values3]; + Utils.showLoading(context); + if(args['actionType']== "ADD") { + var relationID = null; + submitContactTransactionList = await ProfileApiClient().submetConatctTransactionAddAndUpdate(args['actionType'], relationID, valuesFinal); + }else if(args['actionType']== "UPDATE"){ + submitContactTransactionList = await ProfileApiClient().submetConatctTransactionAddAndUpdate(args['actionType'], args['relationID'], valuesFinal); + } + var transactionId = submitContactTransactionList!.pTRANSACTIONID; + var itemKey = submitContactTransactionList!.pITEMKEY; + Utils.hideLoading(context); + Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, + arguments: RequestSubmitScreenParams(LocaleKeys.profile_familyDetails.tr(), transactionId!.toInt(), itemKey.toString(), 'family_member')); + setState(() {} + ); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } +} diff --git a/lib/ui/profile/delete_familyMember.dart b/lib/ui/profile/delete_familyMember.dart deleted file mode 100644 index a988881..0000000 --- a/lib/ui/profile/delete_familyMember.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:mohem_flutter_app/classes/colors.dart'; -import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; - -class DeleteFamilyMember extends StatefulWidget { - const DeleteFamilyMember({Key? key}) : super(key: key); - - @override - _DeleteFamilyMemberState createState() => _DeleteFamilyMemberState(); -} - -class _DeleteFamilyMemberState extends State { - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBarWidget( - context, - title: "Dependents And Beneficiaries", - ), - backgroundColor: MyColors.backgroundColor, - bottomSheet: footer(), - body: Column( - children: [], - )); - } - - Widget footer() { - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Container( - color: MyColors.gradiantEndColor, - // margin: EdgeInsets.only(left: 50,right: 20), - padding: EdgeInsets.only(left: 50, right: 50), - child: TextButton( - style: TextButton.styleFrom( - primary: MyColors.white, - onSurface: MyColors.white, - backgroundColor: MyColors.gradiantEndColor, - ), - onPressed: () {}, - child: Text( - 'Next', - style: TextStyle(fontStyle: FontStyle.normal, fontSize: 16, color: Colors.white, fontWeight: FontWeight.w600), - ), - )), - ], - ); - } -} diff --git a/lib/ui/profile/delete_family_member.dart b/lib/ui/profile/delete_family_member.dart new file mode 100644 index 0000000..9ed132c --- /dev/null +++ b/lib/ui/profile/delete_family_member.dart @@ -0,0 +1,149 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/profile_api_client.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/config/routes.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/get_approves_list_model.dart'; +import 'package:mohem_flutter_app/models/profile/submit_contact_transaction_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 'dart:io'; +import 'package:flutter/cupertino.dart'; +import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; + +class DeleteFamilyMember extends StatefulWidget { + int relationId; + DeleteFamilyMember(@required this.relationId, {Key? key}) : super(key: key); + + @override + _DeleteFamilyMemberState createState() => _DeleteFamilyMemberState(); +} + +class _DeleteFamilyMemberState extends State { + String pFunctionName = "HR_PERINFO_SS"; + String actionType = "DELETE"; + // int? contactRelationId; + String? date="MM/DD/YYYY"; + String? datePar; + // String? itemKey; + + SubmitContactTransactionList? submitContactTransactionList; + GetApprovesList? getApprovesList; + + //int? relationId; + @override + void initState() { + print(widget.relationId); + super.initState(); + } + + void deleteFamilyMember(datePar) async { + try { + Utils.showLoading(context); + submitContactTransactionList = await ProfileApiClient().submetConatctTransaction(pFunctionName.toString(), actionType.toString(), widget.relationId!.toInt(), datePar.toString()); + var transactionId = submitContactTransactionList!.pTRANSACTIONID; + var itemKey = submitContactTransactionList!.pITEMKEY; + Utils.hideLoading(context); + // getApprovesList = await ProfileApiClient().getApproves(transactionId!.toInt(), itemKey.toString() ); + Navigator.pushNamed(context, AppRoutes.requestSubmitScreen,arguments: RequestSubmitScreenParams(LocaleKeys.profile_familyDetails.tr(), transactionId!.toInt(), itemKey.toString(), 'family_member')); + + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBarWidget( + context, + title: LocaleKeys.profile_familyDetails.tr(), + ), + backgroundColor: MyColors.backgroundColor, + bottomSheet: footer(), + body: Column( + children: [ + DynamicTextFieldWidget( + "*End Date", date.toString(), + // suffixIconData: Icons.calendar_today, + isEnable: false, + onTap: () async { + DateTime dateValue = await _selectDate(context); + // DateTime date1 = DateTime(dateValue.year, dateValue.month, dateValue.day); + date = DateFormat('yyyy/MM/dd').format(dateValue); + datePar = DateFormat('yyyy/MM/dd hh:mm:ss').format(dateValue); + setState(() {}); + // if (date !=null) { + // print(datePar); + // deleteFamilyMember(datePar); + // } + }, + ).paddingOnly(bottom: 12) + ], + )); + } + + footer() { + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + color: MyColors.gradiantEndColor, + margin: EdgeInsets.only(bottom: 20, top: 20), + padding: EdgeInsets.only(left: 50, right: 50), + child: TextButton( + style: TextButton.styleFrom( + primary: MyColors.white, + onSurface: MyColors.white, + backgroundColor: MyColors.gradiantEndColor, + ), + onPressed: () { + deleteFamilyMember(datePar); + + }, + child: Text( + LocaleKeys.next.tr(), + style: TextStyle(fontStyle: FontStyle.normal, fontSize: 16, color: Colors.white, fontWeight: FontWeight.w600), + ), + )), + ], + ); + } + + DateTime selectedDate = DateTime.now(); + + Future _selectDate(BuildContext context) 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; + } +} diff --git a/lib/ui/profile/family_members.dart b/lib/ui/profile/family_members.dart index 5b59587..69b3e7c 100644 --- a/lib/ui/profile/family_members.dart +++ b/lib/ui/profile/family_members.dart @@ -24,6 +24,7 @@ class _FamilyMembersState extends State { int? relationId; + int? flag; @override void initState() { super.initState(); @@ -110,7 +111,8 @@ class _FamilyMembersState extends State { Container( child: InkWell( onTap: () { - showUpdateAlertDialog(context); + relationId = getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID!.toInt(); + showUpdateAlertDialog(context, relationId!.toInt(), 2, "UPDATE"); }, child: RichText( text: TextSpan( @@ -146,7 +148,8 @@ class _FamilyMembersState extends State { Container( child: InkWell( onTap: () { - showRemoveAlertDialog(context, getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID!.toInt()); + relationId = getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID!.toInt(); + showRemoveAlertDialog(context, relationId!.toInt()); }, child: RichText( text: TextSpan( @@ -170,19 +173,6 @@ class _FamilyMembersState extends State { ), ), )), - // ElevatedButton.icon( - // icon: Icon( - // Icons.delete, - // size: 15, - // color: Color(0x99FF0000), - // ), - // style: ElevatedButton.styleFrom( - // shadowColor: Colors.white, - // primary: Colors.white, - // ), - // label: "remove".toText12(color: MyColors.DarkRedColor), - // onPressed: (){}, - // ), ], ), ]), @@ -208,13 +198,14 @@ class _FamilyMembersState extends State { ], ), child: DefaultButton("Add New Family Member", () async { + Navigator.pushNamed(context, AppRoutes.addUpdateFamilyMember, arguments: {"relationID": relationId, "flag": 1, "actionType": "ADD"}); // context.setLocale(const Locale("en", "US")); // to change Loacle ProfileScreen(); }).insideContainer, ); } - void showUpdateAlertDialog(BuildContext context) { + void showUpdateAlertDialog(BuildContext context, int relationId, int flag, String actionType) { Widget cancelButton = TextButton( child: Text( LocaleKeys.cancel.tr(), @@ -228,7 +219,12 @@ class _FamilyMembersState extends State { LocaleKeys.ok.tr(), ), onPressed: () { - continueDynamicForms(); + Navigator.pushNamed( + context, + AppRoutes.addUpdateFamilyMember, + arguments: {"relationID": relationId, "flag": flag, "actionType": "UPDATE"}, + ); + // continueDynamicForms(); }, ); AlertDialog alert = AlertDialog( @@ -263,7 +259,8 @@ class _FamilyMembersState extends State { LocaleKeys.ok.tr(), ), onPressed: () { - Navigator.pushNamed(context, AppRoutes.deleteFamilyMember); + // var relationId = getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID!.toInt(); + Navigator.pushNamed(context, AppRoutes.deleteFamilyMember, arguments: relationId); // continueDynamicForms(); }, ); @@ -285,7 +282,9 @@ class _FamilyMembersState extends State { ); } - void continueDynamicForms() { - Navigator.pushNamed(context, AppRoutes.addDynamicInputProfile, arguments: DynamicFamilyMembersParams(LocaleKeys.profile_familyDetails.tr(), getEmployeeContactsList: getEmployeeContactsList)); - } + // void continueDynamicForms() { + // Navigator.pushNamed(context, AppRoutes.addDynamicInputProfile, + // arguments: DynamicFamilyMembersParams(LocaleKeys.profile_familyDetails.tr(), getEmployeeContactsList: getEmployeeContactsList)); + // } + }