diff --git a/assets/images/call.svg b/assets/images/call.svg new file mode 100644 index 0000000..f98d059 --- /dev/null +++ b/assets/images/call.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/images/create_request.svg b/assets/images/create_request.svg new file mode 100644 index 0000000..c5bdeea --- /dev/null +++ b/assets/images/create_request.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/images/profile_details.svg b/assets/images/profile_details.svg new file mode 100644 index 0000000..9daf5ad --- /dev/null +++ b/assets/images/profile_details.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/assets/images/team.svg b/assets/images/team.svg new file mode 100644 index 0000000..aff9c19 --- /dev/null +++ b/assets/images/team.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/view_attendance.svg b/assets/images/view_attendance.svg new file mode 100644 index 0000000..256bf7a --- /dev/null +++ b/assets/images/view_attendance.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index da047f3..7e2048d 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -339,6 +339,17 @@ "pleaseSelectEmployeeForReplacement": "الرجاء تحديد موظف للاستبدال", "pleaseSelectAction": "الرجاء تحديد الإجراء", "pleaseSelectDate": "الرجاء تحديد التاريخ", + "todayAttendance": "حضور اليوم", + "viewAttendance": "عرض الحضور", + "teamMembers":"اعضاءالفريق", + "profileDetails": "الملف الشخصي", + "noResultsFound" : "لايوجد نتائج", + "searchBy": "بحث بواسطة", + "myTeamMembers": "اعضاء فريقي", + "save": "حفظ", + "itemType": "نوع العنصر", + "TurnNotificationsFor": "تفعيل الاشعارات", + "worklistSettings": "اعدادات الاشعارات", "absenceType": "نوع الغياب", "absenceCategory": "فئة الغياب", "days": "أيام", diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index ad1c8ee..38765dd 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -339,6 +339,17 @@ "pleaseSelectEmployeeForReplacement": "Please select employee for replacement", "pleaseSelectAction": "Please select action", "pleaseSelectDate": "Please select date", + "todayAttendance": "Today's Attendance", + "viewAttendance": "View Attendance", + "teamMembers":"Team Members", + "profileDetails": "Profile Details", + "noResultsFound" : "No Results Found", + "searchBy": "Search by", + "myTeamMembers": "My Team Members", + "save": "Save", + "itemType": "Item Type", + "TurnNotificationsFor": "Turn on notifications for", + "worklistSettings": "Worklist Settings", "absenceType": "Absence Type", "absenceCategory": "Absence Category", "days": "Days", diff --git a/lib/api/monthly_attendance_api_client.dart b/lib/api/monthly_attendance_api_client.dart index 543addb..00d444f 100644 --- a/lib/api/monthly_attendance_api_client.dart +++ b/lib/api/monthly_attendance_api_client.dart @@ -10,7 +10,6 @@ import 'package:mohem_flutter_app/models/get_schedule_shifts_details_list_model. import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart'; import 'package:mohem_flutter_app/api/api_client.dart'; -// todo '@fatima' change file name according to structure class MonthlyAttendanceApiClient { static final MonthlyAttendanceApiClient _instance = MonthlyAttendanceApiClient._internal(); diff --git a/lib/api/my_team/my_team_api_client.dart b/lib/api/my_team/my_team_api_client.dart new file mode 100644 index 0000000..4a843c1 --- /dev/null +++ b/lib/api/my_team/my_team_api_client.dart @@ -0,0 +1,149 @@ + + +import 'package:mohem_flutter_app/api/api_client.dart'; +import 'package:mohem_flutter_app/app_state/app_state.dart'; +import 'package:mohem_flutter_app/classes/consts.dart'; +import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_model.dart'; +import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart'; +import 'package:mohem_flutter_app/models/generic_response_model.dart'; +import 'package:mohem_flutter_app/models/get_day_hours_type_details_list_model.dart'; +import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart'; +import 'package:mohem_flutter_app/models/my_team/get_employee_subordinates_list.dart'; +import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart'; + +class MyTeamApiClient { + static final MyTeamApiClient _instance = MyTeamApiClient._internal(); + + MyTeamApiClient._internal(); + + factory MyTeamApiClient() => _instance; + + + Future> getEmployeeSubordinates(String searchEmpEmail, String searchEmpName, String searchEmpNo) async { + String url = "${ApiConsts.erpRest}GET_EMPLOYEE_SUBORDINATES"; + Map postParams = { + "P_PAGE_LIMIT": 50, + "P_PAGE_NUM": 1, + "P_SEARCH_EMAIL_ADDRESS": searchEmpEmail, + "P_SEARCH_EMPLOYEE_DISPLAY_NAME": searchEmpName, + "P_SEARCH_EMPLOYEE_NUMBER": searchEmpNo, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getEmployeeSubordinatesList ?? []; + }, url, postParams); + } + + Future getTimeCardSummary(String month, int year, String? empID) async { + String url = "${ApiConsts.erpRest}GET_TIME_CARD_SUMMARY"; + Map postParams = { + "P_MENU_TYPE": "M", + "P_SELECTED_RESP_ID": -999, + "SearchMonth": month, + "SearchYear": year, + }; + + postParams.addAll(AppState().postParamsJson); + postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID; + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return (responseData.getTimeCardSummaryList?.length ?? 0) > 0 ? responseData.getTimeCardSummaryList!.first : null; + }, url, postParams); + } + + Future> getDayHoursTypeDetails(String month, int year, String? empID) async { + String url = "${ApiConsts.erpRest}GET_DAY_HOURS_TYPE_DETAILS"; + Map postParams = { + "P_MENU_TYPE": "M", + "P_PAGE_LIMIT": 100, + "P_PAGE_NUM": 1, + "P_SELECTED_RESP_ID": -999, + "SearchMonth": month, + "SearchYear": year, + }; + postParams.addAll(AppState().postParamsJson); + postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID; + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + print(responseData.getDayHoursTypeDetailsList!.length); + return responseData.getDayHoursTypeDetailsList ?? []; + }, url, postParams); + } + + + Future getAttendanceTracking(String? empID) async { + String url = "${ApiConsts.erpRest}GET_Attendance_Tracking"; + Map postParams = {}; + postParams.addAll(AppState().postParamsJson); + postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID; + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + print(responseData.getAttendanceTrackingList); + return responseData.getAttendanceTrackingList; + }, url, postParams); + } + + Future> employeeSubordinates(String searchEmpEmail, String searchEmpName, String searchEmpNo, String? empID) async { + String url = "${ApiConsts.erpRest}GET_EMPLOYEE_SUBORDINATES"; + Map postParams = { + "P_PAGE_LIMIT": 50, + "P_PAGE_NUM": 1, + "P_SEARCH_EMAIL_ADDRESS": searchEmpEmail, + "P_SEARCH_EMPLOYEE_DISPLAY_NAME": searchEmpName, + "P_SEARCH_EMPLOYEE_NUMBER": searchEmpNo, + }; + postParams.addAll(AppState().postParamsJson); + postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID; + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getEmployeeSubordinatesList ?? []; + }, url, postParams); + } + + Future> employeeSubordinatesRequest(String? empID) async { + String url = "${ApiConsts.erpRest}GET_MENU_ENTRIES"; + Map postParams = { + "P_MENU_TYPE": "M", + "P_SELECTED_RESP_ID": -999, + }; + postParams.addAll(AppState().postParamsJson); + postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID; + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getMenuEntriesList ?? []; + }, url, postParams); + } + + Future?> getFavoriteReplacement() async { + String url = "${ApiConsts.erpRest}Mohemm_GetFavoriteReplacements"; + Map postParams = { + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData.mohemmGetFavoriteReplacementsList; + }, url, postParams); + } + + Future changeFavoriteReplacements({required String email, required String employeName, required String image, required String userName, bool isFav = false}) async { + String url = "${ApiConsts.erpRest}Mohemm_ChangeFavoriteReplacements"; + Map postParamsObj = { + "EMAIL_ADDRESS": email, + "EMPLOYEE_DISPLAY_NAME": employeName, + "EMPLOYEE_IMAGE": image, + "IsFavorite": isFav, + "USER_NAME": userName, + }; + Map postParams = { + "Mohemm_ChangeReplacementsInputList": [postParamsObj], + //postParams["Mohemm_ChangeReplacementsInputList"] = list; + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData; + }, url, postParams); + } +} + diff --git a/lib/api/worklist/worklist_api_client.dart b/lib/api/worklist/worklist_api_client.dart index bc05627..f1f9408 100644 --- a/lib/api/worklist/worklist_api_client.dart +++ b/lib/api/worklist/worklist_api_client.dart @@ -17,15 +17,18 @@ import 'package:mohem_flutter_app/models/get_po_notification_body_list_model.dar import 'package:mohem_flutter_app/models/get_quotation_analysis_list_model.dart'; import 'package:mohem_flutter_app/models/get_stamp_ms_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/get_stamp_ns_notification_body_list_model.dart'; +import 'package:mohem_flutter_app/models/get_user_item_type_list.dart'; import 'package:mohem_flutter_app/models/itg_forms_models/itg_request_model.dart'; import 'package:mohem_flutter_app/models/member_information_list_model.dart'; import 'package:mohem_flutter_app/models/notification_get_respond_attributes_list_model.dart'; +import 'package:mohem_flutter_app/models/update_user_item_type_list.dart'; import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart'; import 'package:mohem_flutter_app/models/worklist/hr/eit_otification_body_model.dart'; import 'package:mohem_flutter_app/models/worklist/hr/get_basic_det_ntf_body_list_model.dart'; import 'package:mohem_flutter_app/models/worklist/hr/get_contact_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/worklist/hr/get_phones_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart'; +import 'package:mohem_flutter_app/models/worklist/update_user_type_list.dart'; import 'package:mohem_flutter_app/models/worklist_response_model.dart'; class WorkListApiClient { @@ -445,4 +448,31 @@ class WorkListApiClient { return responseData; }, url, postParams); } + + + Future> getUserItemTypes() async { + String url = "${ApiConsts.erpRest}GET_USER_ITEM_TYPES"; + Map postParams = { + + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData.getUserItemTypesList ?? []; + }, url, postParams); + } + + Future updateUserItemTypes(List> itemList) async { + String url = "${ApiConsts.erpRest}UPDATE_USER_ITEM_TYPES"; + Map postParams = { + "UpdateItemTypeList": itemList + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData.updateUserItemTypesList; + }, url, postParams); + } + + } diff --git a/lib/classes/colors.dart b/lib/classes/colors.dart index 1b7c1a5..322bac6 100644 --- a/lib/classes/colors.dart +++ b/lib/classes/colors.dart @@ -42,4 +42,10 @@ class MyColors { static const Color darkColor = Color(0xff000015); static const Color lightGrayColor = Color(0xff808080); static const Color DarkRedColor = Color(0xffD02127); + static const Color lightGreyColor = Color(0xffC7C7C7); + static const Color green69Color = Color(0xff1FA169); + static const Color redA3Color = Color(0xffCA3332); + static const Color green9CColor = Color(0xff259CB8); + static const Color green2DColor = Color(0xff32D892); + static const Color greyC4Color = Color(0xffC4C4C4); } diff --git a/lib/config/routes.dart b/lib/config/routes.dart index a7fc29c..8b969bf 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -16,6 +16,13 @@ import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/services_menu_list_screen.dart'; +// import 'package:mohem_flutter_app/ui/my_attendance/my_attendance_screen.dart'; +import 'package:mohem_flutter_app/ui/my_team/create_request.dart'; +import 'package:mohem_flutter_app/ui/my_team/employee_details.dart'; +import 'package:mohem_flutter_app/ui/my_team/my_team.dart'; +import 'package:mohem_flutter_app/ui/my_team/profile_details.dart'; +import 'package:mohem_flutter_app/ui/my_team/team_members.dart'; +import 'package:mohem_flutter_app/ui/my_team/view_attendance.dart'; import 'package:mohem_flutter_app/ui/payslip/monthly_pay_slip_screen.dart'; import 'package:mohem_flutter_app/ui/profile/add_update_family_member.dart'; import 'package:mohem_flutter_app/ui/profile/basic_details.dart'; @@ -41,6 +48,9 @@ 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/work_list_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/worklist_detail_screen.dart'; +import 'package:mohem_flutter_app/ui/my_team/my_team.dart'; +import 'package:mohem_flutter_app/ui/my_team/create_request.dart'; +import 'package:mohem_flutter_app/ui/work_list/worklist_settings.dart'; class AppRoutes { static const String splash = "/splash"; @@ -63,6 +73,7 @@ class AppRoutes { static const String workListDetail = "/workListDetail"; static const String itgDetail = "/itgDetail"; static const String itemHistory = "/itemHistory"; + static const String worklistSettings = "/worklistSettings"; // Leave Balance static const String leaveBalance = "/leaveBalance"; @@ -112,6 +123,15 @@ class AppRoutes { //Pay slip static const String monthlyPaySlip = "/monthlyPaySlip"; + //My Team + static const String myTeam = "/myTeam"; + static const String employeeDetails = "/employeeDetails"; + static const String profileDetails = "/profileDetails"; + static const String viewAttendance = "/viewAttendance"; + static const String teamMembers = "/teamMembers"; + static const String createRequest = "/createRequest"; + + static final Map routes = { login: (context) => LoginScreen(), verifyLogin: (context) => VerifyLoginScreen(), @@ -131,6 +151,7 @@ class AppRoutes { workListDetail: (context) => WorkListDetailScreen(), itgDetail: (context) => ItgDetailScreen(), itemHistory: (context) => ItemHistoryScreen(), + worklistSettings: (context) => WorklistSettings(), // Leave Balance @@ -178,5 +199,17 @@ class AppRoutes { //pay slip monthlyPaySlip: (context) => MonthlyPaySlipScreen(), + + //My Team + myTeam: (context) => MyTeam(), + employeeDetails: (context) => EmployeeDetails(), + profileDetails: (context) => ProfileDetails(), + viewAttendance: (context) => ViewAttendance(), + teamMembers: (context) => TeamMembers(), + createRequest: (context) => CreateRequest(), + + + + }; } diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index e77e32f..53499b8 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -355,6 +355,16 @@ class CodegenLoader extends AssetLoader{ "pleaseSelectEmployeeForReplacement": "الرجاء تحديد موظف للاستبدال", "pleaseSelectAction": "الرجاء تحديد الإجراء", "pleaseSelectDate": "الرجاء تحديد التاريخ", + "todayAttendance": "حضور اليوم", + "viewAttendance": "عرض الحضور", + "teamMembers": "اعضاءالفريق", + "profileDetails": "الملف الشخصي", + "noResultsFound": "لايوجد نتائج", + "searchBy": "بحث بواسطة", + "myTeamMembers": "اعضاء فريقي", + "save": "حفظ", + "TurnNotificationsFor": "تفعيل الاشعارات", + "worklistSettings": "اعدادات الاشعارات", "absenceType": "نوع الغياب", "absenceCategory": "فئة الغياب", "days": "أيام", @@ -736,6 +746,16 @@ static const Map en_US = { "pleaseSelectEmployeeForReplacement": "Please select employee for replacement", "pleaseSelectAction": "Please select action", "pleaseSelectDate": "Please select date", + "todayAttendance": "Today's Attendance", + "viewAttendance": "View Attendance", + "teamMembers": "Team Members", + "profileDetails": "Profile Details", + "noResultsFound": "No Results Found", + "searchBy": "Search by", + "myTeamMembers": "My Team Members", + "save": "Save", + "TurnNotificationsFor": "Turn on notifications for", + "worklistSettings": "Worklist Settings", "absenceType": "Absence Type", "absenceCategory": "Absence Category", "days": "Days", diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index 7e679fe..43165af 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -340,6 +340,16 @@ abstract class LocaleKeys { static const pleaseSelectEmployeeForReplacement = 'pleaseSelectEmployeeForReplacement'; static const pleaseSelectAction = 'pleaseSelectAction'; static const pleaseSelectDate = 'pleaseSelectDate'; + static const todayAttendance = 'todayAttendance'; + static const viewAttendance = 'viewAttendance'; + static const teamMembers = 'teamMembers'; + static const profileDetails = 'profileDetails'; + static const noResultsFound = 'noResultsFound'; + static const searchBy = 'searchBy'; + static const myTeamMembers = 'myTeamMembers'; + static const save = 'save'; + static const TurnNotificationsFor = 'TurnNotificationsFor'; + static const worklistSettings = 'worklistSettings'; static const absenceType = 'absenceType'; static const absenceCategory = 'absenceCategory'; static const days = 'days'; diff --git a/lib/models/generic_response_model.dart b/lib/models/generic_response_model.dart index 219a80b..c8cc86f 100644 --- a/lib/models/generic_response_model.dart +++ b/lib/models/generic_response_model.dart @@ -32,6 +32,7 @@ import 'package:mohem_flutter_app/models/get_schedule_shifts_details_list_model. import 'package:mohem_flutter_app/models/get_stamp_ms_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/get_stamp_ns_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart'; +import 'package:mohem_flutter_app/models/get_user_item_type_list.dart'; import 'package:mohem_flutter_app/models/leave_balance/get_absence_attendance_types_list_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/get_absence_dff_structure_list_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/get_absence_transaction_list_model.dart'; @@ -50,6 +51,7 @@ import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_details.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_transactions.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_types.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_tickets_list.dart'; +import 'package:mohem_flutter_app/models/my_team/get_employee_subordinates_list.dart'; 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/pending_transactions/get_pending_transactions_details.dart'; @@ -71,6 +73,8 @@ 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/vacation_rule/create_vacation_rule_list_model.dart'; +import 'package:mohem_flutter_app/models/update_item_type_success_list.dart'; +import 'package:mohem_flutter_app/models/update_user_item_type_list.dart'; import 'package:mohem_flutter_app/models/vacation_rule/get_item_type_notifications_list_model.dart'; import 'package:mohem_flutter_app/models/vacation_rule/get_notification_reassign_mode_list_model.dart'; import 'package:mohem_flutter_app/models/vacation_rule/get_vacation_rules_list_model.dart'; @@ -173,7 +177,7 @@ class GenericResponseModel { List? getEmployeeBasicDetailsList; List? getEmployeeContactsList; List? getEmployeePhonesList; - List? getEmployeeSubordinatesList; + List? getEmployeeSubordinatesList; List? getFliexfieldStructureList; List? getHrCollectionNotificationBodyList; List? getHrTransactionList; @@ -231,7 +235,7 @@ class GenericResponseModel { List? getDepartmentSections; List? getPendingTransactionsFunctions; List? getPendingTransactionsDetails; - List? getUserItemTypesList; + List? getUserItemTypesList; List? getVacationRulesList; List? getVaccinationOnHandList; List? getVaccinationsList; @@ -286,7 +290,7 @@ class GenericResponseModel { String? pForm; String? pINFORMATION; int? pMBLID; - String? pNUMOFSUBORDINATES; + int? pNUMOFSUBORDINATES; int? pOPENNTFNUMBER; String? pQUESTION; int? pSESSIONID; @@ -329,8 +333,8 @@ class GenericResponseModel { String? tokenID; String? updateAttachmentList; String? updateEmployeeImageList; - String? updateItemTypeSuccessList; - String? updateUserItemTypesList; + List? updateItemTypeSuccessList; + UpdateUserItemTypesList? updateUserItemTypesList; String? updateVacationRuleList; String? vHREmployeeLoginList; String? vHRGetEmployeeDetailsList; @@ -850,7 +854,13 @@ class GenericResponseModel { getEmployeePhonesList!.add(GetEmployeePhonesList.fromJson(v)); }); } - getEmployeeSubordinatesList = json['GetEmployeeSubordinatesList']; + if (json['GetEmployeeSubordinatesList'] != null) { + getEmployeeSubordinatesList = []; + json['GetEmployeeSubordinatesList'].forEach((v) { + getEmployeeSubordinatesList! + .add(new GetEmployeeSubordinatesList.fromJson(v)); + }); + } getFliexfieldStructureList = json['GetFliexfieldStructureList']; getHrCollectionNotificationBodyList = json['GetHrCollectionNotificationBodyList']; getHrTransactionList = json['GetHrTransactionList']; @@ -1064,7 +1074,12 @@ class GenericResponseModel { }); } - getUserItemTypesList = json['GetUserItemTypesList']; + if (json['GetUserItemTypesList'] != null) { + getUserItemTypesList = []; + json['GetUserItemTypesList'].forEach((v) { + getUserItemTypesList!.add(new GetUserItemTypesList.fromJson(v)); + }); + } if (json['GetVacationRulesList'] != null) { getVacationRulesList = []; json['GetVacationRulesList'].forEach((v) { @@ -1235,8 +1250,16 @@ class GenericResponseModel { tokenID = json['TokenID']; updateAttachmentList = json['UpdateAttachmentList']; updateEmployeeImageList = json['UpdateEmployeeImageList']; - updateItemTypeSuccessList = json['UpdateItemTypeSuccessList']; - updateUserItemTypesList = json['UpdateUserItemTypesList']; + if (json['UpdateItemTypeSuccessList'] != null) { + updateItemTypeSuccessList = []; + json['UpdateItemTypeSuccessList'].forEach((v) { + updateItemTypeSuccessList! + .add(new UpdateItemTypeSuccessList.fromJson(v)); + }); + } + updateUserItemTypesList = json['UpdateUserItemTypesList'] != null + ? new UpdateUserItemTypesList.fromJson(json['UpdateUserItemTypesList']) + : null; updateVacationRuleList = json['UpdateVacationRuleList']; vHREmployeeLoginList = json['VHR_EmployeeLoginList']; vHRGetEmployeeDetailsList = json['VHR_GetEmployeeDetailsList']; @@ -1425,7 +1448,10 @@ class GenericResponseModel { if (this.getEmployeePhonesList != null) { data['GetEmployeePhonesList'] = this.getEmployeePhonesList!.map((v) => v.toJson()).toList(); } - data['GetEmployeeSubordinatesList'] = this.getEmployeeSubordinatesList; + if (this.getEmployeeSubordinatesList != null) { + data['GetEmployeeSubordinatesList'] = + this.getEmployeeSubordinatesList!.map((v) => v.toJson()).toList(); + } data['GetFliexfieldStructureList'] = this.getFliexfieldStructureList; data['GetHrCollectionNotificationBodyList'] = this.getHrCollectionNotificationBodyList; data['GetHrTransactionList'] = this.getHrTransactionList; @@ -1662,8 +1688,13 @@ class GenericResponseModel { data['TokenID'] = this.tokenID; data['UpdateAttachmentList'] = this.updateAttachmentList; data['UpdateEmployeeImageList'] = this.updateEmployeeImageList; - data['UpdateItemTypeSuccessList'] = this.updateItemTypeSuccessList; - data['UpdateUserItemTypesList'] = this.updateUserItemTypesList; + if (this.updateItemTypeSuccessList != null) { + data['UpdateItemTypeSuccessList'] = + this.updateItemTypeSuccessList!.map((v) => v.toJson()).toList(); + } + if (this.updateUserItemTypesList != null) { + data['UpdateUserItemTypesList'] = this.updateUserItemTypesList!.toJson(); + } data['UpdateVacationRuleList'] = this.updateVacationRuleList; data['VHR_EmployeeLoginList'] = this.vHREmployeeLoginList; data['VHR_GetEmployeeDetailsList'] = this.vHRGetEmployeeDetailsList; diff --git a/lib/models/get_user_item_type_list.dart b/lib/models/get_user_item_type_list.dart new file mode 100644 index 0000000..a197c2e --- /dev/null +++ b/lib/models/get_user_item_type_list.dart @@ -0,0 +1,35 @@ + + +class GetUserItemTypesList { + String? fYAENABLEDFALG; + String? fYIENABLEDFLAG; + String? iTEMTYPE; + int? uSERITEMTYPEID; + bool? isFYI; + bool? isFYA; + + GetUserItemTypesList( + {this.fYAENABLEDFALG, + this.fYIENABLEDFLAG, + this.iTEMTYPE, + this.uSERITEMTYPEID, + this.isFYI, + this.isFYA + }); + + GetUserItemTypesList.fromJson(Map json) { + fYAENABLEDFALG = json['FYA_ENABLED_FALG']; + fYIENABLEDFLAG = json['FYI_ENABLED_FLAG']; + iTEMTYPE = json['ITEM_TYPE']; + uSERITEMTYPEID = json['USER_ITEM_TYPE_ID']; + } + + Map toJson() { + final Map data = new Map(); + data['FYA_ENABLED_FALG'] = this.fYAENABLEDFALG; + data['FYI_ENABLED_FLAG'] = this.fYIENABLEDFLAG; + data['ITEM_TYPE'] = this.iTEMTYPE; + data['USER_ITEM_TYPE_ID'] = this.uSERITEMTYPEID; + return data; + } +} \ No newline at end of file diff --git a/lib/models/my_team/get_attendance_tracking_list_model.dart b/lib/models/my_team/get_attendance_tracking_list_model.dart new file mode 100644 index 0000000..7670702 --- /dev/null +++ b/lib/models/my_team/get_attendance_tracking_list_model.dart @@ -0,0 +1,58 @@ + + +class GetAttendanceTrackingList { + String? pBREAKHOURS; + String? pLATEINHOURS; + String? pREMAININGHOURS; + String? pRETURNMSG; + String? pRETURNSTATUS; + String? pSCHEDULEDHOURS; + String? pSHTNAME; + String? pSPENTHOURS; + String? pSWIPESEXEMPTEDFLAG; + Null? pSWIPEIN; + Null? pSWIPEOUT; + + GetAttendanceTrackingList( + {this.pBREAKHOURS, + this.pLATEINHOURS, + this.pREMAININGHOURS, + this.pRETURNMSG, + this.pRETURNSTATUS, + this.pSCHEDULEDHOURS, + this.pSHTNAME, + this.pSPENTHOURS, + this.pSWIPESEXEMPTEDFLAG, + this.pSWIPEIN, + this.pSWIPEOUT}); + + GetAttendanceTrackingList.fromJson(Map json) { + pBREAKHOURS = json['P_BREAK_HOURS']; + pLATEINHOURS = json['P_LATE_IN_HOURS']; + pREMAININGHOURS = json['P_REMAINING_HOURS']; + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + pSCHEDULEDHOURS = json['P_SCHEDULED_HOURS']; + pSHTNAME = json['P_SHT_NAME']; + pSPENTHOURS = json['P_SPENT_HOURS']; + pSWIPESEXEMPTEDFLAG = json['P_SWIPES_EXEMPTED_FLAG']; + pSWIPEIN = json['P_SWIPE_IN']; + pSWIPEOUT = json['P_SWIPE_OUT']; + } + + Map toJson() { + final Map data = new Map(); + data['P_BREAK_HOURS'] = this.pBREAKHOURS; + data['P_LATE_IN_HOURS'] = this.pLATEINHOURS; + data['P_REMAINING_HOURS'] = this.pREMAININGHOURS; + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + data['P_SCHEDULED_HOURS'] = this.pSCHEDULEDHOURS; + data['P_SHT_NAME'] = this.pSHTNAME; + data['P_SPENT_HOURS'] = this.pSPENTHOURS; + data['P_SWIPES_EXEMPTED_FLAG'] = this.pSWIPESEXEMPTEDFLAG; + data['P_SWIPE_IN'] = this.pSWIPEIN; + data['P_SWIPE_OUT'] = this.pSWIPEOUT; + return data; + } +} \ No newline at end of file diff --git a/lib/models/my_team/get_employee_subordinates_list.dart b/lib/models/my_team/get_employee_subordinates_list.dart new file mode 100644 index 0000000..b90034b --- /dev/null +++ b/lib/models/my_team/get_employee_subordinates_list.dart @@ -0,0 +1,313 @@ + +class GetEmployeeSubordinatesList { + String? aCTUALTERMINATIONDATE; + String? aSSIGNMENTENDDATE; + int? aSSIGNMENTID; + String? aSSIGNMENTNUMBER; + String? aSSIGNMENTSTARTDATE; + int? aSSIGNMENTSTATUSTYPEID; + String? aSSIGNMENTTYPE; + int? bUSINESSGROUPID; + String? bUSINESSGROUPNAME; + String? cURRENTEMPLOYEEFLAG; + String? eMPLOYEEDISPLAYNAME; + String? eMPLOYEEEMAILADDRESS; + String? eMPLOYEEIMAGE; + String? eMPLOYEEMOBILENUMBER; + String? eMPLOYEENAME; + String? eMPLOYEENUMBER; + String? eMPLOYEEWORKNUMBER; + String? eMPLOYMENTCATEGORY; + String? eMPLOYMENTCATEGORYMEANING; + String? fREQUENCY; + String? fREQUENCYMEANING; + int? fROMROWNUM; + dynamic? gRADEID; + dynamic? gRADENAME; + dynamic? genderCode; + dynamic? genderMeaning; + String? hIREDATE; + bool? isFavorite; + int? jOBID; + String? jOBNAME; + int? lOCATIONID; + String? lOCATIONNAME; + String? mANUALTIMECARDFLAG; + String? mANUALTIMECARDMEANING; + String? nATIONALITYCODE; + String? nATIONALITYMEANING; + String? nATIONALIDENTIFIER; + dynamic? nORMALHOURS; + int? nOOFROWS; + int? nUMOFSUBORDINATES; + int? oRGANIZATIONID; + String? oRGANIZATIONNAME; + String? pAYROLLCODE; + int? pAYROLLID; + String? pAYROLLNAME; + int? pERSONID; + String? pERSONTYPE; + int? pERSONTYPEID; + String? pERINFORMATIONCATEGORY; + int? pOSITIONID; + String? pOSITIONNAME; + String? pRIMARYFLAG; + int? rOWNUM; + int? sERVICEDAYS; + int? sERVICEMONTHS; + int? sERVICEYEARS; + String? sUPERVISORASSIGNMENTID; + String? sUPERVISORDISPLAYNAME; + String? sUPERVISOREMAILADDRESS; + int? sUPERVISORID; + String? sUPERVISORMOBILENUMBER; + String? sUPERVISORNAME; + String? sUPERVISORNUMBER; + String? sUPERVISORWORKNUMBER; + String? sWIPESEXEMPTEDFLAG; + String? sWIPESEXEMPTEDMEANING; + String? sYSTEMPERSONTYPE; + String? tKEMAILADDRESS; + String? tKEMPLOYEEDISPLAYNAME; + String? tKEMPLOYEENAME; + String? tKEMPLOYEENUMBER; + int? tKPERSONID; + int? tOROWNUM; + String? uNITNUMBER; + String? uSERSTATUS; + + GetEmployeeSubordinatesList( + {this.aCTUALTERMINATIONDATE, + this.aSSIGNMENTENDDATE, + this.aSSIGNMENTID, + this.aSSIGNMENTNUMBER, + this.aSSIGNMENTSTARTDATE, + this.aSSIGNMENTSTATUSTYPEID, + this.aSSIGNMENTTYPE, + this.bUSINESSGROUPID, + this.bUSINESSGROUPNAME, + this.cURRENTEMPLOYEEFLAG, + this.eMPLOYEEDISPLAYNAME, + this.eMPLOYEEEMAILADDRESS, + this.eMPLOYEEIMAGE, + this.eMPLOYEEMOBILENUMBER, + this.eMPLOYEENAME, + this.eMPLOYEENUMBER, + this.eMPLOYEEWORKNUMBER, + this.eMPLOYMENTCATEGORY, + this.eMPLOYMENTCATEGORYMEANING, + this.fREQUENCY, + this.fREQUENCYMEANING, + this.fROMROWNUM, + this.gRADEID, + this.gRADENAME, + this.genderCode, + this.genderMeaning, + this.hIREDATE, + this.isFavorite, + this.jOBID, + this.jOBNAME, + this.lOCATIONID, + this.lOCATIONNAME, + this.mANUALTIMECARDFLAG, + this.mANUALTIMECARDMEANING, + this.nATIONALITYCODE, + this.nATIONALITYMEANING, + this.nATIONALIDENTIFIER, + this.nORMALHOURS, + this.nOOFROWS, + this.nUMOFSUBORDINATES, + this.oRGANIZATIONID, + this.oRGANIZATIONNAME, + this.pAYROLLCODE, + this.pAYROLLID, + this.pAYROLLNAME, + this.pERSONID, + this.pERSONTYPE, + this.pERSONTYPEID, + this.pERINFORMATIONCATEGORY, + this.pOSITIONID, + this.pOSITIONNAME, + this.pRIMARYFLAG, + this.rOWNUM, + this.sERVICEDAYS, + this.sERVICEMONTHS, + this.sERVICEYEARS, + this.sUPERVISORASSIGNMENTID, + this.sUPERVISORDISPLAYNAME, + this.sUPERVISOREMAILADDRESS, + this.sUPERVISORID, + this.sUPERVISORMOBILENUMBER, + this.sUPERVISORNAME, + this.sUPERVISORNUMBER, + this.sUPERVISORWORKNUMBER, + this.sWIPESEXEMPTEDFLAG, + this.sWIPESEXEMPTEDMEANING, + this.sYSTEMPERSONTYPE, + this.tKEMAILADDRESS, + this.tKEMPLOYEEDISPLAYNAME, + this.tKEMPLOYEENAME, + this.tKEMPLOYEENUMBER, + this.tKPERSONID, + this.tOROWNUM, + this.uNITNUMBER, + this.uSERSTATUS}); + + GetEmployeeSubordinatesList.fromJson(Map json) { + aCTUALTERMINATIONDATE = json['ACTUAL_TERMINATION_DATE']; + aSSIGNMENTENDDATE = json['ASSIGNMENT_END_DATE']; + aSSIGNMENTID = json['ASSIGNMENT_ID']; + aSSIGNMENTNUMBER = json['ASSIGNMENT_NUMBER']; + aSSIGNMENTSTARTDATE = json['ASSIGNMENT_START_DATE']; + aSSIGNMENTSTATUSTYPEID = json['ASSIGNMENT_STATUS_TYPE_ID']; + aSSIGNMENTTYPE = json['ASSIGNMENT_TYPE']; + bUSINESSGROUPID = json['BUSINESS_GROUP_ID']; + bUSINESSGROUPNAME = json['BUSINESS_GROUP_NAME']; + cURRENTEMPLOYEEFLAG = json['CURRENT_EMPLOYEE_FLAG']; + eMPLOYEEDISPLAYNAME = json['EMPLOYEE_DISPLAY_NAME']; + eMPLOYEEEMAILADDRESS = json['EMPLOYEE_EMAIL_ADDRESS']; + eMPLOYEEIMAGE = json['EMPLOYEE_IMAGE']; + eMPLOYEEMOBILENUMBER = json['EMPLOYEE_MOBILE_NUMBER']; + eMPLOYEENAME = json['EMPLOYEE_NAME']; + eMPLOYEENUMBER = json['EMPLOYEE_NUMBER']; + eMPLOYEEWORKNUMBER = json['EMPLOYEE_WORK_NUMBER']; + eMPLOYMENTCATEGORY = json['EMPLOYMENT_CATEGORY']; + eMPLOYMENTCATEGORYMEANING = json['EMPLOYMENT_CATEGORY_MEANING']; + fREQUENCY = json['FREQUENCY']; + fREQUENCYMEANING = json['FREQUENCY_MEANING']; + fROMROWNUM = json['FROM_ROW_NUM']; + gRADEID = json['GRADE_ID']; + gRADENAME = json['GRADE_NAME']; + genderCode = json['GenderCode']; + genderMeaning = json['GenderMeaning']; + hIREDATE = json['HIRE_DATE']; + isFavorite = json['IsFavorite']; + jOBID = json['JOB_ID']; + jOBNAME = json['JOB_NAME']; + lOCATIONID = json['LOCATION_ID']; + lOCATIONNAME = json['LOCATION_NAME']; + mANUALTIMECARDFLAG = json['MANUAL_TIMECARD_FLAG']; + mANUALTIMECARDMEANING = json['MANUAL_TIMECARD_MEANING']; + nATIONALITYCODE = json['NATIONALITY_CODE']; + nATIONALITYMEANING = json['NATIONALITY_MEANING']; + nATIONALIDENTIFIER = json['NATIONAL_IDENTIFIER']; + nORMALHOURS = json['NORMAL_HOURS']; + nOOFROWS = json['NO_OF_ROWS']; + nUMOFSUBORDINATES = json['NUM_OF_SUBORDINATES']; + oRGANIZATIONID = json['ORGANIZATION_ID']; + oRGANIZATIONNAME = json['ORGANIZATION_NAME']; + pAYROLLCODE = json['PAYROLL_CODE']; + pAYROLLID = json['PAYROLL_ID']; + pAYROLLNAME = json['PAYROLL_NAME']; + pERSONID = json['PERSON_ID']; + pERSONTYPE = json['PERSON_TYPE']; + pERSONTYPEID = json['PERSON_TYPE_ID']; + pERINFORMATIONCATEGORY = json['PER_INFORMATION_CATEGORY']; + pOSITIONID = json['POSITION_ID']; + pOSITIONNAME = json['POSITION_NAME']; + pRIMARYFLAG = json['PRIMARY_FLAG']; + rOWNUM = json['ROW_NUM']; + sERVICEDAYS = json['SERVICE_DAYS']; + sERVICEMONTHS = json['SERVICE_MONTHS']; + sERVICEYEARS = json['SERVICE_YEARS']; + sUPERVISORASSIGNMENTID = json['SUPERVISOR_ASSIGNMENT_ID']; + sUPERVISORDISPLAYNAME = json['SUPERVISOR_DISPLAY_NAME']; + sUPERVISOREMAILADDRESS = json['SUPERVISOR_EMAIL_ADDRESS']; + sUPERVISORID = json['SUPERVISOR_ID']; + sUPERVISORMOBILENUMBER = json['SUPERVISOR_MOBILE_NUMBER']; + sUPERVISORNAME = json['SUPERVISOR_NAME']; + sUPERVISORNUMBER = json['SUPERVISOR_NUMBER']; + sUPERVISORWORKNUMBER = json['SUPERVISOR_WORK_NUMBER']; + sWIPESEXEMPTEDFLAG = json['SWIPES_EXEMPTED_FLAG']; + sWIPESEXEMPTEDMEANING = json['SWIPES_EXEMPTED_MEANING']; + sYSTEMPERSONTYPE = json['SYSTEM_PERSON_TYPE']; + tKEMAILADDRESS = json['TK_EMAIL_ADDRESS']; + tKEMPLOYEEDISPLAYNAME = json['TK_EMPLOYEE_DISPLAY_NAME']; + tKEMPLOYEENAME = json['TK_EMPLOYEE_NAME']; + tKEMPLOYEENUMBER = json['TK_EMPLOYEE_NUMBER']; + tKPERSONID = json['TK_PERSON_ID']; + tOROWNUM = json['TO_ROW_NUM']; + uNITNUMBER = json['UNIT_NUMBER']; + uSERSTATUS = json['USER_STATUS']; + } + + Map toJson() { + final Map data = new Map(); + data['ACTUAL_TERMINATION_DATE'] = this.aCTUALTERMINATIONDATE; + data['ASSIGNMENT_END_DATE'] = this.aSSIGNMENTENDDATE; + data['ASSIGNMENT_ID'] = this.aSSIGNMENTID; + data['ASSIGNMENT_NUMBER'] = this.aSSIGNMENTNUMBER; + data['ASSIGNMENT_START_DATE'] = this.aSSIGNMENTSTARTDATE; + data['ASSIGNMENT_STATUS_TYPE_ID'] = this.aSSIGNMENTSTATUSTYPEID; + data['ASSIGNMENT_TYPE'] = this.aSSIGNMENTTYPE; + data['BUSINESS_GROUP_ID'] = this.bUSINESSGROUPID; + data['BUSINESS_GROUP_NAME'] = this.bUSINESSGROUPNAME; + data['CURRENT_EMPLOYEE_FLAG'] = this.cURRENTEMPLOYEEFLAG; + data['EMPLOYEE_DISPLAY_NAME'] = this.eMPLOYEEDISPLAYNAME; + data['EMPLOYEE_EMAIL_ADDRESS'] = this.eMPLOYEEEMAILADDRESS; + data['EMPLOYEE_IMAGE'] = this.eMPLOYEEIMAGE; + data['EMPLOYEE_MOBILE_NUMBER'] = this.eMPLOYEEMOBILENUMBER; + data['EMPLOYEE_NAME'] = this.eMPLOYEENAME; + data['EMPLOYEE_NUMBER'] = this.eMPLOYEENUMBER; + data['EMPLOYEE_WORK_NUMBER'] = this.eMPLOYEEWORKNUMBER; + data['EMPLOYMENT_CATEGORY'] = this.eMPLOYMENTCATEGORY; + data['EMPLOYMENT_CATEGORY_MEANING'] = this.eMPLOYMENTCATEGORYMEANING; + data['FREQUENCY'] = this.fREQUENCY; + data['FREQUENCY_MEANING'] = this.fREQUENCYMEANING; + data['FROM_ROW_NUM'] = this.fROMROWNUM; + data['GRADE_ID'] = this.gRADEID; + data['GRADE_NAME'] = this.gRADENAME; + data['GenderCode'] = this.genderCode; + data['GenderMeaning'] = this.genderMeaning; + data['HIRE_DATE'] = this.hIREDATE; + data['IsFavorite'] = this.isFavorite; + data['JOB_ID'] = this.jOBID; + data['JOB_NAME'] = this.jOBNAME; + data['LOCATION_ID'] = this.lOCATIONID; + data['LOCATION_NAME'] = this.lOCATIONNAME; + data['MANUAL_TIMECARD_FLAG'] = this.mANUALTIMECARDFLAG; + data['MANUAL_TIMECARD_MEANING'] = this.mANUALTIMECARDMEANING; + data['NATIONALITY_CODE'] = this.nATIONALITYCODE; + data['NATIONALITY_MEANING'] = this.nATIONALITYMEANING; + data['NATIONAL_IDENTIFIER'] = this.nATIONALIDENTIFIER; + data['NORMAL_HOURS'] = this.nORMALHOURS; + data['NO_OF_ROWS'] = this.nOOFROWS; + data['NUM_OF_SUBORDINATES'] = this.nUMOFSUBORDINATES; + data['ORGANIZATION_ID'] = this.oRGANIZATIONID; + data['ORGANIZATION_NAME'] = this.oRGANIZATIONNAME; + data['PAYROLL_CODE'] = this.pAYROLLCODE; + data['PAYROLL_ID'] = this.pAYROLLID; + data['PAYROLL_NAME'] = this.pAYROLLNAME; + data['PERSON_ID'] = this.pERSONID; + data['PERSON_TYPE'] = this.pERSONTYPE; + data['PERSON_TYPE_ID'] = this.pERSONTYPEID; + data['PER_INFORMATION_CATEGORY'] = this.pERINFORMATIONCATEGORY; + data['POSITION_ID'] = this.pOSITIONID; + data['POSITION_NAME'] = this.pOSITIONNAME; + data['PRIMARY_FLAG'] = this.pRIMARYFLAG; + data['ROW_NUM'] = this.rOWNUM; + data['SERVICE_DAYS'] = this.sERVICEDAYS; + data['SERVICE_MONTHS'] = this.sERVICEMONTHS; + data['SERVICE_YEARS'] = this.sERVICEYEARS; + data['SUPERVISOR_ASSIGNMENT_ID'] = this.sUPERVISORASSIGNMENTID; + data['SUPERVISOR_DISPLAY_NAME'] = this.sUPERVISORDISPLAYNAME; + data['SUPERVISOR_EMAIL_ADDRESS'] = this.sUPERVISOREMAILADDRESS; + data['SUPERVISOR_ID'] = this.sUPERVISORID; + data['SUPERVISOR_MOBILE_NUMBER'] = this.sUPERVISORMOBILENUMBER; + data['SUPERVISOR_NAME'] = this.sUPERVISORNAME; + data['SUPERVISOR_NUMBER'] = this.sUPERVISORNUMBER; + data['SUPERVISOR_WORK_NUMBER'] = this.sUPERVISORWORKNUMBER; + data['SWIPES_EXEMPTED_FLAG'] = this.sWIPESEXEMPTEDFLAG; + data['SWIPES_EXEMPTED_MEANING'] = this.sWIPESEXEMPTEDMEANING; + data['SYSTEM_PERSON_TYPE'] = this.sYSTEMPERSONTYPE; + data['TK_EMAIL_ADDRESS'] = this.tKEMAILADDRESS; + data['TK_EMPLOYEE_DISPLAY_NAME'] = this.tKEMPLOYEEDISPLAYNAME; + data['TK_EMPLOYEE_NAME'] = this.tKEMPLOYEENAME; + data['TK_EMPLOYEE_NUMBER'] = this.tKEMPLOYEENUMBER; + data['TK_PERSON_ID'] = this.tKPERSONID; + data['TO_ROW_NUM'] = this.tOROWNUM; + data['UNIT_NUMBER'] = this.uNITNUMBER; + data['USER_STATUS'] = this.uSERSTATUS; + return data; + } +} \ No newline at end of file diff --git a/lib/models/profile_menu.model.dart b/lib/models/profile_menu.model.dart index b8039ad..0fdfb6b 100644 --- a/lib/models/profile_menu.model.dart +++ b/lib/models/profile_menu.model.dart @@ -2,6 +2,6 @@ class ProfileMenu { final String name; final String icon; final String route; - - ProfileMenu({this.name = '', this.icon = '', this.route = ''}); + final dynamic arguments; + ProfileMenu({this.name = '', this.icon = '', this.route = '', this.arguments = ''}); } diff --git a/lib/models/update_item_type_success_list.dart b/lib/models/update_item_type_success_list.dart new file mode 100644 index 0000000..f133e38 --- /dev/null +++ b/lib/models/update_item_type_success_list.dart @@ -0,0 +1,25 @@ + + +class UpdateItemTypeSuccessList { + int? itemID; + String? updateError; + bool? updateSuccess; + + UpdateItemTypeSuccessList( + {this.itemID, this.updateError, this.updateSuccess}); + + UpdateItemTypeSuccessList.fromJson(Map json) { + itemID = json['ItemID']; + updateError = json['UpdateError']; + updateSuccess = json['UpdateSuccess']; + } + + Map toJson() { + final Map data = new Map(); + data['ItemID'] = this.itemID; + data['UpdateError'] = this.updateError; + data['UpdateSuccess'] = this.updateSuccess; + return data; + } +} + diff --git a/lib/models/update_user_item_type_list.dart b/lib/models/update_user_item_type_list.dart new file mode 100644 index 0000000..58f4714 --- /dev/null +++ b/lib/models/update_user_item_type_list.dart @@ -0,0 +1,20 @@ + + +class UpdateUserItemTypesList { + String? pRETURNMSG; + String? pRETURNSTATUS; + + UpdateUserItemTypesList({this.pRETURNMSG, this.pRETURNSTATUS}); + + UpdateUserItemTypesList.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; + } +} \ No newline at end of file diff --git a/lib/models/worklist/update_user_type_list.dart b/lib/models/worklist/update_user_type_list.dart new file mode 100644 index 0000000..4ff377f --- /dev/null +++ b/lib/models/worklist/update_user_type_list.dart @@ -0,0 +1,28 @@ + + + +class UpdateUserTypesList { + int? itemID; + String? pFYAENABLEDFALG; + String? pFYIENABLEDFALG; + String? pITEMTYPE; + + + UpdateUserTypesList({this.itemID, this.pFYAENABLEDFALG, this.pFYIENABLEDFALG, this.pITEMTYPE}); + + UpdateUserTypesList.fromJson(Map json) { + itemID = json['ItemID']; + pFYAENABLEDFALG = json['P_FYAENABLED_FALG']; + pFYIENABLEDFALG = json['P_FYIENABLED_FALG']; + pITEMTYPE = json['P_ITEM_TYPE']; + } + + Map toJson() { + final Map data = new Map(); + data['ItemID'] = this.itemID; + data['P_FYAENABLED_FALG'] = this.pFYAENABLEDFALG; + data['P_FYIENABLED_FALG'] = this.pFYIENABLEDFALG; + data['P_ITEM_TYPE'] = this.pITEMTYPE; + return data; + } +} \ No newline at end of file diff --git a/lib/ui/attendance/monthly_attendance_screen.dart b/lib/ui/attendance/monthly_attendance_screen.dart index caaf65c..93525a9 100644 --- a/lib/ui/attendance/monthly_attendance_screen.dart +++ b/lib/ui/attendance/monthly_attendance_screen.dart @@ -113,8 +113,8 @@ class _MonthlyAttendanceScreenState extends State { LocaleKeys.attendance.tr().toText24(isBold: true, color: MyColors.darkIconColor), Row( children: [ - "${DateFormat("MMMM-yyyy").format(formattedDate)}".toText16(color: MyColors.greyACColor), - const Icon(Icons.keyboard_arrow_down_rounded, color: MyColors.greyACColor), + "${DateFormat("MMMM-yyyy").format(formattedDate)}".toText16(color: MyColors.grey3AColor), + const Icon(Icons.keyboard_arrow_down_rounded, color: MyColors.grey3AColor), ], ).onPress(() async { showMonthPicker( diff --git a/lib/ui/landing/widget/app_drawer.dart b/lib/ui/landing/widget/app_drawer.dart index 9bc9985..e9a33b4 100644 --- a/lib/ui/landing/widget/app_drawer.dart +++ b/lib/ui/landing/widget/app_drawer.dart @@ -64,6 +64,17 @@ class _AppDrawerState extends State { drawerNavigator(context, AppRoutes.pendingTransactions); }, ), + const Divider(), + InkWell( + child: DrawerItem( + "My Team", + icon: Icons.person, + color: Colors.grey, + ), + onTap: () { + drawerNavigator(context, AppRoutes.myTeam); + }, + ), InkWell( child: DrawerItem( LocaleKeys.employeeDigitalID.tr(), diff --git a/lib/ui/login/login_screen.dart b/lib/ui/login/login_screen.dart index a2ef87a..7cccca8 100644 --- a/lib/ui/login/login_screen.dart +++ b/lib/ui/login/login_screen.dart @@ -135,7 +135,7 @@ class _LoginScreenState extends State { @override Widget build(BuildContext context) { username.text = "15153"; - password.text = "Abcd@1234"; + password.text = "Abcd@12345"; // username.text = "15444"; return Scaffold( diff --git a/lib/ui/my_team/create_request.dart b/lib/ui/my_team/create_request.dart new file mode 100644 index 0000000..5044c22 --- /dev/null +++ b/lib/ui/my_team/create_request.dart @@ -0,0 +1,95 @@ + +import 'dart:ui'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:mohem_flutter_app/api/my_team/my_team_api_client.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/config/routes.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart'; +import 'package:mohem_flutter_app/models/my_team/get_employee_subordinates_list.dart'; +import 'package:mohem_flutter_app/provider/dashboard_provider_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'; + +class CreateRequest extends StatefulWidget { + const CreateRequest ({Key? key}) : super(key: key); + + @override + _CreateRequestState createState() => _CreateRequestState(); +} + +class _CreateRequestState extends State { + String searchEmpEmail =""; + String searchEmpName =""; + String searchEmpNo = ""; + String? empId; + List getEmployeeSubordinatesList = []; +// late DashboardProviderModel data; + List getMenuEntriesList = []; + GetEmployeeSubordinatesList? getEmployeeSubordinates; + + @override + void initState() { + super.initState(); + // data.fetchMenuEntries(); + employeeSubRequest(); + } + + void employeeSubRequest() async { + try { + Utils.showLoading(context); + getEmployeeSubordinatesList = await MyTeamApiClient().getEmployeeSubordinates(searchEmpEmail.toString(), searchEmpName.toString(), searchEmpNo.toString()); + getMenuEntriesList = await MyTeamApiClient().employeeSubordinatesRequest(getEmployeeSubordinates?.eMPLOYEENUMBER); + Utils.hideLoading(context); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + @override + Widget build(BuildContext context) { + getEmployeeSubordinates ??= ModalRoute.of(context)?.settings.arguments as GetEmployeeSubordinatesList; + print(getMenuEntriesList.length); + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBarWidget( + context, + title: LocaleKeys.createRequest.tr(), + ), + body: SizedBox( + width: double.infinity, + height: double.infinity, + child: getMenuEntriesList.isEmpty + ? Utils.getNoDataWidget(context) + : ListView.separated( + padding: const EdgeInsets.all(21), + itemBuilder: (cxt, index) => itemView("assets/images/pdf.svg", getMenuEntriesList[index].prompt!, index).onPress(() { + Navigator.pushNamed(context, AppRoutes.dynamicScreen, arguments: DynamicListViewParams(getMenuEntriesList[index].prompt!, getMenuEntriesList[index].functionName!)); + }), + separatorBuilder: (cxt, index) => 12.height, + itemCount: getMenuEntriesList.length), + ), + + ); + } + + Widget itemView(String icon, String title, index) { + return getMenuEntriesList[index].parentMenuName !=""? Row( + children: [ + (title).toText16().expanded, 12.width, + SvgPicture.asset( + "assets/images/arrow_next.svg", + color: MyColors.darkIconColor, + ) + ], + ).objectContainerView() : SizedBox(); + } +} diff --git a/lib/ui/my_team/employee_details.dart b/lib/ui/my_team/employee_details.dart new file mode 100644 index 0000000..2ef488b --- /dev/null +++ b/lib/ui/my_team/employee_details.dart @@ -0,0 +1,319 @@ +import 'dart:collection'; +import 'dart:ui'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_html/html_parser.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:mohem_flutter_app/api/my_team/my_team_api_client.dart'; +import 'package:mohem_flutter_app/api/worklist/worklist_api_client.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/config/routes.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart'; +import 'package:mohem_flutter_app/models/generic_response_model.dart'; +import 'package:mohem_flutter_app/models/my_team/get_employee_subordinates_list.dart'; +import 'package:mohem_flutter_app/models/profile_menu.model.dart'; +import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart'; +import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart'; +import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; +import 'package:mohem_flutter_app/widgets/circular_avatar.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class EmployeeDetails extends StatefulWidget { + EmployeeDetails(); + + @override + _EmployeeDetailsState createState() => _EmployeeDetailsState(); + +} + +class _EmployeeDetailsState extends State { + GetEmployeeSubordinatesList? getEmployeeSubordinates; + static List menuData = []; + List menu =[]; + String? selectedFavLetter; + List? favLetters; + List? favUsersList; + List? replacementList; + + @override + void initState() { + super.initState(); + // setState(() {}); + } + + //favorite + void fetchChangeFav({required String email, required String employeName, required String image, required String userName, bool isFav = false, bool isNeedToRefresh = false}) async { + Utils.showLoading(context); + getEmployeeSubordinates = ModalRoute.of(context)?.settings.arguments as GetEmployeeSubordinatesList; + GenericResponseModel model = await MyTeamApiClient().changeFavoriteReplacements( + email: email, + employeName: employeName, + image: image, + userName: userName, + isFav: isFav, + ); + getEmployeeSubordinates!.isFavorite = isFav; + Utils.hideLoading(context); + setState(() {}); + } + + + @override + Widget build(BuildContext context) { + getEmployeeSubordinates = ModalRoute.of(context)?.settings.arguments as GetEmployeeSubordinatesList; + setMenu(); + return Scaffold( + extendBody: true, + backgroundColor: MyColors.lightGreyEFColor, + body: Stack(children: [ + Container( + height: 200, + margin: EdgeInsets.only(top: 30), + decoration: BoxDecoration(image: DecorationImage(image: MemoryImage(Utils.getPostBytes(getEmployeeSubordinates!.eMPLOYEEIMAGE)), fit: BoxFit.cover)), + child: new BackdropFilter( + filter: new ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0), + child: new Container( + decoration: new BoxDecoration(color: Colors.white.withOpacity(0.0)), + ), + ), + ), + SingleChildScrollView( + scrollDirection: Axis.vertical, + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + 80.height, + Container( + padding: EdgeInsets.only(left: 15, right: 15), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + IconButton( + onPressed: () { + Navigator.pop(context); + }, + icon: Icon( + Icons.arrow_back_ios, + color: Colors.white, + ), + ), + ], + ), + ), + myTeamInfo() + ], + ), + ) + ])); + } + + Widget myTeamInfo() { + Uri phoneNumber = Uri.parse('tel:${getEmployeeSubordinates?.eMPLOYEEMOBILENUMBER}'); + double _width = MediaQuery + .of(context) + .size + .width; + return Column( + children: [ + Container( + margin: EdgeInsets.fromLTRB(21, 0, 21, 10), + child: Stack(children: [ + Container( + width: _width, + //height: 150, + margin: EdgeInsets.only(top: 50), + //padding: EdgeInsets.only(right: 17, left: 17), + decoration: BoxDecoration( + color: MyColors.whiteColor, + borderRadius: const BorderRadius.all(Radius.circular(15)), + boxShadow: [BoxShadow(color: MyColors.lightGreyColor, blurRadius: 15, spreadRadius: 3)], + ), + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + IconButton( + onPressed: (){ + if(getEmployeeSubordinates!.isFavorite != true){ + showFavoriteAlertDialog(context); + setState(() {}); + }else{ + fetchChangeFav( + email: getEmployeeSubordinates?.eMPLOYEEEMAILADDRESS ?? "", + employeName: getEmployeeSubordinates!.eMPLOYEENAME ?? "", + image: getEmployeeSubordinates!.eMPLOYEEIMAGE ?? "", + userName: getEmployeeSubordinates!.eMPLOYEENUMBER ?? "", + isFav: false,); + setState(() {}); + } }, + icon: getEmployeeSubordinates!.isFavorite != true + ? Icon( + Icons.star_outline, + size: 35, + color: MyColors.green9CColor, + ) + : Icon( + Icons.star_outlined, + size: 35, + color: MyColors.green9CColor, + ), + ), + // Container(height: 100, alignment: Alignment.center, child: ProfileImage()), + InkWell( + onTap:() { + launchUrl(phoneNumber); + }, + child: SvgPicture.asset("assets/images/call.svg"), + ), + ], + ).paddingOnly(left:6, right: 17, top: 16), + Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + /// card header + customLabel(getEmployeeSubordinates!.eMPLOYEENAME.toString(), 21, MyColors.grey3AColor, true), + customLabel(getEmployeeSubordinates!.eMPLOYEENUMBER.toString() + ' | ' + getEmployeeSubordinates!.jOBNAME.toString(), 13, MyColors.grey80Color, true), + customLabel(getEmployeeSubordinates!.eMPLOYEEEMAILADDRESS.toString(), 13, MyColors.grey3AColor, true), + ], + ).paddingOnly(bottom: 10), + ], + ), + ), + Container(height: 100, alignment: Alignment.center, child: ProfileImage()), + ]) + ), + Container( + margin: EdgeInsets.fromLTRB(21, 8, 21, 10), + height: 260, + padding: EdgeInsets.only(top: 15, bottom: 15), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: const BorderRadius.all(Radius.circular(15)), + boxShadow: [BoxShadow(color: MyColors.lightGreyColor, blurRadius: 15, spreadRadius: 3)], + ), + child: Column( + children: menu.map((ProfileMenu i) => rowItem(i, context)).toList(), + ), + ), + ], + ); + } + + Widget ProfileImage() => + CircleAvatar( + radius: 70, + backgroundImage: MemoryImage(Utils.getPostBytes(getEmployeeSubordinates?.eMPLOYEEIMAGE)), + backgroundColor: Colors.black, + ); + + Widget customLabel(String label, double size, Color color, bool isBold, {double padding = 0.0}) => + Container( + padding: EdgeInsets.all(padding), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.center, + children: [Text(label, style: TextStyle(color: color, fontSize: size, fontWeight: isBold ? FontWeight.bold : FontWeight.normal))])); + + Widget rowItem(obj, context) { + return InkWell( + onTap: () { + + Navigator.pushNamed(context, obj.route, arguments:obj.arguments); + + }, + child: ListTile( + leading: SvgPicture.asset('assets/images/' + obj.icon), + title: Text(obj.name, + style: TextStyle(color: MyColors.grey3AColor, + fontWeight: FontWeight.w600, + fontSize: 16)), + trailing: Icon(Icons.arrow_forward, + color: MyColors.grey3AColor,), + ), + ); + } + void setMenu(){ + menu = [ + ProfileMenu(name: "Profile Details", icon: "profile_details.svg", route: AppRoutes.profileDetails, arguments:getEmployeeSubordinates), + ProfileMenu(name: "Create Request", icon: "create_request.svg", route: AppRoutes.createRequest,arguments: getEmployeeSubordinates), + ProfileMenu(name: "View Attendance", icon: "view_attendance.svg", route: AppRoutes.viewAttendance, arguments: getEmployeeSubordinates), + ProfileMenu(name: "Team Members", icon: "team.svg", route: AppRoutes.teamMembers, arguments: getEmployeeSubordinates), + ]; + } + + void showFavoriteAlertDialog(BuildContext context) { + Widget cancelButton = TextButton( + child: Text( + LocaleKeys.cancel.tr(), + ), + onPressed: () { + Navigator.pop(context); + }, + ); + Widget continueButton = TextButton( + child: Text( + LocaleKeys.ok.tr(), + ), + onPressed: () { + fetchChangeFav( + email: getEmployeeSubordinates?.eMPLOYEEEMAILADDRESS ?? "", + employeName: getEmployeeSubordinates!.eMPLOYEENAME ?? "", + image: getEmployeeSubordinates!.eMPLOYEEIMAGE ?? "", + userName: getEmployeeSubordinates!.eMPLOYEENUMBER ?? "", + isFav: true, + ); + setState(() {}); + Navigator.pop(context); + }, + ); + AlertDialog alert = AlertDialog( + title: Text( + LocaleKeys.confirm.tr(), + ), + content: Container( + height: 150, + child: Column( + children: [ + Text("Do you want to add" + "${getEmployeeSubordinates!.eMPLOYEENAME.toString()}" + "in your favorite list "), + CircularAvatar( + url: getEmployeeSubordinates!.eMPLOYEEIMAGE ?? "", + height: 50, + width: 50, + isImageBase64: true, + ).paddingOnly(top: 21), + // 16.width, + ], + ), + ), + actions: [ + cancelButton, + continueButton, + ], + ); + showDialog( + context: context, + builder: (BuildContext context) { + return alert; + }, + ); + } +} + + GetMenuEntriesList getMenuEntries(String type) { + List data = _EmployeeDetailsState.menuData.where((GetMenuEntriesList test) => test.functionName == type).toList(); + if (data.isNotEmpty) { + return data[0]; + } else { + return GetMenuEntriesList(); + } + + +} + + diff --git a/lib/ui/my_team/my_team.dart b/lib/ui/my_team/my_team.dart new file mode 100644 index 0000000..7366128 --- /dev/null +++ b/lib/ui/my_team/my_team.dart @@ -0,0 +1,184 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:mohem_flutter_app/api/my_team/my_team_api_client.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/config/routes.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/models/my_team/get_employee_subordinates_list.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class MyTeam extends StatefulWidget { + const MyTeam({Key? key}) : super(key: key); + + @override + _MyTeamState createState() => _MyTeamState(); +} + +class _MyTeamState extends State { + String searchEmpEmail = ""; + String searchEmpName = ""; + String searchEmpNo = ""; + String? empId; + List getEmployeeSubordinatesList = []; + TextEditingController? _textEditingController = TextEditingController(); + List getEmployeeSListOnSearch = []; + + String dropdownValue = 'Name'; + + void initState() { + super.initState(); + getEmployeeSubordinates(); + } + + void getEmployeeSubordinates() async { + try { + Utils.showLoading(context); + getEmployeeSubordinatesList = await MyTeamApiClient().getEmployeeSubordinates(searchEmpEmail.toString(), searchEmpName.toString(), searchEmpNo.toString()); + getEmployeeSListOnSearch = getEmployeeSubordinatesList; + Utils.hideLoading(context); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBarWidget( + context, + title: LocaleKeys.myTeamMembers.tr(), + ), + backgroundColor: MyColors.backgroundColor, + body: SingleChildScrollView( + child: Column( + children: [ + Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ + Expanded( + child: TextField( + onChanged: dropdownValue == "Name" + ? (String value) { + getEmployeeSListOnSearch = + getEmployeeSubordinatesList.where((GetEmployeeSubordinatesList element) => element.eMPLOYEENAME!.toLowerCase().contains(value.toLowerCase())).toList(); + setState(() {}); + } + : (String value) { + getEmployeeSListOnSearch = + getEmployeeSubordinatesList.where((GetEmployeeSubordinatesList element) => element.eMPLOYEEEMAILADDRESS!.toLowerCase().contains(value.toLowerCase())).toList(); + setState(() {}); + }, + controller: _textEditingController, + decoration: InputDecoration( + filled: true, + fillColor: Colors.white, + border: InputBorder.none, + enabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + // contentPadding: EdgeInsets.fromLTRB(10, 15, 10, 15), + hintText: LocaleKeys.searchBy.tr() + " $dropdownValue", + hintStyle: TextStyle(fontSize: 14.0, color: MyColors.grey57Color, fontWeight: FontWeight.w600), + ), + )), + Row( + children: [ + "|".toText16(color: MyColors.greyC4Color), + 10.width, + dropDown(), + ], + ) + ]).objectContainerBorderView(), + // ), + Container( + margin: EdgeInsets.only(left: 21, right: 21), + width: MediaQuery.of(context).size.width, + child: SingleChildScrollView( + scrollDirection: Axis.vertical, + child: Column( + children: [ + _textEditingController!.text.isNotEmpty && getEmployeeSListOnSearch.isEmpty + ? Container( + child: LocaleKeys.noResultsFound.tr().toText16(color: MyColors.blackColor), + ).paddingOnly(top: 10) + : ListView.separated( + scrollDirection: Axis.vertical, + shrinkWrap: true, + // padding: EdgeInsets.only(left: 21, right: 21), + physics: ScrollPhysics(), + separatorBuilder: (cxt, index) => 12.height, + itemCount: _textEditingController!.text.isNotEmpty ? getEmployeeSListOnSearch.length : getEmployeeSubordinatesList.length, + itemBuilder: (context, index) { + var phoneNumber = Uri.parse('tel:${getEmployeeSListOnSearch[index].eMPLOYEEMOBILENUMBER}'); + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + CircleAvatar( + radius: 25, + backgroundImage: MemoryImage(Utils.getPostBytes(getEmployeeSListOnSearch[index].eMPLOYEEIMAGE)), + backgroundColor: Colors.black, + ), + 10.width, + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // "Present".toText13(color: MyColors.greenColor), + "${getEmployeeSListOnSearch[index].eMPLOYEENAME}".toText16(isBold: true, color: MyColors.grey3AColor), + "${getEmployeeSListOnSearch[index].pOSITIONNAME}".toText10(isBold: true, color: MyColors.grey57Color), + ], + ).expanded, + Column( + children: [ + InkWell( + onTap: () { + launchUrl(phoneNumber); + }, + child: SvgPicture.asset("assets/images/call.svg"), + ), + 21.height, + InkWell( + onTap: () async { + Navigator.pushNamed(context, AppRoutes.employeeDetails, arguments: getEmployeeSListOnSearch[index]); + }, + child: Icon(Icons.arrow_forward_outlined, color: MyColors.grey3AColor), + ), + ], + ), + ], + ).objectContainerView(); + }) + ], + ), + ), + ) + ], + ), + )); + } + + Widget dropDown() { + return DropdownButton( + value: dropdownValue, + icon: const Icon(Icons.keyboard_arrow_down, + color: MyColors.grey57Color), + elevation: 16, + onChanged: (String? newValue) { + setState(() { + dropdownValue = newValue!; + }); + }, + items: ['Name', 'Email'].map>((String value) { + return DropdownMenuItem( + value: value, + child: Text(value), + ); + }).toList(), + style: TextStyle(fontSize: 14.0, color: MyColors.grey57Color, fontWeight: FontWeight.w600), + ); + } +} diff --git a/lib/ui/my_team/profile_details.dart b/lib/ui/my_team/profile_details.dart new file mode 100644 index 0000000..419f897 --- /dev/null +++ b/lib/ui/my_team/profile_details.dart @@ -0,0 +1,83 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/app_state/app_state.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.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/models/member_information_list_model.dart'; +import 'package:mohem_flutter_app/models/my_team/get_employee_subordinates_list.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'package:mohem_flutter_app/widgets/button/default_button.dart'; + +class ProfileDetails extends StatefulWidget { + const ProfileDetails({Key? key}) : super(key: key); + + @override + _ProfileDetailsState createState() => _ProfileDetailsState(); +} + +class _ProfileDetailsState extends State { + + GetEmployeeSubordinatesList? getEmployeeSubordinates; + + + + @override + void initState() { + super.initState(); + } + + Widget build(BuildContext context) { + getEmployeeSubordinates ??= ModalRoute.of(context)?.settings.arguments as GetEmployeeSubordinatesList; + return Scaffold( + appBar: AppBarWidget( + context, + title: LocaleKeys.profileDetails.tr(), + ), + backgroundColor: MyColors.backgroundColor, + body: Column( + children: [ + Container( + width: double.infinity, + margin: EdgeInsets.only( + top: 20, + left: 21, + right: 21, + ), + padding: EdgeInsets.only(left: 14, right: 14, top: 13, bottom: 20), + 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: [ + LocaleKeys.category.tr().toText13(color: MyColors.lightGrayColor), + "${getEmployeeSubordinates?.eMPLOYMENTCATEGORYMEANING}".toText16(isBold: true, color: MyColors.darkTextColor), + 23.height, + LocaleKeys.address.tr().toText13(color: MyColors.lightGrayColor), + "${getEmployeeSubordinates?.lOCATIONNAME}".toText16(isBold: true, color: MyColors.darkTextColor), + 23.height, + LocaleKeys.phoneNumber.tr().toText13(color: MyColors.lightGrayColor), + "${getEmployeeSubordinates?.eMPLOYEEMOBILENUMBER}".toText16(isBold: true, color: MyColors.darkTextColor), + 23.height, + LocaleKeys.businessGroup.tr().toText13(color: MyColors.lightGrayColor), + "${getEmployeeSubordinates?.bUSINESSGROUPNAME}".toText16(isBold: true, color: MyColors.darkTextColor), + 23.height, + LocaleKeys.Payroll.tr().toText13(color: MyColors.lightGrayColor), + "${getEmployeeSubordinates?.pAYROLLNAME}".toText16(isBold: true, color: MyColors.darkTextColor), + ]), + ), + ], + )); + } + +} diff --git a/lib/ui/my_team/team_members.dart b/lib/ui/my_team/team_members.dart new file mode 100644 index 0000000..f36a13b --- /dev/null +++ b/lib/ui/my_team/team_members.dart @@ -0,0 +1,108 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/my_team/my_team_api_client.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/config/routes.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/models/my_team/get_employee_subordinates_list.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class TeamMembers extends StatefulWidget { + const TeamMembers({Key? key}) : super(key: key); + + @override + _TeamMembersState createState() => _TeamMembersState(); +} + +class _TeamMembersState extends State { + String searchEmpEmail =""; + String searchEmpName =""; + String searchEmpNo = ""; + String? empId; + List getEmployeeSubordinatesList = []; + GetEmployeeSubordinatesList? getEmployeeSubordinates; + + void initState() { + super.initState(); + employeeSubordinates(); + } + + void employeeSubordinates() async { + try { + Utils.showLoading(context); + getEmployeeSubordinatesList = await MyTeamApiClient().getEmployeeSubordinates(searchEmpEmail.toString(), searchEmpName.toString(), searchEmpNo.toString()); + getEmployeeSubordinatesList = await MyTeamApiClient().employeeSubordinates(searchEmpEmail.toString(), searchEmpName.toString(), searchEmpNo.toString(),getEmployeeSubordinates?.eMPLOYEENUMBER); + Utils.hideLoading(context); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + @override + Widget build(BuildContext context) { + getEmployeeSubordinates ??= ModalRoute.of(context)?.settings.arguments as GetEmployeeSubordinatesList; + return Scaffold( + appBar: AppBarWidget( + context, + title: LocaleKeys.teamMembers.tr(), + ), + backgroundColor: MyColors.backgroundColor, + body: SingleChildScrollView( + scrollDirection: Axis.vertical, + child: Column( + children: [ + getEmployeeSubordinatesList != 0 + ? ListView.separated( + scrollDirection: Axis.vertical, + shrinkWrap: true, + padding: EdgeInsets.all(21), + physics: ScrollPhysics(), + separatorBuilder: (cxt, index) => 12.height, + itemCount: getEmployeeSubordinatesList.length, + itemBuilder: (context, index) { + var phoneNumber = Uri.parse('tel:${getEmployeeSubordinatesList[index].eMPLOYEEMOBILENUMBER}'); + return Container( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + CircleAvatar( + radius: 25, + backgroundImage: MemoryImage(Utils.getPostBytes(getEmployeeSubordinatesList[index].eMPLOYEEIMAGE)), + backgroundColor: Colors.black, + ), + SizedBox(width: 10,), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // "Present".toText13(color: MyColors.greenColor), + "${getEmployeeSubordinatesList[index].eMPLOYEENAME}".toText16(isBold: true, color: MyColors.grey3AColor), + "${getEmployeeSubordinatesList[index].pOSITIONNAME}".toText10(isBold: true, color: MyColors.grey57Color), + ], + ).expanded, + Column( + children: [ + IconButton( + onPressed: () { + launchUrl(phoneNumber); + }, + icon: Icon( + Icons.whatsapp, + color: Colors.green, + ),),], + ),], + ),).objectContainerView(); + }): Container( + child: LocaleKeys.noResultsFound.tr().toText16(color: MyColors.blackColor), + ).paddingOnly(top: 10), + ], + ) + )); + } +} diff --git a/lib/ui/my_team/view_attendance.dart b/lib/ui/my_team/view_attendance.dart new file mode 100644 index 0000000..b24a895 --- /dev/null +++ b/lib/ui/my_team/view_attendance.dart @@ -0,0 +1,565 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/monthly_attendance_api_client.dart'; +import 'package:mohem_flutter_app/api/my_team/my_team_api_client.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/config/routes.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_model.dart'; +import 'package:mohem_flutter_app/models/get_day_hours_type_details_list_model.dart'; +import 'package:mohem_flutter_app/models/get_schedule_shifts_details_list_model.dart'; +import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart'; +import 'package:mohem_flutter_app/models/my_team/get_employee_subordinates_list.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'package:mohem_flutter_app/widgets/circular_step_progress_bar.dart'; +import 'package:month_picker_dialog/month_picker_dialog.dart'; +import 'package:pie_chart/pie_chart.dart'; +import 'package:syncfusion_flutter_calendar/calendar.dart'; + +class ViewAttendance extends StatefulWidget { + const ViewAttendance({Key? key}) : super(key: key); + + @override + _ViewAttendanceState createState() => _ViewAttendanceState(); +} + +class _ViewAttendanceState extends State { + bool isPresent = false; + bool isAbsent = false; + bool isMissing = false; + bool isOff = false; + DateTime date = DateTime.now(); + late DateTime formattedDate; + var currentMonth = DateTime.now().month; + String searchMonth = getMonth(DateTime.now().month); + int searchYear = DateTime.now().year; + int? pRTPID; + + String searchEmpEmail =""; + String searchEmpName =""; + String searchEmpNo = ""; + String? empId; + List getEmployeeSubordinatesList = []; + List getDayHoursTypeDetailsList = []; + GetTimeCardSummaryList? getTimeCardSummaryList; + GetAttendanceTracking? attendanceTracking; + GetEmployeeSubordinatesList? getEmployeeSubordinates; + + @override + void initState() { + super.initState(); + formattedDate = date; + callTimeCardAndHourDetails(date.day, searchMonth, searchYear); + // setState(() {}); + } + + + void callTimeCardAndHourDetails(index, searchMonth, searchYear) async { + try { + Utils.showLoading(context); + getEmployeeSubordinatesList = await MyTeamApiClient().getEmployeeSubordinates(searchEmpEmail.toString(), searchEmpName.toString(), searchEmpNo.toString()); + getTimeCardSummaryList = await MyTeamApiClient().getTimeCardSummary(searchMonth, searchYear,getEmployeeSubordinates?.eMPLOYEENUMBER); + getDayHoursTypeDetailsList = await MyTeamApiClient().getDayHoursTypeDetails(searchMonth, searchYear, getEmployeeSubordinates?.eMPLOYEENUMBER); + attendanceTracking = await MyTeamApiClient().getAttendanceTracking(getEmployeeSubordinates?.eMPLOYEENUMBER); + Utils.hideLoading(context); + _calendarController.displayDate = formattedDate; + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + + + final CalendarController _calendarController = CalendarController(); + final List _colorList = [Color(0xff2AB2AB), Color(0xff202529)]; + + @override + Widget build(BuildContext context) { + getEmployeeSubordinates ??= ModalRoute.of(context)?.settings.arguments as GetEmployeeSubordinatesList; + Map dataMap = { + "Present": getTimeCardSummaryList?.aTTENDEDDAYS != null ? getTimeCardSummaryList!.aTTENDEDDAYS!.toDouble() : 0, + "Absent": getTimeCardSummaryList?.aBSENTDAYS != null ? getTimeCardSummaryList!.aBSENTDAYS!.toDouble() : 0, + }; + //if(getTimeCardSummaryList ==null) + // callTimeCardAndHourDetails(date.day, searchMonth, searchYear); + return Scaffold( + appBar: AppBarWidget( + context, + title: LocaleKeys.viewAttendance.tr(), + ), + backgroundColor: MyColors.backgroundColor, + body: SingleChildScrollView( + child: Column(children: [ + Container( + width: double.infinity, + margin: EdgeInsets.only( + top: 21, + left: 21, + right: 21, + ), + padding: EdgeInsets.only(left: 14, right: 14, top: 15, bottom: 15), + // height: 120, + 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: [ + LocaleKeys.todayAttendance.tr().toText16(isBold: true, color: MyColors.darkColor), + SizedBox( + height: 10, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + children: [ + LocaleKeys.checkIn.tr().toText10(isBold: true, color: MyColors.green69Color), + "${(attendanceTracking?.pSwipeIn)?? "- - : - -"}".toText14(isBold: true, color: MyColors.grey57Color), + ], + ), + Column( + children: [ + LocaleKeys.checkOut.tr().toText10(isBold: true, color: MyColors.redA3Color), + "${(attendanceTracking?.pSwipeOut)?? "- - : - -"}".toText14(isBold: true, color: MyColors.grey57Color), + ], + ), + Column( + children: [ + LocaleKeys.lateIn.tr().toText10(isBold: true, color: MyColors.darkGreyColor), + "${(attendanceTracking?.pLateInHours)?? "- - : - -"}".toText14(isBold: true, color: MyColors.grey57Color), + ], + ), + ], + ) + ], + ), + ), + Container( + width: double.infinity, + margin: EdgeInsets.only( + top: 18, + left: 18, + right: 18, + bottom: 28, + ), + padding: EdgeInsets.only(left: 16, right: 16, top: 16, bottom: 16), + 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( + children: [ + //20.height, + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + "${DateFormat("MMMM-yyyy").format(formattedDate)}".toText16(color: MyColors.grey3AColor), + const Icon(Icons.keyboard_arrow_down_rounded, color: MyColors.grey3AColor), + ], + ).onPress(() async { + showMonthPicker( + context: context, //locale: EasyLocalization.of(context)?.locale, + initialDate: formattedDate, + firstDate: DateTime(searchYear - 2), + lastDate: DateTime.now(), + ).then((selectedDate) { + if (selectedDate != null) { + searchMonth = getMonth(selectedDate.month); + searchYear = selectedDate.year; + formattedDate = selectedDate; //DateFormat('MMMM-yyyy').format(selectedDate); + // _calendarController.selectedDate = formattedDate; + callTimeCardAndHourDetails(selectedDate.day, searchMonth, searchYear); + } + }); + }) + ], + ), + 18.height, + AspectRatio(aspectRatio: 333 / 270, child: calendarWidget()), + Row( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + children: [ + LocaleKeys.attendance.tr().toText12(isBold: true, color: MyColors.grey3AColor), + LocaleKeys.stats.tr().toText24(isBold: true, color: MyColors.grey3AColor), + ], + ), + 30.height, + Row( + children: [ + Container( + height: 8, + width: 8, + decoration: BoxDecoration( + color: MyColors.lightGreenColor, + borderRadius: BorderRadius.circular(100), + ), + ), + Container( + margin: const EdgeInsets.only(left: 5, right: 5), + child: "${LocaleKeys.present.tr()} ${getTimeCardSummaryList?.aTTENDEDDAYS != null ? getTimeCardSummaryList?.aTTENDEDDAYS : 0}".toText16(isBold: true, color: MyColors.lightGreenColor), + ), + ], + ), + 8.height, + Row( + children: [ + Container( + height: 9, + width: 9, + decoration: BoxDecoration( + color: MyColors.backgroundBlackColor, + borderRadius: BorderRadius.circular(100), + ), + ), + Container( + margin: const EdgeInsets.only(left: 5, right: 5), + child: "${LocaleKeys.absent.tr()} ${getTimeCardSummaryList?.aBSENTDAYS != null ? getTimeCardSummaryList?.aBSENTDAYS : 0 }".toText16( + isBold: true, + color: MyColors.backgroundBlackColor, + ), + ) + ], + ), + ], + ), + SizedBox( + width: 20, + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: 170, + height: 170, + child: PieChart( + dataMap: dataMap, + animationDuration: const Duration(milliseconds: 800), + chartLegendSpacing: 0, + chartRadius: MediaQuery.of(context).size.width / 5.2, + colorList: _colorList, + initialAngleInDegree: 0, + chartType: ChartType.ring, + ringStrokeWidth: 80, + legendOptions: const LegendOptions( + showLegendsInRow: false, + showLegends: false, + ), + chartValuesOptions: const ChartValuesOptions( + showChartValueBackground: false, + showChartValues: true, + showChartValuesInPercentage: true, + showChartValuesOutside: false, + decimalPlaces: 1, + chartValueStyle: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 16, + color: MyColors.white, + )), + ), + ), + ], + ).paddingOnly(left: 21, right: 21, bottom: 21), + ], + ), + ], + ), + ), + ]), + ), + ); + } + + Widget calendarWidget() { + return SfCalendar( + view: CalendarView.month, + showDatePickerButton: false, + controller: _calendarController, + backgroundColor: Colors.white, + headerHeight: 0, + viewNavigationMode: ViewNavigationMode.none, + todayHighlightColor: MyColors.grey3AColor, + showNavigationArrow: false, + showCurrentTimeIndicator: false, + showWeekNumber: false, + cellBorderColor: Colors.white, + selectionDecoration: BoxDecoration( + border: Border.all(color: MyColors.white, width: 10), + borderRadius: const BorderRadius.all(Radius.circular(100)), + shape: BoxShape.circle, + ), + dataSource: MeetingDataSource(_getDataSource()), + monthViewSettings: const MonthViewSettings( + dayFormat: 'EEE', + showTrailingAndLeadingDates: false, + showAgenda: false, + //navigationDirection: MonthNavigationDirection.vertical, + monthCellStyle: MonthCellStyle( + textStyle: TextStyle( + fontStyle: FontStyle.normal, + fontSize: 13, + color: Colors.white, + ), + ), + ), + viewHeaderStyle: const ViewHeaderStyle( + dayTextStyle: TextStyle(color: MyColors.grey3AColor, fontSize: 13, fontWeight: FontWeight.w600), + ), + monthCellBuilder: (build, details) { + if (details.date.month == formattedDate.month && details.date.year == formattedDate.year) { + int val = details.date.day; + //check day is off + if (getDayHoursTypeDetailsList.isNotEmpty) { + if (getDayHoursTypeDetailsList?[val - 1].aTTENDEDFLAG == 'N' && getDayHoursTypeDetailsList?[val - 1].dAYTYPE == 'OFF') { + return Container( + margin: const EdgeInsets.all(4), + decoration: BoxDecoration( + color: MyColors.greyACColor.withOpacity(.12), + shape: BoxShape.circle, + ), + alignment: Alignment.center, + child: Text( + "$val", + style: const TextStyle( + fontSize: 13, + fontWeight: FontWeight.w500, + color: MyColors.greyA5Color, + ), + ), + ); + } + //check day is Present + else if (getDayHoursTypeDetailsList?[val - 1].aTTENDEDFLAG == 'Y') { + return Container( + margin: const EdgeInsets.all(4), + decoration: BoxDecoration( + gradient: const LinearGradient( + transform: GradientRotation(.46), + begin: Alignment.topRight, + end: Alignment.bottomLeft, + colors: [MyColors.gradiantEndColor, MyColors.gradiantStartColor], + ), + shape: BoxShape.circle, + boxShadow: [ + BoxShadow( + offset: const Offset(0, 2), + blurRadius: 26, + color: MyColors.blackColor.withOpacity(0.100), + ), + ], + ), + alignment: Alignment.center, + child: Text( + "$val", + style: const TextStyle( + fontSize: 13, + fontWeight: FontWeight.w500, + color: MyColors.white, + ), + ), + ); + } + //check day is Absent + else if (getDayHoursTypeDetailsList?[val - 1].aTTENDEDFLAG == 'N' && getDayHoursTypeDetailsList?[val - 1].aBSENTFLAG == 'Y') { + return Container( + margin: const EdgeInsets.all(4), + decoration: BoxDecoration( + color: MyColors.backgroundBlackColor, + shape: BoxShape.circle, + boxShadow: [ + BoxShadow( + offset: const Offset(0, 2), + blurRadius: 26, + color: MyColors.blackColor.withOpacity(0.100), + ), + ], + ), + alignment: Alignment.center, + child: Text( + "$val", + style: const TextStyle( + fontSize: 13, + fontWeight: FontWeight.w500, + color: MyColors.white, + ), + ), + ); + } + } + return Container( + margin: const EdgeInsets.all(4), + decoration: BoxDecoration( + border: Border.all(color: MyColors.backgroundBlackColor, width: 2.0, style: BorderStyle.solid), //Border.all + shape: BoxShape.circle, + boxShadow: [ + BoxShadow( + offset: const Offset(0, 2), + blurRadius: 26, + color: MyColors.blackColor.withOpacity(0.100), + ), + ], + ), + alignment: Alignment.center, + child: Text( + "$val", + style: const TextStyle( + fontSize: 13, + fontWeight: FontWeight.w500, + color: Color(0xff1F2428), + ), + ), + ); + } else { + return const SizedBox(); + } + }, + ); + } + + + List _getDataSource() { + final List meetings = []; + return meetings; + } + + static String getMonth(int month) { + switch (month) { + case 1: + return "January"; + case 2: + return "February"; + case 3: + return "March"; + case 4: + return "April"; + case 5: + return "May"; + case 6: + return "June"; + case 7: + return "July"; + case 8: + return "August"; + case 9: + return "September"; + case 10: + return "October"; + case 11: + return "November"; + case 12: + return "December"; + default: + return ""; + } + } + + static String getMonthAr(int month) { + switch (month) { + case 1: + return 'يناير'; + case 2: + return ' فبراير'; + case 3: + return 'مارس'; + case 4: + return 'أبريل'; + case 5: + return 'مايو'; + case 6: + return 'يونيو'; + case 7: + return 'يوليو'; + case 8: + return 'أغسطس'; + case 9: + return 'سبتمبر'; + case 10: + return ' اكتوبر'; + case 11: + return ' نوفمبر'; + case 12: + return 'ديسمبر'; + default: + return ""; + } + } +} + +class MeetingDataSource extends CalendarDataSource { + MeetingDataSource(List source) { + appointments = source; + } + + @override + DateTime getStartTime(int index) { + return _getMeetingData(index).from; + } + + @override + DateTime getEndTime(int index) { + return _getMeetingData(index).to; + } + + @override + String getSubject(int index) { + return _getMeetingData(index).eventName; + } + + @override + Color getColor(int index) { + return _getMeetingData(index).background; + } + + @override + bool isAllDay(int index) { + return _getMeetingData(index).isAllDay; + } + + Meeting _getMeetingData(int index) { + final dynamic meeting = appointments; + Meeting meetingData; + if (meeting is Meeting) { + meetingData = meeting; + } + return meeting; + } +} + +class Meeting { + Meeting(this.eventName, this.from, this.to, this.background, this.isAllDay); + + String eventName; + DateTime from; + DateTime to; + Color background; + bool isAllDay; +} diff --git a/lib/ui/profile/add_update_family_member.dart b/lib/ui/profile/add_update_family_member.dart index 6ad82d0..224bfce 100644 --- a/lib/ui/profile/add_update_family_member.dart +++ b/lib/ui/profile/add_update_family_member.dart @@ -19,6 +19,7 @@ import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'dart:io'; import 'package:flutter/cupertino.dart'; +import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; import 'package:easy_localization/src/public_ext.dart'; @@ -37,13 +38,12 @@ class _AddUpdateFamilyMemberState extends State { SubmitContactTransactionList? submitContactTransactionList; dynamic args; String? date = "MM/DD/YYYY"; - // String actionType = "UPDATE"; + GetApprovesList? getApprovesList; @override void initState() { - // super.initState(); } @@ -89,15 +89,12 @@ class _AddUpdateFamilyMemberState extends State { Widget build(BuildContext context) { if (args == null) { args = ModalRoute.of(context)!.settings.arguments; - callAddAndUpdateFamilyMember(); - } + callAddAndUpdateFamilyMember();} return Scaffold( appBar: AppBarWidget( context, - title: LocaleKeys.profile_familyDetails.tr(), - ), + title: LocaleKeys.profile_familyDetails.tr(),), backgroundColor: MyColors.backgroundColor, - bottomSheet: footer(), body: args['flag'] == 1 ? Column( children: [ @@ -128,9 +125,11 @@ class _AddUpdateFamilyMemberState extends State { separatorBuilder: (cxt, index) => 0.height, itemCount: getContactDffStructureList!.length), ]).expanded, - SizedBox( - height: 50, - ), + DefaultButton( + LocaleKeys.next.tr(), () async { + submitUpdateForm(); + } + ).insideContainer, ], ) : args['flag'] == 2 @@ -165,9 +164,11 @@ class _AddUpdateFamilyMemberState extends State { separatorBuilder: (cxt, index) => 0.height, itemCount: getContactDffStructureList!.length), ]).expanded, - SizedBox( - height: 50, - ), + DefaultButton( + LocaleKeys.next.tr(), () async { + submitUpdateForm(); + } + ).insideContainer, ], ) : Container(), @@ -405,7 +406,6 @@ class _AddUpdateFamilyMemberState extends State { return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: vatcherVal.toString()).toJson(); }).toList(); List> values2 = getContactDffStructureList!.map((e) { - //String tempVar = e!.getContactDetailsList!.vARCHAR2VALUE ?? ""; String? dateVal = ''; String? vatcherVal = ''; int? numberVal; diff --git a/lib/ui/profile/basic_details.dart b/lib/ui/profile/basic_details.dart index eae5c3d..35f2071 100644 --- a/lib/ui/profile/basic_details.dart +++ b/lib/ui/profile/basic_details.dart @@ -6,6 +6,7 @@ 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/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/dashboard/menu_entries.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; @@ -43,7 +44,6 @@ class _BasicDetailsState extends State { menuEntries = menuData.where((e) => e.requestType == 'BASIC_DETAILS').toList()[0]; getEmployeeBasicDetails(); - basicDetails(); } void getEmployeeBasicDetails() async { @@ -51,7 +51,6 @@ class _BasicDetailsState extends State { Utils.showLoading(context); getEmployeeBasicDetailsList = await ProfileApiClient().getEmployeeBasicDetails(); Utils.hideLoading(context); - basicDetails(); setState(() {}); } catch (ex) { Utils.hideLoading(context); @@ -59,23 +58,6 @@ class _BasicDetailsState extends State { } } - void 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( @@ -84,69 +66,54 @@ class _BasicDetailsState extends State { title: LocaleKeys.profile_basicDetails.tr(), ), backgroundColor: MyColors.backgroundColor, - bottomSheet: footer(), body: Column( children: [ - Container( - width: double.infinity, - margin: EdgeInsets.only(top: 20, left: 21, right: 21, bottom: 20), - padding: EdgeInsets.only(left: 14, right: 14, top: 13, bottom: 5), - height: 280, - decoration: BoxDecoration( - boxShadow: [ - BoxShadow( - color: Colors.grey.withOpacity(0.5), - spreadRadius: 5, - blurRadius: 26, - offset: Offset(0, 3), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: double.infinity, + margin: EdgeInsets.only(top: 20, left: 21, right: 21, bottom: 20), + padding: EdgeInsets.only(left: 14, right: 14, top: 13, bottom: 5), + height: 300, + 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: getEmployeeBasicDetailsList.map((e) => + Column( + children: [ + e.dISPLAYFLAG == "Y" ? Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + "${e.sEGMENTPROMPT}".toText13(color: MyColors.lightGrayColor), + "${e.sEGMENTVALUEDSP}".toText16(isBold: true, color: MyColors.blackColor), + SizedBox(height: 12,) + ]): Container(), + ], + )).toList()), ), ], - color: Colors.white, - borderRadius: BorderRadius.circular(10.0), ), - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - LocaleKeys.fullName.tr().toText13(color: MyColors.lightGrayColor), - "$fullName".toText16(isBold: true, color: MyColors.blackColor), - SizedBox( - height: 20, - ), - LocaleKeys.maritalStatus.tr().toText13(color: MyColors.lightGrayColor), - "$maritalStatus".toText16(isBold: true, color: MyColors.blackColor), - SizedBox( - height: 20, - ), - LocaleKeys.dateOfBirth.tr().toText13(color: MyColors.lightGrayColor), - "$birthDate".toText16(isBold: true, color: MyColors.blackColor), - SizedBox( - height: 20, - ), - LocaleKeys.civilIdentityNumber.tr().toText13(color: MyColors.lightGrayColor), - "$civilIdentityNumber".toText16(isBold: true, color: MyColors.blackColor), - ]), ), + DefaultButton( + LocaleKeys.update.tr(), + menuEntries.updateButton == 'Y' ? () async { + showAlertDialog(context);} + : null).insideContainer, ], )); } - Widget footer() { - return Container( - decoration: BoxDecoration( - // borderRadius: BorderRadius.circular(10), - color: MyColors.white, - boxShadow: [ - BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3), - ], - ), - child: DefaultButton( - LocaleKeys.update.tr(), - menuEntries.updateButton == 'Y' - ? () async { - showAlertDialog(context); - } - : null) - .insideContainer, - ); - } void showAlertDialog(BuildContext context) { Widget cancelButton = TextButton( diff --git a/lib/ui/profile/contact_details.dart b/lib/ui/profile/contact_details.dart index c0af0c5..9eda586 100644 --- a/lib/ui/profile/contact_details.dart +++ b/lib/ui/profile/contact_details.dart @@ -134,7 +134,7 @@ class _ContactDetailsState extends State { ])) .toList()) ])), - Container( + Container( width: double.infinity, margin: EdgeInsets.only( top: 20, diff --git a/lib/ui/profile/delete_family_member.dart b/lib/ui/profile/delete_family_member.dart index af4601d..73c44de 100644 --- a/lib/ui/profile/delete_family_member.dart +++ b/lib/ui/profile/delete_family_member.dart @@ -12,6 +12,7 @@ import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'dart:io'; import 'package:flutter/cupertino.dart'; +import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; class DeleteFamilyMember extends StatefulWidget { @@ -66,25 +67,29 @@ class _DeleteFamilyMemberState extends State { title: LocaleKeys.profile_familyDetails.tr(), ), backgroundColor: MyColors.backgroundColor, - bottomSheet: footer(), body: Column( children: [ - DynamicTextFieldWidget( - LocaleKeys.endDate.tr(), date.toString(), - // suffixIconData: Icons.calendar_today, - isEnable: false, - onTap: () async { - DateTime dateValue = await _selectDate(context); - // DateTime date1 = DateTime(dateValue.year, dateValue.month, dateValue.day); - date = DateFormat('yyyy/MM/dd').format(dateValue); - datePar = DateFormat('yyyy/MM/dd hh:mm:ss').format(dateValue); - setState(() {}); - // if (date !=null) { - // print(datePar); - // deleteFamilyMember(datePar); - // } - }, - ).paddingOnly(bottom: 12) + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + DynamicTextFieldWidget( + LocaleKeys.endDate.tr(), date.toString(), + isEnable: false, + onTap: () async { + DateTime dateValue = await _selectDate(context); + date = DateFormat('yyyy/MM/dd').format(dateValue); + datePar = DateFormat('yyyy/MM/dd hh:mm:ss').format(dateValue); + setState(() {}); + }, + ).paddingOnly(bottom: 12), + ], + ), + ), + DefaultButton( + LocaleKeys.next.tr(), () async { + deleteFamilyMember(datePar);} + ).insideContainer, ], )); } diff --git a/lib/ui/profile/family_members.dart b/lib/ui/profile/family_members.dart index 4f38531..3aef900 100644 --- a/lib/ui/profile/family_members.dart +++ b/lib/ui/profile/family_members.dart @@ -6,11 +6,14 @@ import 'package:mohem_flutter_app/classes/utils.dart'; 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/dashboard/menu_entries.dart'; import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; +import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart'; import 'package:mohem_flutter_app/ui/profile/profile_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; +import 'package:provider/provider.dart'; class FamilyMembers extends StatefulWidget { const FamilyMembers({Key? key}) : super(key: key); @@ -24,9 +27,13 @@ class _FamilyMembersState extends State { int? relationId; int? flag; + GetMenuEntriesList menuEntries = GetMenuEntriesList(); + @override void initState() { super.initState(); + List menuData = Provider.of(context, listen: false).getMenuEntriesList!; + menuEntries = menuData.where((GetMenuEntriesList e) => e.requestType == 'CONTACT').toList()[0]; getEmployeeContacts(); } @@ -49,173 +56,164 @@ class _FamilyMembersState extends State { title: LocaleKeys.profile_familyDetails.tr(), ), backgroundColor: MyColors.backgroundColor, - bottomSheet: footer(), - body: Container( - width: MediaQuery.of(context).size.width, - child: getEmployeeContactsList.length != 0 - ? SingleChildScrollView( - scrollDirection: Axis.vertical, - child: Column( - children: [ - ListView.builder( + body: Column( + children: [ + Expanded( + child: getEmployeeContactsList.length != 0 + ? SingleChildScrollView( + scrollDirection: Axis.vertical, + child: 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), + return 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), ), - 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: () { - relationId = getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID!.toInt(); - showUpdateAlertDialog(context, relationId!.toInt(), 2, LocaleKeys.update.tr()); - }, - 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, - ), - ), - ], + ], + color: MyColors.whiteColor, + borderRadius: BorderRadius.circular(10.0), + ), + child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + "${getEmployeeContactsList[index].cONTACTNAME}".toText16(isBold: true, color: MyColors.grey3AColor), + "${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: menuEntries.updateButton == 'Y' + ? InkWell( + onTap: () async{ + relationId = getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID!.toInt(); + showUpdateAlertDialog(context, relationId!.toInt(), 2, LocaleKeys.update.tr()); + }, + child: RichText( + text: TextSpan( + children: [ + WidgetSpan( + child: Icon( + Icons.edit, + size: 15, + color: MyColors.grey67Color, + ), ), - ), - )), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 8), - child: SizedBox( - child: Container( - width: 3, - color: MyColors.lightGreyEFColor, + TextSpan( + text: LocaleKeys.update.tr(), + style: TextStyle( + color: MyColors.grey67Color, + fontSize: 12, + fontWeight: FontWeight.bold, + ), ), - ), + ], ), - Container( - child: InkWell( - onTap: () { - relationId = getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID!.toInt(); - showRemoveAlertDialog(context, relationId!.toInt()); - }, - child: RichText( - text: TextSpan( - children: [ - WidgetSpan( - child: Icon( - Icons.delete, - size: 15, - color: Color(0x99FF0000), - ), + ), + ) + : RichText( + text: TextSpan( + children: [ + WidgetSpan( + child: Icon( + Icons.edit, + size: 15, + color: MyColors.lightGreyColor, ), - TextSpan( - text: LocaleKeys.remove.tr(), - style: TextStyle( - color: MyColors.DarkRedColor, - fontSize: 12, - fontWeight: FontWeight.bold, - ), + ), + TextSpan( + text: LocaleKeys.update.tr(), + style: TextStyle( + color: MyColors.lightGreyColor, + 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: (){}, - // ), - ], + ) ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8), + child: SizedBox( + child: Container( + width: 3, + color: MyColors.lightGreyEFColor, + ), + ), ), - ]), + Container( + child: InkWell( + onTap: () { + relationId = getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID!.toInt(); + showRemoveAlertDialog(context, relationId!.toInt()); + }, + child: RichText( + text: TextSpan( + children: [ + WidgetSpan( + child: Icon( + Icons.delete, + size: 15, + color: MyColors.redColor, + ), + ), + TextSpan( + text: LocaleKeys.remove.tr(), + style: TextStyle( + color: MyColors.redColor, + fontSize: 12, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), + )), + ], ), - ], - )); - }) - ], - ), - ) - : Container(), - // SizedBox(height: 20), + ]), + ); + }), + ) + : Container(), + ), + DefaultButton( + LocaleKeys.addNewFamilyMember.tr(), () async { + Navigator.pushNamed(context, AppRoutes.addUpdateFamilyMember, arguments: {"relationID": relationId, "flag": 1, "actionType": "ADD"}); + ProfileScreen(); + } + ).insideContainer, + ], )); } - Widget footer() { - return Container( - decoration: BoxDecoration( - // borderRadius: BorderRadius.circular(10), - color: MyColors.white, - boxShadow: [ - BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3), - ], - ), - child: DefaultButton(LocaleKeys.addNewFamilyMember.tr(), () async { - Navigator.pushNamed(context, AppRoutes.addUpdateFamilyMember, arguments: {"relationID": relationId, "flag": 1, "actionType": "ADD"}); - // context.setLocale(const Locale("en", "US")); // to change Loacle - ProfileScreen(); - }).insideContainer, - ); - } void showUpdateAlertDialog(BuildContext context, int relationId, int flag, String actionType) { Widget cancelButton = TextButton( @@ -292,7 +290,5 @@ class _FamilyMembersState extends State { ); } - // void continueDynamicForms() { - // Navigator.pushNamed(context, AppRoutes.addDynamicInputProfile, arguments: DynamicFamilyMembersParams(LocaleKeys.profile_familyDetails.tr(), getEmployeeContactsList: getEmployeeContactsList)); - // } + } diff --git a/lib/ui/work_list/work_list_screen.dart b/lib/ui/work_list/work_list_screen.dart index eb2ba05..a1a8e8a 100644 --- a/lib/ui/work_list/work_list_screen.dart +++ b/lib/ui/work_list/work_list_screen.dart @@ -121,6 +121,7 @@ class _WorkListScreenState extends State { appBar: AppBarWidget( context, title: LocaleKeys.workList.tr(), + showNotificationButton: true, ), body: SizedBox( width: double.infinity, diff --git a/lib/ui/work_list/worklist_settings.dart b/lib/ui/work_list/worklist_settings.dart new file mode 100644 index 0000000..47771ee --- /dev/null +++ b/lib/ui/work_list/worklist_settings.dart @@ -0,0 +1,178 @@ + +import 'package:easy_localization/src/public_ext.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/worklist/worklist_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/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_user_item_type_list.dart'; +import 'package:mohem_flutter_app/models/update_user_item_type_list.dart'; +import 'package:mohem_flutter_app/models/worklist/update_user_type_list.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'package:mohem_flutter_app/widgets/button/default_button.dart'; + +class WorklistSettings extends StatefulWidget { + const WorklistSettings({Key? key}) : super(key: key); + + @override + _WorklistSettingsState createState() => _WorklistSettingsState(); +} + +class _WorklistSettingsState extends State { + List getUserItemTypesList = []; + UpdateUserItemTypesList? updateUserItemTypesList; + + + void initState() { + super.initState(); + userItemTypesList(); + } + + void userItemTypesList() async { + try { + Utils.showLoading(context); + getUserItemTypesList = await WorkListApiClient().getUserItemTypes(); + Utils.hideLoading(context); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + void updateUserItem() async { + try { + Utils.showLoading(context); + List> itemList=[]; + for (var element in getUserItemTypesList) { + itemList.add(UpdateUserTypesList(itemID: element.uSERITEMTYPEID, pITEMTYPE: element.iTEMTYPE,pFYAENABLEDFALG: element.fYAENABLEDFALG, pFYIENABLEDFALG: element.fYIENABLEDFLAG).toJson()); + + } + updateUserItemTypesList = await WorkListApiClient().updateUserItemTypes(itemList); + Utils.hideLoading(context); + Navigator.pushNamed(context, AppRoutes.workList); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold(backgroundColor: Colors.white, + appBar: AppBarWidget( + context, + title: LocaleKeys.worklistSettings.tr(), + ), + body:Column( + children: [ + Expanded( + child: Container( + margin: const EdgeInsets.only(top: 21, left: 21, right: 21), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + child: LocaleKeys.TurnNotificationsFor.tr().toText22(color: MyColors.blackColor), + ).paddingOnly(top: 10, bottom: 50), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + child: LocaleKeys.itemType.tr().toText14(color: MyColors.blackColor) , + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Container( + child: "FYA".tr().toText14(color: MyColors.blackColor) , + ), + Container( + child: "FYI".tr().toText14(color: MyColors.blackColor) , + ).paddingOnly(left: 30, right: 30), + ], + ) + ], + ), + Divider(color: MyColors.greyA5Color,), + SingleChildScrollView( + scrollDirection: Axis.vertical, + child: ListView.builder( + scrollDirection: Axis.vertical, + shrinkWrap: true, + physics: ScrollPhysics(), + itemCount: getUserItemTypesList == null ? 0 : getUserItemTypesList.length, + itemBuilder: (BuildContext context,int index) { + return Column( + children:[ + customSwitch(getUserItemTypesList[index]), + Divider( + color: MyColors.greyC4Color, + thickness: 0.5,), + ]); + } + ), + ), + ], + ), + ), + ), + DefaultButton( + LocaleKeys.save.tr(), () async { + updateUserItem(); + }).insideContainer, + ], + ) + + ); + } + + + Widget customSwitch(GetUserItemTypesList list){ + return Padding( + padding: const EdgeInsets.only(top: 21), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(list.iTEMTYPE.toString(), style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + color: MyColors.blackColor + ),), + const Spacer(), + Row( + children: [ + CupertinoSwitch( + trackColor: Colors.grey, + activeColor: MyColors.gradiantEndColor, + value: list?.fYAENABLEDFALG =='Y' ?true : false, + onChanged: (value){ + setState(() { + list?.fYAENABLEDFALG = value == true ? 'Y': 'N'; + }); + } + ), + CupertinoSwitch( + trackColor: Colors.grey, + activeColor: MyColors.gradiantEndColor, + value: list?.fYIENABLEDFLAG =='Y' ?true : false, + onChanged: (value){ + setState(() { + // list.isFYI = value; + list?.fYIENABLEDFLAG = value ==true ? 'Y': 'N'; + }); + } + ), + ], + ) + ], + ), + ); + } + +} diff --git a/lib/widgets/app_bar_widget.dart b/lib/widgets/app_bar_widget.dart index 5f021d1..806fe6b 100644 --- a/lib/widgets/app_bar_widget.dart +++ b/lib/widgets/app_bar_widget.dart @@ -1,10 +1,11 @@ import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/classes/colors.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'; -AppBar AppBarWidget(BuildContext context, {required String title, bool showHomeButton = false}) { +AppBar AppBarWidget(BuildContext context, {required String title, bool showHomeButton = false, bool showNotificationButton = false}) { return AppBar( leadingWidth: 0, // leading: GestureDetector( @@ -39,6 +40,18 @@ AppBar AppBarWidget(BuildContext context, {required String title, bool showHomeB }, icon: const Icon(Icons.home, color: MyColors.darkIconColor), ), + if (showNotificationButton) + IconButton( + onPressed: () { + Navigator.pushNamed(context, AppRoutes.worklistSettings); + // Navigator.pushAndRemoveUntil( + // context, + // MaterialPageRoute(builder: (context) => LandingPage()), + // (Route route) => false, + // ); + }, + icon: const Icon(Icons.notifications, color: MyColors.textMixColor), + ), ], ); } diff --git a/pubspec.yaml b/pubspec.yaml index 789d51c..dde9d39 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -71,6 +71,7 @@ dependencies: # flutter_barcode_scanner: ^2.0.0 qr_code_scanner: ^1.0.0 qr_flutter: ^4.0.0 + url_launcher: ^6.1.5