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/user.svg b/assets/images/user.svg
new file mode 100644
index 0000000..13d9aed
--- /dev/null
+++ b/assets/images/user.svg
@@ -0,0 +1,6 @@
+
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 0c6ce54..1ba7218 100644
--- a/assets/langs/ar-SA.json
+++ b/assets/langs/ar-SA.json
@@ -339,6 +339,25 @@
"pleaseSelectEmployeeForReplacement": "الرجاء تحديد موظف للاستبدال",
"pleaseSelectAction": "الرجاء تحديد الإجراء",
"pleaseSelectDate": "الرجاء تحديد التاريخ",
+ "todayAttendance": "حضور اليوم",
+ "viewAttendance": "عرض الحضور",
+ "teamMembers":"اعضاءالفريق",
+ "profileDetails": "الملف الشخصي",
+ "noResultsFound" : "لايوجد نتائج",
+ "searchBy": "بحث بواسطة",
+ "myTeamMembers": "اعضاء فريقي",
+ "save": "حفظ",
+ "itemType": "نوع العنصر",
+ "TurnNotificationsFor": "تفعيل الاشعارات",
+ "worklistSettings": "اعدادات الاشعارات",
+ "absenceType": "نوع الغياب",
+ "absenceCategory": "فئة الغياب",
+ "days": "أيام",
+ "hours": "ساعات",
+ "approvalStatus": "حالة القبول",
+ "absenceStatus": "حالة الغياب",
+ "subordinateLeave": "إجازة التابعيين",
+ "numberDays": "عدد الأيام",
"profile": {
"reset_password": {
"label": "Reset Password",
diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json
index 812fa49..47d33b9 100644
--- a/assets/langs/en-US.json
+++ b/assets/langs/en-US.json
@@ -339,6 +339,25 @@
"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",
+ "hours": "Hours",
+ "approvalStatus": "Approval Status",
+ "absenceStatus": "Absence Status",
+ "subordinateLeave": "Subordinate Leave",
+ "numberDays": "Number of days",
"profile": {
"reset_password": {
"label": "Reset Password",
diff --git a/lib/api/leave_balance_api_client.dart b/lib/api/leave_balance_api_client.dart
new file mode 100644
index 0000000..cd577ba
--- /dev/null
+++ b/lib/api/leave_balance_api_client.dart
@@ -0,0 +1,146 @@
+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/generic_response_model.dart';
+import 'package:mohem_flutter_app/models/leave_balance/calculate_absence_duration_model.dart';
+import 'package:mohem_flutter_app/models/leave_balance/cancel_hr_transaction_list_model.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';
+import 'package:mohem_flutter_app/models/leave_balance/start_absence_approval_proccess_model.dart';
+import 'package:mohem_flutter_app/models/leave_balance/sumbit_absence_transaction_list_model.dart';
+
+class LeaveBalanceApiClient {
+ static final LeaveBalanceApiClient _instance = LeaveBalanceApiClient._internal();
+
+ LeaveBalanceApiClient._internal();
+
+ factory LeaveBalanceApiClient() => _instance;
+
+ Future> getAbsenceTransactions(int pSelectedResopID) async {
+ String url = "${ApiConsts.erpRest}GET_ABSENCE_TRANSACTIONS";
+ Map postParams = {"P_PAGE_LIMIT": 50, "P_PAGE_NUM": 1, "P_MENU_TYPE": "E", "P_SELECTED_RESP_ID": pSelectedResopID};
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((json) {
+ GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
+ return responseData.getAbsenceTransactionList ?? [];
+ }, url, postParams);
+ }
+
+ Future> getAbsenceAttendanceTypes() async {
+ String url = "${ApiConsts.erpRest}GET_ABSENCE_ATTENDANCE_TYPES";
+ Map postParams = {};
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((json) {
+ GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
+ return responseData.getAbsenceAttendanceTypesList ?? [];
+ }, url, postParams);
+ }
+
+ Future calculateAbsenceDuration(int pAbsenceAttendanceTypeID, String pDateStart, String pDateEnd, int pSelectedResopID) async {
+ String url = "${ApiConsts.erpRest}CALCULATE_ABSENCE_DURATION";
+ Map postParams = {
+ "P_ABSENCE_ATTENDANCE_TYPE_ID": pAbsenceAttendanceTypeID,
+ "P_DATE_START": pDateStart,
+ "P_DATE_END": pDateEnd,
+ "P_SELECTED_RESP_ID": pSelectedResopID,
+ "P_MENU_TYPE": "E",
+ "P_TIME_END": null,
+ "P_TIME_START": null,
+ };
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((json) {
+ GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
+ return responseData.calculateAbsenceDuration!;
+ }, url, postParams);
+ }
+
+ Future> getAbsenceDffStructure(String pDescFlexContextCode, String pFunctionName, int pSelectedResopID) async {
+ String url = "${ApiConsts.erpRest}GET_ABSENCE_DFF_STRUCTURE";
+ Map postParams = {"P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode, "P_FUNCTION_NAME": pFunctionName, "P_MENU_TYPE": "E", "P_SELECTED_RESP_ID": pSelectedResopID};
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((json) {
+ GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
+ return responseData.getAbsenceDffStructureList ?? [];
+ }, url, postParams);
+ }
+
+ Future validateAbsenceTransaction(
+ String pDescFlexContextCode, String pFunctionName, int pAbsenceAttendanceTypeID, String pReplacementUserName, String pDateStart, String pDateEnd, int pSelectedResopID, Map data,
+ {String comments = ""}) async {
+ String url = "${ApiConsts.erpRest}VALIDATE_ABSENCE_TRANSACTION";
+ Map postParams = {
+ "P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode,
+ "P_FUNCTION_NAME": pFunctionName,
+ "P_REPLACEMENT_USER_NAME": pReplacementUserName,
+ "P_ABSENCE_ACTION": "CREATE",
+ "P_ABSENCE_COMMENTS": comments,
+ "P_ABSENCE_ATTENDANCE_ID": pAbsenceAttendanceTypeID,
+ "P_ABSENCE_ATTENDANCE_TYPE_ID": pAbsenceAttendanceTypeID,
+ "P_DATE_START": pDateStart,
+ "P_DATE_END": pDateEnd, //"29-Sep-2022",
+ "P_SELECTED_RESP_ID": pSelectedResopID,
+ "P_MENU_TYPE": "E",
+ "P_TIME_END": null,
+ "P_TIME_START": null,
+ };
+ postParams.addAll(data);
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((json) {
+ GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
+ return responseData;
+ }, url, postParams);
+ }
+
+ Future submitAbsenceTransaction(
+ String pDescFlexContextCode, String pFunctionName, int pAbsenceAttendanceTypeID, String pReplacementUserName, String pDateStart, String pDateEnd, int pSelectedResopID, Map data,
+ {String comments = ""}) async {
+ String url = "${ApiConsts.erpRest}SUBMIT_ABSENCE_TRANSACTION";
+ Map postParams = {
+ "P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode,
+ "P_FUNCTION_NAME": pFunctionName,
+ "P_REPLACEMENT_USER_NAME": pReplacementUserName,
+ "P_ABSENCE_ACTION": "CREATE",
+ "P_ABSENCE_COMMENTS": comments,
+ "P_ABSENCE_ATTENDANCE_ID": pAbsenceAttendanceTypeID,
+ "P_ABSENCE_ATTENDANCE_TYPE_ID": pAbsenceAttendanceTypeID,
+ "P_DATE_START": pDateStart,
+ "P_DATE_END": pDateEnd, //"29-Sep-2022",
+ "P_SELECTED_RESP_ID": pSelectedResopID,
+ "P_MENU_TYPE": "E",
+ "P_TIME_END": null,
+ "P_TIME_START": null,
+ };
+ postParams.addAll(data);
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((json) {
+ GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
+ return responseData.sumbitAbsenceTransactionList!;
+ }, url, postParams);
+ }
+
+ Future cancelHrTransaction(int pTransactionID) async {
+ String url = "${ApiConsts.erpRest}CANCEL_HR_TRANSACTION";
+ Map postParams = {"P_TRANSACTION_ID": pTransactionID};
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((json) {
+ GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
+ return responseData.cancelHRTransactionLIst!;
+ }, url, postParams);
+ }
+
+ Future startAbsenceApprovalProcess(int pTransactionID, String comments, int pSelectedResopID) async {
+ String url = "${ApiConsts.erpRest}START_ABSENCE_APPROVAL_PROCESS";
+ Map postParams = {
+ "P_TRANSACTION_ID": pTransactionID,
+ "P_SELECTED_RESP_ID": pSelectedResopID,
+ "P_COMMENTS": comments,
+ "P_MENU_TYPE": "E",
+ };
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((json) {
+ GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
+ return responseData.startAbsenceApprovalProccess!;
+ }, url, postParams);
+ }
+}
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..c5a78c6
--- /dev/null
+++ b/lib/api/my_team/my_team_api_client.dart
@@ -0,0 +1,163 @@
+
+
+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/my_team/get_subordinates_leaves_total_vacations_list_model.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);
+ }
+
+ Future> getSubordinatesLeavesList(String dateFrom, String dateTo) async {
+ String url = "${ApiConsts.erpRest}GET_SUBORDINATES_LEAVES_TOTAL_VACATIONS";
+ Map postParams = {
+ "P_DATE_FROM": dateFrom,
+ "P_DATE_TO": dateTo,
+ };
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((json) {
+ GenericResponseModel responseData = GenericResponseModel.fromJson(json);
+ return responseData.getSubordinatesLeavesTotalVacationsList ?? [];
+ }, 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