diff --git a/lib/api/my_requests_api_client.dart b/lib/api/my_requests_api_client.dart index 96c3b54..67fe056 100644 --- a/lib/api/my_requests_api_client.dart +++ b/lib/api/my_requests_api_client.dart @@ -60,7 +60,7 @@ class MyRequestsApiClient { }, url, postParams); } - Future getSubmitNewRequest(List> list, {String? functionName}) async { + Future getSubmitNewRequest(List> list, {String? functionName}) async { String url = "${ApiConsts.erpRest}SUBMIT_CCP_TRANSACTION"; Map postParams = { "P_MENU_TYPE": "E", @@ -72,7 +72,7 @@ class MyRequestsApiClient { postParams["EITTransactionTBL"] = list; return await ApiClient().postJsonForObject((json) { GenericResponseModel? responseData = GenericResponseModel.fromJson(json); - return responseData.submitCcpTransactionList; + return responseData; }, url, postParams); } diff --git a/lib/api/worklist/worklist_api_client.dart b/lib/api/worklist/worklist_api_client.dart index de65d35..a5f44c1 100644 --- a/lib/api/worklist/worklist_api_client.dart +++ b/lib/api/worklist/worklist_api_client.dart @@ -149,12 +149,13 @@ class WorkListApiClient { }, url, postParams); } - Future getUserInformation(int pSelectedResopID, String selectedEmployeeNumber) async { + Future getUserInformation(int pSelectedResopID, String selectedEmployeeNumber, String noficationId) async { String url = "${ApiConsts.erpRest}Get_Notification_UserInformation"; Map postParams = { "P_SELECTED_RESP_ID": pSelectedResopID, "P_PAGE_LIMIT": 100, "P_PAGE_NUM": 1, + "P_NOTIFICATION_ID": noficationId, }; postParams.addAll(AppState().postParamsJson); if (selectedEmployeeNumber != null) postParams["P_SELECTED_EMPLOYEE_NUMBER"] = selectedEmployeeNumber; @@ -413,7 +414,7 @@ class WorkListApiClient { "EmployeeNumber": employeeNumber, "Comments": "", "AdditionalFields": null, - "NewUserEMPId":newUserEMPId + "NewUserEMPId": newUserEMPId }; postParams.addAll(AppState().postParamsJson); return await ApiClient().postJsonForObject((json) { diff --git a/lib/classes/colors.dart b/lib/classes/colors.dart index 5c9b30e..ec369c8 100644 --- a/lib/classes/colors.dart +++ b/lib/classes/colors.dart @@ -6,8 +6,8 @@ class MyColors { static const Color darkTextColor = Color(0xff2B353E); static const Color normalTextColor = Color(0xff5A5A5A); static const Color lightTextColor = Color(0xffBFBFBF); - static const Color gradiantStartColor = Color(0xff33c0a5); - static const Color gradiantEndColor = Color(0xff259db7); + static const Color gradiantStartColor = Color(0xff259db7); + static const Color gradiantEndColor = Color(0xff33c0a5); static const Color textMixColor = Color(0xff2BB8A6); static const Color backgroundColor = Color(0xffF8F8F8); static const Color grey41Color = Color(0xff414141); @@ -30,7 +30,7 @@ class MyColors { static const Color darkWhiteColor = Color(0xffE0E0E0); static const Color redColor = Color(0xffD02127); static const Color pinkColor = Color(0xffEBA9A9); - static const Color pinkDarkColor = Color(0xffe3797d); + static const Color pinkDarkColor = Color(0xffdb5b6a); static const Color yellowColor = Color(0xffF4E31C); static const Color orange = Color(0xFFCC9B14); static const Color yellowFavColor = Color(0xffEAC321); @@ -41,6 +41,7 @@ class MyColors { static const Color borderColor = Color(0xffE8E8E8); static const Color borderE3Color = Color(0xffE3E3E3); static const Color borderCEColor = Color(0xffCECECE); + //static const Color grey67Color = Color(0xff676767); static const Color whiteColor = Color(0xFFEEEEEE); static const Color greenColor = Color(0xff1FA269); @@ -55,7 +56,7 @@ class MyColors { 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 green9CColor = Color(0xff259CB8); static const Color green2DColor = Color(0xff32D892); static const Color greyC4Color = Color(0xffC4C4C4); static const Color grey35Color = Color(0xff535353); diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index a800ab5..8834ace 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -551,7 +551,10 @@ class CodegenLoader extends AssetLoader{ "attendanceType": "نوع الحضور", "help": "يساعد", "dear": "عزيزي", - "assistant": "للحصول على المساعدة ، يمكنك تقديم الطلب على نظام سعيد أو الاتصال بمركز الاتصال الموحد على 8310200" + "assistant": "للحصول على المساعدة ، يمكنك تقديم الطلب على نظام سعيد أو الاتصال بمركز الاتصال الموحد على 8310200", + "employee_leaves_calender": "تقويم أوراق الموظفين", + "view_your_leave_information": "عرض معلومات إجازتك", + "view_details": "عرض التفاصيل" }; static const Map en_US = { "mohemm": "Mohemm", @@ -1090,7 +1093,10 @@ static const Map en_US = { "attendanceType": "Attendance Type", "help": "Help", "dear": "Dear", - "assistant": "For assistance, you can submit the request on the Saeed system or call the unified call center on 8310200" + "assistant": "For assistance, you can submit the request on the Saeed system or call the unified call center on 8310200", + "employee_leaves_calender": "Employee Leaves Calender", + "view_your_leave_information": "View Your Leave Information", + "view_details": "View Details" }; static const Map> mapLocales = {"ar_SA": ar_SA, "en_US": en_US}; } diff --git a/lib/ui/attendance/moe_monthly_attendance_screen.dart b/lib/ui/attendance/moe_monthly_attendance_screen.dart index fef843c..57c1614 100644 --- a/lib/ui/attendance/moe_monthly_attendance_screen.dart +++ b/lib/ui/attendance/moe_monthly_attendance_screen.dart @@ -21,6 +21,7 @@ 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_2/month_picker_dialog_2.dart'; import 'package:pie_chart/pie_chart.dart'; +import 'package:sizer/sizer.dart'; import 'package:syncfusion_flutter_calendar/calendar.dart'; enum LeaveType { ABSENCE, BUSINESS_TRIP, HOLIDAY, NORMAL } @@ -104,6 +105,18 @@ class _MoeMonthlyAttendanceScreenState extends State }), 18.height, AspectRatio(aspectRatio: 304 / 244, child: calendarWidget()), + 12.height, + SizedBox( + width: double.infinity, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + showColorItem("Absence", MyColors.pinkDarkColor), + showColorItem("Business Trip", MyColors.gradiantStartColor), + showColorItem("Holiday", MyColors.gradiantEndColor), + ], + ), + ), ], ).paddingOnly(left: 21, right: 21, top: 21), ], @@ -113,6 +126,20 @@ class _MoeMonthlyAttendanceScreenState extends State ); } + Widget showColorItem(String title, Color color) { + return Row( + children: [ + Container( + width: 20, + height: 20, + color: color, + ).circle(2000), + 8.width, + title.toText12() + ], + ); + } + Widget calendarWidget() { return SfCalendar( view: CalendarView.month, @@ -180,11 +207,11 @@ class _MoeMonthlyAttendanceScreenState extends State ), 6.height, showText(LocaleKeys.leaveType.tr(), leaves.leaveType.toString()), - if (leaves.absenceAttendanceTypeName.toString().isNotEmpty) - const Divider( - color: MyColors.borderCEColor, - ), - if (leaves.absenceAttendanceTypeName.toString().isNotEmpty) showText(LocaleKeys.attendanceType.tr(), leaves.absenceAttendanceTypeName.toString()), + // if (leaves.absenceAttendanceTypeName.toString().isNotEmpty) + // const Divider( + // color: MyColors.borderCEColor, + // ), + // if (leaves.absenceAttendanceTypeName.toString().isNotEmpty) showText(LocaleKeys.attendanceType.tr(), leaves.absenceAttendanceTypeName.toString()), const Divider( color: MyColors.borderCEColor, ), @@ -232,7 +259,7 @@ class _MoeMonthlyAttendanceScreenState extends State margin: const EdgeInsets.all(4), decoration: BoxDecoration( color: leaveType == LeaveType.ABSENCE - ? MyColors.redColor + ? MyColors.pinkDarkColor : leaveType == LeaveType.BUSINESS_TRIP ? MyColors.gradiantStartColor : leaveType == LeaveType.HOLIDAY @@ -241,7 +268,7 @@ class _MoeMonthlyAttendanceScreenState extends State shape: BoxShape.circle, border: Border.all( color: leaveType == LeaveType.ABSENCE - ? MyColors.redColor + ? MyColors.pinkDarkColor : leaveType == LeaveType.BUSINESS_TRIP ? MyColors.gradiantStartColor : leaveType == LeaveType.HOLIDAY diff --git a/lib/ui/landing/dashboard_screen.dart b/lib/ui/landing/dashboard_screen.dart index ca3eb69..75b2449 100644 --- a/lib/ui/landing/dashboard_screen.dart +++ b/lib/ui/landing/dashboard_screen.dart @@ -437,6 +437,7 @@ class _DashboardScreenState extends State with WidgetsBindingOb Navigator.pushNamed(context, AppRoutes.monthlyAttendance); }, ), + 21.height, Visibility( visible: env.offersDiscount, child: Column( @@ -624,7 +625,6 @@ class _DashboardScreenState extends State with WidgetsBindingOb icon: Stack( alignment: Alignment.centerLeft, children: [ - SvgPicture.asset( "assets/icons/chat/chat.svg", color: currentIndex == 4 @@ -696,16 +696,4 @@ class _DashboardScreenState extends State with WidgetsBindingOb Navigator.pushNamed(context, AppRoutes.offersAndDiscountsDetails, arguments: getOffersDetailList); } - } - - - - - - - - - - - diff --git a/lib/ui/landing/widget/services_widget.dart b/lib/ui/landing/widget/services_widget.dart index f023955..0d50df0 100644 --- a/lib/ui/landing/widget/services_widget.dart +++ b/lib/ui/landing/widget/services_widget.dart @@ -225,6 +225,7 @@ class ServicesWidget extends StatelessWidget { } List menuList = pro.getMenuEntriesList?.where((element) => element.parentMenuName == menuEntry.menuName && (element.menuEntryType == "FUNCTION")).toList() ?? []; menuEntry.icon = ""; + menuList = []; if (menuList.isEmpty) { if (menuEntry.requestType == "EIT") { Navigator.pushNamed(context, AppRoutes.dynamicScreen, arguments: DynamicListViewParams(menuEntry.prompt!, menuEntry.functionName!)); @@ -277,4 +278,4 @@ class ServicesWidget extends StatelessWidget { ], ); } -} \ No newline at end of file +} diff --git a/lib/ui/login/login_screen.dart b/lib/ui/login/login_screen.dart index b9cfce9..3e9976a 100644 --- a/lib/ui/login/login_screen.dart +++ b/lib/ui/login/login_screen.dart @@ -185,8 +185,11 @@ class _LoginScreenState extends State { @override Widget build(BuildContext context) { + username.text = "1002528733"; + password.text = "moe123456"; if (isAppOpenBySystem == null) { isAppOpenBySystem = (ModalRoute.of(context)!.settings.arguments ?? true) as bool; + if (!kReleaseMode) { // username.text = "1100313582"; // password.text = "moe123456"; diff --git a/lib/ui/profile/basic_details.dart b/lib/ui/profile/basic_details.dart index ff4c904..23a4e89 100644 --- a/lib/ui/profile/basic_details.dart +++ b/lib/ui/profile/basic_details.dart @@ -88,62 +88,58 @@ class _BasicDetailsState extends State { ? const SizedBox() : (getEmployeeBasicDetailsList!.isEmpty ? Utils.getNoDataWidget(context) - : Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LocaleKeys.profile_basicDetails.tr().toText20(isBold:true), - 14.height, - ...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), - 12.height - ]) - : Container(), - ], - )) - .toList() - ]) - .objectContainerView()), + : Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + LocaleKeys.profile_basicDetails.tr().toText20(isBold: true), + 14.height, + ...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), + 12.height + ]) + : Container(), + ], + )) + .toList() + ]).objectContainerView()), 20.height, getEmployeeQualificationsList == null ? const SizedBox() - : (getEmployeeQualificationsList!.isEmpty - ? Utils.getNoDataWidget(context) - : Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LocaleKeys.qualification.tr().toText20(isBold:true), - 14.height, - ...getEmployeeQualificationsList! - .map((e) => SizedBox( - width: double.infinity, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LocaleKeys.esteblishmentName.tr().toText13(color: MyColors.lightGrayColor), - "${e.establishment}".toText16(isBold: true, color: MyColors.blackColor), - 12.height, - LocaleKeys.grade.tr().toText13(color: MyColors.lightGrayColor), - "${e.grade}".toText16(isBold: true, color: MyColors.blackColor), - 12.height, - LocaleKeys.gradeDescription.tr().toText13(color: MyColors.lightGrayColor), - "${e.gradeDescription}".toText16(isBold: true, color: MyColors.blackColor), - 12.height, - LocaleKeys.type.tr().toText13(color: MyColors.lightGrayColor), - "${e.qualificationType}".toText16(isBold: true, color: MyColors.blackColor), - 12.height, - LocaleKeys.status.tr().toText13(color: MyColors.lightGrayColor), - "${e.status}".toText16(isBold: true, color: MyColors.blackColor), - ], - ), - )) - .toList() - ]) - .objectContainerView()) + : ((getEmployeeQualificationsList!.isEmpty && getEmployeeBasicDetailsList!.isEmpty) + ? Utils.getNoDataWidget(context) + : getEmployeeQualificationsList!.isEmpty + ? Container() + : Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + LocaleKeys.qualification.tr().toText20(isBold: true), + 14.height, + ...getEmployeeQualificationsList! + .map((e) => SizedBox( + width: double.infinity, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + LocaleKeys.esteblishmentName.tr().toText13(color: MyColors.lightGrayColor), + "${e.establishment}".toText16(isBold: true, color: MyColors.blackColor), + 12.height, + LocaleKeys.grade.tr().toText13(color: MyColors.lightGrayColor), + "${e.grade}".toText16(isBold: true, color: MyColors.blackColor), + 12.height, + LocaleKeys.gradeDescription.tr().toText13(color: MyColors.lightGrayColor), + "${e.gradeDescription}".toText16(isBold: true, color: MyColors.blackColor), + 12.height, + LocaleKeys.type.tr().toText13(color: MyColors.lightGrayColor), + "${e.qualificationType}".toText16(isBold: true, color: MyColors.blackColor), + 12.height, + LocaleKeys.status.tr().toText13(color: MyColors.lightGrayColor), + "${e.status}".toText16(isBold: true, color: MyColors.blackColor), + ], + ), + )) + .toList() + ]).objectContainerView()) ], ), ), diff --git a/lib/ui/screens/my_requests/my_requests.dart b/lib/ui/screens/my_requests/my_requests.dart index 93302b8..29a8d41 100644 --- a/lib/ui/screens/my_requests/my_requests.dart +++ b/lib/ui/screens/my_requests/my_requests.dart @@ -54,7 +54,6 @@ class _MyRequestsState extends State { } return Scaffold( - backgroundColor: Colors.white, appBar: AppBarWidget( context, title: LocaleKeys.concurrentReports.tr(), @@ -81,6 +80,7 @@ class _MyRequestsState extends State { ], onSelected: (int popupIndex) { selectedConcurrentProgramList = getConcurrentProgramsList[popupIndex]; + requestModel!.functionName = getConcurrentProgramsList[popupIndex].cONCURRENTPROGRAMNAME; getCCPTransactions(selectedConcurrentProgramList?.cONCURRENTPROGRAMNAME); setState(() {}); }), @@ -164,8 +164,10 @@ class _MyRequestsState extends State { } void openNewRequest() async { - await Navigator.pushNamed(context, AppRoutes.newRequest, arguments: NewRequestModel(groupID: requestModel!.groupID)).then((value) { - // getOpenTickets(); + await Navigator.pushNamed(context, AppRoutes.newRequest, arguments: NewRequestModel(groupID: requestModel!.groupID, functionName: requestModel!.functionName)).then((value) { + if (value != null && value == "refresh") { + getCCPTransactions(requestModel!.functionName); + } }); } diff --git a/lib/ui/screens/my_requests/new_request.dart b/lib/ui/screens/my_requests/new_request.dart index cba00c4..47aeb8f 100644 --- a/lib/ui/screens/my_requests/new_request.dart +++ b/lib/ui/screens/my_requests/new_request.dart @@ -11,6 +11,7 @@ import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/dyanmic_forms/validate_eit_transaction_model.dart'; +import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; import 'package:mohem_flutter_app/models/my_requests/get_ccp_transactions_model.dart'; import 'package:mohem_flutter_app/models/my_requests/get_ccp_transations_list_model.dart'; @@ -79,7 +80,7 @@ class _NewRequestState extends State { isEnable: false, isPopup: true, isInputTypeNum: true, - isReadOnly:getConcurrentProgramsList.isEmpty? true:false, + isReadOnly: getConcurrentProgramsList.isEmpty ? true : false, ).paddingOnly(bottom: 12), itemBuilder: (_) => >[ for (int i = 0; i < getConcurrentProgramsList.length; i++) PopupMenuItem(child: Text(getConcurrentProgramsList[i].uSERCONCURRENTPROGRAMNAME!), value: i), @@ -142,11 +143,13 @@ class _NewRequestState extends State { return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: vatcherVal.toString()).toJson(); }).toList(); Utils.showLoading(context); - submitCcpTransactionList = await MyRequestsApiClient().getSubmitNewRequest(values, functionName: requestModel?.functionName ?? "HMG_EMP_BUS_TRIP_SET_SS"); - getCCPTransactionsList = await MyRequestsApiClient().getCcpTransactions(values, functionName: requestModel?.functionName ?? "HMG_EMP_BUS_TRIP_SET_SS"); + GenericResponseModel responseData = await MyRequestsApiClient().getSubmitNewRequest(values, functionName: requestModel?.functionName ?? "HMG_EMP_BUS_TRIP_SET_SS"); Utils.hideLoading(context); - Navigator.pushNamed(context, AppRoutes.myRequests, arguments: requestModel); - setState(() {}); + if (responseData.messageStatus == 1) { + Navigator.pop(context, "refresh"); + } else { + Utils.showToast(responseData.errorEndUserMessage ?? ""); + } } catch (ex) { Utils.hideLoading(context); Utils.handleException(ex, context, null); diff --git a/lib/ui/work_list/sheets/selected_item_sheet.dart b/lib/ui/work_list/sheets/selected_item_sheet.dart index 54f87d0..49f5559 100644 --- a/lib/ui/work_list/sheets/selected_item_sheet.dart +++ b/lib/ui/work_list/sheets/selected_item_sheet.dart @@ -127,7 +127,7 @@ class SelectedItemSheet extends StatelessWidget { if (favoriteReplacements != null) empID = favoriteReplacements!.userName; if (replacementList != null) empID = replacementList!.userName; try { - memberInformationListModel = await WorkListApiClient().getUserInformation(-999, empID!); + memberInformationListModel = await WorkListApiClient().getUserInformation(-999, empID!, notificationID.toString()); if (actionHistoryList != null) empID = actionHistoryList!.eMPLOYEEIMAGE = memberInformationListModel!.eMPLOYEEIMAGE ?? AppState().getBase64ImageEmp; if (favoriteReplacements != null) empID = favoriteReplacements!.employeeImage = memberInformationListModel!.eMPLOYEEIMAGE ?? AppState().getBase64ImageEmp; if (replacementList != null) empID = replacementList!.employeeImage = memberInformationListModel!.eMPLOYEEIMAGE ?? AppState().getBase64ImageEmp; @@ -140,7 +140,8 @@ class SelectedItemSheet extends StatelessWidget { Future performNetworkCall(BuildContext context, {String? email, String? userId}) async { Utils.showLoading(context); try { - await WorkListApiClient().submitComment(comment: comment, email: email, userId: userId, notificationId: notificationID, apiMode: apiMode, approverIndex: actionHistoryList != null ? actionHistoryList!.sEQUENCE : null); + await WorkListApiClient().submitComment( + comment: comment, email: email, userId: userId, notificationId: notificationID, apiMode: apiMode, approverIndex: actionHistoryList != null ? actionHistoryList!.sEQUENCE : null); Utils.hideLoading(context); // Navigator.pop(context); // Navigator.pop(context); diff --git a/lib/ui/work_list/worklist_detail_screen.dart b/lib/ui/work_list/worklist_detail_screen.dart index 9bc0222..0e13140 100644 --- a/lib/ui/work_list/worklist_detail_screen.dart +++ b/lib/ui/work_list/worklist_detail_screen.dart @@ -753,7 +753,7 @@ class _WorkListDetailScreenState extends State { if (apiCallCount == 0) Utils.showLoading(context); apiCallCount++; memberInformationListModel = null; - memberInformationListModel = await WorkListApiClient().getUserInformation(-999, workListData!.sELECTEDEMPLOYEENUMBER!); + memberInformationListModel = await WorkListApiClient().getUserInformation(-999, workListData!.sELECTEDEMPLOYEENUMBER!, workListData!.nOTIFICATIONID.toString()); apiCallCount--; if (apiCallCount == 0) { Utils.hideLoading(context); diff --git a/lib/ui/work_list/worklist_fragments/actions_fragment.dart b/lib/ui/work_list/worklist_fragments/actions_fragment.dart index 98b5b72..c6ab75c 100644 --- a/lib/ui/work_list/worklist_fragments/actions_fragment.dart +++ b/lib/ui/work_list/worklist_fragments/actions_fragment.dart @@ -93,7 +93,7 @@ class ActionsFragment extends StatelessWidget { ], ), 10.height, - getActionDuration(index).toText11(maxLine: 1, color: const Color(0xff1FA269)) + // getActionDuration(index).toText11(maxLine: 1, color: const Color(0xff1FA269)) ], ), )