diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index 7f22931..b8fd539 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -236,12 +236,12 @@ "year": "سنة", "month": "شهر", "day": "يوم", - "address" : "العنوان", + "address": "العنوان", "phoneNumber": "رقم الجوال", "businessGroup": "مجموعة العمل", "Payroll": "الراتب", "civilIdentityNumber": "رقم الهويه", - "dateOfBirth" : "تاريخ الميلاد", + "dateOfBirth": "تاريخ الميلاد", "maritalStatus ": "الحالة الاجتماعية", "fullName": "الأسم الكامل", "remove": "حذف", @@ -261,8 +261,11 @@ "completeProfile": "الملف الشخصي الكامل", "personalInformation": "معلومات شخصية", "basicDetails": "تفاصيل أساسية", + "address": "تبوك", "contactDetails": "بيانات التواصل", - "familyDetails": "تفاصيل عائلية" + "familyDetails": "تفاصيل عائلية", + "effectiveDate": "تاريخ النفاذ", + "country": "دولة" }, "clicked": { "zero": "You clicked {} times!", diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index 5934ab3..1e03506 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -245,7 +245,7 @@ "maritalStatus ": "Marital Status ", "fullName": "Full Name", "remove": "Remove", - "Attendance":"Attendance", + "Attendance": "Attendance", "submit": "Submit", "areYouSureYouWantToSubmit": "Are you sure you want to submit?", "comments": "Comments", @@ -262,8 +262,11 @@ "completeProfile": "Complete Profile", "personalInformation": "Personal Information", "basicDetails": "Basic Details", + "address": "Address", "contactDetails": "Contact Details", - "familyDetails": "Family Members" + "familyDetails": "Family Members", + "effectiveDate": "Effective Date", + "country": "Country" }, "clicked": { "zero": "You clicked {} times!", diff --git a/lib/api/profile_api_client.dart b/lib/api/profile_api_client.dart index 5993a59..859349e 100644 --- a/lib/api/profile_api_client.dart +++ b/lib/api/profile_api_client.dart @@ -9,9 +9,13 @@ import 'package:mohem_flutter_app/models/get_employee_address_model.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; import 'package:mohem_flutter_app/models/get_employee_phones_model.dart'; -import 'package:mohem_flutter_app/models/profile/phone_number_types_modek.dart'; +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/start_eit_approval_process_model.dart'; +import 'package:mohem_flutter_app/models/start_phone_approval_process_model.dart'; import 'api_client.dart'; class ProfileApiClient { @@ -86,7 +90,7 @@ class ProfileApiClient { Future getDffStructure(String pFunctionName, String uRL, String requestType) async { String url = ApiConsts.erpRest + uRL; - Map postParams = {"P_SELECTED_RESP_ID": -999, "P_MENU_TYPE": "E", "P_FUNCTION_NAME": pFunctionName, "P_REQUEST_TYPE": requestType}; + Map postParams = {"P_SELECTED_RESP_ID": -999, "P_MENU_TYPE": "E", "P_FUNCTION_NAME": pFunctionName, "P_COUNTRY_CODE": "SA"}; postParams.addAll(AppState().postParamsJson); return await ApiClient().postJsonForObject((json) { GenericResponseModel? responseData = GenericResponseModel.fromJson(json); @@ -152,7 +156,7 @@ class ProfileApiClient { }, url, postParams); } - Future startPhoneApprovalProcess(String action, String comments, String itemKey, int transactionId) async { + Future startPhoneApprovalProcess(String action, String comments, String itemKey, int transactionId) async { String url = "${ApiConsts.erpRest}START_PHONES_APPROVAL_PROCESS"; Map postParams = { "P_SELECTED_RESP_ID": -999, @@ -165,7 +169,82 @@ class ProfileApiClient { postParams.addAll(AppState().postParamsJson); return await ApiClient().postJsonForObject((json) { GenericResponseModel? responseData = GenericResponseModel.fromJson(json); - return responseData.startEitApprovalProcess; + return responseData.startPhonesApprovalProcessList; + }, url, postParams); + } + + Future startAddressApprovalProcess(String action, String comments, String itemKey, int transactionId) async { + String url = "${ApiConsts.erpRest}START_ADDRESS_APPROVAL_PROCESS"; + Map postParams = { + "P_SELECTED_RESP_ID": -999, + "P_MENU_TYPE": "E", + "P_ACTION_MODE": action, + "P_COMMENTS": comments, + "P_ITEM_KEY": itemKey, + "P_TRANSACTION_ID": transactionId, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.startAddressApprovalProcessList; + }, url, postParams); + } + + Future> submitBasicDetailsTransaction(String pDescFlexContextCode, String pFunctionName, List> list, int correctOrNew) async { + String url = "${ApiConsts.erpRest}SUBMIT_BASIC_DET_TRANSACTION"; + Map postParams = { + "P_SELECTED_RESP_ID": -999, + "P_MENU_TYPE": "E", + "P_FUNCTION_NAME": pFunctionName, + "P_ACTION_TYPE": correctOrNew == 1 ? 'CORRECT' : 'CHANGE', + //"EITTransactionTBL": list, + // "EITTransactionTBLModel": list, + }; + postParams.addAll(AppState().postParamsJson); + print("postParams:$postParams"); + postParams["EITTransactionTBL"] = list; + postParams["EITTransactionTBLModel"] = list; + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData.submitBasicDetTransactionList!; //ESERVICESDV.fromJson(responseData.getDefaultValueList!.toJson()); + }, url, postParams); + } + + Future submitAddressTransaction( + String pDescFlexContextCode, String pFunctionName, List> list, int correctOrNew, String countryCode, String effectiveDate) async { + String url = "${ApiConsts.erpRest}SUBMIT_ADDRESS_TRANSACTION"; + Map postParams = { + "P_SELECTED_RESP_ID": -999, + "P_MENU_TYPE": "E", + "P_COUNTRY_CODE": countryCode, //"SA", + "P_DESC_FLEX_CONTEXT_CODE": "SA", + "P_FUNCTION_NAME": pFunctionName, + "P_ACTION": correctOrNew == 1 ? 'CORRECT' : 'NEW', + "P_EFFECTIVE_DATE": effectiveDate, + + //"EITTransactionTBL": list, + // "EITTransactionTBLModel": list, + }; + postParams.addAll(AppState().postParamsJson); + print("postParams:$postParams"); + postParams["EITTransactionTBL"] = list; + // postParams["EITTransactionTBLModel"] = list; + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData.submitAddressTransactionList!; //ESERVICESDV.fromJson(responseData.getDefaultValueList!.toJson()); + }, url, postParams); + } + + Future> getCountriesList() async { + String url = "${ApiConsts.erpRest}GET_COUNTRIES"; + Map postParams = { + "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.getCountriesList ?? []; }, url, postParams); } } diff --git a/lib/config/routes.dart b/lib/config/routes.dart index e181e9a..1601083 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -15,7 +15,8 @@ import 'package:mohem_flutter_app/ui/my_attendance/my_attendance_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_profile_screen.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'; @@ -62,7 +63,7 @@ class AppRoutes { //profile static const String addDynamicInputProfile = 'addDynamicInputProfile'; - + static const String addDynamicAddressScreen = 'addDynamicAddressProfile'; //Attendance static const String attendance = "/attendance"; static const String monthlyAttendance = "/monthlyAttendance"; @@ -123,6 +124,7 @@ class AppRoutes { dynamicScreen: (context) => DynamicListViewScreen(), addDynamicInput: (context) => DynamicInputScreen(), addDynamicInputProfile: (context) => DynamicInputScreenProfile(), + addDynamicAddressScreen: (context) => DynamicInputScreenAddress(), deleteFamilyMember: (context) => DeleteFamilyMember(), requestSubmitScreen: (context) => RequestSubmitScreen(), diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index ad3a70e..03bd6e6 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -277,6 +277,7 @@ class CodegenLoader extends AssetLoader{ "completeProfile": "الملف الشخصي الكامل", "personalInformation": "معلومات شخصية", "basicDetails": "تفاصيل أساسية", + "address": "تبوك", "contactDetails": "بيانات التواصل", "familyDetails": "تفاصيل عائلية" }, @@ -570,6 +571,7 @@ static const Map en_US = { "completeProfile": "Complete Profile", "personalInformation": "Personal Information", "basicDetails": "Basic Details", + "address": "Address", "contactDetails": "Contact Details", "familyDetails": "Family Members" }, diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index 21d18f5..efced4d 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -1,6 +1,6 @@ // DO NOT EDIT. This is code generated via package:easy_localization/generate.dart -abstract class LocaleKeys { +abstract class LocaleKeys { static const mohemm = 'mohemm'; static const english = 'english'; static const arabic = 'arabic'; @@ -243,7 +243,7 @@ abstract class LocaleKeys { static const Payroll = 'Payroll'; static const civilIdentityNumber = 'civilIdentityNumber'; static const dateOfBirth = 'dateOfBirth'; - static const maritalStatus = 'maritalStatus '; + static const maritalStatus = 'maritalStatus '; static const fullName = 'fullName'; static const remove = 'remove'; static const submit = 'submit'; @@ -253,6 +253,8 @@ abstract class LocaleKeys { static const approversList = 'approversList'; static const yourRequestHasBeenSubmittedForApprovals = 'yourRequestHasBeenSubmittedForApprovals'; static const profile_reset_password_label = 'profile.reset_password.label'; + static const profile_effectiveDate = 'profile.effectiveDate'; + static const profile_country = 'profile.country'; static const profile_reset_password_username = 'profile.reset_password.username'; static const profile_reset_password_password = 'profile.reset_password.password'; static const profile_reset_password = 'profile.reset_password'; @@ -260,6 +262,7 @@ abstract class LocaleKeys { static const profile_completeProfile = 'profile.completeProfile'; static const profile_personalInformation = 'profile.personalInformation'; static const profile_basicDetails = 'profile.basicDetails'; + static const profile_address = 'profile.address'; static const profile_contactDetails = 'profile.contactDetails'; static const profile_familyDetails = 'profile.familyDetails'; static const profile = 'profile'; @@ -268,5 +271,4 @@ abstract class LocaleKeys { static const gender_with_arg = 'gender.with_arg'; static const gender = 'gender'; static const reset_locale = 'reset_locale'; - } diff --git a/lib/models/generic_response_model.dart b/lib/models/generic_response_model.dart index 34d4748..93a9d6a 100644 --- a/lib/models/generic_response_model.dart +++ b/lib/models/generic_response_model.dart @@ -36,9 +36,14 @@ import 'package:mohem_flutter_app/models/notification_action_model.dart'; import 'package:mohem_flutter_app/models/notification_get_respond_attributes_list_model.dart'; import 'package:mohem_flutter_app/models/profile/basic_details_cols_structions.dart'; import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart'; -import 'package:mohem_flutter_app/models/profile/phone_number_types_modek.dart'; +import 'package:mohem_flutter_app/models/profile/get_address_dff_structure_list.dart'; +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/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'; import 'package:mohem_flutter_app/models/subordinates_on_leaves_model.dart'; import 'package:mohem_flutter_app/models/validate_eit_transaction_list_model.dart'; @@ -102,7 +107,7 @@ class GenericResponseModel { String? companyImageDescription; String? companyImageURL; String? companyMainCompany; - String? countryList; + List? countryList; String? createVacationRuleList; String? deleteAttachmentList; String? deleteVacationRuleList; @@ -116,7 +121,7 @@ class GenericResponseModel { List? getAbsenceTransactionList; List? getAccrualBalancesList; List? getActionHistoryList; - List? getAddressDffStructureList; + List? getAddressDffStructureList; List? getAddressNotificationBodyList; List? getApprovesList; List? getAttachementList; @@ -136,7 +141,7 @@ class GenericResponseModel { List? getContactDetailsList; List? getContactDffStructureList; GetContactNotificationBodyList? getContactNotificationBodyList; - List? getCountriesList; + List? getCountriesList; List? getDayHoursTypeDetailsList; List? getDeductionsList; GetDefaultValueList? getDefaultValueList; @@ -277,17 +282,17 @@ class GenericResponseModel { String? sFHGetPoNotificationBodyList; String? sFHGetPrNotificationBodyList; String? startAbsenceApprovalProccess; - String? startAddressApprovalProcessList; + StartAddressApprovalProcess? startAddressApprovalProcessList; String? startBasicDetApprProcessList; String? startCeiApprovalProcess; String? startContactApprovalProcessList; StartEitApprovalProcess? startEitApprovalProcess; String? startHrApprovalProcessList; - String? startPhonesApprovalProcessList; + StartPhoneApprovalProcess? startPhonesApprovalProcessList; String? startSitApprovalProcess; String? startTermApprovalProcessList; - String? submitAddressTransactionList; - String? submitBasicDetTransactionList; + SubmitAddressTransaction? submitAddressTransactionList; + Map? submitBasicDetTransactionList; String? submitCEITransactionList; String? submitCcpTransactionList; String? submitContactTransactionList; @@ -629,7 +634,13 @@ class GenericResponseModel { companyImageDescription = json['CompanyImageDescription']; companyImageURL = json['CompanyImageURL']; companyMainCompany = json['CompanyMainCompany']; - countryList = json['CountryList']; + + if (json['CountryList'] != null) { + countryList = []; + json['CountryList'].forEach((v) { + countryList!.add(new GetCountriesListModel.fromJson(v)); + }); + } createVacationRuleList = json['CreateVacationRuleList']; deleteAttachmentList = json['DeleteAttachmentList']; deleteVacationRuleList = json['DeleteVacationRuleList']; @@ -657,7 +668,12 @@ class GenericResponseModel { }); } - getAddressDffStructureList = json['GetAddressDffStructureList']; + if (json['GetAddressDffStructureList'] != null) { + getAddressDffStructureList = []; + json['GetAddressDffStructureList'].forEach((v) { + getAddressDffStructureList!.add(new GetAddressDffStructureList.fromJson(v)); + }); + } getAddressNotificationBodyList = json['GetAddressNotificationBodyList']; if (json['GetApprovesList'] != null) { @@ -706,7 +722,14 @@ class GenericResponseModel { getContactDetailsList = json['GetContactDetailsList']; getContactDffStructureList = json['GetContactDffStructureList']; getContactNotificationBodyList = json["GetContactNotificationBodyList"] == null ? null : GetContactNotificationBodyList.fromJson(json["GetContactNotificationBodyList"]); - getCountriesList = json['GetCountriesList']; + + if (json['GetCountriesList'] != null) { + getCountriesList = []; + json['GetCountriesList'].forEach((v) { + getCountriesList!.add(new GetCountriesListModel.fromJson(v)); + }); + } + if (json['GetDayHoursTypeDetailsList'] != null) { getDayHoursTypeDetailsList = []; json['GetDayHoursTypeDetailsList'].forEach((v) { @@ -1043,17 +1066,20 @@ class GenericResponseModel { sFHGetPoNotificationBodyList = json['SFH_GetPoNotificationBodyList']; sFHGetPrNotificationBodyList = json['SFH_GetPrNotificationBodyList']; startAbsenceApprovalProccess = json['StartAbsenceApprovalProccess']; - startAddressApprovalProcessList = json['StartAddressApprovalProcessList']; + startAddressApprovalProcessList = json['StartAddressApprovalProcessList'] != null ? new StartAddressApprovalProcess.fromJson(json['StartAddressApprovalProcessList']) : null; + startBasicDetApprProcessList = json['StartBasicDetApprProcessList']; startCeiApprovalProcess = json['StartCeiApprovalProcess']; startContactApprovalProcessList = json['StartContactApprovalProcessList']; startEitApprovalProcess = json['StartEitApprovalProcess'] != null ? new StartEitApprovalProcess.fromJson(json['StartEitApprovalProcess']) : null; startHrApprovalProcessList = json['StartHrApprovalProcessList']; - startPhonesApprovalProcessList = json['StartPhonesApprovalProcessList']; + + startPhonesApprovalProcessList = json['StartPhonesApprovalProcessList'] != null ? new StartPhoneApprovalProcess.fromJson(json['startPhonesApprovalProcessList']) : null; startSitApprovalProcess = json['StartSitApprovalProcess']; startTermApprovalProcessList = json['StartTermApprovalProcessList']; - submitAddressTransactionList = json['SubmitAddressTransactionList']; + + submitAddressTransactionList = json['SubmitAddressTransactionList'] != null ? new SubmitAddressTransaction.fromJson(json['SubmitAddressTransactionList']) : null; submitBasicDetTransactionList = json['SubmitBasicDetTransactionList']; submitCEITransactionList = json['SubmitCEITransactionList']; submitCcpTransactionList = json['SubmitCcpTransactionList']; @@ -1151,7 +1177,9 @@ class GenericResponseModel { data['CompanyImageDescription'] = this.companyImageDescription; data['CompanyImageURL'] = this.companyImageURL; data['CompanyMainCompany'] = this.companyMainCompany; - data['CountryList'] = this.countryList; + if (this.countryList != null) { + data['CountryList'] = this.countryList!.map((v) => v.toJson()).toList(); + } data['CreateVacationRuleList'] = this.createVacationRuleList; data['DeleteAttachmentList'] = this.deleteAttachmentList; data['DeleteVacationRuleList'] = this.deleteVacationRuleList; @@ -1422,7 +1450,10 @@ class GenericResponseModel { data['StartPhonesApprovalProcessList'] = this.startPhonesApprovalProcessList; data['StartSitApprovalProcess'] = this.startSitApprovalProcess; data['StartTermApprovalProcessList'] = this.startTermApprovalProcessList; - data['SubmitAddressTransactionList'] = this.submitAddressTransactionList; + + if (this.submitAddressTransactionList != null) { + data['SubmitAddressTransactionList'] = this.submitAddressTransactionList!.toJson(); + } data['SubmitBasicDetTransactionList'] = this.submitBasicDetTransactionList; data['SubmitCEITransactionList'] = this.submitCEITransactionList; data['SubmitCcpTransactionList'] = this.submitCcpTransactionList; diff --git a/lib/models/profile/get_address_dff_structure_list.dart b/lib/models/profile/get_address_dff_structure_list.dart new file mode 100644 index 0000000..50d9b97 --- /dev/null +++ b/lib/models/profile/get_address_dff_structure_list.dart @@ -0,0 +1,189 @@ +import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; +import 'package:mohem_flutter_app/models/get_employee_address_model.dart'; + +class GetAddressDffStructureList { + String? aLPHANUMERICALLOWEDFLAG; + String? aPPLICATIONCOLUMNNAME; + String? cHILDSEGMENTSVS; + Null? 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; + bool? isEmptyOption; + 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; + GetEmployeeAddressList? getEmployeeAddressList; + GetAddressDffStructureList( + {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.isEmptyOption, + 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.getEmployeeAddressList}); + + GetAddressDffStructureList.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']; + isEmptyOption = json['IsEmptyOption']; + 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']; + if (json['PARENT_SEGMENTS_DV_Splited'] != null) { + pARENTSEGMENTSDVSplited = []; + json['PARENT_SEGMENTS_DV_Splited'].forEach((v) { + pARENTSEGMENTSDVSplited!.add(v); + }); + } + pARENTSEGMENTSVS = json['PARENT_SEGMENTS_VS']; + if (json['PARENT_SEGMENTS_VS_SplitedVS'] != null) { + pARENTSEGMENTSVSSplitedVS = []; + json['PARENT_SEGMENTS_VS_SplitedVS'].forEach((v) { + pARENTSEGMENTSVSSplitedVS!.add(v); + }); + } + 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']; + getEmployeeAddressList = json['GetEmployeeAddressList'] != null ? new GetEmployeeAddressList.fromJson(json['GetEmployeeAddressList']) : GetEmployeeAddressList(); + } + + 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['IsEmptyOption'] = this.isEmptyOption; + 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).toList(); + } + data['PARENT_SEGMENTS_VS'] = this.pARENTSEGMENTSVS; + if (this.pARENTSEGMENTSVSSplitedVS != null) { + data['PARENT_SEGMENTS_VS_SplitedVS'] = this.pARENTSEGMENTSVSSplitedVS!.map((v) => v).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; + data['GetEmployeeAddressList'] != null ? this.getEmployeeAddressList!.toJson() : GetEmployeeAddressList(); + return data; + } +} diff --git a/lib/models/profile/get_countries_list_model.dart b/lib/models/profile/get_countries_list_model.dart new file mode 100644 index 0000000..dc9e9c7 --- /dev/null +++ b/lib/models/profile/get_countries_list_model.dart @@ -0,0 +1,18 @@ +class GetCountriesListModel { + String? cOUNTRYCODE; + String? cOUNTRYNAME; + + GetCountriesListModel({this.cOUNTRYCODE, this.cOUNTRYNAME}); + + GetCountriesListModel.fromJson(Map json) { + cOUNTRYCODE = json['COUNTRY_CODE']; + cOUNTRYNAME = json['COUNTRY_NAME']; + } + + Map toJson() { + final Map data = new Map(); + data['COUNTRY_CODE'] = this.cOUNTRYCODE; + data['COUNTRY_NAME'] = this.cOUNTRYNAME; + return data; + } +} diff --git a/lib/models/profile/phone_number_types_modek.dart b/lib/models/profile/phone_number_types_model.dart similarity index 100% rename from lib/models/profile/phone_number_types_modek.dart rename to lib/models/profile/phone_number_types_model.dart diff --git a/lib/models/profile/start_address_approval_process_model.dart b/lib/models/profile/start_address_approval_process_model.dart new file mode 100644 index 0000000..717298d --- /dev/null +++ b/lib/models/profile/start_address_approval_process_model.dart @@ -0,0 +1,18 @@ +class StartAddressApprovalProcess { + String? pRETURNMSG; + String? pRETURNSTATUS; + + StartAddressApprovalProcess({this.pRETURNMSG, this.pRETURNSTATUS}); + + StartAddressApprovalProcess.fromJson(Map json) { + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + } + + Map toJson() { + final Map data = new Map(); + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + return data; + } +} diff --git a/lib/models/profile/submit_address_transaction.dart b/lib/models/profile/submit_address_transaction.dart new file mode 100644 index 0000000..193cb68 --- /dev/null +++ b/lib/models/profile/submit_address_transaction.dart @@ -0,0 +1,24 @@ +class SubmitAddressTransaction { + String? pITEMKEY; + String? pRETURNMSG; + String? pRETURNSTATUS; + int? pTRANSACTIONID; + + SubmitAddressTransaction({this.pITEMKEY, this.pRETURNMSG, this.pRETURNSTATUS, this.pTRANSACTIONID}); + + SubmitAddressTransaction.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; + } +} diff --git a/lib/models/start_phone_approval_process_model.dart b/lib/models/start_phone_approval_process_model.dart new file mode 100644 index 0000000..2ce3a15 --- /dev/null +++ b/lib/models/start_phone_approval_process_model.dart @@ -0,0 +1,18 @@ +class StartPhoneApprovalProcess { + String? pRETURNMSG; + String? pRETURNSTATUS; + + StartPhoneApprovalProcess({this.pRETURNMSG, this.pRETURNSTATUS}); + + StartPhoneApprovalProcess.fromJson(Map json) { + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + } + + Map toJson() { + final Map data = new Map(); + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + return data; + } +} diff --git a/lib/ui/misc/request_submit_screen.dart b/lib/ui/misc/request_submit_screen.dart index a4d0052..9ebe34a 100644 --- a/lib/ui/misc/request_submit_screen.dart +++ b/lib/ui/misc/request_submit_screen.dart @@ -92,6 +92,13 @@ class _RequestSubmitScreenState extends State { params!.pItemId, params!.transactionId, ); + } else if (params!.approvalFlag == 'address') { + await ProfileApiClient().startAddressApprovalProcess( + "SUBMIT", + comments.text, + params!.pItemId, + params!.transactionId, + ); } else { await MyAttendanceApiClient().startEitApprovalProcess( "SUBMIT", diff --git a/lib/ui/profile/basic_details.dart b/lib/ui/profile/basic_details.dart index 795563e..a5ffbb9 100644 --- a/lib/ui/profile/basic_details.dart +++ b/lib/ui/profile/basic_details.dart @@ -7,7 +7,7 @@ import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; -import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart'; +import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; @@ -25,7 +25,7 @@ class _BasicDetailsState extends State { String? civilIdentityNumber = ""; String? emailAddress = ""; String? employeeNo = ""; - + int correctOrNew = 1; List getEmployeeBasicDetailsList = []; @override @@ -135,7 +135,6 @@ class _BasicDetailsState extends State { } showAlertDialog(BuildContext context) { - dynamic changeOrNew = 1; Widget cancelButton = TextButton( child: Text("Cancel"), onPressed: () { @@ -169,10 +168,10 @@ class _BasicDetailsState extends State { title: Text("correct or complete the current details"), leading: Radio( value: 1, - groupValue: changeOrNew, + groupValue: correctOrNew, onChanged: (value) { setState(() { - changeOrNew = int.parse(value.toString()); + correctOrNew = int.parse(value.toString()); }); }, activeColor: Colors.green, @@ -182,10 +181,10 @@ class _BasicDetailsState extends State { title: Text("Enter new Information because of a real change to the current details (e.g because of a change in marital status)"), leading: Radio( value: 2, - groupValue: changeOrNew, + groupValue: correctOrNew, onChanged: (value) { setState(() { - changeOrNew = int.parse(value.toString()); + correctOrNew = int.parse(value.toString()); }); }, activeColor: Colors.green, @@ -213,6 +212,6 @@ class _BasicDetailsState extends State { void continueDynamicForms() { Navigator.pushNamed(context, AppRoutes.addDynamicInputProfile, arguments: DynamicProfileParams(LocaleKeys.profile_basicDetails.tr(), 'HR_PERINFO_SS', - uRL: 'GET_BASIC_DET_DFF_STRUCTURE', requestID: 'BASIC_DETAILS', getEmployeeBasicDetailsList: getEmployeeBasicDetailsList)); + uRL: 'GET_BASIC_DET_DFF_STRUCTURE', requestID: 'BASIC_DETAILS', getEmployeeBasicDetailsList: getEmployeeBasicDetailsList, correctOrNew: correctOrNew)); } } diff --git a/lib/ui/profile/contact_details.dart b/lib/ui/profile/contact_details.dart index 9dbc462..ed54cec 100644 --- a/lib/ui/profile/contact_details.dart +++ b/lib/ui/profile/contact_details.dart @@ -3,6 +3,7 @@ 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'; @@ -10,8 +11,9 @@ import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/get_employee_address_model.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; import 'package:mohem_flutter_app/models/get_employee_phones_model.dart'; +import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_address_screen.dart'; import 'package:mohem_flutter_app/ui/profile/phone_numbers.dart'; -import 'package:mohem_flutter_app/ui/profile/profile.dart'; +import 'package:mohem_flutter_app/ui/screens/profile/profile_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; @@ -29,10 +31,10 @@ class _ContactDetailsState extends State { String? civilIdentityNumber = ""; String? emailAddress = ""; String? employeeNo = ""; - + int? correctOrNew = 1; List getEmployeePhonesList = []; List getEmployeeAddressList = []; - + List getEmployeeBasicDetailsList = []; @override void initState() { super.initState(); @@ -153,7 +155,9 @@ class _ContactDetailsState extends State { Icons.edit_location_alt_outlined, size: 20, ), - onPressed: () {}, + onPressed: () { + addUpdateAddress(); + }, ) ], ), @@ -183,15 +187,96 @@ class _ContactDetailsState extends State { ), child: DefaultButton(LocaleKeys.update.tr(), () async { // context.setLocale(const Locale("en", "US")); // to change Loacle - Profile(); + ProfileScreen(); }).insideContainer, ); } - updatePhone() { + void updatePhone() { Navigator.push( context, MaterialPageRoute(builder: (context) => PhoneNumbers(getEmployeePhonesList: this.getEmployeePhonesList)), ); } + + void addUpdateAddress() { + Widget cancelButton = TextButton( + child: Text("Cancel"), + onPressed: () { + Navigator.pop(context); + }, + ); + Widget continueButton = TextButton( + child: Text("Next"), + onPressed: () { + continueDynamicForms(); + }, + ); + StatefulBuilder alert = StatefulBuilder(builder: (context, setState) { + return AlertDialog( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(10.0))), + title: Text("Confirm"), + content: Builder(builder: (context) { + // Get available height and width of the build area of this widget. Make a choice depending on the size. + var height = MediaQuery.of(context).size.height * .5; + return Container( + height: height, + child: Column(children: [ + Text( + "Select the type of change you want to make.", + style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), + ), + Divider(), + Column( + children: [ + ListTile( + title: Text("Correct or amend this address"), + leading: Radio( + value: 1, + groupValue: correctOrNew, + onChanged: (value) { + setState(() { + correctOrNew = int.parse(value.toString()); + }); + }, + activeColor: Colors.green, + ), + ), + ListTile( + title: Text("Enter a new address if you have moved"), + leading: Radio( + value: 2, + groupValue: correctOrNew, + onChanged: (value) { + setState(() { + correctOrNew = int.parse(value.toString()); + }); + }, + activeColor: Colors.green, + ), + ), + ], + ) + ])); + }), + actions: [ + cancelButton, + continueButton, + ], + ); + }); + + showDialog( + context: context, + builder: (BuildContext context) { + return alert; + }, + ); + } + + void continueDynamicForms() { + Navigator.pushNamed(context, AppRoutes.addDynamicAddressScreen, + arguments: DynamicProfileParams(LocaleKeys.profile_address.tr(), 'HR_PERINFO_SS', + uRL: 'GET_ADDRESS_DFF_STRUCTURE', requestID: 'BASIC_DETAILS', getEmployeeAddressList: getEmployeeAddressList, correctOrNew: correctOrNew!)); + } } diff --git a/lib/ui/profile/delete_familyMember.dart b/lib/ui/profile/delete_familyMember.dart index 4876ef3..33d64db 100644 --- a/lib/ui/profile/delete_familyMember.dart +++ b/lib/ui/profile/delete_familyMember.dart @@ -1,5 +1,3 @@ - - import 'package:easy_localization/src/public_ext.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/profile_api_client.dart'; @@ -14,8 +12,7 @@ import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart'; -import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart'; -import 'package:mohem_flutter_app/ui/profile/profile.dart'; +import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; @@ -30,44 +27,37 @@ class _DeleteFamilyMemberState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBarWidget( - context, - title: "Dependents And Beneficiaries", - ), + appBar: AppBarWidget( + context, + title: "Dependents And Beneficiaries", + ), backgroundColor: MyColors.backgroundColor, bottomSheet: footer(), - body:Column( - children: [ - - ], - ) - - ); + body: Column( + children: [], + )); } + 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( + 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, + 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 - ),), - ) - ), + onPressed: () {}, + child: Text( + 'Next', + style: TextStyle(fontStyle: FontStyle.normal, fontSize: 16, color: Colors.white, fontWeight: FontWeight.w600), + ), + )), ], ); } diff --git a/lib/ui/profile/dynamic_screens/dynamic_input_address_screen.dart b/lib/ui/profile/dynamic_screens/dynamic_input_address_screen.dart new file mode 100644 index 0000000..3fb7f56 --- /dev/null +++ b/lib/ui/profile/dynamic_screens/dynamic_input_address_screen.dart @@ -0,0 +1,336 @@ +import 'dart:io'; + +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/my_attendance_api_client.dart'; +import 'package:mohem_flutter_app/api/profile_api_client.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/get_set_values_request_model.dart'; +import 'package:mohem_flutter_app/models/dyanmic_forms/validate_eit_transaction_model.dart'; +import 'package:mohem_flutter_app/models/generic_response_model.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'; +import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; +import 'package:mohem_flutter_app/models/profile/basic_details_cols_structions.dart'; +import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart'; +import 'package:mohem_flutter_app/models/profile/get_address_dff_structure_list.dart'; +import 'package:mohem_flutter_app/models/profile/get_countries_list_model.dart'; +import 'package:mohem_flutter_app/models/profile/submit_address_transaction.dart'; +import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart'; +import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'package:mohem_flutter_app/widgets/button/default_button.dart'; +import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; + +class DynamicProfileParams { + String title; + String dynamicId; + String uRL; + String requestID; + String colsURL; + int correctOrNew; + List? getEmployeeAddressList; + + DynamicProfileParams(this.title, this.dynamicId, + {this.uRL = 'GET_EIT_DFF_STRUCTURE', this.requestID = '', this.colsURL = '', this.getEmployeeAddressList = const [], this.correctOrNew = 2}); +} + +class DynamicInputScreenAddress extends StatefulWidget { + DynamicInputScreenAddress({Key? key}) : super(key: key); + + @override + _DynamicInputScreenState createState() { + return _DynamicInputScreenState(); + } +} + +class _DynamicInputScreenState extends State { + GenericResponseModel? genericResponseModel; + List? getAddressDffStructureList; + SubmitAddressTransaction submitPhoneNumbers = SubmitAddressTransaction(); + DynamicProfileParams? dynamicParams; + List countriesList = []; + String dESCFLEXCONTEXTCODE = ""; + String countryCode = 'SA'; + String effectiveDate = ''; + @override + void initState() { + super.initState(); + } + + void getTransactionsStructure() async { + try { + Utils.showLoading(context); + genericResponseModel = await ProfileApiClient().getDffStructure(dynamicParams!.dynamicId, dynamicParams!.uRL, dynamicParams!.requestID); + getAddressDffStructureList = genericResponseModel?.getAddressDffStructureList ?? []; + + if (dynamicParams!.correctOrNew == 1) { + getAddressDffStructureList?.forEach((element) { + dynamicParams!.getEmployeeAddressList!.forEach((userDetail) { + if (userDetail.aPPLICATIONCOLUMNNAME == element.aPPLICATIONCOLUMNNAME) { + element.getEmployeeAddressList = userDetail; + } + }); + }); + } else { + getAddressDffStructureList!.insert(0, GetAddressDffStructureList(fORMATTYPE: 'X', sEGMENTPROMPT: LocaleKeys.profile_effectiveDate.tr())); + countriesList = await ProfileApiClient().getCountriesList(); + List eSerivceList = []; + countriesList.forEach((element) { + eSerivceList.add(ESERVICESVS( + dESCRIPTION: element.cOUNTRYCODE, + vALUECOLUMNNAME: element.cOUNTRYNAME, + )); + }); + getAddressDffStructureList! + .insert(1, GetAddressDffStructureList(fORMATTYPE: 'C', sEGMENTPROMPT: LocaleKeys.profile_country.tr(), eSERVICESVS: eSerivceList, getEmployeeAddressList: GetEmployeeAddressList())); + } + print(getAddressDffStructureList); + // genericResponseModel = await ProfileApiClient().getColStructure(dynamicParams!.dynamicId, 'GET_BASIC_DET_COLS_STRUCTURE', dynamicParams!.requestID); + // getBasicDetColsStructureList = genericResponseModel?.getBasicDetColsStructureList ?? []; + // getBasicDetColsStructureList?.forEach((element) { + // element.userBasicDetail = dynamicParams!.getEmployeeBasicDetailsList!.singleWhere((userDetail) => userDetail.aPPLICATIONCOLUMNNAME == element.aPPLICATIONCOLUMNNAME); + // }); + Utils.hideLoading(context); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + void calGetValueSetValues(GetAddressDffStructureList structureList) async { + try { + Utils.showLoading(context); + String segmentId = structureList.cHILDSEGMENTSVS!; + List filteredList = getAddressDffStructureList?.where((element) => element.cHILDSEGMENTSVS == segmentId).toList() ?? []; + List> values = filteredList + .map((e) => GetSetValuesRequestModel( + sEGMENTNAME: e.sEGMENTNAME, vALUECOLUMNNAME: e.eSERVICESDV!.pVALUECOLUMNNAME, dESCRIPTION: "", iDCOLUMNNAME: e.eSERVICESDV!.pIDCOLUMNNAME, fLEXVALUESETNAME: e.fLEXVALUESETNAME) + .toJson()) + .toList(); + ESERVICESVS genericResponseModel = await MyAttendanceApiClient().getValueSetValues(structureList.cHILDSEGMENTSVS!, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, values); + + int index = getAddressDffStructureList!.indexWhere((element) => element.sEGMENTNAME == structureList.cHILDSEGMENTSVS); + getAddressDffStructureList![index].eSERVICESVS!.add(genericResponseModel); + // getEitDffStructureList = genericResponseModel?.getEITDFFStructureList ?? []; + //getEitDffStructureList = getEitDffStructureList!.where((element) => element.dISPLAYFLAG != "N").toList(); + Utils.hideLoading(context); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + if (dynamicParams == null) { + dynamicParams = ModalRoute.of(context)!.settings.arguments as DynamicProfileParams; + getTransactionsStructure(); + } + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBarWidget( + context, + title: dynamicParams!.title, + ), + body: Column( + children: [ + (getAddressDffStructureList == null + ? const SizedBox() + : (getAddressDffStructureList!.isEmpty + ? LocaleKeys.noDataAvailable.tr().toText16().center + : ListView( + physics: const BouncingScrollPhysics(), + padding: const EdgeInsets.all(21), + children: [ + 12.height, + ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (BuildContext cxt, int parentIndex) { + return parseDynamicFormatType(getAddressDffStructureList![parentIndex], parentIndex); + }, + separatorBuilder: (cxt, index) => 0.height, + itemCount: getAddressDffStructureList!.length), + ], + ))) + .expanded, + // 12.height, + DefaultButton( + LocaleKeys.next.tr(), + (getAddressDffStructureList ?? []).isEmpty ? null : () => {validateTransaction()}, + ).insideContainer, + ], + ), + ); + } + + Widget parseDynamicFormatType(GetAddressDffStructureList model, int index) { + if (model.dISPLAYFLAG != "N") { + if (model.fORMATTYPE == "C") { + if (model.eSERVICESVS?.isNotEmpty ?? false) { + return PopupMenuButton( + child: DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model?.getEmployeeAddressList!.sEGMENTVALUEDSP ?? "", + isEnable: false, + isPopup: true, + ).paddingOnly(bottom: 12), + itemBuilder: (_) => >[ + for (int i = 0; i < model.eSERVICESVS!.length; i++) PopupMenuItem(child: Text(model.eSERVICESVS![i].vALUECOLUMNNAME!), value: i), + ], + onSelected: (int popupIndex) { + model?.getEmployeeAddressList!.sEGMENTVALUEDSP = model.eSERVICESVS![popupIndex].vALUECOLUMNNAME!; + model?.getEmployeeAddressList!.vARCHAR2VALUE = model.eSERVICESVS![popupIndex].dESCRIPTION; + setState(() {}); + }); + } + + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model.getEmployeeAddressList?.sEGMENTVALUEDSP ?? "", + isReadOnly: model.rEADONLY == "Y", + onChange: (text) { + model.getEmployeeAddressList?.sEGMENTVALUEDSP = text; + }, + ).paddingOnly(bottom: 12); + } else if (model.fORMATTYPE == "N") { + if (model.eSERVICESVS?.isNotEmpty ?? false) { + return PopupMenuButton( + child: DynamicTextFieldWidget((model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), model?.getEmployeeAddressList!.sEGMENTVALUEDSP ?? "", + isEnable: false, isPopup: true, isInputTypeNum: true) + .paddingOnly(bottom: 12), + itemBuilder: (_) => >[ + for (int i = 0; i < model.eSERVICESVS!.length; i++) PopupMenuItem(child: Text(model.eSERVICESVS![i].dESCRIPTION!), value: i), + ], + onSelected: (int popupIndex) { + model?.getEmployeeAddressList!.sEGMENTVALUEDSP = model.eSERVICESVS![popupIndex].dESCRIPTION!; + model?.getEmployeeAddressList!.vARCHAR2VALUE = model.eSERVICESVS![popupIndex].vALUECOLUMNNAME!; + setState(() {}); + }); + } + + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model.getEmployeeAddressList?.sEGMENTVALUEDSP ?? "", + isReadOnly: model.rEADONLY == "Y", + onChange: (text) { + model.getEmployeeAddressList?.sEGMENTVALUEDSP = text; + }, + ).paddingOnly(bottom: 12); + } else if (model.fORMATTYPE == "X") { + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model.eSERVICESDV?.pIDCOLUMNNAME ?? (getAddressDffStructureList![index].dESCFLEXCONTEXTNAME ?? ""), + suffixIconData: Icons.calendar_today, + isEnable: false, + onTap: () async { + DateTime date = await _selectDate(context); + DateTime date1 = DateTime(date.year, date.month, date.day); + getAddressDffStructureList![index].dESCFLEXCONTEXTNAME = date.toString(); + ESERVICESDV eservicesdv = ESERVICESDV( + pIDCOLUMNNAME: DateFormat('yyyy-MM-dd').format(date1), + pRETURNMSG: "null", + pRETURNSTATUS: getAddressDffStructureList![index].dEFAULTVALUE, + pVALUECOLUMNNAME: DateFormat('yyyy-MM-ddThh:mm:ss.s').format(date)); + getAddressDffStructureList![index].eSERVICESDV = eservicesdv; + setState(() {}); + if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) { + calGetValueSetValues(model); + } + }, + ).paddingOnly(bottom: 12); + } + + return const SizedBox(); + } else { + return const SizedBox(); + } + } + + void validateTransaction() async { + try { + Utils.showLoading(context); + List> values = getAddressDffStructureList!.map((e) { + String tempVar = ''; + if (e.fORMATTYPE == "X") { + // for date format type, date format is changed + tempVar = e.eSERVICESDV?.pVALUECOLUMNNAME ?? ""; + + if (tempVar.isNotEmpty) { + DateTime date = DateFormat('yyyy-MM-dd').parse(tempVar); + tempVar = DateFormat('dd/MMM/yyy').format(date); + if (e.aPPLICATIONCOLUMNNAME == null) { + effectiveDate = tempVar; + } + } + } else if (e.eSERVICESVS?.isNotEmpty ?? false) { + tempVar = e.getEmployeeAddressList!.vARCHAR2VALUE!; + if (e.aPPLICATIONCOLUMNNAME == null) { + countryCode = tempVar; + } + } else { + tempVar = e.getEmployeeAddressList!.sEGMENTVALUEDSP ?? ""; + } + + return ValidateEitTransactionModel(dATEVALUE: null, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: null, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: tempVar.toString()).toJson(); + }).toList(); + + submitPhoneNumbers = await ProfileApiClient().submitAddressTransaction(dESCFLEXCONTEXTCODE, dynamicParams!.dynamicId, values, dynamicParams!.correctOrNew, countryCode, effectiveDate); + print(values); + Utils.hideLoading(context); + + Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, + arguments: RequestSubmitScreenParams(dynamicParams!.title, submitPhoneNumbers.pTRANSACTIONID!, submitPhoneNumbers.pITEMKEY!, 'address')); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + 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/dynamic_screens/dynamic_input_profile_screen.dart b/lib/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart similarity index 92% rename from lib/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart rename to lib/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart index 95d80a9..466a57b 100644 --- a/lib/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart +++ b/lib/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart @@ -31,10 +31,11 @@ class DynamicProfileParams { String uRL; String requestID; String colsURL; + int correctOrNew; List? getEmployeeBasicDetailsList; DynamicProfileParams(this.title, this.dynamicId, - {this.uRL = 'GET_EIT_DFF_STRUCTURE', this.requestID = '', this.colsURL = '', this.getEmployeeBasicDetailsList = const []}); + {this.uRL = 'GET_EIT_DFF_STRUCTURE', this.requestID = '', this.colsURL = '', this.getEmployeeBasicDetailsList = const [], this.correctOrNew = 2}); } class DynamicInputScreenProfile extends StatefulWidget { @@ -236,7 +237,7 @@ class _DynamicInputScreenState extends State { return PopupMenuButton( child: DynamicTextFieldWidget( (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), - model.userBasicDetail?.sEGMENTVALUEDSP ?? "", + getBasicDetColsStructureList![index].userBasicDetail!.sEGMENTVALUEDSP ?? "", isEnable: false, isPopup: true, ).paddingOnly(bottom: 12), @@ -245,8 +246,8 @@ class _DynamicInputScreenState extends State { ], onSelected: (int popupIndex) { ESERVICESDV eservicesdv = - ESERVICESDV(pIDCOLUMNNAME: model.objectValuesList![index].dESCRIPTION, pRETURNMSG: "null", pRETURNSTATUS: model.oBJECTNAME, pVALUECOLUMNNAME: model.aPPLICATIONCOLUMNNAME); - getBasicDetDffStructureList![index].userBasicDetail!.sEGMENTVALUEDSP = model.objectValuesList![popupIndex].dESCRIPTION!; + ESERVICESDV(pIDCOLUMNNAME: model.objectValuesList![popupIndex].mEANING, pRETURNMSG: "null", pRETURNSTATUS: model.oBJECTNAME, pVALUECOLUMNNAME: model.aPPLICATIONCOLUMNNAME); + getBasicDetColsStructureList![index].userBasicDetail!.sEGMENTVALUEDSP = model.objectValuesList![popupIndex].mEANING!; setState(() {}); }); } @@ -264,13 +265,13 @@ class _DynamicInputScreenState extends State { } else if (model.dATATYPE == "DATE") { return DynamicTextFieldWidget( (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), - model.aPPLICATIONCOLUMNNAME ?? (getBasicDetColsStructureList![index].userBasicDetail?.sEGMENTVALUEDSP ?? ""), + (getBasicDetColsStructureList![index].userBasicDetail?.dATEVALUE ?? ""), suffixIconData: Icons.calendar_today, isEnable: false, onTap: () async { DateTime date = await _selectDate(context); DateTime date1 = DateTime(date.year, date.month, date.day); - getBasicDetColsStructureList![index].userBasicDetail?.sEGMENTVALUEDSP = date.toString(); + getBasicDetColsStructureList![index].userBasicDetail?.dATEVALUE = date.toString(); // ESERVICESDV eservicesdv = ESERVICESDV( // pIDCOLUMNNAME: DateFormat('yyyy-MM-dd').format(date1), // pRETURNMSG: "null", @@ -328,7 +329,7 @@ class _DynamicInputScreenState extends State { try { Utils.showLoading(context); List> values = getBasicDetDffStructureList!.map((e) { - String tempVar = e.eSERVICESDV?.pIDCOLUMNNAME ?? ""; + String tempVar = e.userBasicDetail!.vARCHAR2VALUE ?? ""; if (e.fORMATTYPE == "X") { // for date format type, date format is changed tempVar = e.eSERVICESDV?.pVALUECOLUMNNAME ?? ""; @@ -344,22 +345,27 @@ class _DynamicInputScreenState extends State { values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_EXTRA_INFO_ID", nUMBERVALUE: -1, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: null).toJson()); values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_OBJECT_VERSION_NUMBER", nUMBERVALUE: 0, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: null).toJson()); List> valuesCols = getBasicDetColsStructureList!.map((e) { - String tempVar = e.userBasicDetail!.vARCHAR2VALUE ?? ""; - if (e.dATATYPE == "DATE") { - // for date format type, date format is changed - tempVar = e.userBasicDetail!.dATEVALUE ?? ""; - if (tempVar.isNotEmpty) { - DateTime date = DateFormat('yyyy-MM-dd').parse(tempVar); - tempVar = DateFormat('yyyy/MM/dd HH:mm:ss').format(date); - } - } - return ValidateEitTransactionModel(dATEVALUE: tempVar, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: null, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: tempVar.toString()).toJson(); + // String tempVar = e.userBasicDetail!.vARCHAR2VALUE ?? ""; + // if (e.dATATYPE == "DATE") { + // // for date format type, date format is changed + // tempVar = e.userBasicDetail!.dATEVALUE ?? ""; + // // if (tempVar.isNotEmpty) { + // // DateTime date = DateFormat('dd-MM-yyyy').parse(tempVar); + // // tempVar = DateFormat('yyyy/MM/dd HH:mm:ss').format(date); + // // } + // } + return ValidateEitTransactionModel( + dATEVALUE: e.userBasicDetail!.dATEVALUE ?? "", nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: null, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: e.userBasicDetail!.vARCHAR2VALUE ?? "") + .toJson(); }).toList(); List> transactionValues = new List.from(values)..addAll(valuesCols); print(transactionValues); + //genericResponseModel = await MyAttendanceApiClient().validateEitTransaction(dESCFLEXCONTEXTCODE, dynamicParams!.dynamicId, values); - // SubmitEITTransactionList submitEITTransactionList = await MyAttendanceApiClient().submitEitTransaction(dESCFLEXCONTEXTCODE, dynamicParams!.dynamicId, values); + Map submitBasicDetails = await ProfileApiClient().submitBasicDetailsTransaction(dESCFLEXCONTEXTCODE, dynamicParams!.dynamicId, transactionValues, dynamicParams!.correctOrNew); + print(submitBasicDetails); Utils.hideLoading(context); + // Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, arguments: RequestSubmitScreenParams("title", submitEITTransactionList.pTRANSACTIONID!, submitEITTransactionList.pITEMKEY!, 'eit')); } catch (ex) { Utils.hideLoading(context); diff --git a/lib/ui/profile/family_members.dart b/lib/ui/profile/family_members.dart index bcc5b32..b284bfe 100644 --- a/lib/ui/profile/family_members.dart +++ b/lib/ui/profile/family_members.dart @@ -1,8 +1,3 @@ - - - - - import 'package:easy_localization/src/public_ext.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/profile_api_client.dart'; @@ -17,8 +12,8 @@ import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart'; -import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart'; -import 'package:mohem_flutter_app/ui/profile/profile.dart'; +import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart'; +import 'package:mohem_flutter_app/ui/screens/profile/profile_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; @@ -30,7 +25,6 @@ class FamilyMembers extends StatefulWidget { } class _FamilyMembersState extends State { - List getEmployeeContactsList = []; int? relationId; @@ -38,7 +32,6 @@ class _FamilyMembersState extends State { void initState() { super.initState(); getEmployeeContacts(); - } void getEmployeeContacts() async { @@ -53,7 +46,6 @@ class _FamilyMembersState extends State { } } - Widget build(BuildContext context) { return Scaffold( appBar: AppBarWidget( @@ -61,154 +53,156 @@ class _FamilyMembersState extends State { title: LocaleKeys.profile_familyDetails.tr(), ), backgroundColor: MyColors.backgroundColor, - bottomSheet:footer(), + bottomSheet: footer(), body: Container( width: MediaQuery.of(context).size.width, - child: getEmployeeContactsList.length != 0 - ? SingleChildScrollView( - scrollDirection: Axis.vertical, - child: Column( - children: [ - ListView.builder( - scrollDirection: Axis.vertical, - shrinkWrap: true, - physics: ScrollPhysics(), - itemCount: getEmployeeContactsList.length, - itemBuilder: (context, index) { - return Container( - child: Column( - children: [ - Container( - width: double.infinity, - margin: EdgeInsets.only(top: 20, left: 21, right: 21,), - padding: EdgeInsets.only(left: 14, right: 14,top: 13, ), - height: 110, - decoration: BoxDecoration( - boxShadow: [ - BoxShadow( - color: Colors.grey.withOpacity(0.5), - spreadRadius: 5, - blurRadius: 26, - offset: Offset(0, 3), - ), - ], - color: Colors.white, - borderRadius: BorderRadius.circular(10.0), - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - "${getEmployeeContactsList[index].cONTACTNAME}".toText16(color: MyColors.blackColor), - "${getEmployeeContactsList[index].rELATIONSHIP}".toText11(isBold: true, color: MyColors.textMixColor), - SizedBox(height: 5,), - Divider( - color: MyColors.lightGreyEFColor, - height: 20, - thickness: 1, - indent: 0, - endIndent: 0, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Container( - child: InkWell( - onTap: () { - showUpdateAlertDialog(context); - }, - child: RichText( - text: TextSpan( - children: [ - WidgetSpan( - child: Icon( - Icons.edit, - size: 15, - color: MyColors.grey67Color, - ), - ), - TextSpan( - text: LocaleKeys.update.tr(), - style: TextStyle( - color: MyColors.grey67Color, - fontSize: 12, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - ), - ) + child: getEmployeeContactsList.length != 0 + ? SingleChildScrollView( + scrollDirection: Axis.vertical, + child: Column( + children: [ + ListView.builder( + scrollDirection: Axis.vertical, + shrinkWrap: true, + physics: ScrollPhysics(), + itemCount: getEmployeeContactsList.length, + itemBuilder: (context, index) { + return Container( + child: Column( + children: [ + Container( + width: double.infinity, + margin: EdgeInsets.only( + top: 20, + left: 21, + right: 21, + ), + padding: EdgeInsets.only( + left: 14, + right: 14, + top: 13, ), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 8), - child: SizedBox( - child: Container( - width: 3, - color: MyColors.lightGreyEFColor, + height: 110, + decoration: BoxDecoration( + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.5), + spreadRadius: 5, + blurRadius: 26, + offset: Offset(0, 3), ), - ), + ], + color: Colors.white, + borderRadius: BorderRadius.circular(10.0), ), - Container( - child: InkWell( - onTap: () { - showRemoveAlertDialog(context, getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID!.toInt()); - }, - child: RichText( - text: TextSpan( - children: [ - WidgetSpan( - child: Icon( - Icons.delete, - size: 15, - color: Color(0x99FF0000), + child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + "${getEmployeeContactsList[index].cONTACTNAME}".toText16(color: MyColors.blackColor), + "${getEmployeeContactsList[index].rELATIONSHIP}".toText11(isBold: true, color: MyColors.textMixColor), + SizedBox( + height: 5, + ), + Divider( + color: MyColors.lightGreyEFColor, + height: 20, + thickness: 1, + indent: 0, + endIndent: 0, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Container( + child: InkWell( + onTap: () { + showUpdateAlertDialog(context); + }, + child: RichText( + text: TextSpan( + children: [ + WidgetSpan( + child: Icon( + Icons.edit, + size: 15, + color: MyColors.grey67Color, + ), ), - ), - TextSpan( - text:LocaleKeys.remove.tr(), - style: TextStyle( - color: MyColors.DarkRedColor, - fontSize: 12, - fontWeight: FontWeight.bold, + TextSpan( + text: LocaleKeys.update.tr(), + style: TextStyle( + color: MyColors.grey67Color, + fontSize: 12, + fontWeight: FontWeight.bold, + ), ), - ), - ], + ], + ), + ), + )), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8), + child: SizedBox( + child: Container( + width: 3, + color: MyColors.lightGreyEFColor, + ), ), ), - ) - ), - // 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: (){}, - // ), - ], - ), - ] - ), - ), + Container( + child: InkWell( + onTap: () { + showRemoveAlertDialog(context, getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID!.toInt()); + }, + child: RichText( + text: TextSpan( + children: [ + WidgetSpan( + child: Icon( + Icons.delete, + size: 15, + color: Color(0x99FF0000), + ), + ), + TextSpan( + text: LocaleKeys.remove.tr(), + style: TextStyle( + color: MyColors.DarkRedColor, + fontSize: 12, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), + )), + // 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: (){}, + // ), + ], + ), + ]), + ), + ], + )); + }) ], - ) - ); - }) - ], - ), - ):Container(), - // SizedBox(height: 20), - ) - - - ); + ), + ) + : Container(), + // SizedBox(height: 20), + )); } - footer(){ + footer() { return Container( decoration: BoxDecoration( // borderRadius: BorderRadius.circular(10), @@ -219,26 +213,32 @@ class _FamilyMembersState extends State { ), child: DefaultButton("Add New Family Member", () async { // context.setLocale(const Locale("en", "US")); // to change Loacle - Profile(); + ProfileScreen(); }).insideContainer, ); } showUpdateAlertDialog(BuildContext context) { Widget cancelButton = TextButton( - child: Text(LocaleKeys.cancel.tr(),), - onPressed: () { + child: Text( + LocaleKeys.cancel.tr(), + ), + onPressed: () { Navigator.pop(context); }, ); Widget continueButton = TextButton( - child: Text(LocaleKeys.ok.tr(),), - onPressed: () { + child: Text( + LocaleKeys.ok.tr(), + ), + onPressed: () { continueDynamicForms(); }, ); AlertDialog alert = AlertDialog( - title: Text(LocaleKeys.confirm.tr(),), + title: Text( + LocaleKeys.confirm.tr(), + ), content: Text("Are You Sure You Want to Update this Member?"), actions: [ cancelButton, @@ -252,22 +252,29 @@ class _FamilyMembersState extends State { }, ); } - showRemoveAlertDialog(BuildContext context,int relationId) { + + showRemoveAlertDialog(BuildContext context, int relationId) { Widget cancelButton = TextButton( - child: Text(LocaleKeys.cancel.tr(),), - onPressed: () { + child: Text( + LocaleKeys.cancel.tr(), + ), + onPressed: () { Navigator.pop(context); }, ); Widget continueButton = TextButton( - child: Text(LocaleKeys.ok.tr(),), - onPressed: () { + child: Text( + LocaleKeys.ok.tr(), + ), + onPressed: () { Navigator.pushNamed(context, AppRoutes.deleteFamilyMember); - // continueDynamicForms(); + // continueDynamicForms(); }, ); AlertDialog alert = AlertDialog( - title: Text(LocaleKeys.confirm.tr(),), + title: Text( + LocaleKeys.confirm.tr(), + ), content: Text("Are You Sure You Want to Remove this Member?"), actions: [ cancelButton, @@ -282,10 +289,7 @@ class _FamilyMembersState extends State { ); } - void continueDynamicForms() { - Navigator.pushNamed(context, AppRoutes.addDynamicInputProfile, - arguments: DynamicFamilyMembersParams(LocaleKeys.profile_familyDetails.tr(), getEmployeeContactsList: getEmployeeContactsList)); + Navigator.pushNamed(context, AppRoutes.addDynamicInputProfile, arguments: DynamicFamilyMembersParams(LocaleKeys.profile_familyDetails.tr(), getEmployeeContactsList: getEmployeeContactsList)); } - } diff --git a/lib/ui/profile/phone_numbers.dart b/lib/ui/profile/phone_numbers.dart index 14ce3ff..fa02728 100644 --- a/lib/ui/profile/phone_numbers.dart +++ b/lib/ui/profile/phone_numbers.dart @@ -13,10 +13,9 @@ import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/get_employee_address_model.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; import 'package:mohem_flutter_app/models/get_employee_phones_model.dart'; -import 'package:mohem_flutter_app/models/profile/phone_number_types_modek.dart'; +import 'package:mohem_flutter_app/models/profile/phone_number_types_model.dart'; import 'package:mohem_flutter_app/models/profile/submit_phone_transactions.dart'; import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart'; -import 'package:mohem_flutter_app/ui/profile/profile.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; diff --git a/lib/ui/profile/profile.dart b/lib/ui/profile/profile.dart deleted file mode 100644 index 6cbf953..0000000 --- a/lib/ui/profile/profile.dart +++ /dev/null @@ -1,289 +0,0 @@ -import 'package:easy_localization/src/public_ext.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/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/models/get_employee_basic_details.model.dart'; -import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; - -class Profile extends StatefulWidget { - const Profile({Key? key}) : super(key: key); - - @override - _ProfileState createState() => _ProfileState(); -} - -class _ProfileState extends State { - String? fullName = ""; - String? maritalStatus = ""; - String? birthDate = ""; - String? civilIdentityNumber = ""; - String? emailAddress = ""; - String? employeeNo = ""; - - List getEmployeeBasicDetailsList = []; - - @override - void initState() { - super.initState(); - getEmployeeBasicDetails(); - basicDetails(); - } - - void getEmployeeBasicDetails() async { - try { - Utils.showLoading(context); - getEmployeeBasicDetailsList = await ProfileApiClient().getEmployeeBasicDetails(); - Utils.hideLoading(context); - basicDetails(); - print("getEmployeeBasicDetailsList.length"); - print(getEmployeeBasicDetailsList.length); - setState(() {}); - } catch (ex) { - Utils.hideLoading(context); - Utils.handleException(ex, context, null); - } - } - - basicDetails() { - for (int i = 0; i < getEmployeeBasicDetailsList.length; i++) { - if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'FULL_NAME') { - fullName = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP; - } else if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'MARITAL_STATUS') { - maritalStatus = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP; - } else if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'DATE_OF_BIRTH') { - birthDate = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP; - } else if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'NATIONAL_IDENTIFIER') { - civilIdentityNumber = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP; - } else if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'EMAIL_ADDRESS') { - emailAddress = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP; - } else if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'EMPLOYEE_NUMBER') { - employeeNo = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP; - } - } - } - - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - backgroundColor: MyColors.lightGreenColor, - leading: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - IconButton( - icon: const Icon( - Icons.arrow_back_ios, - color: MyColors.backgroundBlackColor, - ), - onPressed: () => Navigator.pop(context), - ), - ], - ), - ), - backgroundColor: MyColors.lightGreenColor, - body: Stack(children: [ - Align( - alignment: Alignment.topRight, - child: Container( - height: 30, - width: 80, - padding: EdgeInsets.only(left: 10.0, right: 10.0, top: 5, bottom: 5), - decoration: BoxDecoration( - border: Border.all( - color: MyColors.gradiantEndColor, - style: BorderStyle.solid, - ), - color: MyColors.gradiantEndColor, - borderRadius: BorderRadius.circular(100.0)), - child: InkWell( - onTap: () {}, - child: RichText( - text: TextSpan( - children: [ - WidgetSpan( - child: Icon( - Icons.image, - size: 20, - color: Colors.white, - ), - ), - TextSpan( - text: " Edit", - ), - ], - ), - ), - ) - ), - ), - Container( - width: double.infinity, - margin: EdgeInsets.only(top: 48), - height: double.infinity, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.only(topLeft: Radius.circular(30.0), topRight: Radius.circular(30.0)), - ), - child: Column( - children: [ - "${fullName}".toText20(isBold: true, color: MyColors.blackColor), - "${employeeNo}".toText12(isBold: false, color: MyColors.lightGrayColor), - "${emailAddress}".toText12(isBold: false, color: MyColors.black), - SizedBox( - height: 5, - ), - Divider( - color: MyColors.lightGreyE6Color, - height: 20, - thickness: 8, - indent: 0, - endIndent: 0, - ), - - Container( - padding: EdgeInsets.only(left: 10.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - InkWell( - onTap: () { - - }, - child: Row( - children: [ - - SizedBox( - width: 15, - ), - "Personal Information".toText16(isBold: true, color: MyColors.grey3AColor), - ], - ), - ), - SizedBox( - height: 5, - ), - InkWell( - onTap: () { - - }, - child: Row( - children: [ - - SizedBox( - width: 15, - ), - "Basic Details".toText16(isBold: true, color: MyColors.grey3AColor), - ], - ), - ), - SizedBox( - height: 5, - ), - InkWell( - onTap: () { - - }, - child: Row( - children: [ - - SizedBox( - width: 20, - ), - "Contact Details".toText16(isBold: true, color: MyColors.grey3AColor), - ], - ), - ), - SizedBox( - height: 5, - ), - InkWell( - onTap: () { - - }, - child: Row( - children: [ - - SizedBox( - width: 20, - ), - "Family Members".toText16(isBold: true, color: MyColors.grey3AColor), - ], - ), - ), - SizedBox( - height: 5, - ), - ], - ), - ), - ], - ).paddingOnly( top: 35, bottom: 36), - ), - Align( - alignment: Alignment.topCenter, - child: SizedBox( - child: CircleAvatar( - radius: 40.0, - backgroundColor: Colors.white, - child: CircleAvatar( - child: Align( - alignment: Alignment.bottomRight, - // child: CircleAvatar( - // backgroundColor: Colors.white, - // radius: 12.0, - // child: Icon( - // Icons.camera_alt, - // size: 15.0, - // color: Color(0xFF404040), - // ), - // ), - ), - radius: 38.0, - // url:"", - ), - ), - )), - ]) - // Container( - // margin: const EdgeInsets.only(top:50), - // decoration: const BoxDecoration( - // color: Colors.white, - // borderRadius: BorderRadius.only( - // topLeft: Radius.circular(30.0), - // topRight: Radius.circular(30.0)) - // ), - // // color: MyColors.white, - // child: Stack( - // children: [ - // Container( - // height: 30, - // color: MyColors.lightGreenColor, - // margin: const EdgeInsets.only(bottom: 20,), - // child: Row( - // mainAxisAlignment: MainAxisAlignment.center, - // children: [ - // CircleAvatar( - // backgroundColor: Colors.grey.shade800, - // ), - // ], - // ), - // ), - // ListView( - // scrollDirection: Axis.vertical, - // children: [ - // Column( - // children: [ - // // 20.height, - // ], - // ) - // ], - // ), - // ] - // ), - // ), - ); - } -}