diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..af7c712
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,5 @@
+{
+ "cSpell.words": [
+ "MPLOYEEIMAGE"
+ ]
+}
\ No newline at end of file
diff --git a/assets/images/basic-details.svg b/assets/images/basic-details.svg
new file mode 100644
index 0000000..215f00b
--- /dev/null
+++ b/assets/images/basic-details.svg
@@ -0,0 +1,9 @@
+
diff --git a/assets/images/contact-details.svg b/assets/images/contact-details.svg
new file mode 100644
index 0000000..c9ac5a5
--- /dev/null
+++ b/assets/images/contact-details.svg
@@ -0,0 +1,5 @@
+
diff --git a/assets/images/family-members.svg b/assets/images/family-members.svg
new file mode 100644
index 0000000..eca7dd5
--- /dev/null
+++ b/assets/images/family-members.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/images/personal-info.svg b/assets/images/personal-info.svg
new file mode 100644
index 0000000..9daf5ad
--- /dev/null
+++ b/assets/images/personal-info.svg
@@ -0,0 +1,14 @@
+
diff --git a/assets/images/user-avatar.png b/assets/images/user-avatar.png
new file mode 100644
index 0000000..a16f4d5
Binary files /dev/null and b/assets/images/user-avatar.png differ
diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json
index e8892a8..9efc35d 100644
--- a/assets/langs/ar-SA.json
+++ b/assets/langs/ar-SA.json
@@ -52,6 +52,30 @@
"confirm": "تؤكد",
"passwordChangedSuccessfully": "تم تغيير الرقم السري بنجاح",
"itemsForSale": "سلع للبيع",
+ "attendanceDetails": "تفاصيل الحضور",
+ "order": "الطلبات",
+ "earlyOut": "الخروج مبكرا",
+ "shortage": "ساعات التقصير",
+ "excess": "Excess",
+ "lateIn": "القدوم المتاخر",
+ "approvedCheckOut": "وقت الخروج",
+ "approvedCheckIn": "وقت الدخول",
+ "actualCheckOut": "وقت الخروج",
+ "actualCheckIn": "وقت الدخول",
+ "present": "حضور",
+ "pres": "حضور",
+ "shiftTime": "وقت التناوب",
+ "absent": "غياب",
+ "attendance": "الحضور",
+ "scheduleDays": "ايام العمل",
+ "offDays": "ايام الراحه",
+ "nonAnalyzed": "لايوجد تحليل",
+ "shortageHour": "ساعات التقصير",
+ "stats": "الحاله",
+ "completed": "تم اكمال",
+ "msg": "Hello {} in the {} world ",
+ "msg_named": "{} are written in the {lang} language",
+ "clickMe": "Click me",
"doNotUseRecentPassword": "لا تستخدم كلمة مرور حديثة",
"atLeastOneLowercase": "حرف صغير واحد على الأقل",
"atLeastOneUppercase": "حرف كبير واحد على الأقل",
@@ -66,18 +90,172 @@
"whatsapp": "واتس اب",
"reject": "يرفض",
"approve": "يوافق",
- "msg": "Hello {} in the {} world ",
- "msg_named": "{} are written in the {lang} language",
- "clickMe": "Click me",
+ "cancel": "إلغاء",
+ "requestedItems": "العناصر المطلوبة",
+ "request": "طلب",
+ "actions": "أجراءات",
+ "delegate": "مندوب",
+ "request_info": "اطلب معلومات",
+ "attachments": "المرفقات",
+ "info": "معلومات",
+ "employeeNumber": "رقم الموظف",
+ "assignmentNumber": "رقم الواجب",
+ "employeeName": "اسم الموظف",
+ "scheduleDate": "تاريخ الجدول الزمني",
+ "shiftType": "نوع التحول",
+ "shift": "يحول",
+ "breakText": "استراحة",
+ "actualSwipeStart": "بدء التمرير الفعلي",
+ "actualSwipeEnd": "التمرير الفعلي للنهاية",
+ "approvedSwipeStart": "وافق انتقاد البدء",
+ "approvedSwipeStartReason": "تمت الموافقة على سبب بدء التمرير السريع",
+ "approvedSwipeEnd": "تمت الموافقة على تمرير النهاية",
+ "approvedSwipeEndReason": "الموافقة على سبب إنهاء التمرير",
+ "from": "من",
+ "to": "ل",
+ "sent": "أرسلت",
+ "closed": "مغلق",
+ "id": "هوية شخصية",
+ "responder": "المستجيب",
+ "jobTitle": "عنوان وظيفي",
+ "grade": "درجة",
+ "jobCategory": "تصنيف الوظيفة",
+ "category": "فئة",
+ "employeeEmailAddress": "عنوان البريد الإلكتروني للموظف",
+ "payrollBranch": "فرع الرواتب",
+ "yourChangeHasBeenSavedSuccessfully": "تم حفظ التغيير الخاص بك بنجاح",
+ "code": "شفرة",
+ "unit": "وحدة",
+ "quantity": "كمية",
+ "dateRequired": "التاريخ مطلوب",
+ "lineStatus": "حالة الخط",
+ "statusDate": "تاريخ الحالة",
+ "transactionType": "نوع المعاملة",
+ "operatingUnit": "وحدة التشغيل",
+ "organizationCode": "كود المنظمة",
+ "organization": "منظمة",
+ "fromSubInventory": "من الجرد الفرعي",
+ "fromLocator": "من محدد المواقع",
+ "toSubInventory": "إلى الجرد الفرعي",
+ "toLocator": "إلى محدد المواقع",
+ "shipToLocator": "شحن إلى محدد المواقع",
+ "itemHistory": "تاريخ العنصر",
+ "mfg": "مبدع",
+ "lineType": "نوع الخط",
+ "price": "السعر",
+ "lineAmount": "مبلغ الخط",
+ "lineDiscount": "خصم الخط٪",
+ "needByDate": "القادمة إلى الأمام",
+ "promisedDate": "التسجيل وعد",
+ "deliverToLocation": "تسليم إلى الموقع",
+ "requisitionNumber": "رقم الطلب",
+ "requester": "مقدم الطلب",
+ "quotationAnalysis": "تحليل الاقتباس",
+ "subject": "موضوعات",
+ "description": "وصف",
+ "supplier": "المورد",
+ "site": "موقع",
+ "buyer": "مشتر",
+ "preparer": "معد",
+ "creationDate": "تاريخ الإنشاء",
+ "shipToLocation": "الشحن الى الموقع",
+ "quotationNumber": "رقم الإقتباس",
+ "quotationDate": "تاريخ الاقتباس",
+ "paymentTerms": "شروط الدفع",
+ "currency": "عملة",
+ "grossAmount": "المبلغ الإجمالي",
+ "discountAmount": "مقدار الخصم",
+ "customDuty": "الرسوم الجمركية",
+ "shipHandle": "مقبض السفينة",
+ "otherCharges": "رسوم أخرى",
+ "totalPOAmountWithVAT": "إجمالي مبلغ الشراء مع ضريبة القيمة المضافة",
+ "totalPOAmountInWords": "إجمالي مبلغ أمر الشراء بالكلمات",
+ "requestNumber": "رقم الطلب",
+ "uom": "UOM",
+ "operatingCode": "كود التشغيل",
+ "poNumber": "PO عدد",
+ "revision": "مراجعة",
+ "quantityOrdered": "الكمية المطلوبة",
+ "quantityReceived": "الكمية المستلمة",
+ "bonusQuantity": "كمية المكافأة",
+ "purchasePrice": "سعر الشراء",
+ "discountPer": "خصم ٪",
+ "balanceQuantity": "كمية التوازن",
+ "netPrice": "السعر الصافي",
+ "closureStatus": "حالة الإغلاق",
+ "quotationNetPrice": "صافي سعر الاقتباس",
+ "quotationUOM": "اقتباس UOM",
+ "quotationQty": "اقتباس الكمية",
+ "itemCode": "رمز الصنف",
+ "vendorName": "اسم البائع",
+ "quotationMFGPartNumber": "رقم الجزء MFG الاقتباس",
+ "quotationDeliveryDate": "تاريخ تسليم عرض الأسعار",
+ "quotationBonusQuantity": "كمية مكافأة الاقتباس",
+ "quotationLineTotal": "مجموع خط الاقتباس",
+ "rfqUOM": "RFQ UOM",
+ "rfqQty": "RFQ الكمية",
+ "rfqNumber": "رقم RFQ",
"human": "بشري",
"resources": "موارد",
"details": "تفاصيل",
+ "noDataAvailable": "لا تتوافر بيانات",
+ "productName": "اسم المنتج",
+ "productDescription": "وصف المنتج",
+ "unitPrice": "سعر الوحده",
+ "manufacturerName": "اسم المصنع",
+ "manufacturerPartName": "اسم جزء الشركة المصنعة",
+ "supplierName": "اسم المورد",
+ "supplierContact": "الاتصال بالمورد",
+ "chargeToPatient": "المسؤول عن المريض",
+ "justification": "التبرير",
+ "itemDescription": "وصف السلعة",
+ "groupCode": "كود المجموعة",
+ "primaryUOM": "UOM الابتدائية",
+ "subgroupDescription": "وصف المجموعة الفرعية",
+ "subgroupCode": "رمز المجموعة الفرعية",
+ "groupDescription": "وصف المجموعة",
+ "templateName": "اسم القالب",
+ "itemCreationStatus": "حالة إنشاء العنصر",
+ "standardizationApprovalStatus": "حالة الموافقة على التقييس",
+ "standardizationApprovalRejectionReason": "سبب رفض الموافقة على التقييس",
+ "analyzedBy": "تحليل بواسطة",
+ "approvedDate": "تاريخ الموافقة",
+ "itemType": "نوع العنصر",
+ "relatedTo": "متعلق ب",
+ "requestDate": "تاريخ الطلب",
+ "analyzedDate": "تاريخ التحليل",
+ "urgent": "العاجلة",
+ "requestDetails": "طلب تفاصيل",
+ "approvalLevel": "مستوى الموافقة",
+ "requesterDetails": "تفاصيل مقدم الطلب",
+ "myAttendance": "حضوري",
+ "workOnBreak": "العمل على استراحة",
+ "next": "التالي",
+ "completingYear": "نحن نقدر لك لاستكمال خدمة",
+ "year": "سنة",
+ "month": "شهر",
+ "day": "يوم",
+ "address" : "العنوان",
+ "phoneNumber": "رقم الجوال",
+ "businessGroup": "مجموعة العمل",
+ "Payroll": "الراتب",
+ "civilIdentityNumber": "رقم الهويه",
+ "dateOfBirth" : "تاريخ الميلاد",
+ "maritalStatus ": "الحالة الاجتماعية",
+ "fullName": "الأسم الكامل",
+ "remove": "حذف",
"profile": {
"reset_password": {
"label": "Reset Password",
"username": "Username",
"password": "password"
- }
+ },
+ "profileCompletionPer": "استكمال الملف الشخصي",
+ "completeProfile": "الملف الشخصي الكامل",
+ "personalInformation": "معلومات شخصية",
+ "basicDetails": "تفاصيل أساسية",
+ "contactDetails": "بيانات التواصل",
+ "familyDetails": "تفاصيل عائلية"
},
"clicked": {
"zero": "You clicked {} times!",
diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json
index f5b9b44..9097f9e 100644
--- a/assets/langs/en-US.json
+++ b/assets/langs/en-US.json
@@ -52,6 +52,27 @@
"confirm": "Confirm",
"passwordChangedSuccessfully": "Password changed successfully",
"itemsForSale": "Items for Sale",
+ "attendanceDetails": "Attendance Details",
+ "order": "order",
+ "earlyOut": "Early Out",
+ "shortage": "Shortage",
+ "excess": "Excess",
+ "lateIn": "Late In",
+ "approvedCheckOut": "Approved Check Out",
+ "approvedCheckIn": "Approved Check In",
+ "actualCheckOut": "Actual Check Out",
+ "actualCheckIn": "Actual Check In",
+ "present": "PRESENT 11",
+ "pres": "present",
+ "shiftTime": "Shift Time",
+ "absent": "ABSENT 10",
+ "attendance": "Attendance",
+ "scheduleDays": "Schedule\nDays",
+ "offDays": "Off\nDays",
+ "nonAnalyzed": "Non\nAnalyzed",
+ "shortageHour": "Shortage\nHour",
+ "stats": "Stats",
+ "completed": "Completed",
"doNotUseRecentPassword": "Do not use recent password",
"atLeastOneLowercase": "At least one lowercase",
"atLeastOneUppercase": "At least one uppercase",
@@ -66,18 +87,176 @@
"whatsapp": "Whatsapp",
"reject": "Reject",
"approve": "Approve",
+ "cancel": "Cancel",
+ "requestedItems": "Requested Items",
+ "request": "Request",
+ "actions": "Actions",
+ "delegate": "Delegate",
+ "request_info": "Request Info",
+ "attachments": "Attachments",
+ "info": "Info.",
+ "employeeNumber": "Employee Number",
+ "assignmentNumber": "Assignment Number",
+ "employeeName": "Employee Name",
+ "scheduleDate": "Schedule Date",
+ "shiftType": "Shift Type",
+ "shift": "Shift",
+ "breakText": "Break",
+ "actualSwipeStart": "Actual Swipe Start",
+ "actualSwipeEnd": "Actual Swipe End",
+ "approvedSwipeStart": "Approved Swipe Start",
+ "approvedSwipeStartReason": "Approved Swipe Start Reason",
+ "approvedSwipeEnd": "Approved Swipe End",
+ "approvedSwipeEndReason": "Approved Swipe End Reason",
+ "from": "From",
+ "to": "To",
+ "sent": "Sent",
+ "closed": "Closed",
+ "id": "ID",
+ "responder": "Responder",
+ "jobTitle": "Job Title",
+ "grade": "Grade",
+ "jobCategory": "Job Category",
+ "category": "Category",
+ "employeeEmailAddress": "Employee Email Address",
+ "payrollBranch": "Payroll Branch",
+ "yourChangeHasBeenSavedSuccessfully": "Your change has been saved successfully",
+ "code": "Code",
+ "unit": "Unit",
+ "quantity": "Quantity",
+ "dateRequired": "Date Required",
+ "lineStatus": "Line Status",
+ "statusDate": "Status Date",
+ "transactionType": "Transaction Type",
+ "operatingUnit": "Operating Unit",
+ "organizationCode": "Organization Code",
+ "organization": "Organization",
+ "fromSubInventory": "From Sub Inventory",
+ "fromLocator": "From Locator",
+ "toSubInventory": "To Sub Inventory",
+ "toLocator": "To Locator",
+ "shipToLocator": "Ship To Locator",
+ "itemHistory": "Item History",
+ "mfg": "MFG",
+ "lineType": "Line Type",
+ "price": "Price",
+ "lineAmount": "Line Amount",
+ "lineDiscount": "Line Discount %",
+ "needByDate": "Need By Date",
+ "promisedDate": "Promised Date",
+ "deliverToLocation": "Deliver To Location",
+ "requisitionNumber": "Requisition Number",
+ "requester": "Requester",
+ "subject": "Subject",
+ "quotationAnalysis": "Quotation Analysis",
+ "description": "Description",
+ "supplier": "Supplier",
+ "site": "Site",
+ "buyer": "Buyer",
+ "preparer": "Preparer",
+ "creationDate": "Creation Date",
+ "shipToLocation": "Ship To Location",
+ "quotationNumber": "Quotation Number",
+ "quotationDate": "Quotation Date",
+ "paymentTerms": "Payment Terms",
+ "currency": "Currency",
+ "grossAmount": "Gross Amount",
+ "discountAmount": "Discount Amount",
+ "customDuty": "Custom Duty",
+ "shipHandle": "Ship Handle",
+ "otherCharges": "Other Charges",
+ "totalPOAmountWithVAT": "Total PO Amount With VAT",
+ "totalPOAmountInWords": "Total PO Amount In Words",
+ "requestNumber": "Request Number",
+ "uom": "UOM",
+ "operatingCode": "Operating Code",
+ "poNumber": "PO Number",
+ "revision": "Revision",
+ "quantityOrdered": "Quantity Ordered",
+ "quantityReceived": "Quantity Received",
+ "bonusQuantity": "Bonus Quantity",
+ "purchasePrice": "Purchase Price",
+ "discountPer": "Discount %",
+ "balanceQuantity": "Balance Quantity",
+ "netPrice": "Net Price",
+ "closureStatus": "Closure Status",
+ "quotationNetPrice": "Quotation Net Price",
+ "quotationUOM": "Quotation UOM",
+ "quotationQty": "Quotation Qty",
+ "itemCode": "item Code",
+ "vendorName": "Vendor Name",
+ "quotationMFGPartNumber": "Quotation MFG Part Number",
+ "quotationDeliveryDate": "Quotation Delivery Date",
+ "quotationBonusQuantity": "Quotation Bonus Quantity",
+ "quotationLineTotal": "Quotation Line Total",
+ "rfqUOM": "RFQ UOM",
+ "rfqQty": "RFQ Qty",
+ "rfqNumber": "RFQ Number",
"msg": "Hello {} in the {} world ",
"msg_named": "{} are written in the {lang} language",
"clickMe": "Click me",
"human": "Human",
"resources": "Resources",
"details": "Details",
+ "noDataAvailable": "No Data Available",
+ "productName": "Product Name",
+ "productDescription": "Product Description",
+ "unitPrice": "Unit Price",
+ "manufacturerName": "Manufacturer Name",
+ "manufacturerPartName": "Manufacturer Part Name",
+ "supplierName": "Supplier Name",
+ "supplierContact": "Supplier Contact",
+ "chargeToPatient": "Charge To Patient",
+ "justification": "Justification",
+ "itemDescription": "Item Description",
+ "groupCode": "Group Code",
+ "primaryUOM": "Primary UOM",
+ "subgroupDescription": "Subgroup Description",
+ "subgroupCode": "Subgroup Code",
+ "groupDescription": "Group Description",
+ "templateName": "Template Name",
+ "itemCreationStatus": "Item Creation Status",
+ "standardizationApprovalStatus": "Standardization Approval Status",
+ "standardizationApprovalRejectionReason": "Standardization Approval Rejection Reason",
+ "analyzedBy": "Analyzed By",
+ "approvedDate": "Approved Date",
+ "itemType": "Item Type",
+ "relatedTo": "Related To",
+ "requestDate": "Request Date",
+ "analyzedDate": "Analyzed Date",
+ "approvedCheckIn": "Approved Check In",
+ "urgent": "Urgent",
+ "requestDetails": "Request Details",
+ "approvalLevel": "Approval Level",
+ "requesterDetails": "Requester Details",
+ "myAttendance": "My Attendance",
+ "workOnBreak": "Work On Break",
+ "next": "Next",
+ "year": "Year",
+ "month": "Month",
+ "day": "Day",
+ "completingYear": "We appreciate you for completing the service of",
+ "address": "Address",
+ "phoneNumber": "Phone Number",
+ "businessGroup": "Business",
+ "Payroll": "Payroll",
+ "civilIdentityNumber": "Civil Identity Number",
+ "dateOfBirth": "Date of Birth",
+ "maritalStatus ": "Marital Status ",
+ "fullName": "Full Name",
+ "remove": "Remove",
"profile": {
"reset_password": {
"label": "Reset Password",
"username": "Username",
"password": "password"
- }
+ },
+ "profileCompletionPer": "Profile Completion",
+ "completeProfile": "Complete Profile",
+ "personalInformation": "Personal Information",
+ "basicDetails": "Basic Details",
+ "contactDetails": "Contact Details",
+ "familyDetails": "Family Members"
},
"clicked": {
"zero": "You clicked {} times!",
diff --git a/lib/api/api_client.dart b/lib/api/api_client.dart
index 17eac0d..3263bf4 100644
--- a/lib/api/api_client.dart
+++ b/lib/api/api_client.dart
@@ -5,6 +5,7 @@ import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart';
import 'package:http/io_client.dart';
+import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/exceptions/api_exception.dart';
import '../main.dart';
@@ -81,6 +82,9 @@ class ApiClient {
logger.i("res: " + response.body);
}
var jsonData = jsonDecode(response.body);
+ if (jsonData["IsAuthenticated"] != null) {
+ AppState().setIsAuthenticated = jsonData["IsAuthenticated"];
+ }
if (jsonData["ErrorMessage"] == null) {
return factoryConstructor(jsonData);
} else {
@@ -237,4 +241,4 @@ class ApiClient {
}
Future _post(url, {Map? headers, body, Encoding? encoding}) => _withClient((client) => client.post(url, headers: headers, body: body, encoding: encoding));
- }
+}
diff --git a/lib/api/eit_api_client.dart b/lib/api/eit_api_client.dart
new file mode 100644
index 0000000..e3f78bf
--- /dev/null
+++ b/lib/api/eit_api_client.dart
@@ -0,0 +1,31 @@
+import 'dart:async';
+
+import 'package:mohem_flutter_app/app_state/app_state.dart';
+import 'package:mohem_flutter_app/classes/consts.dart';
+import 'package:mohem_flutter_app/models/basic_member_information_model.dart';
+import 'package:mohem_flutter_app/models/check_mobile_app_version_model.dart';
+import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_model.dart';
+import 'package:mohem_flutter_app/models/dashboard/itg_forms_model.dart';
+import 'package:mohem_flutter_app/models/eit/get_eit_transaction_model.dart';
+import 'package:mohem_flutter_app/models/generic_response_model.dart';
+import 'package:mohem_flutter_app/models/member_login_list_model.dart';
+
+import 'api_client.dart';
+
+class EITApiClient {
+ static final EITApiClient _instance = EITApiClient._internal();
+
+ EITApiClient._internal();
+
+ factory EITApiClient() => _instance;
+
+ Future?> getEITTransactions(String functionName) async {
+ String url = "${ApiConsts.erpRest}GET_EIT_TRANSACTIONS";
+ Map postParams = {'P_FUNCTION_NAME': functionName, "P_MENU_TYPE": "E", "P_PAGE_LIMIT": 50, "P_PAGE_NUM": 1};
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((json) {
+ List? responseData = GET_EIT_Transactions_Model.fromJson(json['GetEITTransactionList'][0]).collectionTransaction;
+ return responseData;
+ }, url, postParams);
+ }
+}
diff --git a/lib/api/login_api_client.dart b/lib/api/login_api_client.dart
index 070fa27..2761ebe 100644
--- a/lib/api/login_api_client.dart
+++ b/lib/api/login_api_client.dart
@@ -79,7 +79,7 @@ class LoginApiClient {
Future checkActivationCode(bool isDeviceNFC, String? mobileNumber, String activationCode, String? pUserName) async {
String url = "${ApiConsts.erpRest}CheckActivationCode";
- Map postParams = {"isDeviceNFC": isDeviceNFC, "MobileNumber": mobileNumber, "activationCode": activationCode, "P_USER_NAME": pUserName};
+ Map postParams = {"IsDeviceNFC": isDeviceNFC, "MobileNumber": mobileNumber, "activationCode": activationCode, "P_USER_NAME": pUserName};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
diff --git a/lib/api/monthlyAttendance_api_client.dart b/lib/api/monthlyAttendance_api_client.dart
new file mode 100644
index 0000000..4f6aca7
--- /dev/null
+++ b/lib/api/monthlyAttendance_api_client.dart
@@ -0,0 +1,72 @@
+
+import 'dart:async';
+
+import 'package:mohem_flutter_app/app_state/app_state.dart';
+import 'package:mohem_flutter_app/classes/consts.dart';
+import 'package:mohem_flutter_app/models/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_mobile_login_info_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 'api_client.dart';
+
+class MonthlyAttendanceApiClient {
+ static final MonthlyAttendanceApiClient _instance = MonthlyAttendanceApiClient._internal();
+
+ MonthlyAttendanceApiClient._internal();
+
+ factory MonthlyAttendanceApiClient() => _instance;
+
+
+ Future getTimeCardSummary(String month, int year) async {
+ String url = "${ApiConsts.erpRest}GET_TIME_CARD_SUMMARY";
+ Map postParams = {
+ "P_MENU_TYPE": "E",
+ "P_SELECTED_RESP_ID": -999,
+ "SearchMonth": month,
+ "SearchYear": year,
+ };
+ postParams.addAll(AppState().postParamsJson);
+ 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) async {
+ String url = "${ApiConsts.erpRest}GET_DAY_HOURS_TYPE_DETAILS";
+ Map postParams = {
+ "P_MENU_TYPE": "E",
+ "P_PAGE_LIMIT": 100,
+ "P_PAGE_NUM": 1,
+ "P_SELECTED_RESP_ID": -999,
+ "SearchMonth": month,
+ "SearchYear": year,
+ };
+ postParams.addAll(AppState().postParamsJson);
+ // postParams["DeviceToken"] = deviceToken;
+ // postParams["DeviceType"] = deviceType;
+ return await ApiClient().postJsonForObject((json) {
+ GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
+ print("Response Data______");
+ print(responseData.getDayHoursTypeDetailsList!.length);
+ return responseData.getDayHoursTypeDetailsList ?? [];
+ }, url, postParams);
+ }
+
+
+ Future getScheduleShiftsDetails(int pRTPID) async {
+ String url = "${ApiConsts.erpRest}GET_SCHEDULE_SHIFTS_DETAILS";
+ Map postParams = {
+ "P_PAGE_LIMIT": 10,
+ "P_PAGE_NUM": 1,
+ "P_RTP_ID": pRTPID,
+ };
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((json) {
+ GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
+ return (responseData.getScheduleShiftsDetailsList?.length ?? 0) > 0 ? responseData.getScheduleShiftsDetailsList!.first : null;
+ }, url, postParams);
+ }
+
+}
\ No newline at end of file
diff --git a/lib/api/my_attendance_api_client.dart b/lib/api/my_attendance_api_client.dart
new file mode 100644
index 0000000..f49aa1e
--- /dev/null
+++ b/lib/api/my_attendance_api_client.dart
@@ -0,0 +1,57 @@
+import 'dart:async';
+
+import 'package:mohem_flutter_app/app_state/app_state.dart';
+import 'package:mohem_flutter_app/classes/consts.dart';
+import 'package:mohem_flutter_app/models/generic_response_model.dart';
+import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart';
+import 'package:mohem_flutter_app/models/get_eit_transaction_list_model.dart';
+
+import 'api_client.dart';
+
+class MyAttendanceApiClient {
+ static final MyAttendanceApiClient _instance = MyAttendanceApiClient._internal();
+
+ MyAttendanceApiClient._internal();
+
+ factory MyAttendanceApiClient() => _instance;
+
+ Future?> getEitTransaction(String pFunctionName) async {
+ String url = "${ApiConsts.erpRest}GET_EIT_TRANSACTIONS";
+ Map postParams = {"P_PAGE_LIMIT": 50, "P_PAGE_NUM": 1, "P_SELECTED_RESP_ID": -999, "P_MENU_TYPE": "E", "P_FUNCTION_NAME": pFunctionName};
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((json) {
+ GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
+ return responseData.getEITTransactionList ?? [];
+ }, url, postParams);
+ }
+
+ Future getEitDffStructure(String pFunctionName) async {
+ String url = "${ApiConsts.erpRest}GET_EIT_DFF_STRUCTURE";
+ Map postParams = {"P_SELECTED_RESP_ID": -999, "P_MENU_TYPE": "E", "P_FUNCTION_NAME": pFunctionName};
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((json) {
+ GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
+ return responseData;
+ }, url, postParams);
+ }
+
+ Future getValueSetValues(String pSegmentName, String pDescFlexContextCode, String pDescFlexName, List