diff --git a/lib/api/my_attendance_api_client.dart b/lib/api/my_attendance_api_client.dart index 7831006..f49aa1e 100644 --- a/lib/api/my_attendance_api_client.dart +++ b/lib/api/my_attendance_api_client.dart @@ -2,13 +2,9 @@ import 'dart:async'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/consts.dart'; -import 'package:mohem_flutter_app/models/basic_member_information_model.dart'; -import 'package:mohem_flutter_app/models/check_mobile_app_version_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_eit_transaction_list_model.dart'; -import 'package:mohem_flutter_app/models/get_mobile_login_info_list_model.dart'; -import 'package:mohem_flutter_app/models/member_login_list_model.dart'; import 'api_client.dart'; @@ -29,13 +25,33 @@ class MyAttendanceApiClient { }, url, postParams); } - Future?> getEitDffStructure(String pFunctionName) async { + Future getEitDffStructure(String pFunctionName) async { String url = "${ApiConsts.erpRest}GET_EIT_DFF_STRUCTURE"; Map postParams = {"P_SELECTED_RESP_ID": -999, "P_MENU_TYPE": "E", "P_FUNCTION_NAME": pFunctionName}; postParams.addAll(AppState().postParamsJson); return await ApiClient().postJsonForObject((json) { GenericResponseModel? responseData = GenericResponseModel.fromJson(json); - return responseData.getEITDFFStructureList ?? []; + return responseData; + }, url, postParams); + } + + Future getValueSetValues(String pSegmentName, String pDescFlexContextCode, String pDescFlexName, List> list) async { + String url = "${ApiConsts.erpRest}GET_VALUE_SET_VALUES"; + Map postParams = { + "P_SELECTED_RESP_ID": -999, + "P_MENU_TYPE": "E", + "P_PAGE_LIMIT": 1000, + "P_PAGE_NUM": 1, + "P_PARENT_VALUE": null, + "P_SEGMENT_NAME": pSegmentName, + "P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode, + "P_DESC_FLEX_NAME": pDescFlexName, + "GetValueSetValuesTBL": list, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getValueSetValuesList!.first; }, url, postParams); } } diff --git a/lib/classes/consts.dart b/lib/classes/consts.dart index a95e5b4..ca8e2f0 100644 --- a/lib/classes/consts.dart +++ b/lib/classes/consts.dart @@ -1,7 +1,7 @@ class ApiConsts { //static String baseUrl = "http://10.200.204.20:2801/"; // Local server - static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server - // static String baseUrl = "https://hmgwebservices.com"; // Live server + // static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server + static String baseUrl = "https://hmgwebservices.com"; // Live server static String baseUrlServices = baseUrl + "/Services/"; // server // static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/"; diff --git a/lib/config/routes.dart b/lib/config/routes.dart index ddda565..20acd28 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -6,13 +6,14 @@ import 'package:mohem_flutter_app/ui/login/login_screen.dart'; import 'package:mohem_flutter_app/ui/login/new_password_screen.dart'; import 'package:mohem_flutter_app/ui/login/verify_last_login_screen.dart'; import 'package:mohem_flutter_app/ui/login/verify_login_screen.dart'; -import 'package:mohem_flutter_app/ui/my_attendance/add_work_from_home_screen.dart'; +import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/my_attendance_screen.dart'; -import 'package:mohem_flutter_app/ui/my_attendance/work_from_home_screen.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'; import 'package:mohem_flutter_app/ui/screens/profile/profile_screen.dart'; import 'package:mohem_flutter_app/ui/screens/submenu_screen.dart'; import 'package:mohem_flutter_app/ui/profile/family_members.dart'; +import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/item_history_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/itg_detail_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/worklist_detail_screen.dart'; @@ -48,8 +49,8 @@ class AppRoutes { static const String itemHistory = "/itemHistory"; static const String myAttendance = "/myAttendance"; - static const String workFromHome = "/workFromHome"; - static const String addWorkFromHome = "/addWorkFromHome"; + static const String dynamicScreen = "/dynamicScreen"; + static const String addDynamicInput = "/addDynamicInput"; //profile //Attendance @@ -87,8 +88,8 @@ class AppRoutes { itemHistory: (context) => ItemHistoryScreen(), myAttendance: (context) => MyAttendanceScreen(), - workFromHome: (context) => WorkFromHomeScreen(), - addWorkFromHome: (context) => AddWorkFromHomeScreen(), + // workFromHome: (context) => WorkFromHomeScreen(), + // addWorkFromHome: (context) => AddWorkFromHomeScreen(), profile: (context) => ProfileScreen(), //Attendance monthlyAttendance: (context) => MonthlyAttendance(), @@ -103,5 +104,7 @@ class AppRoutes { basicDetails: (context) => BasicDetails(), contactDetails: (context) => ContactDetails(), familyMembers: (context) => FamilyMembers(), + dynamicScreen: (context) => DynamicListViewScreen(), + addDynamicInput: (context) => DynamicInputScreen(), }; } diff --git a/lib/models/dashboard/get_open_missing_swipes_list_model.dart b/lib/models/dashboard/get_open_missing_swipes_list_model.dart index 86ac6a9..8554637 100644 --- a/lib/models/dashboard/get_open_missing_swipes_list_model.dart +++ b/lib/models/dashboard/get_open_missing_swipes_list_model.dart @@ -1,4 +1,3 @@ - class GetOpenMissingSwipesList { GetOpenMissingSwipesList({ this.pOpenMissingSwipes, diff --git a/lib/models/dyanmic_forms/get_set_values_request_model.dart b/lib/models/dyanmic_forms/get_set_values_request_model.dart new file mode 100644 index 0000000..82bc05a --- /dev/null +++ b/lib/models/dyanmic_forms/get_set_values_request_model.dart @@ -0,0 +1,32 @@ +class GetSetValuesRequestModel { + String? sEGMENTNAME; + String? vALUECOLUMNNAME; + String? dESCRIPTION; + String? iDCOLUMNNAME; + String? fLEXVALUESETNAME; + + GetSetValuesRequestModel( + {this.sEGMENTNAME, + this.vALUECOLUMNNAME, + this.dESCRIPTION, + this.iDCOLUMNNAME, + this.fLEXVALUESETNAME}); + + GetSetValuesRequestModel.fromJson(Map json) { + sEGMENTNAME = json['SEGMENT_NAME']; + vALUECOLUMNNAME = json['VALUE_COLUMN_NAME']; + dESCRIPTION = json['DESCRIPTION']; + iDCOLUMNNAME = json['ID_COLUMN_NAME']; + fLEXVALUESETNAME = json['FLEX_VALUE_SET_NAME']; + } + + Map toJson() { + final Map data = new Map(); + data['SEGMENT_NAME'] = this.sEGMENTNAME; + data['VALUE_COLUMN_NAME'] = this.vALUECOLUMNNAME; + data['DESCRIPTION'] = this.dESCRIPTION; + data['ID_COLUMN_NAME'] = this.iDCOLUMNNAME; + data['FLEX_VALUE_SET_NAME'] = this.fLEXVALUESETNAME; + return data; + } +} diff --git a/lib/models/generic_response_model.dart b/lib/models/generic_response_model.dart index decadfa..366489c 100644 --- a/lib/models/generic_response_model.dart +++ b/lib/models/generic_response_model.dart @@ -175,7 +175,7 @@ class GenericResponseModel { List? getVacationRulesList; List? getVaccinationOnHandList; List? getVaccinationsList; - List? getValueSetValuesList; + List? getValueSetValuesList; List? getWorkList; String? hRCertificateTemplate; String? imgURLsList; @@ -803,7 +803,13 @@ class GenericResponseModel { getVacationRulesList = json['GetVacationRulesList']; getVaccinationOnHandList = json['GetVaccinationOnHandList']; getVaccinationsList = json['GetVaccinationsList']; - getValueSetValuesList = json['GetValueSetValuesList']; + + if (json['GetValueSetValuesList'] != null) { + getValueSetValuesList = []; + json['GetValueSetValuesList'].forEach((v) { + getValueSetValuesList!.add(ESERVICESVS.fromJson(v)); + }); + } if (json['GetWorkList'] != null) { getWorkList = []; @@ -1170,12 +1176,12 @@ class GenericResponseModel { data['GetVacationRulesList'] = this.getVacationRulesList; data['GetVaccinationOnHandList'] = this.getVaccinationOnHandList; data['GetVaccinationsList'] = this.getVaccinationsList; - data['GetValueSetValuesList'] = this.getValueSetValuesList; - + if (getValueSetValuesList != null) { + data['GetValueSetValuesList'] = getValueSetValuesList!.map((v) => v.toJson()).toList(); + } if (getWorkList != null) { data['GetWorkList'] = getWorkList!.map((v) => v.toJson()).toList(); } - data['HRCertificateTemplate'] = this.hRCertificateTemplate; data['ImgURLsList'] = this.imgURLsList; data['InsertApInv'] = this.insertApInv; diff --git a/lib/models/get_eit_dff_structure_list_model.dart b/lib/models/get_eit_dff_structure_list_model.dart index 93f6b60..d559794 100644 --- a/lib/models/get_eit_dff_structure_list_model.dart +++ b/lib/models/get_eit_dff_structure_list_model.dart @@ -4,7 +4,7 @@ class GetEITDFFStructureList { String? cHILDSEGMENTSDV; List? cHILDSEGMENTSDVSplited; String? cHILDSEGMENTSVS; - String? cHILDSEGMENTSVSSplited; + List? cHILDSEGMENTSVSSplited; String? dEFAULTTYPE; String? dEFAULTVALUE; String? dESCFLEXCONTEXTCODE; @@ -13,7 +13,7 @@ class GetEITDFFStructureList { String? dISPLAYFLAG; String? eNABLEDFLAG; ESERVICESDV? eSERVICESDV; - List? eSERVICESVS; + List? eSERVICESVS; String? fLEXVALUESETNAME; String? fORMATTYPE; String? fORMATTYPEDSP; @@ -28,7 +28,7 @@ class GetEITDFFStructureList { String? pARENTSEGMENTSDV; List? pARENTSEGMENTSDVSplited; String? pARENTSEGMENTSVS; - List? pARENTSEGMENTSVSSplitedVS; + List? pARENTSEGMENTSVSSplitedVS; String? rEADONLY; String? rEQUIREDFLAG; String? sEGMENTNAME; @@ -38,6 +38,7 @@ class GetEITDFFStructureList { String? uSEDFLAG; String? vALIDATIONTYPE; String? vALIDATIONTYPEDSP; + String? fieldAnswer; GetEITDFFStructureList( {this.aLPHANUMERICALLOWEDFLAG, @@ -78,15 +79,19 @@ class GetEITDFFStructureList { this.uPPERCASEONLYFLAG, this.uSEDFLAG, this.vALIDATIONTYPE, - this.vALIDATIONTYPEDSP}); + this.vALIDATIONTYPEDSP, + this.fieldAnswer}); GetEITDFFStructureList.fromJson(Map json) { + print("----------------=============================="); + print("----------------:$json"); aLPHANUMERICALLOWEDFLAG = json['ALPHANUMERIC_ALLOWED_FLAG']; aPPLICATIONCOLUMNNAME = json['APPLICATION_COLUMN_NAME']; cHILDSEGMENTSDV = json['CHILD_SEGMENTS_DV']; cHILDSEGMENTSDVSplited = json['CHILD_SEGMENTS_DV_Splited'] == null ? [] : json['CHILD_SEGMENTS_DV_Splited'].cast(); cHILDSEGMENTSVS = json['CHILD_SEGMENTS_VS']; - cHILDSEGMENTSVSSplited = json['CHILD_SEGMENTS_VS_Splited']; + cHILDSEGMENTSVSSplited = json['CHILD_SEGMENTS_VS_Splited'] == null ? [] : json['CHILD_SEGMENTS_VS_Splited'].cast(); + dEFAULTTYPE = json['DEFAULT_TYPE']; dEFAULTVALUE = json['DEFAULT_VALUE']; dESCFLEXCONTEXTCODE = json['DESC_FLEX_CONTEXT_CODE']; @@ -95,12 +100,21 @@ class GetEITDFFStructureList { 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(v); + // }); + // } if (json['E_SERVICES_VS'] != null) { - eSERVICESVS = []; + eSERVICESVS = []; json['E_SERVICES_VS'].forEach((v) { - eSERVICESVS!.add(v); + eSERVICESVS!.add(new ESERVICESVS.fromJson(v)); }); + } else { + eSERVICESVS = []; } + fLEXVALUESETNAME = json['FLEX_VALUE_SET_NAME']; fORMATTYPE = json['FORMAT_TYPE']; fORMATTYPEDSP = json['FORMAT_TYPE_DSP']; @@ -120,10 +134,11 @@ class GetEITDFFStructureList { }); } pARENTSEGMENTSVS = json['PARENT_SEGMENTS_VS']; + if (json['PARENT_SEGMENTS_VS_SplitedVS'] != null) { - pARENTSEGMENTSVSSplitedVS = []; + pARENTSEGMENTSVSSplitedVS = []; json['PARENT_SEGMENTS_VS_SplitedVS'].forEach((v) { - pARENTSEGMENTSVSSplitedVS!.add(v); + pARENTSEGMENTSVSSplitedVS!.add(new PARENTSEGMENTSVSSplitedVS.fromJson(v)); }); } rEADONLY = json['READ_ONLY']; @@ -156,8 +171,11 @@ class GetEITDFFStructureList { data['E_SERVICES_DV'] = this.eSERVICESDV!.toJson(); } if (this.eSERVICESVS != null) { - data['E_SERVICES_VS'] = this.eSERVICESVS!.toList(); + data['E_SERVICES_VS'] = this.eSERVICESVS!.map((v) => v.toJson()).toList(); } + // if (this.eSERVICESVS != null) { + // data['E_SERVICES_VS'] = this.eSERVICESVS!.toList(); + // } data['FLEX_VALUE_SET_NAME'] = this.fLEXVALUESETNAME; data['FORMAT_TYPE'] = this.fORMATTYPE; data['FORMAT_TYPE_DSP'] = this.fORMATTYPEDSP; @@ -175,8 +193,9 @@ class GetEITDFFStructureList { } data['PARENT_SEGMENTS_VS'] = this.pARENTSEGMENTSVS; if (this.pARENTSEGMENTSVSSplitedVS != null) { - data['PARENT_SEGMENTS_VS_SplitedVS'] = this.pARENTSEGMENTSVSSplitedVS!.toList(); + 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; @@ -215,6 +234,40 @@ class ESERVICESDV { } } +class ESERVICESVS { + String? dESCRIPTION; + int? fROMROWNUM; + String? iDCOLUMNNAME; + int? nOOFROWS; + int? rOWNUM; + int? tOROWNUM; + String? vALUECOLUMNNAME; + + ESERVICESVS({this.dESCRIPTION, this.fROMROWNUM, this.iDCOLUMNNAME, this.nOOFROWS, this.rOWNUM, this.tOROWNUM, this.vALUECOLUMNNAME}); + + ESERVICESVS.fromJson(Map json) { + dESCRIPTION = json['DESCRIPTION']; + fROMROWNUM = json['FROM_ROW_NUM']; + iDCOLUMNNAME = json['ID_COLUMN_NAME']; + nOOFROWS = json['NO_OF_ROWS']; + rOWNUM = json['ROW_NUM']; + tOROWNUM = json['TO_ROW_NUM']; + vALUECOLUMNNAME = json['VALUE_COLUMN_NAME']; + } + + Map toJson() { + final Map data = new Map(); + data['DESCRIPTION'] = this.dESCRIPTION; + data['FROM_ROW_NUM'] = this.fROMROWNUM; + data['ID_COLUMN_NAME'] = this.iDCOLUMNNAME; + data['NO_OF_ROWS'] = this.nOOFROWS; + data['ROW_NUM'] = this.rOWNUM; + data['TO_ROW_NUM'] = this.tOROWNUM; + data['VALUE_COLUMN_NAME'] = this.vALUECOLUMNNAME; + return data; + } +} + class PARENTSEGMENTSDVSplited { String? isRequired; String? name; @@ -233,3 +286,22 @@ class PARENTSEGMENTSDVSplited { return data; } } + +class PARENTSEGMENTSVSSplitedVS { + String? isRequired; + String? name; + + PARENTSEGMENTSVSSplitedVS({this.isRequired, this.name}); + + PARENTSEGMENTSVSSplitedVS.fromJson(Map json) { + isRequired = json['IsRequired']; + name = json['Name']; + } + + Map toJson() { + final Map data = new Map(); + data['IsRequired'] = this.isRequired; + data['Name'] = this.name; + return data; + } +} diff --git a/lib/ui/landing/widget/services_widget.dart b/lib/ui/landing/widget/services_widget.dart index 8af4849..f69776c 100644 --- a/lib/ui/landing/widget/services_widget.dart +++ b/lib/ui/landing/widget/services_widget.dart @@ -18,13 +18,13 @@ class ServicesWidget extends StatelessWidget { List namesT = [LocaleKeys.monthlyAttendance.tr(), LocaleKeys.workFromHome.tr(), LocaleKeys.ticketRequest.tr(), LocaleKeys.monthlyAttendance.tr()]; List iconT = [ "assets/images/monthly_attendance.svg", - "assets/images/work_from_home.svg", + "assets/images/dynamic_screens.svg", "assets/images/ticket_request.svg", - "assets/images/work_from_home.svg", - "assets/images/work_from_home.svg", - "assets/images/work_from_home.svg", - "assets/images/work_from_home.svg", - "assets/images/work_from_home.svg" + "assets/images/dynamic_screens.svg", + "assets/images/dynamic_screens.svg", + "assets/images/dynamic_screens.svg", + "assets/images/dynamic_screens.svg", + "assets/images/dynamic_screens.svg" ]; return Consumer( @@ -108,7 +108,8 @@ class ServicesWidget extends StatelessWidget { } void handleOnPress(context, GetMenuEntriesList menuEntry) { - if (menuEntry.menuName == "HMG_OTL_SS") { + print(menuEntry.menuName); + if (menuEntry.menuName == "HMG_OTL_SS" || menuEntry.menuName == "HMG_PT_OTL_SS") { Navigator.pushNamed(context, AppRoutes.myAttendance); } else { Utils.showToast("In Progress"); diff --git a/lib/ui/my_attendance/add_work_from_home_screen.dart b/lib/ui/my_attendance/add_work_from_home_screen.dart deleted file mode 100644 index 108a0b8..0000000 --- a/lib/ui/my_attendance/add_work_from_home_screen.dart +++ /dev/null @@ -1,91 +0,0 @@ -import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/material.dart'; -import 'package:mohem_flutter_app/api/my_attendance_api_client.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/generated/locale_keys.g.dart'; -import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; -import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; -import 'package:mohem_flutter_app/widgets/button/default_button.dart'; - -class AddWorkFromHomeScreen extends StatefulWidget { - AddWorkFromHomeScreen({Key? key}) : super(key: key); - - @override - _AddWorkFromHomeScreenState createState() { - return _AddWorkFromHomeScreenState(); - } -} - -class _AddWorkFromHomeScreenState extends State { - List? getEitDffStructureList; - String? callingFunction; - - @override - void initState() { - super.initState(); - } - - void getTransactionsStructure() async { - try { - Utils.showLoading(context); - getEitDffStructureList = await MyAttendanceApiClient().getEitDffStructure(callingFunction!); - getEitDffStructureList = getEitDffStructureList!.where((element) => element.dISPLAYFLAG == "Y").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 (callingFunction == null) { - callingFunction = "HMG_OTL_WFH_EIT_SS"; // ModalRoute.of(context)!.settings.arguments as WorkListResponseModel; - getTransactionsStructure(); - } - return Scaffold( - backgroundColor: Colors.white, - appBar: AppBarWidget( - context, - title: LocaleKeys.workFromHome.tr(), - ), - body: Column( - children: [ - (getEitDffStructureList == null - ? const SizedBox() - : (getEitDffStructureList!.isEmpty - ? LocaleKeys.noDataAvailable.tr().toText16().center - : ListView.separated( - physics: const BouncingScrollPhysics(), - padding: EdgeInsets.all(21), - itemBuilder: (cxt, int parentIndex) => Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [], - ).objectContainerView(), - separatorBuilder: (cxt, index) => 12.height, - itemCount: getEitDffStructureList!.length))) - .expanded, - // 12.height, - DefaultButton( - LocaleKeys.next.tr(), - (getEitDffStructureList ?? []).isEmpty - ? null - : () => { - //Navigator.of(context).pushNamed(LOGIN_TYPE) - }, - ).insideContainer, - ], - ), - ); - } -} diff --git a/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart b/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart new file mode 100644 index 0000000..6fe23ae --- /dev/null +++ b/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart @@ -0,0 +1,221 @@ +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/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/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/generic_response_model.dart'; +import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.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 DynamicInputScreen extends StatefulWidget { + DynamicInputScreen({Key? key}) : super(key: key); + + @override + _DynamicInputScreenState createState() { + return _DynamicInputScreenState(); + } +} + +class _DynamicInputScreenState extends State { + GenericResponseModel? genericResponseModel; + List? getEitDffStructureList; + DynamicListViewParams? dynamicParams; + + @override + void initState() { + super.initState(); + } + + void getTransactionsStructure() async { + try { + Utils.showLoading(context); + genericResponseModel = await MyAttendanceApiClient().getEitDffStructure(dynamicParams!.dynamicId); + 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); + } + } + + void calGetValueSetValues(GetEITDFFStructureList structureList) async { + try { + Utils.showLoading(context); + String segmentId = structureList.cHILDSEGMENTSVS!; + List filteredList = getEitDffStructureList?.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 = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == structureList.cHILDSEGMENTSVS); + getEitDffStructureList![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 DynamicListViewParams; + getTransactionsStructure(); + } + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBarWidget( + context, + title: dynamicParams!.title, + ), + body: Column( + children: [ + (getEitDffStructureList == null + ? const SizedBox() + : (getEitDffStructureList!.isEmpty + ? LocaleKeys.noDataAvailable.tr().toText16().center + : ListView.separated( + physics: const BouncingScrollPhysics(), + padding: const EdgeInsets.all(21), + itemBuilder: (cxt, int parentIndex) => parseDynamicFormatType(getEitDffStructureList![parentIndex], parentIndex), + separatorBuilder: (cxt, index) => 0.height, + itemCount: getEitDffStructureList!.length))) + .expanded, + // 12.height, + DefaultButton( + LocaleKeys.next.tr(), + (getEitDffStructureList ?? []).isEmpty + ? null + : () => { + //Navigator.of(context).pushNamed(LOGIN_TYPE) + }, + ).insideContainer, + ], + ), + ); + } + + Widget parseDynamicFormatType(GetEITDFFStructureList 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.eSERVICESDV?.pIDCOLUMNNAME ?? "", + 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 index) { + + ESERVICESDV eservicesdv = ESERVICESDV( + pIDCOLUMNNAME: model.eSERVICESVS![index].vALUECOLUMNNAME, + pRETURNMSG: "null", + pRETURNSTATUS: getEitDffStructureList![index].dEFAULTVALUE, + pVALUECOLUMNNAME: model.eSERVICESVS![index].vALUECOLUMNNAME); + + print(model.eSERVICESVS![index].toJson()); + }); + } + + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model.eSERVICESDV?.pIDCOLUMNNAME ?? "", + isReadOnly: model.rEADONLY == "Y", + onChange: (text) { + model.fieldAnswer = text; + }, + ).paddingOnly(bottom: 12); + } else if (model.fORMATTYPE == "X") { + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model.eSERVICESDV?.pIDCOLUMNNAME ?? (getEitDffStructureList![index].fieldAnswer ?? ""), + suffixIconData: Icons.calendar_today, + isEnable: false, + onTap: () async { + DateTime date = await _selectDate(context); + DateTime date1 = DateTime(date.year, date.month, date.day); + getEitDffStructureList![index].fieldAnswer = date.toString(); + ESERVICESDV eservicesdv = ESERVICESDV( + pIDCOLUMNNAME: DateFormat('yyyy-MM-dd').format(date1), + pRETURNMSG: "null", + pRETURNSTATUS: getEitDffStructureList![index].dEFAULTVALUE, + pVALUECOLUMNNAME: DateFormat('yyyy-MM-ddThh:mm:ss.s').format(date)); + getEitDffStructureList![index].eSERVICESDV = eservicesdv; + setState(() {}); + if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) { + calGetValueSetValues(model); + } + }, + ).paddingOnly(bottom: 12); + } + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [], + ).objectContainerView(); + } + + 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/my_attendance/work_from_home_screen.dart b/lib/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart similarity index 81% rename from lib/ui/my_attendance/work_from_home_screen.dart rename to lib/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart index cff2594..ccf4222 100644 --- a/lib/ui/my_attendance/work_from_home_screen.dart +++ b/lib/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart @@ -12,19 +12,24 @@ import 'package:mohem_flutter_app/models/get_eit_transaction_list_model.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart'; -class WorkFromHomeScreen extends StatefulWidget { - WorkFromHomeScreen({Key? key}) : super(key: key); +class DynamicListViewParams { + String title; + String dynamicId; + DynamicListViewParams(this.title, this.dynamicId); +} + +class DynamicListViewScreen extends StatefulWidget { + DynamicListViewScreen({Key? key}) : super(key: key); @override - _WorkFromHomeScreenState createState() { - return _WorkFromHomeScreenState(); + _DynamicListViewScreenState createState() { + return _DynamicListViewScreenState(); } } -class _WorkFromHomeScreenState extends State { +class _DynamicListViewScreenState extends State { List? getEITTransactionList; - String? callingFunction; - + DynamicListViewParams? dynamicParams; @override void initState() { super.initState(); @@ -33,7 +38,7 @@ class _WorkFromHomeScreenState extends State { void getTransactions() async { try { Utils.showLoading(context); - getEITTransactionList = await MyAttendanceApiClient().getEitTransaction(callingFunction!); + getEITTransactionList = await MyAttendanceApiClient().getEitTransaction(dynamicParams!.dynamicId); Utils.hideLoading(context); setState(() {}); } catch (ex) { @@ -49,8 +54,8 @@ class _WorkFromHomeScreenState extends State { @override Widget build(BuildContext context) { - if (callingFunction == null) { - callingFunction = "HMG_OTL_WFH_EIT_SS"; // ModalRoute.of(context)!.settings.arguments as WorkListResponseModel; + if (dynamicParams == null) { + dynamicParams = ModalRoute.of(context)!.settings.arguments as DynamicListViewParams; getTransactions(); } @@ -58,7 +63,7 @@ class _WorkFromHomeScreenState extends State { backgroundColor: Colors.white, appBar: AppBarWidget( context, - title: LocaleKeys.workFromHome.tr(), + title: dynamicParams!.title, ), body: getEITTransactionList == null ? const SizedBox() @@ -91,7 +96,7 @@ class _WorkFromHomeScreenState extends State { ), child: const Icon(Icons.add, color: Colors.white, size: 30), ).onPress(() { - Navigator.pushNamed(context, AppRoutes.addWorkFromHome); + Navigator.pushNamed(context, AppRoutes.addDynamicInput,arguments: dynamicParams); }), ); } diff --git a/lib/ui/my_attendance/my_attendance_screen.dart b/lib/ui/my_attendance/my_attendance_screen.dart index f171577..2b74c98 100644 --- a/lib/ui/my_attendance/my_attendance_screen.dart +++ b/lib/ui/my_attendance/my_attendance_screen.dart @@ -7,6 +7,7 @@ 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/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; class MyAttendanceScreen extends StatelessWidget { @@ -29,6 +30,7 @@ class MyAttendanceScreen extends StatelessWidget { "assets/images/pdf.svg", LocaleKeys.missingSwipes.tr(), ).onPress(() { + Navigator.pushNamed(context, AppRoutes.dynamicScreen, arguments: DynamicListViewParams(LocaleKeys.missingSwipes.tr(), "HMG_OTL_MISSING_SWIPE_EIT_SS")); }), 12.height, @@ -36,7 +38,7 @@ class MyAttendanceScreen extends StatelessWidget { "assets/images/pdf.svg", LocaleKeys.workFromHome.tr(), ).onPress(() { - Navigator.pushNamed(context, AppRoutes.workFromHome); + Navigator.pushNamed(context, AppRoutes.dynamicScreen, arguments: DynamicListViewParams(LocaleKeys.workFromHome.tr(), "HMG_OTL_WFH_EIT_SS")); }), 12.height, itemView( diff --git a/lib/widgets/dynamic_forms/dynamic_textfield_widget.dart b/lib/widgets/dynamic_forms/dynamic_textfield_widget.dart new file mode 100644 index 0000000..23404ca --- /dev/null +++ b/lib/widgets/dynamic_forms/dynamic_textfield_widget.dart @@ -0,0 +1,108 @@ +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; + +class DynamicTextFieldWidget extends StatelessWidget { + final String labelText; + final String hintText; + // final TextEditingController controller; + final VoidCallback? onTap; + final IconData? suffixIconData; + final bool isEnable; + final bool isReadOnly; + final bool isPopup; + final int? lines; + final bool isInputTypeNum; + final bool isObscureText; + final bool isBackgroundEnable; + final void Function(String)? onChange; + + DynamicTextFieldWidget(this.labelText, this.hintText, //this.controller, + {this.isObscureText = false, + this.onTap, + this.suffixIconData, + this.isEnable = true, + this.isReadOnly = false, + this.isPopup = false, + this.lines = 1, + this.onChange, + this.isInputTypeNum = false, + this.isBackgroundEnable = false}); + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.only(left: 16, right: 16, bottom: 15, top: 15), + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(15), + color: isReadOnly ? MyColors.lightGreyEFColor : Colors.white, + border: Border.all( + color: MyColors.lightGreyEFColor, + width: 1, + ), + ), + child: InkWell( + onTap: onTap, + child: Row( + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + labelText, + style: const TextStyle( + fontSize: 11, + fontWeight: FontWeight.w600, + color: Color(0xff2B353E), + letterSpacing: -0.44, + ), + ), + TextField( + enabled: isEnable, + scrollPadding: EdgeInsets.zero, readOnly: isReadOnly, + keyboardType: isInputTypeNum ? TextInputType.number : TextInputType.text, + //controller: controller, + maxLines: lines, + obscuringCharacter: "*", + obscureText: isObscureText, + onChanged: onChange, + style: const TextStyle( + fontSize: 14, + height: 21 / 14, + fontWeight: FontWeight.w400, + color: Color(0xff2B353E), + letterSpacing: -0.44, + ), + decoration: InputDecoration( + isDense: true, + hintText: hintText, + fillColor: isReadOnly ? MyColors.borderColor : null, + hintStyle: const TextStyle( + fontSize: 14, + height: 21 / 14, + fontWeight: FontWeight.w400, + color: Color(0xff575757), + letterSpacing: -0.56, + ), + // suffixIconConstraints: const BoxConstraints(minWidth: 50), + // suffixIcon: suffixIconData == null ? null : Icon(suffixIconData, color: MyColors.darkTextColor), + // suffixIcon: suffixTap == null ? null : IconButton(icon: Icon(suffixIconData, color: MyColors.darkTextColor), onPressed: suffixTap), + contentPadding: EdgeInsets.zero, + border: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, + ), + ), + ], + ), + ), + if (isPopup) const Icon(Icons.keyboard_arrow_down_outlined, color: MyColors.darkTextColor), + if (onTap != null) Icon(suffixIconData ?? Icons.keyboard_arrow_down_outlined, color: MyColors.darkTextColor), + ], + ), + ), + ); + } +}