From 384aa8d9b4d49789a87dab33e455be1b80246d13 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Sun, 3 Apr 2022 16:24:33 +0300 Subject: [PATCH] wokrlist api's added & improvements --- assets/langs/ar-SA.json | 31 ++ assets/langs/en-US.json | 31 ++ lib/api/worklist/worklist_api_client.dart | 122 ++++- lib/classes/colors.dart | 3 +- lib/classes/date_uitl.dart | 4 + lib/extensions/widget_extensions.dart | 28 ++ lib/generated/codegen_loader.g.dart | 462 +++++++++++------- lib/generated/locale_keys.g.dart | 38 +- lib/models/generic_response_model.dart | 178 +++++-- ...llection_notification_body_list_model.dart | 97 ++++ lib/models/get_action_history_list_model.dart | 76 +++ .../get_basic_det_ntf_body_list_model.dart | 24 + .../get_mo_notification_body_list_model.dart | 104 ++++ .../get_notification_buttons_list_model.dart | 25 + ...stamp_ms_notification_body_list_model.dart | 132 +++++ ...ion_get_respond_attributes_list_model.dart | 24 + lib/models/subordinates_on_leaves_model.dart | 68 +++ lib/ui/login/login_screen.dart | 2 +- .../fragments/actions_fragment.dart | 149 +++--- .../fragments/detail_fragment.dart | 69 +++ .../fragments/info_fragments.dart | 109 +++-- .../fragments/request_fragment.dart | 5 +- .../missing_swipe/missing_swipe_screen.dart | 265 +++++++--- lib/ui/work_list/work_list_screen.dart | 4 +- lib/widgets/circular_avatar.dart | 26 +- 25 files changed, 1642 insertions(+), 434 deletions(-) create mode 100644 lib/models/get_absence_collection_notification_body_list_model.dart create mode 100644 lib/models/get_action_history_list_model.dart create mode 100644 lib/models/get_basic_det_ntf_body_list_model.dart create mode 100644 lib/models/get_mo_notification_body_list_model.dart create mode 100644 lib/models/get_notification_buttons_list_model.dart create mode 100644 lib/models/get_stamp_ms_notification_body_list_model.dart create mode 100644 lib/models/notification_get_respond_attributes_list_model.dart create mode 100644 lib/models/subordinates_on_leaves_model.dart create mode 100644 lib/ui/work_list/missing_swipe/fragments/detail_fragment.dart diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index e8892a8..38767b7 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -66,6 +66,37 @@ "whatsapp": "واتس اب", "reject": "يرفض", "approve": "يوافق", + "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": "فرع الرواتب", "msg": "Hello {} in the {} world ", "msg_named": "{} are written in the {lang} language", "clickMe": "Click me", diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index f5b9b44..fecbf3d 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -66,6 +66,37 @@ "whatsapp": "Whatsapp", "reject": "Reject", "approve": "Approve", + "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", "msg": "Hello {} in the {} world ", "msg_named": "{} are written in the {lang} language", "clickMe": "Click me", diff --git a/lib/api/worklist/worklist_api_client.dart b/lib/api/worklist/worklist_api_client.dart index a473ba7..48fd13b 100644 --- a/lib/api/worklist/worklist_api_client.dart +++ b/lib/api/worklist/worklist_api_client.dart @@ -5,6 +5,13 @@ 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/itg_forms_model.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart'; +import 'package:mohem_flutter_app/models/get_absence_collection_notification_body_list_model.dart'; +import 'package:mohem_flutter_app/models/get_action_history_list_model.dart'; +import 'package:mohem_flutter_app/models/get_notification_buttons_list_model.dart'; +import 'package:mohem_flutter_app/models/get_stamp_ms_notification_body_list_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/subordinates_on_leaves_model.dart'; import 'package:mohem_flutter_app/models/worklist_response_model.dart'; class WorkListApiClient { @@ -29,7 +36,7 @@ class WorkListApiClient { }, url, postParams); } - Future GetITGTaskCountRequestType() async { + Future getITGTaskCountRequestType() async { String url = "${ApiConsts.cocRest}ITGGetTaskCountRequestType"; Map postParams = {}; postParams.addAll(AppState().postParamsJson); @@ -38,4 +45,117 @@ class WorkListApiClient { return responseData; }, url, postParams); } + + Future getSubordinatesLeaves(String fromDate, String toDate) async { + String url = "${ApiConsts.erpRest}GET_SUBORDINATES_LEAVES"; + Map postParams = {"P_DATE_FROM": "/Date(1639861200000+0300)/", "P_DATE_TO": "/Date(1640120400000+0300)/"}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData; + }, url, postParams); + } + + Future> getAttachments(int pNotificationID) async { + String url = "${ApiConsts.erpRest}GET_ATTACHMENTS"; + Map postParams = {"P_NOTIFICATION_ID": pNotificationID}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData.getAttachementList ?? []; + }, url, postParams); + } + + Future> getActionHistory(int pNotificationID) async { + String url = "${ApiConsts.erpRest}GET_ACTION_HISTORY"; + Map postParams = { + "P_NOTIFICATION_ID": pNotificationID, + "P_PAGE_LIMIT": 100, + "P_PAGE_NUM": 1, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData.getActionHistoryList ?? []; + }, url, postParams); + } + + Future> getNotificationButtons(int pNotificationID) async { + String url = "${ApiConsts.erpRest}GET_NOTIFICATION_BUTTONS"; + Map postParams = {"P_NOTIFICATION_ID": pNotificationID}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData.getNotificationButtonsList ?? []; + }, url, postParams); + } + + Future> notificationGetRespondAttributes(int pNotificationID) async { + String url = "${ApiConsts.erpRest}NOTIFICATION_GET_RESPOND_ATTRIBUTES"; + Map postParams = {"P_NOTIFICATION_ID": pNotificationID}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData.notificationGetRespondAttributesList ?? []; + }, url, postParams); + } + + Future getBasicDetNTFBody(int pNotificationID, int pTransactionID) async { + String url = "${ApiConsts.erpRest}GET_BASIC_DET_NTF_BODY"; + Map postParams = { + "P_NOTIFICATION_ID": pNotificationID, + "P_TRANSACTION_ID": pTransactionID, + "P_PAGE_LIMIT": 100, + "P_PAGE_NUM": 1, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData; + }, url, postParams); + } + + Future getUserInformation(int pSelectedResopID) async { + String url = "${ApiConsts.erpRest}Get_UserInformation"; + Map postParams = { + "P_SELECTED_RESP_ID": pSelectedResopID, + "P_PAGE_LIMIT": 100, + "P_PAGE_NUM": 1, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData.memberInformationList![0]; + }, url, postParams); + } + + Future> getStampMsNotificationBody(int pNotificationID, int pTransactionID) async { + String url = "${ApiConsts.erpRest}GET_STAMP_MS_NOTIFICATION_BODY"; + Map postParams = { + "P_NOTIFICATION_ID": pNotificationID, + "P_TRANSACTION_ID": pTransactionID, + "P_PAGE_LIMIT": 100, + "P_PAGE_NUM": 1, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData.getStampMsNotificationBodyList ?? []; + }, url, postParams); + } + + Future> getAbsenceNotificationBody(int pNotificationID, int pTransactionID) async { + String url = "${ApiConsts.erpRest}GET_ABSENCE_NOTIFICATION_BODY"; + Map postParams = { + "P_NOTIFICATION_ID": pNotificationID, + "P_TRANSACTION_ID": pTransactionID, + "P_PAGE_LIMIT": 100, + "P_PAGE_NUM": 1, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData.getAbsenceCollectionNotificationBodyList ?? []; + }, url, postParams); + } } diff --git a/lib/classes/colors.dart b/lib/classes/colors.dart index 0d80b05..6036534 100644 --- a/lib/classes/colors.dart +++ b/lib/classes/colors.dart @@ -6,10 +6,11 @@ class MyColors { 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 gradiantEndColor = Color(0xff259db7); static const Color textMixColor = Color(0xff2BB8A6); static const Color backgroundColor = Color(0xffF8F8F8); static const Color grey57Color = Color(0xff575757); + static const Color grey67Color = Color(0xff676767); static const Color grey77Color = Color(0xff777777); static const Color grey70Color = Color(0xff707070); static const Color greyACColor = Color(0xffACACAC); diff --git a/lib/classes/date_uitl.dart b/lib/classes/date_uitl.dart index d0f4b1f..c350cb6 100644 --- a/lib/classes/date_uitl.dart +++ b/lib/classes/date_uitl.dart @@ -23,6 +23,10 @@ class DateUtil { return DateFormat("MM/dd/yyyy hh:mm:ss").parse(date); } + static DateTime convertSimpleStringDateToDateddMMyyyy(String date) { + return DateFormat("MM/dd/yyyy hh:mm:ss").parse(date); + } + static DateTime convertStringToDateNoTimeZone(String date) { // /Date(1585774800000+0300)/ if (date != null) { diff --git a/lib/extensions/widget_extensions.dart b/lib/extensions/widget_extensions.dart index 5169f19..f511422 100644 --- a/lib/extensions/widget_extensions.dart +++ b/lib/extensions/widget_extensions.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:shimmer/shimmer.dart'; extension WidgetExtensions on Widget { @@ -36,4 +38,30 @@ extension WidgetExtensions on Widget { switchOutCurve: Curves.linearToEaseOut, child: this, ); + + Widget objectContainerView({String title = ""}) { + return Container( + padding: const EdgeInsets.only(top: 15, bottom: 15, left: 14, right: 14), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(15), + boxShadow: [ + BoxShadow( + color: const Color(0xff000000).withOpacity(.05), + blurRadius: 26, + offset: const Offset(0, -3), + ), + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + if (title.isNotEmpty) title.toText16(), + if (title.isNotEmpty) 12.height, + this, + ], + ), + ); + } } diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index f4a2a6c..a555432 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -6,193 +6,289 @@ import 'dart:ui'; import 'package:easy_localization/easy_localization.dart' show AssetLoader; -class CodegenLoader extends AssetLoader { +class CodegenLoader extends AssetLoader{ const CodegenLoader(); @override - Future> load(String fullPath, Locale locale) { + Future> load(String fullPath, Locale locale ) { return Future.value(mapLocales[locale.toString()]); } - static const Map ar_SA = { - "mohemm": "Mohemm", - "english": "English", - "arabic": "Arabic", - "login": "تسجيل الدخول", - "pleaseEnterLoginDetails": "الرجاء إدخال التفاصيل أدناه لتسجيل الدخول", - "username": "اسم المستخدم", - "password": "كلمة المرور", - "welcomeBack": "مرحبا بعودتك", - "wouldYouLikeToLoginWithCurrentUsername": "هل ترغب في تسجيل الدخول باسم المستخدم الحالي؟", - "lastLoginDetails": "تفاصيل تسجيل الدخول الأخير:", - "verificationType": "نوع التحقق:", - "pleaseVerify": "ارجوك تحقق", - "verifyThroughFace": "تحقق من خلال الوجه", - "verifyThroughFingerprint": "تحقق من خلال بصمة الإصبع", - "verifyThroughSMS": "تحقق من خلال الرسائل القصيرة", - "verifyThroughWhatsapp": "تحقق من خلال Whatsapp", - "useAnotherAccount": "استخدم حسابا آخر", - "pleaseEnterTheVerificationCodeSentTo": "الرجاء إدخال رمز التحقق المرسل إلى ", - "theVerificationCodeWillExpireIn": "ستنتهي صلاحية رمز التحقق في ", - "goodMorning": "صباح الخير", - "markAttendance": "علامة الحضور", - "timeLeftToday": "الوقت المتبقي اليوم", - "checkIn": "تحقق في", - "workList": "قائمة العمل", - "leaveBalance": "رصيد الاجازات", - "missingSwipes": "الضربات الشديدة في عداد المفقودين", - "ticketBalance": "رصيد التذكرة", - "other": "آخر", - "services": "خدمات", - "viewAllServices": "عرض جميع الخدمات", - "monthlyAttendance": "الحضور الشهري", - "workFromHome": "العمل من المنزل", - "ticketRequest": "طلب تذكرة", - "viewAllOffers": "مشاهدة جميع العروض", - "offers": "عروض & ", - "discounts": "الخصومات", - "newString": "جديد", - "setTheNewPassword": "قم بتعيين كلمة المرور الجديدة", - "typeYourNewPasswordBelow": "اكتب كلمة المرور الجديدة أدناه", - "confirmPassword": "تأكيد كلمة المرور", - "update": "تحديث", - "title": "عنوان", - "home": "مسكن", - "mySalary": "راتبي", - "createRequest": "إنشاء طلب", - "forgotPassword": "هل نسيت كلمة السر", - "employeeId": "هوية الموظف", - "loginCodeWillSentToMobileNumber": "الرجاء إدخال معرف الموظف الخاص بك ، وسيتم إرسال رمز تسجيل الدخول إلى رقم هاتفك المحمول", - "changePassword": "تغيير كلمة المرور", - "ok": "موافق", - "confirm": "تؤكد", - "passwordChangedSuccessfully": "تم تغيير الرقم السري بنجاح", - "itemsForSale": "سلع للبيع", - "doNotUseRecentPassword": "لا تستخدم كلمة مرور حديثة", - "atLeastOneLowercase": "حرف صغير واحد على الأقل", - "atLeastOneUppercase": "حرف كبير واحد على الأقل", - "atLeastOneNumeric": "رقم واحد على الأقل", - "minimum8Characters": "8 أحرف على الأقل", - "doNotAddRepeatingLetters": "لا تقم بإضافة أحرف متكررة", - "itShouldContainSpecialCharacter": "يجب أن يحتوي على طابع خاص", - "confirmPasswordMustMatch": "يجب أن يتطابق تأكيد كلمة المرور", - "sms": "رسالة قصيرة", - "fingerPrint": "بصمة", - "face": "التعرف على الوجه", - "whatsapp": "واتس اب", - "msg": "Hello {} in the {} world ", - "msg_named": "{} are written in the {lang} language", - "clickMe": "Click me", - "human": "Human", - "resources": "Resources", - "profile": { - "reset_password": {"label": "Reset Password", "username": "Username", "password": "password"} - }, - "clicked": { - "zero": "You clicked {} times!", - "one": "You clicked {} time!", - "two": "You clicked {} times!", - "few": "You clicked {} times!", - "many": "You clicked {} times!", - "other": "You clicked {} times!" - }, - "amount": {"zero": "Your amount : {} ", "one": "Your amount : {} ", "two": "Your amount : {} ", "few": "Your amount : {} ", "many": "Your amount : {} ", "other": "Your amount : {} "}, - "gender": { - "male": "Hi man ;) ", - "female": "Hello girl :)", - "with_arg": {"male": "Hi man ;) {}", "female": "Hello girl :) {}"} - }, - "reset_locale": "Reset Language" - }; - static const Map en_US = { - "mohemm": "Mohemm", - "english": "English", - "arabic": "Arabic", - "login": "Login", - "pleaseEnterLoginDetails": "Please enter the detail below to login", - "username": "Username", - "password": "Password", - "welcomeBack": "Welcome back", - "wouldYouLikeToLoginWithCurrentUsername": "Would you like to login with current Username?", - "lastLoginDetails": "Last Login Details:", - "verificationType": "Verification Type:", - "pleaseVerify": "Please Verify", - "verifyThroughFace": "Verify Through Face", - "verifyThroughFingerprint": "Verify Through Fingerprint", - "verifyThroughSMS": "Verify Through SMS", - "verifyThroughWhatsapp": "Verify Through Whatsapp", - "useAnotherAccount": "Use Another Account", - "pleaseEnterTheVerificationCodeSentTo": "Please enter the verification code sent to ", - "theVerificationCodeWillExpireIn": "The verification code will expire in ", - "goodMorning": "Good Morning", - "markAttendance": "Mark Attendance", - "timeLeftToday": "Time Left Today", - "checkIn": "Check In", - "workList": "Work List", - "leaveBalance": "Leave Balance", - "missingSwipes": "Missing Swipes", - "ticketBalance": "Ticket Balance", - "other": "Other", - "services": "Services", - "viewAllServices": "View All Services", - "monthlyAttendance": "Monthly Attendance", - "workFromHome": "Work From Home", - "ticketRequest": "Ticket Request", - "viewAllOffers": "View All Offers", - "offers": "Offers & ", - "discounts": "Discounts", - "newString": "New", - "setTheNewPassword": "Set the new password", - "typeYourNewPasswordBelow": "Type your new password below", - "confirmPassword": "Confirm Password", - "update": "Update", - "title": "Title", - "home": "Home", - "mySalary": "My Salary", - "createRequest": "Create Request", - "forgotPassword": "Forgot Password", - "employeeId": "Employee ID", - "loginCodeWillSentToMobileNumber": "Please Enter your Employee ID, A login code will be sent to your mobile number", - "changePassword": "Change Password", - "ok": "OK", - "confirm": "Confirm", - "passwordChangedSuccessfully": "Password changed successfully", - "itemsForSale": "Items for Sale", - "doNotUseRecentPassword": "Do not use recent password", - "atLeastOneLowercase": "At least one lowercase", - "atLeastOneUppercase": "At least one uppercase", - "atLeastOneNumeric": "At least one numeric", - "minimum8Characters": "Minimum 8 characters", - "doNotAddRepeatingLetters": "Do not add repeating letters", - "itShouldContainSpecialCharacter": "It should contain special character", - "confirmPasswordMustMatch": "Confirm password must match", - "sms": "SMS", - "fingerPrint": "Fingerprint", - "face": "Face", - "whatsapp": "Whatsapp", - "msg": "Hello {} in the {} world ", - "msg_named": "{} are written in the {lang} language", - "clickMe": "Click me", - "human": "Human", - "resources": "Resources", - "profile": { - "reset_password": {"label": "Reset Password", "username": "Username", "password": "password"} - }, - "clicked": { - "zero": "You clicked {} times!", - "one": "You clicked {} time!", - "two": "You clicked {} times!", - "few": "You clicked {} times!", - "many": "You clicked {} times!", - "other": "You clicked {} times!" - }, - "amount": {"zero": "Your amount : {} ", "one": "Your amount : {} ", "two": "Your amount : {} ", "few": "Your amount : {} ", "many": "Your amount : {} ", "other": "Your amount : {} "}, - "gender": { - "male": "Hi man ;) ", - "female": "Hello girl :)", - "with_arg": {"male": "Hi man ;) {}", "female": "Hello girl :) {}"} - }, - "reset_locale": "Reset Language" - }; - static const Map> mapLocales = {"ar_SA": ar_SA, "en_US": en_US}; + static const Map ar_SA = { + "mohemm": "Mohemm", + "english": "English", + "arabic": "Arabic", + "login": "تسجيل الدخول", + "pleaseEnterLoginDetails": "الرجاء إدخال التفاصيل أدناه لتسجيل الدخول", + "username": "اسم المستخدم", + "password": "كلمة المرور", + "welcomeBack": "مرحبا بعودتك", + "wouldYouLikeToLoginWithCurrentUsername": "هل ترغب في تسجيل الدخول باسم المستخدم الحالي؟", + "lastLoginDetails": "تفاصيل تسجيل الدخول الأخير:", + "verificationType": "نوع التحقق:", + "pleaseVerify": "ارجوك تحقق", + "verifyThroughFace": "تحقق من خلال الوجه", + "verifyThroughFingerprint": "تحقق من خلال بصمة الإصبع", + "verifyThroughSMS": "تحقق من خلال الرسائل القصيرة", + "verifyThroughWhatsapp": "تحقق من خلال Whatsapp", + "useAnotherAccount": "استخدم حسابا آخر", + "pleaseEnterTheVerificationCodeSentTo": "الرجاء إدخال رمز التحقق المرسل إلى ", + "theVerificationCodeWillExpireIn": "ستنتهي صلاحية رمز التحقق في ", + "goodMorning": "صباح الخير", + "markAttendance": "علامة الحضور", + "timeLeftToday": "الوقت المتبقي اليوم", + "checkIn": "تحقق في", + "workList": "قائمة العمل", + "leaveBalance": "رصيد الاجازات", + "missingSwipes": "الضربات الشديدة في عداد المفقودين", + "ticketBalance": "رصيد التذكرة", + "other": "آخر", + "services": "خدمات", + "viewAllServices": "عرض جميع الخدمات", + "monthlyAttendance": "الحضور الشهري", + "workFromHome": "العمل من المنزل", + "ticketRequest": "طلب تذكرة", + "viewAllOffers": "مشاهدة جميع العروض", + "offers": "عروض & ", + "discounts": "الخصومات", + "newString": "جديد", + "setTheNewPassword": "قم بتعيين كلمة المرور الجديدة", + "typeYourNewPasswordBelow": "اكتب كلمة المرور الجديدة أدناه", + "confirmPassword": "تأكيد كلمة المرور", + "update": "تحديث", + "title": "عنوان", + "home": "مسكن", + "mySalary": "راتبي", + "createRequest": "إنشاء طلب", + "forgotPassword": "هل نسيت كلمة السر", + "employeeId": "هوية الموظف", + "loginCodeWillSentToMobileNumber": "الرجاء إدخال معرف الموظف الخاص بك ، وسيتم إرسال رمز تسجيل الدخول إلى رقم هاتفك المحمول", + "changePassword": "تغيير كلمة المرور", + "ok": "موافق", + "confirm": "تؤكد", + "passwordChangedSuccessfully": "تم تغيير الرقم السري بنجاح", + "itemsForSale": "سلع للبيع", + "doNotUseRecentPassword": "لا تستخدم كلمة مرور حديثة", + "atLeastOneLowercase": "حرف صغير واحد على الأقل", + "atLeastOneUppercase": "حرف كبير واحد على الأقل", + "atLeastOneNumeric": "رقم واحد على الأقل", + "minimum8Characters": "8 أحرف على الأقل", + "doNotAddRepeatingLetters": "لا تقم بإضافة أحرف متكررة", + "itShouldContainSpecialCharacter": "يجب أن يحتوي على طابع خاص", + "confirmPasswordMustMatch": "يجب أن يتطابق تأكيد كلمة المرور", + "sms": "رسالة قصيرة", + "fingerPrint": "بصمة", + "face": "التعرف على الوجه", + "whatsapp": "واتس اب", + "reject": "يرفض", + "approve": "يوافق", + "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": "فرع الرواتب", + "msg": "Hello {} in the {} world ", + "msg_named": "{} are written in the {lang} language", + "clickMe": "Click me", + "human": "بشري", + "resources": "موارد", + "details": "تفاصيل", + "profile": { + "reset_password": { + "label": "Reset Password", + "username": "Username", + "password": "password" + } + }, + "clicked": { + "zero": "You clicked {} times!", + "one": "You clicked {} time!", + "two": "You clicked {} times!", + "few": "You clicked {} times!", + "many": "You clicked {} times!", + "other": "You clicked {} times!" + }, + "amount": { + "zero": "Your amount : {} ", + "one": "Your amount : {} ", + "two": "Your amount : {} ", + "few": "Your amount : {} ", + "many": "Your amount : {} ", + "other": "Your amount : {} " + }, + "gender": { + "male": "Hi man ;) ", + "female": "Hello girl :)", + "with_arg": { + "male": "Hi man ;) {}", + "female": "Hello girl :) {}" + } + }, + "reset_locale": "Reset Language" +}; +static const Map en_US = { + "mohemm": "Mohemm", + "english": "English", + "arabic": "Arabic", + "login": "Login", + "pleaseEnterLoginDetails": "Please enter the detail below to login", + "username": "Username", + "password": "Password", + "welcomeBack": "Welcome back", + "wouldYouLikeToLoginWithCurrentUsername": "Would you like to login with current Username?", + "lastLoginDetails": "Last Login Details:", + "verificationType": "Verification Type:", + "pleaseVerify": "Please Verify", + "verifyThroughFace": "Verify Through Face", + "verifyThroughFingerprint": "Verify Through Fingerprint", + "verifyThroughSMS": "Verify Through SMS", + "verifyThroughWhatsapp": "Verify Through Whatsapp", + "useAnotherAccount": "Use Another Account", + "pleaseEnterTheVerificationCodeSentTo": "Please enter the verification code sent to ", + "theVerificationCodeWillExpireIn": "The verification code will expire in ", + "goodMorning": "Good Morning", + "markAttendance": "Mark Attendance", + "timeLeftToday": "Time Left Today", + "checkIn": "Check In", + "workList": "Work List", + "leaveBalance": "Leave Balance", + "missingSwipes": "Missing Swipes", + "ticketBalance": "Ticket Balance", + "other": "Other", + "services": "Services", + "viewAllServices": "View All Services", + "monthlyAttendance": "Monthly Attendance", + "workFromHome": "Work From Home", + "ticketRequest": "Ticket Request", + "viewAllOffers": "View All Offers", + "offers": "Offers & ", + "discounts": "Discounts", + "newString": "New", + "setTheNewPassword": "Set the new password", + "typeYourNewPasswordBelow": "Type your new password below", + "confirmPassword": "Confirm Password", + "update": "Update", + "title": "Title", + "home": "Home", + "mySalary": "My Salary", + "createRequest": "Create Request", + "forgotPassword": "Forgot Password", + "employeeId": "Employee ID", + "loginCodeWillSentToMobileNumber": "Please Enter your Employee ID, A login code will be sent to your mobile number", + "changePassword": "Change Password", + "ok": "OK", + "confirm": "Confirm", + "passwordChangedSuccessfully": "Password changed successfully", + "itemsForSale": "Items for Sale", + "doNotUseRecentPassword": "Do not use recent password", + "atLeastOneLowercase": "At least one lowercase", + "atLeastOneUppercase": "At least one uppercase", + "atLeastOneNumeric": "At least one numeric", + "minimum8Characters": "Minimum 8 characters", + "doNotAddRepeatingLetters": "Do not add repeating letters", + "itShouldContainSpecialCharacter": "It should contain special character", + "confirmPasswordMustMatch": "Confirm password must match", + "sms": "SMS", + "fingerPrint": "Fingerprint", + "face": "Face", + "whatsapp": "Whatsapp", + "reject": "Reject", + "approve": "Approve", + "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", + "msg": "Hello {} in the {} world ", + "msg_named": "{} are written in the {lang} language", + "clickMe": "Click me", + "human": "Human", + "resources": "Resources", + "details": "Details", + "profile": { + "reset_password": { + "label": "Reset Password", + "username": "Username", + "password": "password" + } + }, + "clicked": { + "zero": "You clicked {} times!", + "one": "You clicked {} time!", + "two": "You clicked {} times!", + "few": "You clicked {} times!", + "many": "You clicked {} times!", + "other": "You clicked {} times!" + }, + "amount": { + "zero": "Your amount : {} ", + "one": "Your amount : {} ", + "two": "Your amount : {} ", + "few": "Your amount : {} ", + "many": "Your amount : {} ", + "other": "Your amount : {} " + }, + "gender": { + "male": "Hi man ;) ", + "female": "Hello girl :)", + "with_arg": { + "male": "Hi man ;) {}", + "female": "Hello girl :) {}" + } + }, + "reset_locale": "Reset Language" +}; +static const Map> mapLocales = {"ar_SA": ar_SA, "en_US": en_US}; } diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index 55e543b..faaea1c 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -1,6 +1,6 @@ // DO NOT EDIT. This is code generated via package:easy_localization/generate.dart -abstract class LocaleKeys { +abstract class LocaleKeys { static const mohemm = 'mohemm'; static const english = 'english'; static const arabic = 'arabic'; @@ -65,14 +65,45 @@ abstract class LocaleKeys { static const fingerPrint = 'fingerPrint'; static const face = 'face'; static const whatsapp = 'whatsapp'; + static const reject = 'reject'; + static const approve = 'approve'; + static const request = 'request'; + static const actions = 'actions'; + static const delegate = 'delegate'; + static const request_info = 'request_info'; + static const attachments = 'attachments'; + static const info = 'info'; + static const employeeNumber = 'employeeNumber'; + static const assignmentNumber = 'assignmentNumber'; + static const employeeName = 'employeeName'; + static const scheduleDate = 'scheduleDate'; + static const shiftType = 'shiftType'; + static const shift = 'shift'; + static const breakText = 'breakText'; + static const actualSwipeStart = 'actualSwipeStart'; + static const actualSwipeEnd = 'actualSwipeEnd'; + static const approvedSwipeStart = 'approvedSwipeStart'; + static const approvedSwipeStartReason = 'approvedSwipeStartReason'; + static const approvedSwipeEnd = 'approvedSwipeEnd'; + static const approvedSwipeEndReason = 'approvedSwipeEndReason'; + static const from = 'from'; + static const to = 'to'; + static const sent = 'sent'; + static const closed = 'closed'; + static const id = 'id'; + static const responder = 'responder'; + static const jobTitle = 'jobTitle'; + static const grade = 'grade'; + static const jobCategory = 'jobCategory'; + static const category = 'category'; + static const employeeEmailAddress = 'employeeEmailAddress'; + static const payrollBranch = 'payrollBranch'; static const msg = 'msg'; static const msg_named = 'msg_named'; static const clickMe = 'clickMe'; static const human = 'human'; static const resources = 'resources'; static const details = 'details'; - static const reject = 'reject'; - static const approve = 'approve'; static const profile_reset_password_label = 'profile.reset_password.label'; static const profile_reset_password_username = 'profile.reset_password.username'; static const profile_reset_password_password = 'profile.reset_password.password'; @@ -83,4 +114,5 @@ abstract class LocaleKeys { static const gender_with_arg = 'gender.with_arg'; static const gender = 'gender'; static const reset_locale = 'reset_locale'; + } diff --git a/lib/models/generic_response_model.dart b/lib/models/generic_response_model.dart index 0b5c497..956a0d0 100644 --- a/lib/models/generic_response_model.dart +++ b/lib/models/generic_response_model.dart @@ -1,14 +1,22 @@ +import 'package:mohem_flutter_app/models/get_absence_collection_notification_body_list_model.dart'; +import 'package:mohem_flutter_app/models/get_action_history_list_model.dart'; +import 'package:mohem_flutter_app/models/get_basic_det_ntf_body_list_model.dart'; +import 'package:mohem_flutter_app/models/get_mo_notification_body_list_model.dart'; +import 'package:mohem_flutter_app/models/get_notification_buttons_list_model.dart'; +import 'package:mohem_flutter_app/models/get_stamp_ms_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/member_login_list_model.dart'; +import 'package:mohem_flutter_app/models/notification_get_respond_attributes_list_model.dart'; +import 'package:mohem_flutter_app/models/subordinates_on_leaves_model.dart'; import 'package:mohem_flutter_app/models/worklist_response_model.dart'; import 'basic_member_information_model.dart'; -import 'get_mobile_login_info_list_model.dart'; import 'dashboard/get_accrual_balances_list_model.dart'; import 'dashboard/get_attendance_tracking_list_model.dart'; import 'dashboard/get_open_missing_swipes_list_model.dart'; import 'dashboard/get_open_notifications_list.dart'; import 'dashboard/list_menu.dart'; import 'dashboard/menu_entries.dart'; +import 'get_mobile_login_info_list_model.dart'; import 'member_information_list_model.dart'; import 'privilege_list_model.dart'; @@ -62,11 +70,11 @@ class GenericResponseModel { String? forgetPasswordTokenID; List? getAbsenceAttachmentsList; List? getAbsenceAttendanceTypesList; - List? getAbsenceCollectionNotificationBodyList; + List? getAbsenceCollectionNotificationBodyList; List? getAbsenceDffStructureList; List? getAbsenceTransactionList; List? getAccrualBalancesList; - List? getActionHistoryList; + List? getActionHistoryList; List? getAddressDffStructureList; List? getAddressNotificationBodyList; List? getApprovesList; @@ -74,7 +82,7 @@ class GenericResponseModel { GetAttendanceTracking? getAttendanceTrackingList; List? getBasicDetColsStructureList; List? getBasicDetDffStructureList; - List? getBasicDetNtfBodyList; + List? getBasicDetNtfBodyList; List? getCEICollectionNotificationBodyList; List? getCEIDFFStructureList; List? getCEITransactionList; @@ -109,8 +117,8 @@ class GenericResponseModel { List? getLookupValuesList; List? getMenuEntriesList; List? getMoItemHistoryList; - List? getMoNotificationBodyList; - List? getNotificationButtonsList; + List? getMoNotificationBodyList; + List? getNotificationButtonsList; List? getNotificationReassignModeList; List? getObjectValuesList; GetOpenMissingSwipesList? getOpenMissingSwipesList; @@ -135,10 +143,10 @@ class GenericResponseModel { List? getSITTransactionList; List? getScheduleShiftsDetailsList; List? getShiftTypesList; - List? getStampMsNotificationBodyList; + List? getStampMsNotificationBodyList; List? getStampNsNotificationBodyList; List? getSubordinatesAttdStatusList; - List? getSubordinatesLeavesList; + List? getSubordinatesLeavesList; List? getSubordinatesLeavesTotalVacationsList; List? getSummaryOfPaymentList; List? getSwipesList; @@ -190,15 +198,15 @@ class GenericResponseModel { String? mohemmWifiPassword; String? mohemmWifiSSID; String? notificationAction; - String? notificationGetRespondAttributesList; - String? notificationRespondRolesList; + List? notificationGetRespondAttributesList; + List? notificationRespondRolesList; int? oracleOutPutNumber; String? pASSWORDEXPIREDMSG; String? pCOUNTRYCODE; String? pCOUNTRYNAME; String? pDESCFLEXCONTEXTCODE; String? pDESCFLEXCONTEXTNAME; - Null? pForm; + String? pForm; String? pINFORMATION; int? pMBLID; String? pNUMOFSUBORDINATES; @@ -239,7 +247,7 @@ class GenericResponseModel { String? submitPhonesTransactionList; String? submitSITTransactionList; String? submitTermTransactionList; - String? subordinatesOnLeavesList; + List? subordinatesOnLeavesList; String? sumbitAbsenceTransactionList; String? tokenID; String? updateAttachmentList; @@ -568,11 +576,25 @@ class GenericResponseModel { forgetPasswordTokenID = json['ForgetPasswordTokenID']; getAbsenceAttachmentsList = json['GetAbsenceAttachmentsList']; getAbsenceAttendanceTypesList = json['GetAbsenceAttendanceTypesList']; - getAbsenceCollectionNotificationBodyList = json['GetAbsenceCollectionNotificationBodyList']; + + if (json['GetAbsenceCollectionNotificationBodyList'] != null) { + getAbsenceCollectionNotificationBodyList = []; + json['GetAbsenceCollectionNotificationBodyList'].forEach((v) { + getAbsenceCollectionNotificationBodyList!.add(new GetAbsenceCollectionNotificationBodyList.fromJson(v)); + }); + } + getAbsenceDffStructureList = json['GetAbsenceDffStructureList']; getAbsenceTransactionList = json['GetAbsenceTransactionList']; getAccrualBalancesList = json["GetAccrualBalancesList"] == null ? null : List.from(json["GetAccrualBalancesList"].map((x) => GetAccrualBalancesList.fromJson(x))); - getActionHistoryList = json['GetActionHistoryList']; + + if (json['GetActionHistoryList'] != null) { + getActionHistoryList = []; + json['GetActionHistoryList'].forEach((v) { + getActionHistoryList!.add(GetActionHistoryList.fromJson(v)); + }); + } + getAddressDffStructureList = json['GetAddressDffStructureList']; getAddressNotificationBodyList = json['GetAddressNotificationBodyList']; getApprovesList = json['GetApprovesList']; @@ -580,7 +602,14 @@ class GenericResponseModel { getAttendanceTrackingList = json["GetAttendanceTrackingList"] == null ? null : GetAttendanceTracking.fromMap(json["GetAttendanceTrackingList"]); getBasicDetColsStructureList = json['GetBasicDetColsStructureList']; getBasicDetDffStructureList = json['GetBasicDetDffStructureList']; - getBasicDetNtfBodyList = json['GetBasicDetNtfBodyList']; + + if (json['GetBasicDetNtfBodyList'] != null) { + getBasicDetNtfBodyList = []; + json['GetBasicDetNtfBodyList'].forEach((v) { + getBasicDetNtfBodyList!.add(new GetBasicDetNtfBodyList.fromJson(v)); + }); + } + getCEICollectionNotificationBodyList = json['GetCEICollectionNotificationBodyList']; getCEIDFFStructureList = json['GetCEIDFFStructureList']; getCEITransactionList = json['GetCEITransactionList']; @@ -615,8 +644,21 @@ class GenericResponseModel { getLookupValuesList = json['GetLookupValuesList']; getMenuEntriesList = json["GetMenuEntriesList"] == null ? null : List.from(json["GetMenuEntriesList"].map((x) => GetMenuEntriesList.fromJson(x))); getMoItemHistoryList = json['GetMoItemHistoryList']; - getMoNotificationBodyList = json['GetMoNotificationBodyList']; - getNotificationButtonsList = json['GetNotificationButtonsList']; + + if (json['GetMoNotificationBodyList'] != null) { + getMoNotificationBodyList = []; + json['GetMoNotificationBodyList'].forEach((v) { + getMoNotificationBodyList!.add(new GetMoNotificationBodyList.fromJson(v)); + }); + } + + if (json['GetNotificationButtonsList'] != null) { + getNotificationButtonsList = []; + json['GetNotificationButtonsList'].forEach((v) { + getNotificationButtonsList!.add(new GetNotificationButtonsList.fromJson(v)); + }); + } + getNotificationReassignModeList = json['GetNotificationReassignModeList']; getObjectValuesList = json['GetObjectValuesList']; getOpenMissingSwipesList = json["GetOpenMissingSwipesList"] == null ? null : GetOpenMissingSwipesList.fromJson(json["GetOpenMissingSwipesList"]); @@ -641,10 +683,24 @@ class GenericResponseModel { getSITTransactionList = json['GetSITTransactionList']; getScheduleShiftsDetailsList = json['GetScheduleShiftsDetailsList']; getShiftTypesList = json['GetShiftTypesList']; - getStampMsNotificationBodyList = json['GetStampMsNotificationBodyList']; + + if (json['GetStampMsNotificationBodyList'] != null) { + getStampMsNotificationBodyList = []; + json['GetStampMsNotificationBodyList'].forEach((v) { + getStampMsNotificationBodyList!.add(new GetStampMsNotificationBodyList.fromJson(v)); + }); + } + getStampNsNotificationBodyList = json['GetStampNsNotificationBodyList']; getSubordinatesAttdStatusList = json['GetSubordinatesAttdStatusList']; - getSubordinatesLeavesList = json['GetSubordinatesLeavesList']; + + if (json['GetSubordinatesLeavesList'] != null) { + getSubordinatesLeavesList = []; + json['GetSubordinatesLeavesList'].forEach((v) { + getSubordinatesLeavesList!.add(SubordinatesLeavesList.fromJson(v)); + }); + } + getSubordinatesLeavesTotalVacationsList = json['GetSubordinatesLeavesTotalVacationsList']; getSummaryOfPaymentList = json['GetSummaryOfPaymentList']; getSwipesList = json['GetSwipesList']; @@ -703,7 +759,7 @@ class GenericResponseModel { if (json['Mohemm_GetMobileLoginInfoList'] != null) { mohemmGetMobileLoginInfoList = []; json['Mohemm_GetMobileLoginInfoList'].forEach((v) { - mohemmGetMobileLoginInfoList!.add(new GetMobileLoginInfoListModel.fromJson(v)); + mohemmGetMobileLoginInfoList!.add(GetMobileLoginInfoListModel.fromJson(v)); }); } mohemmGetPatientIDList = json['Mohemm_GetPatientID_List']; @@ -713,8 +769,21 @@ class GenericResponseModel { mohemmWifiPassword = json['Mohemm_Wifi_Password']; mohemmWifiSSID = json['Mohemm_Wifi_SSID']; notificationAction = json['NotificationAction']; - notificationGetRespondAttributesList = json['NotificationGetRespondAttributesList']; - notificationRespondRolesList = json['NotificationRespondRolesList']; + + if (json['NotificationGetRespondAttributesList'] != null) { + notificationGetRespondAttributesList = []; + json['NotificationGetRespondAttributesList'].forEach((v) { + notificationGetRespondAttributesList!.add(NotificationGetRespondAttributesList.fromJson(v)); + }); + } + + if (json['NotificationRespondRolesList'] != null) { + notificationRespondRolesList = []; + json['NotificationGetRespondAttributesList'].forEach((v) { + // notificationRespondRolesList!.add(v); + }); + } + oracleOutPutNumber = json['OracleOutPutNumber']; pASSWORDEXPIREDMSG = json['PASSWORD_EXPIRED_MSG']; pCOUNTRYCODE = json['P_COUNTRY_CODE']; @@ -769,7 +838,14 @@ class GenericResponseModel { submitPhonesTransactionList = json['SubmitPhonesTransactionList']; submitSITTransactionList = json['SubmitSITTransactionList']; submitTermTransactionList = json['SubmitTermTransactionList']; - subordinatesOnLeavesList = json['SubordinatesOnLeavesList']; + + if (json['SubordinatesOnLeavesList'] != null) { + subordinatesOnLeavesList = []; + json['GetSubordinatesLeavesList'].forEach((v) { + subordinatesOnLeavesList!.add(SubordinatesLeavesList.fromJson(v)); + }); + } + sumbitAbsenceTransactionList = json['SumbitAbsenceTransactionList']; tokenID = json['TokenID']; updateAttachmentList = json['UpdateAttachmentList']; @@ -849,11 +925,19 @@ class GenericResponseModel { data['ForgetPasswordTokenID'] = this.forgetPasswordTokenID; data['GetAbsenceAttachmentsList'] = this.getAbsenceAttachmentsList; data['GetAbsenceAttendanceTypesList'] = this.getAbsenceAttendanceTypesList; - data['GetAbsenceCollectionNotificationBodyList'] = this.getAbsenceCollectionNotificationBodyList; + + if (this.getAbsenceCollectionNotificationBodyList != null) { + data['GetAbsenceCollectionNotificationBodyList'] = this.getAbsenceCollectionNotificationBodyList!.map((v) => v.toJson()).toList(); + } + data['GetAbsenceDffStructureList'] = this.getAbsenceDffStructureList; data['GetAbsenceTransactionList'] = this.getAbsenceTransactionList; data['GetAccrualBalancesList'] = this.getAccrualBalancesList; - data['GetActionHistoryList'] = this.getActionHistoryList; + + if (this.getActionHistoryList != null) { + data['GetActionHistoryList'] = this.getActionHistoryList!.map((v) => v.toJson()).toList(); + } + data['GetAddressDffStructureList'] = this.getAddressDffStructureList; data['GetAddressNotificationBodyList'] = this.getAddressNotificationBodyList; data['GetApprovesList'] = this.getApprovesList; @@ -861,7 +945,11 @@ class GenericResponseModel { data['GetAttendanceTrackingList'] = this.getAttendanceTrackingList; data['GetBasicDetColsStructureList'] = this.getBasicDetColsStructureList; data['GetBasicDetDffStructureList'] = this.getBasicDetDffStructureList; - data['GetBasicDetNtfBodyList'] = this.getBasicDetNtfBodyList; + + if (this.getBasicDetNtfBodyList != null) { + data['GetBasicDetNtfBodyList'] = this.getBasicDetNtfBodyList!.map((v) => v.toJson()).toList(); + } + data['GetCEICollectionNotificationBodyList'] = this.getCEICollectionNotificationBodyList; data['GetCEIDFFStructureList'] = this.getCEIDFFStructureList; data['GetCEITransactionList'] = this.getCEITransactionList; @@ -896,8 +984,15 @@ class GenericResponseModel { data['GetLookupValuesList'] = this.getLookupValuesList; data['GetMenuEntriesList'] = this.getMenuEntriesList; data['GetMoItemHistoryList'] = this.getMoItemHistoryList; - data['GetMoNotificationBodyList'] = this.getMoNotificationBodyList; - data['GetNotificationButtonsList'] = this.getNotificationButtonsList; + + if (this.getMoNotificationBodyList != null) { + data['GetMoNotificationBodyList'] = this.getMoNotificationBodyList!.map((v) => v.toJson()).toList(); + } + + if (this.getNotificationButtonsList != null) { + data['GetNotificationButtonsList'] = this.getNotificationButtonsList!.map((v) => v.toJson()).toList(); + } + data['GetNotificationReassignModeList'] = this.getNotificationReassignModeList; data['GetObjectValuesList'] = this.getObjectValuesList; data['GetOpenMissingSwipesList'] = this.getOpenMissingSwipesList; @@ -922,10 +1017,19 @@ class GenericResponseModel { data['GetSITTransactionList'] = this.getSITTransactionList; data['GetScheduleShiftsDetailsList'] = this.getScheduleShiftsDetailsList; data['GetShiftTypesList'] = this.getShiftTypesList; - data['GetStampMsNotificationBodyList'] = this.getStampMsNotificationBodyList; + + if (this.getStampMsNotificationBodyList != null) { + data['GetStampMsNotificationBodyList'] = this.getStampMsNotificationBodyList!.map((v) => v.toJson()).toList(); + } + data['GetStampNsNotificationBodyList'] = this.getStampNsNotificationBodyList; data['GetSubordinatesAttdStatusList'] = this.getSubordinatesAttdStatusList; data['GetSubordinatesLeavesList'] = this.getSubordinatesLeavesList; + + if (this.getSubordinatesLeavesList != null) { + data['GetSubordinatesLeavesList'] = this.getSubordinatesLeavesList!.map((v) => v.toJson()).toList(); + } + data['GetSubordinatesLeavesTotalVacationsList'] = this.getSubordinatesLeavesTotalVacationsList; data['GetSummaryOfPaymentList'] = this.getSummaryOfPaymentList; data['GetSwipesList'] = this.getSwipesList; @@ -985,8 +1089,15 @@ class GenericResponseModel { data['Mohemm_Wifi_Password'] = this.mohemmWifiPassword; data['Mohemm_Wifi_SSID'] = this.mohemmWifiSSID; data['NotificationAction'] = this.notificationAction; - data['NotificationGetRespondAttributesList'] = this.notificationGetRespondAttributesList; - data['NotificationRespondRolesList'] = this.notificationRespondRolesList; + + if (notificationGetRespondAttributesList != null) { + data['NotificationGetRespondAttributesList'] = notificationGetRespondAttributesList!.map((v) => v.toJson()).toList(); + } + + if (notificationRespondRolesList != null) { + data['NotificationRespondRolesList'] = notificationRespondRolesList!.map((v) => v).toList(); + } + data['OracleOutPutNumber'] = this.oracleOutPutNumber; data['PASSWORD_EXPIRED_MSG'] = this.pASSWORDEXPIREDMSG; data['P_COUNTRY_CODE'] = this.pCOUNTRYCODE; @@ -1037,6 +1148,11 @@ class GenericResponseModel { data['SubmitSITTransactionList'] = this.submitSITTransactionList; data['SubmitTermTransactionList'] = this.submitTermTransactionList; data['SubordinatesOnLeavesList'] = this.subordinatesOnLeavesList; + + if (this.subordinatesOnLeavesList != null) { + data['SubordinatesOnLeavesList'] = this.subordinatesOnLeavesList!.map((v) => v.toJson()).toList(); + } + data['SumbitAbsenceTransactionList'] = this.sumbitAbsenceTransactionList; data['TokenID'] = this.tokenID; data['UpdateAttachmentList'] = this.updateAttachmentList; diff --git a/lib/models/get_absence_collection_notification_body_list_model.dart b/lib/models/get_absence_collection_notification_body_list_model.dart new file mode 100644 index 0000000..4ac1f27 --- /dev/null +++ b/lib/models/get_absence_collection_notification_body_list_model.dart @@ -0,0 +1,97 @@ + +class GetAbsenceCollectionNotificationBodyList { + List? collectionNotification; + + GetAbsenceCollectionNotificationBodyList({this.collectionNotification}); + + GetAbsenceCollectionNotificationBodyList.fromJson(Map json) { + if (json['Collection_Notification'] != null) { + collectionNotification = []; + json['Collection_Notification'].forEach((v) { + collectionNotification!.add(new CollectionNotification.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = new Map(); + if (this.collectionNotification != null) { + data['Collection_Notification'] = + this.collectionNotification!.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class CollectionNotification { + String? aCTION; + String? aPPLICATIONCOLUMNNAME; + String? dATATYPE; + String? dATEVALUE; + String? dESCFLEXCONTEXTCODE; + String? dESCFLEXNAME; + String? dISPLAYFLAG; + int? nUMBERVALUE; + String? pREVSEGMENTVALUEDSP; + String? sEGMENTNAME; + String? sEGMENTPROMPT; + int? sEGMENTSEQNUM; + String? sEGMENTVALUEDSP; + int? tRANSACTIONNUMBER; + String? vARCHAR2VALUE; + + CollectionNotification( + {this.aCTION, + this.aPPLICATIONCOLUMNNAME, + this.dATATYPE, + this.dATEVALUE, + this.dESCFLEXCONTEXTCODE, + this.dESCFLEXNAME, + this.dISPLAYFLAG, + this.nUMBERVALUE, + this.pREVSEGMENTVALUEDSP, + this.sEGMENTNAME, + this.sEGMENTPROMPT, + this.sEGMENTSEQNUM, + this.sEGMENTVALUEDSP, + this.tRANSACTIONNUMBER, + this.vARCHAR2VALUE}); + + CollectionNotification.fromJson(Map json) { + aCTION = json['ACTION']; + aPPLICATIONCOLUMNNAME = json['APPLICATION_COLUMN_NAME']; + dATATYPE = json['DATATYPE']; + dATEVALUE = json['DATE_VALUE']; + dESCFLEXCONTEXTCODE = json['DESC_FLEX_CONTEXT_CODE']; + dESCFLEXNAME = json['DESC_FLEX_NAME']; + dISPLAYFLAG = json['DISPLAY_FLAG']; + nUMBERVALUE = json['NUMBER_VALUE']; + pREVSEGMENTVALUEDSP = json['PREV_SEGMENT_VALUE_DSP']; + sEGMENTNAME = json['SEGMENT_NAME']; + sEGMENTPROMPT = json['SEGMENT_PROMPT']; + sEGMENTSEQNUM = json['SEGMENT_SEQ_NUM']; + sEGMENTVALUEDSP = json['SEGMENT_VALUE_DSP']; + tRANSACTIONNUMBER = json['TRANSACTION_NUMBER']; + vARCHAR2VALUE = json['VARCHAR2_VALUE']; + } + + Map toJson() { + final Map data = new Map(); + data['ACTION'] = this.aCTION; + data['APPLICATION_COLUMN_NAME'] = this.aPPLICATIONCOLUMNNAME; + data['DATATYPE'] = this.dATATYPE; + data['DATE_VALUE'] = this.dATEVALUE; + data['DESC_FLEX_CONTEXT_CODE'] = this.dESCFLEXCONTEXTCODE; + data['DESC_FLEX_NAME'] = this.dESCFLEXNAME; + data['DISPLAY_FLAG'] = this.dISPLAYFLAG; + data['NUMBER_VALUE'] = this.nUMBERVALUE; + data['PREV_SEGMENT_VALUE_DSP'] = this.pREVSEGMENTVALUEDSP; + data['SEGMENT_NAME'] = this.sEGMENTNAME; + data['SEGMENT_PROMPT'] = this.sEGMENTPROMPT; + data['SEGMENT_SEQ_NUM'] = this.sEGMENTSEQNUM; + data['SEGMENT_VALUE_DSP'] = this.sEGMENTVALUEDSP; + data['TRANSACTION_NUMBER'] = this.tRANSACTIONNUMBER; + data['VARCHAR2_VALUE'] = this.vARCHAR2VALUE; + return data; + } +} \ No newline at end of file diff --git a/lib/models/get_action_history_list_model.dart b/lib/models/get_action_history_list_model.dart new file mode 100644 index 0000000..c89a974 --- /dev/null +++ b/lib/models/get_action_history_list_model.dart @@ -0,0 +1,76 @@ +class GetActionHistoryList { + String? aCTION; + String? aCTIONCODE; + String? eMAILADDRESS; + String? eMPLOYEEIMAGE; + int? fROMROWNUM; + bool? isFavorite; + String? nAME; + String? nOTE; + String? nOTIFICATIONDATE; + int? nOTIFICATIONID; + int? nOOFROWS; + String? pOSITIONTITLE; + int? rOWNUM; + int? sEQUENCE; + int? tOROWNUM; + String? uSERNAME; + + GetActionHistoryList( + {this.aCTION, + this.aCTIONCODE, + this.eMAILADDRESS, + this.eMPLOYEEIMAGE, + this.fROMROWNUM, + this.isFavorite, + this.nAME, + this.nOTE, + this.nOTIFICATIONDATE, + this.nOTIFICATIONID, + this.nOOFROWS, + this.pOSITIONTITLE, + this.rOWNUM, + this.sEQUENCE, + this.tOROWNUM, + this.uSERNAME}); + + GetActionHistoryList.fromJson(Map json) { + aCTION = json['ACTION']; + aCTIONCODE = json['ACTION_CODE']; + eMAILADDRESS = json['EMAIL_ADDRESS']; + eMPLOYEEIMAGE = json['EMPLOYEE_IMAGE']; + fROMROWNUM = json['FROM_ROW_NUM']; + isFavorite = json['IsFavorite']; + nAME = json['NAME']; + nOTE = json['NOTE']; + nOTIFICATIONDATE = json['NOTIFICATION_DATE']; + nOTIFICATIONID = json['NOTIFICATION_ID']; + nOOFROWS = json['NO_OF_ROWS']; + pOSITIONTITLE = json['POSITION_TITLE']; + rOWNUM = json['ROW_NUM']; + sEQUENCE = json['SEQUENCE']; + tOROWNUM = json['TO_ROW_NUM']; + uSERNAME = json['USER_NAME']; + } + + Map toJson() { + final Map data = new Map(); + data['ACTION'] = this.aCTION; + data['ACTION_CODE'] = this.aCTIONCODE; + data['EMAIL_ADDRESS'] = this.eMAILADDRESS; + data['EMPLOYEE_IMAGE'] = this.eMPLOYEEIMAGE; + data['FROM_ROW_NUM'] = this.fROMROWNUM; + data['IsFavorite'] = this.isFavorite; + data['NAME'] = this.nAME; + data['NOTE'] = this.nOTE; + data['NOTIFICATION_DATE'] = this.nOTIFICATIONDATE; + data['NOTIFICATION_ID'] = this.nOTIFICATIONID; + data['NO_OF_ROWS'] = this.nOOFROWS; + data['POSITION_TITLE'] = this.pOSITIONTITLE; + data['ROW_NUM'] = this.rOWNUM; + data['SEQUENCE'] = this.sEQUENCE; + data['TO_ROW_NUM'] = this.tOROWNUM; + data['USER_NAME'] = this.uSERNAME; + return data; + } +} \ No newline at end of file diff --git a/lib/models/get_basic_det_ntf_body_list_model.dart b/lib/models/get_basic_det_ntf_body_list_model.dart new file mode 100644 index 0000000..afdcd29 --- /dev/null +++ b/lib/models/get_basic_det_ntf_body_list_model.dart @@ -0,0 +1,24 @@ +class GetBasicDetNtfBodyList { + String? prevSegmentValueDsp; + String? segmentPrompt; + String? segmentValueDsp; + String? updatedFlag; + + GetBasicDetNtfBodyList({this.prevSegmentValueDsp, this.segmentPrompt, this.segmentValueDsp, this.updatedFlag}); + + GetBasicDetNtfBodyList.fromJson(Map json) { + prevSegmentValueDsp = json['PREV_SEGMENT_VALUE_DSP']; + segmentPrompt = json['SEGMENT_PROMPT']; + segmentValueDsp = json['SEGMENT_VALUE_DSP']; + updatedFlag = json['UPDATED_FLAG']; + } + + Map toJson() { + final Map data = new Map(); + data['PREV_SEGMENT_VALUE_DSP'] = this.prevSegmentValueDsp; + data['SEGMENT_PROMPT'] = this.segmentPrompt; + data['SEGMENT_VALUE_DSP'] = this.segmentValueDsp; + data['UPDATED_FLAG'] = this.updatedFlag; + return data; + } +} diff --git a/lib/models/get_mo_notification_body_list_model.dart b/lib/models/get_mo_notification_body_list_model.dart new file mode 100644 index 0000000..613d10f --- /dev/null +++ b/lib/models/get_mo_notification_body_list_model.dart @@ -0,0 +1,104 @@ +class GetMoNotificationBodyList { + String? dATEREQUIRED; + String? dESCRIPTION; + String? fROMLOCATOR; + int? fROMROWNUM; + String? fROMSUBINVENTORY; + String? iTEMCODE; + int? iTEMID; + int? lINENUMBER; + String? lINESTATUS; + int? nOOFROWS; + String? oPERATINGUNIT; + String? oRGANIZATIONCODE; + String? oRGANIZATIONNAME; + int? oRGID; + int? qUANTITY; + int? rOWNUM; + String? sHIPTOLOCATION; + String? sTATUSDATE; + String? tOLOCATOR; + int? tOROWNUM; + String? tOSUBINVENTORY; + String? tRANSACTIONTYPENAME; + String? uOM; + + GetMoNotificationBodyList( + {this.dATEREQUIRED, + this.dESCRIPTION, + this.fROMLOCATOR, + this.fROMROWNUM, + this.fROMSUBINVENTORY, + this.iTEMCODE, + this.iTEMID, + this.lINENUMBER, + this.lINESTATUS, + this.nOOFROWS, + this.oPERATINGUNIT, + this.oRGANIZATIONCODE, + this.oRGANIZATIONNAME, + this.oRGID, + this.qUANTITY, + this.rOWNUM, + this.sHIPTOLOCATION, + this.sTATUSDATE, + this.tOLOCATOR, + this.tOROWNUM, + this.tOSUBINVENTORY, + this.tRANSACTIONTYPENAME, + this.uOM}); + + GetMoNotificationBodyList.fromJson(Map json) { + dATEREQUIRED = json['DATE_REQUIRED']; + dESCRIPTION = json['DESCRIPTION']; + fROMLOCATOR = json['FROM_LOCATOR']; + fROMROWNUM = json['FROM_ROW_NUM']; + fROMSUBINVENTORY = json['FROM_SUBINVENTORY']; + iTEMCODE = json['ITEM_CODE']; + iTEMID = json['ITEM_ID']; + lINENUMBER = json['LINE_NUMBER']; + lINESTATUS = json['LINE_STATUS']; + nOOFROWS = json['NO_OF_ROWS']; + oPERATINGUNIT = json['OPERATING_UNIT']; + oRGANIZATIONCODE = json['ORGANIZATION_CODE']; + oRGANIZATIONNAME = json['ORGANIZATION_NAME']; + oRGID = json['ORG_ID']; + qUANTITY = json['QUANTITY']; + rOWNUM = json['ROW_NUM']; + sHIPTOLOCATION = json['SHIP_TO_LOCATION']; + sTATUSDATE = json['STATUS_DATE']; + tOLOCATOR = json['TO_LOCATOR']; + tOROWNUM = json['TO_ROW_NUM']; + tOSUBINVENTORY = json['TO_SUBINVENTORY']; + tRANSACTIONTYPENAME = json['TRANSACTION_TYPE_NAME']; + uOM = json['UOM']; + } + + Map toJson() { + final Map data = new Map(); + data['DATE_REQUIRED'] = this.dATEREQUIRED; + data['DESCRIPTION'] = this.dESCRIPTION; + data['FROM_LOCATOR'] = this.fROMLOCATOR; + data['FROM_ROW_NUM'] = this.fROMROWNUM; + data['FROM_SUBINVENTORY'] = this.fROMSUBINVENTORY; + data['ITEM_CODE'] = this.iTEMCODE; + data['ITEM_ID'] = this.iTEMID; + data['LINE_NUMBER'] = this.lINENUMBER; + data['LINE_STATUS'] = this.lINESTATUS; + data['NO_OF_ROWS'] = this.nOOFROWS; + data['OPERATING_UNIT'] = this.oPERATINGUNIT; + data['ORGANIZATION_CODE'] = this.oRGANIZATIONCODE; + data['ORGANIZATION_NAME'] = this.oRGANIZATIONNAME; + data['ORG_ID'] = this.oRGID; + data['QUANTITY'] = this.qUANTITY; + data['ROW_NUM'] = this.rOWNUM; + data['SHIP_TO_LOCATION'] = this.sHIPTOLOCATION; + data['STATUS_DATE'] = this.sTATUSDATE; + data['TO_LOCATOR'] = this.tOLOCATOR; + data['TO_ROW_NUM'] = this.tOROWNUM; + data['TO_SUBINVENTORY'] = this.tOSUBINVENTORY; + data['TRANSACTION_TYPE_NAME'] = this.tRANSACTIONTYPENAME; + data['UOM'] = this.uOM; + return data; + } +} \ No newline at end of file diff --git a/lib/models/get_notification_buttons_list_model.dart b/lib/models/get_notification_buttons_list_model.dart new file mode 100644 index 0000000..a6b29d2 --- /dev/null +++ b/lib/models/get_notification_buttons_list_model.dart @@ -0,0 +1,25 @@ +class GetNotificationButtonsList { + String? bUTTONACTION; + String? bUTTONICON; + String? bUTTONLABEL; + int? bUTTONSEQ; + + GetNotificationButtonsList( + {this.bUTTONACTION, this.bUTTONICON, this.bUTTONLABEL, this.bUTTONSEQ}); + + GetNotificationButtonsList.fromJson(Map json) { + bUTTONACTION = json['BUTTON_ACTION']; + bUTTONICON = json['BUTTON_ICON']; + bUTTONLABEL = json['BUTTON_LABEL']; + bUTTONSEQ = json['BUTTON_SEQ']; + } + + Map toJson() { + final Map data = new Map(); + data['BUTTON_ACTION'] = this.bUTTONACTION; + data['BUTTON_ICON'] = this.bUTTONICON; + data['BUTTON_LABEL'] = this.bUTTONLABEL; + data['BUTTON_SEQ'] = this.bUTTONSEQ; + return data; + } +} \ No newline at end of file diff --git a/lib/models/get_stamp_ms_notification_body_list_model.dart b/lib/models/get_stamp_ms_notification_body_list_model.dart new file mode 100644 index 0000000..dbead87 --- /dev/null +++ b/lib/models/get_stamp_ms_notification_body_list_model.dart @@ -0,0 +1,132 @@ +class GetStampMsNotificationBodyList { + int? aCTUALWOBHRS; + int? aCTUALWOBSEC; + String? aPPROVEDENDREASONDESC; + String? aPPROVEDSTARTDATETIME; + String? aPPROVEDSTARTREASON; + String? aPPROVEDSTARTTIME; + int? aSSIGNMENTID; + int? aSSIGNMENTNUMBER; + String? bREAKNAME; + String? bUSINESSGROUPID; + String? eMPLOYEENAME; + int? eMPLOYEENUMBER; + String? eMPLOYMENTCATEGORY; + int? pAYROLLID; + String? pAYROLLNAME; + String? sCHEDULEDATE; + int? sEQNO; + String? sHTACTUALENDDATETIME; + String? sHTACTUALENDTIME; + String? sHTACTUALHRS; + int? sHTACTUALSEC; + String? sHTACTUALSTARTDATETIME; + String? sHTACTUALSTARTTIME; + String? sHTCODE; + int? sHTID; + String? sHTNAME; + String? sHTTYPE; + String? sHTTYPEDESC; + int? sUPERVISORID; + int? tKPERSONID; + + GetStampMsNotificationBodyList( + {this.aCTUALWOBHRS, + this.aCTUALWOBSEC, + this.aPPROVEDENDREASONDESC, + this.aPPROVEDSTARTDATETIME, + this.aPPROVEDSTARTREASON, + this.aPPROVEDSTARTTIME, + this.aSSIGNMENTID, + this.aSSIGNMENTNUMBER, + this.bREAKNAME, + this.bUSINESSGROUPID, + this.eMPLOYEENAME, + this.eMPLOYEENUMBER, + this.eMPLOYMENTCATEGORY, + this.pAYROLLID, + this.pAYROLLNAME, + this.sCHEDULEDATE, + this.sEQNO, + this.sHTACTUALENDDATETIME, + this.sHTACTUALENDTIME, + this.sHTACTUALHRS, + this.sHTACTUALSEC, + this.sHTACTUALSTARTDATETIME, + this.sHTACTUALSTARTTIME, + this.sHTCODE, + this.sHTID, + this.sHTNAME, + this.sHTTYPE, + this.sHTTYPEDESC, + this.sUPERVISORID, + this.tKPERSONID}); + + GetStampMsNotificationBodyList.fromJson(Map json) { + aCTUALWOBHRS = json['ACTUAL_WOB_HRS']; + aCTUALWOBSEC = json['ACTUAL_WOB_SEC']; + aPPROVEDENDREASONDESC = json['APPROVED_END_REASON_DESC']; + aPPROVEDSTARTDATETIME = json['APPROVED_START_DATETIME']; + aPPROVEDSTARTREASON = json['APPROVED_START_REASON']; + aPPROVEDSTARTTIME = json['APPROVED_START_TIME']; + aSSIGNMENTID = json['ASSIGNMENT_ID']; + aSSIGNMENTNUMBER = json['ASSIGNMENT_NUMBER']; + bREAKNAME = json['BREAK_NAME']; + bUSINESSGROUPID = json['BUSINESS_GROUP_ID']; + eMPLOYEENAME = json['EMPLOYEE_NAME']; + eMPLOYEENUMBER = json['EMPLOYEE_NUMBER']; + eMPLOYMENTCATEGORY = json['EMPLOYMENT_CATEGORY']; + pAYROLLID = json['PAYROLL_ID']; + pAYROLLNAME = json['PAYROLL_NAME']; + sCHEDULEDATE = json['SCHEDULE_DATE']; + sEQNO = json['SEQ_NO']; + sHTACTUALENDDATETIME = json['SHT_ACTUAL_END_DATETIME']; + sHTACTUALENDTIME = json['SHT_ACTUAL_END_TIME']; + sHTACTUALHRS = json['SHT_ACTUAL_HRS']; + sHTACTUALSEC = json['SHT_ACTUAL_SEC']; + sHTACTUALSTARTDATETIME = json['SHT_ACTUAL_START_DATETIME']; + sHTACTUALSTARTTIME = json['SHT_ACTUAL_START_TIME']; + sHTCODE = json['SHT_CODE']; + sHTID = json['SHT_ID']; + sHTNAME = json['SHT_NAME']; + sHTTYPE = json['SHT_TYPE']; + sHTTYPEDESC = json['SHT_TYPE_DESC']; + sUPERVISORID = json['SUPERVISOR_ID']; + tKPERSONID = json['TK_PERSON_ID']; + } + + Map toJson() { + final Map data = new Map(); + data['ACTUAL_WOB_HRS'] = this.aCTUALWOBHRS; + data['ACTUAL_WOB_SEC'] = this.aCTUALWOBSEC; + data['APPROVED_END_REASON_DESC'] = this.aPPROVEDENDREASONDESC; + data['APPROVED_START_DATETIME'] = this.aPPROVEDSTARTDATETIME; + data['APPROVED_START_REASON'] = this.aPPROVEDSTARTREASON; + data['APPROVED_START_TIME'] = this.aPPROVEDSTARTTIME; + data['ASSIGNMENT_ID'] = this.aSSIGNMENTID; + data['ASSIGNMENT_NUMBER'] = this.aSSIGNMENTNUMBER; + data['BREAK_NAME'] = this.bREAKNAME; + data['BUSINESS_GROUP_ID'] = this.bUSINESSGROUPID; + data['EMPLOYEE_NAME'] = this.eMPLOYEENAME; + data['EMPLOYEE_NUMBER'] = this.eMPLOYEENUMBER; + data['EMPLOYMENT_CATEGORY'] = this.eMPLOYMENTCATEGORY; + data['PAYROLL_ID'] = this.pAYROLLID; + data['PAYROLL_NAME'] = this.pAYROLLNAME; + data['SCHEDULE_DATE'] = this.sCHEDULEDATE; + data['SEQ_NO'] = this.sEQNO; + data['SHT_ACTUAL_END_DATETIME'] = this.sHTACTUALENDDATETIME; + data['SHT_ACTUAL_END_TIME'] = this.sHTACTUALENDTIME; + data['SHT_ACTUAL_HRS'] = this.sHTACTUALHRS; + data['SHT_ACTUAL_SEC'] = this.sHTACTUALSEC; + data['SHT_ACTUAL_START_DATETIME'] = this.sHTACTUALSTARTDATETIME; + data['SHT_ACTUAL_START_TIME'] = this.sHTACTUALSTARTTIME; + data['SHT_CODE'] = this.sHTCODE; + data['SHT_ID'] = this.sHTID; + data['SHT_NAME'] = this.sHTNAME; + data['SHT_TYPE'] = this.sHTTYPE; + data['SHT_TYPE_DESC'] = this.sHTTYPEDESC; + data['SUPERVISOR_ID'] = this.sUPERVISORID; + data['TK_PERSON_ID'] = this.tKPERSONID; + return data; + } +} diff --git a/lib/models/notification_get_respond_attributes_list_model.dart b/lib/models/notification_get_respond_attributes_list_model.dart new file mode 100644 index 0000000..9810e24 --- /dev/null +++ b/lib/models/notification_get_respond_attributes_list_model.dart @@ -0,0 +1,24 @@ +class NotificationGetRespondAttributesList { + String? attributeDisplayName; + String? attributeFormat; + String? attributeName; + String? attributeType; + + NotificationGetRespondAttributesList({this.attributeDisplayName, this.attributeFormat, this.attributeName, this.attributeType}); + + NotificationGetRespondAttributesList.fromJson(Map json) { + attributeDisplayName = json['ATTRIBUTE_DISPLAY_NAME']; + attributeFormat = json['ATTRIBUTE_FORMAT']; + attributeName = json['ATTRIBUTE_NAME']; + attributeType = json['ATTRIBUTE_TYPE']; + } + + Map toJson() { + final Map data = {}; + data['ATTRIBUTE_DISPLAY_NAME'] = attributeDisplayName; + data['ATTRIBUTE_FORMAT'] = attributeFormat; + data['ATTRIBUTE_NAME'] = attributeName; + data['ATTRIBUTE_TYPE'] = attributeType; + return data; + } +} diff --git a/lib/models/subordinates_on_leaves_model.dart b/lib/models/subordinates_on_leaves_model.dart new file mode 100644 index 0000000..d6437f3 --- /dev/null +++ b/lib/models/subordinates_on_leaves_model.dart @@ -0,0 +1,68 @@ +class SubordinatesLeavesList { + String? aBSENCEATTENDANCETYPENAME; + String? cALENDARENTRYDESC; + String? dATEEND; + String? dATESTART; + String? eMPLOYEEIMAGE; + String? eMPLOYEENAME; + String? eMPLOYEENUMBER; + String? eVENTDATE; + String? lEAVETYPE; + int? oRGANIZATIONID; + String? oRGANIZATIONNAME; + String? pOSITIONTITLE; + String? rEPLACEMENTNAME; + String? sTATUS; + + SubordinatesLeavesList( + {this.aBSENCEATTENDANCETYPENAME, + this.cALENDARENTRYDESC, + this.dATEEND, + this.dATESTART, + this.eMPLOYEEIMAGE, + this.eMPLOYEENAME, + this.eMPLOYEENUMBER, + this.eVENTDATE, + this.lEAVETYPE, + this.oRGANIZATIONID, + this.oRGANIZATIONNAME, + this.pOSITIONTITLE, + this.rEPLACEMENTNAME, + this.sTATUS}); + + SubordinatesLeavesList.fromJson(Map json) { + aBSENCEATTENDANCETYPENAME = json['ABSENCE_ATTENDANCE_TYPE_NAME']; + cALENDARENTRYDESC = json['CALENDAR_ENTRY_DESC']; + dATEEND = json['DATE_END']; + dATESTART = json['DATE_START']; + eMPLOYEEIMAGE = json['EMPLOYEE_IMAGE']; + eMPLOYEENAME = json['EMPLOYEE_NAME']; + eMPLOYEENUMBER = json['EMPLOYEE_NUMBER']; + eVENTDATE = json['EVENT_DATE']; + lEAVETYPE = json['LEAVE_TYPE']; + oRGANIZATIONID = json['ORGANIZATION_ID']; + oRGANIZATIONNAME = json['ORGANIZATION_NAME']; + pOSITIONTITLE = json['POSITION_TITLE']; + rEPLACEMENTNAME = json['REPLACEMENT_NAME']; + sTATUS = json['STATUS']; + } + + Map toJson() { + final Map data = new Map(); + data['ABSENCE_ATTENDANCE_TYPE_NAME'] = this.aBSENCEATTENDANCETYPENAME; + data['CALENDAR_ENTRY_DESC'] = this.cALENDARENTRYDESC; + data['DATE_END'] = this.dATEEND; + data['DATE_START'] = this.dATESTART; + data['EMPLOYEE_IMAGE'] = this.eMPLOYEEIMAGE; + data['EMPLOYEE_NAME'] = this.eMPLOYEENAME; + data['EMPLOYEE_NUMBER'] = this.eMPLOYEENUMBER; + data['EVENT_DATE'] = this.eVENTDATE; + data['LEAVE_TYPE'] = this.lEAVETYPE; + data['ORGANIZATION_ID'] = this.oRGANIZATIONID; + data['ORGANIZATION_NAME'] = this.oRGANIZATIONNAME; + data['POSITION_TITLE'] = this.pOSITIONTITLE; + data['REPLACEMENT_NAME'] = this.rEPLACEMENTNAME; + data['STATUS'] = this.sTATUS; + return data; + } +} diff --git a/lib/ui/login/login_screen.dart b/lib/ui/login/login_screen.dart index d98fda8..964c633 100644 --- a/lib/ui/login/login_screen.dart +++ b/lib/ui/login/login_screen.dart @@ -128,7 +128,7 @@ class _LoginScreenState extends State { @override Widget build(BuildContext context) { username.text = "15153"; - password.text = "a123a123a123"; + password.text = "Xy12345@"; return Scaffold( body: Column( children: [ diff --git a/lib/ui/work_list/missing_swipe/fragments/actions_fragment.dart b/lib/ui/work_list/missing_swipe/fragments/actions_fragment.dart index 9c2de89..bd722b7 100644 --- a/lib/ui/work_list/missing_swipe/fragments/actions_fragment.dart +++ b/lib/ui/work_list/missing_swipe/fragments/actions_fragment.dart @@ -1,39 +1,46 @@ +import 'package:easy_localization/src/public_ext.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/date_uitl.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/models/get_action_history_list_model.dart'; import 'package:mohem_flutter_app/ui/work_list/sheets/delegate_sheet.dart'; import 'package:mohem_flutter_app/ui/work_list/sheets/request_more_info_sheet.dart'; import 'package:mohem_flutter_app/widgets/bottom_sheet.dart'; import 'package:mohem_flutter_app/widgets/circular_avatar.dart'; -import 'package:mohem_flutter_app/extensions/string_extensions.dart'; -import 'package:mohem_flutter_app/extensions/int_extensions.dart'; -import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; -import 'dart:math' as math; class ActionsFragment extends StatelessWidget { + List actionHistoryList; + + ActionsFragment(this.actionHistoryList, {Key? key}) : super(key: key); + @override Widget build(BuildContext context) { return Container( width: double.infinity, height: double.infinity, child: ListView.separated( - itemCount: actionsList.length, + itemCount: actionHistoryList.length, padding: EdgeInsets.all(21), itemBuilder: (context, index) { - return showItem(context, actionsList[index]); + return showItem(context, actionHistoryList[index]); }, separatorBuilder: (BuildContext context, int index) { - return 16.height; + return 12.height; }, ), ); } - Widget showItem(BuildContext context, Color color) { + Widget showItem(BuildContext context, GetActionHistoryList actionHistory) { return Container( width: double.infinity, decoration: BoxDecoration( color: Colors.white, - borderRadius: BorderRadius.circular(15), + borderRadius: BorderRadius.circular(10), boxShadow: [ BoxShadow( color: const Color(0xff000000).withOpacity(.05), @@ -47,94 +54,54 @@ class ActionsFragment extends StatelessWidget { clipBehavior: Clip.antiAlias, children: [ Positioned( - left: -21, + left: -20, + top: -10, child: Transform.rotate( - angle: 125, + angle: 15, child: Container( - width: 60, - height: 20, - color: color, + width: 50, + height: 30, + color: getStatusColor(actionHistory.aCTIONCODE!), ), ), ), Column( children: [ - Padding( - padding: const EdgeInsets.only(left: 12, right: 12, top: 12), - child: Column( - children: [ - Row( + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + CircularAvatar(url: actionHistory.eMPLOYEEIMAGE ?? "", isImageBase64: true, height: 34, width: 34), + 9.width, + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - CircularAvatar(), - 12.width, - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - "Mahmoud Shrouf".toText16(), - 6.height, - "Missing Swipe Request for Hussain, Mohammad has been approved" - .toText12(), - 3.height, - Row( - children: [ - "Submitted".toText10(), - 12.width, - "On 07 Jan 2021" - .toText12(color: MyColors.lightTextColor) - ], - ) - ], - ), + actionHistory.nAME!.toText16(), + if ((actionHistory.nOTE ?? "").isNotEmpty) actionHistory.nOTE!.toText12(color: MyColors.grey57Color), + 4.height, + Row( + children: [ + actionHistory.aCTION!.toText10(), + 8.width, + if (actionHistory.nOTIFICATIONDATE!.isNotEmpty) + DateUtil.formatDateToDate(DateUtil.convertSimpleStringDateToDateddMMyyyy(actionHistory.nOTIFICATIONDATE!), false).toText12(color: MyColors.lightTextColor), + ], ) ], ), - ], - ), - ), - 12.height, - Container( - width: double.infinity, - height: 1, - color: MyColors.lightTextColor, - ), + ) + ], + ).paddingOnly(top: 19, left: 16, right: 16, bottom: 12), + Container(width: double.infinity, height: 1, color: MyColors.lightGreyEFColor), Row( children: [ - Expanded( - child: InkWell( - onTap: () { - showMyBottomSheet(context, - child: RequestMoreInfoSheet()); - }, - child: Center( - child: "Request Info" - .toText12(isBold: true) - .paddingOnly( - left: 21, right: 21, top: 8, bottom: 8), - ), - ), - ), - Center( - child: Container( - width: 1, - height: 45, - color: MyColors.lightTextColor, - ), - ), - Expanded( - child: InkWell( - onTap: () { - showMyBottomSheet(context, child: DelegateSheet()); - }, - child: Center( - child: "Delegate" - .toText12( - color: MyColors.gradiantEndColor, isBold: true) - .paddingOnly( - left: 21, right: 21, top: 8, bottom: 8), - ), - ), - ), + LocaleKeys.request_info.tr().toText12(color: MyColors.grey67Color).center.paddingOnly(top: 6, bottom: 6).onPress(() { + showMyBottomSheet(context, child: RequestMoreInfoSheet()); + }).expanded, + Container(width: 1, height: 30, color: MyColors.lightGreyEFColor), + LocaleKeys.delegate.tr().toText12(color: MyColors.gradiantEndColor).center.paddingOnly(top: 6, bottom: 6).onPress(() { + showMyBottomSheet(context, child: DelegateSheet()); + }).expanded, ], ), ], @@ -143,6 +110,20 @@ class ActionsFragment extends StatelessWidget { ), ); } + + Color getStatusColor(String code) { + if (code == "SUBMIT") { + return const Color(0xff2E303A); + } else if (code == "REJECTED") { + return const Color(0xffD02127); + } else if (code == "APPROVED") { + return const Color(0xff1FA269); + } else if (code == "REQUEST_INFO") { + return const Color(0xff2E303A); + } else { + return const Color(0xff2E303A); + } + } } List actionsList = [ diff --git a/lib/ui/work_list/missing_swipe/fragments/detail_fragment.dart b/lib/ui/work_list/missing_swipe/fragments/detail_fragment.dart new file mode 100644 index 0000000..9e42459 --- /dev/null +++ b/lib/ui/work_list/missing_swipe/fragments/detail_fragment.dart @@ -0,0 +1,69 @@ +import 'package:easy_localization/src/public_ext.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/extensions/widget_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/models/member_information_list_model.dart'; +import 'package:mohem_flutter_app/models/worklist_response_model.dart'; + +class DetailFragment extends StatefulWidget { + WorkListResponseModel? workListData; + MemberInformationListModel? memberInformationListModel; + DetailFragment(this.workListData, this.memberInformationListModel); + @override + State createState() => _DetailFragmentState(); +} + +class _DetailFragmentState extends State { + bool isOpened = false; + + @override + Widget build(BuildContext context) { + return Column( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + detailListItem(LocaleKeys.from.tr(), widget.workListData!.fROMUSER ?? ""), + detailListItem(LocaleKeys.to.tr(), widget.workListData!.tOUSER ?? ""), + detailListItem(LocaleKeys.sent.tr(), widget.workListData!.bEGINDATE ?? ""), + detailListItem(LocaleKeys.closed.tr(), widget.workListData!.eNDDATE ?? ""), + detailListItem(LocaleKeys.id.tr(), widget.workListData!.nOTIFICATIONID?.toString() ?? ""), + detailListItem(LocaleKeys.responder.tr(), widget.workListData!.rESPONDER ?? ""), + ], + ).objectContainerView(), + 12.height, + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + detailListItem(LocaleKeys.employeeNumber.tr(), widget.memberInformationListModel!.eMPLOYEENUMBER ?? ""), + detailListItem(LocaleKeys.employeeName.tr(), + (AppState().isArabic(context) ? widget.memberInformationListModel!.eMPLOYEEDISPLAYNAMEAr : widget.memberInformationListModel!.eMPLOYEEDISPLAYNAMEEn) ?? ""), + detailListItem(LocaleKeys.jobTitle.tr(), widget.memberInformationListModel!.pOSITIONNAME ?? ""), + detailListItem(LocaleKeys.grade.tr(), widget.memberInformationListModel!.gRADENAME ?? ""), + detailListItem(LocaleKeys.jobCategory.tr(), widget.memberInformationListModel!.pOSITIONNAME?.toString() ?? ""), + detailListItem(LocaleKeys.category.tr(), widget.memberInformationListModel!.eMPLOYMENTCATEGORYMEANING ?? ""), + detailListItem(LocaleKeys.employeeEmailAddress.tr(), widget.memberInformationListModel!.eMPLOYEEEMAILADDRESS ?? ""), + detailListItem(LocaleKeys.payrollBranch.tr(), widget.memberInformationListModel!.pAYROLLNAME ?? ""), + ], + ).objectContainerView(), + ], + ).paddingAll(21); + } + + Widget detailListItem(String title, String value) { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "$title:".toText12(isBold: true, color: const Color(0xff2D3238)), + 6.width, + (value.isEmpty ? "--" : value).toText12(color: MyColors.normalTextColor).expanded, + ], + ); + } +} diff --git a/lib/ui/work_list/missing_swipe/fragments/info_fragments.dart b/lib/ui/work_list/missing_swipe/fragments/info_fragments.dart index b115df9..e7c26cf 100644 --- a/lib/ui/work_list/missing_swipe/fragments/info_fragments.dart +++ b/lib/ui/work_list/missing_swipe/fragments/info_fragments.dart @@ -1,69 +1,80 @@ +import 'package:easy_localization/src/public_ext.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/date_uitl.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/models/get_absence_collection_notification_body_list_model.dart'; +import 'package:mohem_flutter_app/models/get_stamp_ms_notification_body_list_model.dart'; class InfoFragment extends StatelessWidget { + List? getAbsenceCollectionNotifications; + List? getStampNotifications; + + InfoFragment({this.getAbsenceCollectionNotifications, this.getStampNotifications}); + @override Widget build(BuildContext context) { return Container( width: double.infinity, height: double.infinity, - child: Column( + child: ListView( + padding: const EdgeInsets.all(21), children: [ - Container( - width: double.infinity, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(15), - boxShadow: [ - BoxShadow( - color: const Color(0xff000000).withOpacity(.05), - blurRadius: 26, - offset: const Offset(0, -3), - ), - ], - ), - margin: EdgeInsets.all(21), - padding: EdgeInsets.only(top: 21, bottom: 21, right: 16, left: 16), - child: Column( - children: [ - Row( - children: [ - Expanded( - child: "Info Details".toText16(), - ), - // Icon(Icons.keyboard_arrow_down_rounded), - ], - ), - Column( - children: [ - 12.height, - showItem("From:", "Alma Linde Mendoza"), - showItem("To:", "Al Yabis, Norah"), - showItem("Sent:", "1/26/2020 10:41:07 AM"), - showItem("ID:", "30581045"), - showItem("Closed:", "-"), - ], - ), - ], - ), - ), + if ((getAbsenceCollectionNotifications?.length ?? 0) > 0) + getAbsenceCollectionNotificationsListView(getAbsenceCollectionNotifications ?? []).objectContainerView(title: "Absence Notifications"), + if ((getStampNotifications?.length ?? 0) > 0) getStampNotificationsListView(getStampNotifications ?? []).objectContainerView(title: "Stamp Notifications") ], ), ); } - Widget showItem(String title, String value) { - return Padding( - padding: const EdgeInsets.only(top: 2, bottom: 2), - child: Row( - children: [ - title.toText12(isBold: true), - 6.width, - title.toText12(isBold: false, color: MyColors.normalTextColor), - ], - ), + Widget getAbsenceCollectionNotificationsListView(List list) { + List dataList = list.isEmpty ? [] : (list.first.collectionNotification ?? []); + return ListView.separated( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (cxt, index) => detailListItem(dataList[index].sEGMENTPROMPT!, dataList[index].sEGMENTVALUEDSP!), + separatorBuilder: (cxt, index) => 4.height, + itemCount: dataList.length); + } + + Widget getStampNotificationsListView(List list) { + return ListView.separated( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (cxt, index) => Column( + mainAxisSize: MainAxisSize.min, + children: [ + detailListItem(LocaleKeys.employeeNumber.tr(), list[index].eMPLOYEENUMBER.toString()), + detailListItem(LocaleKeys.assignmentNumber.tr(), list[index].aSSIGNMENTNUMBER.toString()), + detailListItem(LocaleKeys.employeeName.tr(), list[index].eMPLOYEENAME.toString()), + detailListItem(LocaleKeys.scheduleDate.tr(), DateUtil.formatDateToDate(DateUtil.convertStringToDate(list[index].sCHEDULEDATE.toString()), false)), + detailListItem(LocaleKeys.shiftType.tr(), list[index].sHTTYPEDESC.toString()), + detailListItem(LocaleKeys.shift.tr(), list[index].sHTNAME.toString()), + detailListItem(LocaleKeys.breakText.tr(), list[index].bREAKNAME.toString()), + detailListItem(LocaleKeys.actualSwipeStart.tr(), list[index].sHTACTUALSTARTTIME.toString()), + detailListItem(LocaleKeys.actualSwipeEnd.tr(), list[index].sHTACTUALENDTIME.toString()), + detailListItem(LocaleKeys.approvedSwipeStart.tr(), list[index].aPPROVEDSTARTTIME.toString()), + detailListItem(LocaleKeys.approvedSwipeStartReason.tr(), list[index].aPPROVEDSTARTREASON.toString()), + detailListItem(LocaleKeys.approvedSwipeEnd.tr(), ""), + detailListItem(LocaleKeys.approvedSwipeEndReason.tr(), list[index].aPPROVEDENDREASONDESC.toString()), + ], + ), + separatorBuilder: (cxt, index) => 18.height, + itemCount: list.length); + } + + Widget detailListItem(String title, String value) { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "$title:".toText12(isBold: true, color: const Color(0xff2D3238)), + 6.width, + (value.isEmpty ? "--" : value).toText12(color: MyColors.normalTextColor).expanded, + ], ); } } diff --git a/lib/ui/work_list/missing_swipe/fragments/request_fragment.dart b/lib/ui/work_list/missing_swipe/fragments/request_fragment.dart index f87995a..f5a639b 100644 --- a/lib/ui/work_list/missing_swipe/fragments/request_fragment.dart +++ b/lib/ui/work_list/missing_swipe/fragments/request_fragment.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; -import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; class RequestFragment extends StatefulWidget { @override @@ -53,8 +53,7 @@ class _RequestFragmentState extends State { showItem("Organization Code:", "SWD"), showItem("From Subinventory:", "SWD_MSPS"), showItem("To Subinventory:", "SWD_MSPS"), - showItem("Ship To Location :", - "SWD 11206-E.R. (Emergency Room)"), + showItem("Ship To Location :", "SWD 11206-E.R. (Emergency Room)"), showItem("Unit:", "Each"), showItem("Date Required:", "12/23/2019 4:54:04 PM"), showItem("Status Date:", "12/23/2019 4:54:04 PM"), diff --git a/lib/ui/work_list/missing_swipe/missing_swipe_screen.dart b/lib/ui/work_list/missing_swipe/missing_swipe_screen.dart index 0a27afc..8d88404 100644 --- a/lib/ui/work_list/missing_swipe/missing_swipe_screen.dart +++ b/lib/ui/work_list/missing_swipe/missing_swipe_screen.dart @@ -1,13 +1,26 @@ +import 'dart:convert'; + import 'package:easy_localization/src/public_ext.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.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/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/generic_response_model.dart'; +import 'package:mohem_flutter_app/models/get_absence_collection_notification_body_list_model.dart'; +import 'package:mohem_flutter_app/models/get_action_history_list_model.dart'; +import 'package:mohem_flutter_app/models/get_notification_buttons_list_model.dart'; +import 'package:mohem_flutter_app/models/get_stamp_ms_notification_body_list_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/worklist_response_model.dart'; import 'package:mohem_flutter_app/ui/work_list/missing_swipe/fragments/actions_fragment.dart'; import 'package:mohem_flutter_app/ui/work_list/missing_swipe/fragments/attachments_fragment.dart'; +import 'package:mohem_flutter_app/ui/work_list/missing_swipe/fragments/detail_fragment.dart'; import 'package:mohem_flutter_app/ui/work_list/missing_swipe/fragments/info_fragments.dart'; import 'package:mohem_flutter_app/ui/work_list/missing_swipe/fragments/request_fragment.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; @@ -27,6 +40,22 @@ class _MissingSwipeScreenState extends State { PageController controller = PageController(); bool showFabOptions = false; + WorkListResponseModel? workListData; + MemberInformationListModel? memberInformationListModel; + List notificationButtonsList = []; + List actionHistoryList = []; + List getStampNotifications = []; + List? getAbsenceCollectionNotifications; + List getNotificationRespondAttributes = []; + + GenericResponseModel? getBasicNTFBody; + GenericResponseModel? getICBody; + GenericResponseModel? subordinatesLeavesModel; + + bool isCloseAvailable = false; + bool isApproveAvailable = false; + bool isRejectAvailable = false; + @override void initState() { super.initState(); @@ -37,8 +66,44 @@ class _MissingSwipeScreenState extends State { super.dispose(); } + void getData() async { + try { + Utils.showLoading(context); + if (workListData!.iTEMTYPE == "HRSSA" || workListData!.iTEMTYPE == "STAMP") { + memberInformationListModel = await WorkListApiClient().getUserInformation(-999); + } + if (workListData!.iTEMTYPE == "HRSSA") { + getBasicNTFBody = await WorkListApiClient().getBasicDetNTFBody(workListData!.nOTIFICATIONID!, -999); + getAbsenceCollectionNotifications = await WorkListApiClient().getAbsenceNotificationBody(workListData!.nOTIFICATIONID!, -999); + subordinatesLeavesModel = await WorkListApiClient().getSubordinatesLeaves("", ""); + } + if (workListData!.iTEMTYPE == "STAMP") { + getStampNotifications = await WorkListApiClient().getStampMsNotificationBody(workListData!.nOTIFICATIONID!, -999); + } + getNotificationRespondAttributes = await WorkListApiClient().notificationGetRespondAttributes(workListData!.nOTIFICATIONID!); + notificationButtonsList = await WorkListApiClient().getNotificationButtons(workListData!.nOTIFICATIONID!); + actionHistoryList = await WorkListApiClient().getActionHistory(workListData!.nOTIFICATIONID!); + + if (notificationButtonsList.isNotEmpty) { + isCloseAvailable = notificationButtonsList.any((element) => element.bUTTONACTION == "CLOSE"); + isApproveAvailable = notificationButtonsList.any((element) => element.bUTTONACTION == "APPROVED"); + isRejectAvailable = notificationButtonsList.any((element) => element.bUTTONACTION == "REJECTED"); + } + Utils.hideLoading(context); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, null); + } + } + @override Widget build(BuildContext context) { + if (workListData == null) { + workListData = ModalRoute.of(context)!.settings.arguments as WorkListResponseModel; + getData(); + } + return Scaffold( appBar: AppBarWidget(context, title: LocaleKeys.details.tr()), backgroundColor: Colors.white, @@ -65,76 +130,86 @@ class _MissingSwipeScreenState extends State { ), child: Row( children: [ - myTab("Request", 0), - myTab("Actions", 1), - myTab("Attachments", 2), - myTab("Info.", 3), + myTab(LocaleKeys.info.tr(), 0), + (workListData!.iTEMTYPE == "HRSSA" || workListData!.iTEMTYPE == "STAMP") ? myTab(LocaleKeys.details.tr(), 1) : myTab(LocaleKeys.request.tr(), 1), + myTab(LocaleKeys.actions.tr(), 2), + myTab(LocaleKeys.attachments.tr(), 3), ], ), ), - Expanded( - child: PageView( - controller: controller, - onPageChanged: (pageIndex) { - setState(() { - tabIndex = pageIndex; - }); - }, - children: [ - RequestFragment(), - ActionsFragment(), - AttachmentsFragment(), - InfoFragment(), - ], - ), - ), - Container( - padding: const EdgeInsets.only(top: 14, bottom: 14, left: 21, right: 21), - decoration: const BoxDecoration( - color: Colors.white, - border: Border( - top: BorderSide( - color: MyColors.lightGreyEFColor, - width: 1.0, + PageView( + controller: controller, + onPageChanged: (pageIndex) { + setState(() { + tabIndex = pageIndex; + }); + }, + children: [ + InfoFragment(getAbsenceCollectionNotifications: getAbsenceCollectionNotifications, getStampNotifications: getStampNotifications), + (workListData!.iTEMTYPE == "HRSSA" || workListData!.iTEMTYPE == "STAMP") ? DetailFragment(workListData, memberInformationListModel) : RequestFragment(), + ActionsFragment(actionHistoryList), + AttachmentsFragment(), + ], + ).expanded, + if (isApproveAvailable || isRejectAvailable || isCloseAvailable) + Container( + padding: const EdgeInsets.only(top: 14, bottom: 14, left: 21, right: 21), + decoration: const BoxDecoration( + color: Colors.white, + border: Border( + top: BorderSide( + color: MyColors.lightGreyEFColor, + width: 1.0, + ), ), ), - ), - child: Row( - children: [ - DefaultButton( - LocaleKeys.reject.tr(), - () {}, - colors: const [ - Color(0xffEB8C90), - Color(0xffDE6C70), - ], - ).expanded, - 8.width, - DefaultButton( - LocaleKeys.approve.tr(), - () {}, - colors: const [ - Color(0xff32D892), - Color(0xff1AB170), - ], - ).expanded, - 8.width, - Container( - height: 43, - width: 43, - decoration: const BoxDecoration( - shape: BoxShape.circle, - color: MyColors.lightGreyE6Color, - ), - child: Icon(showFabOptions ? Icons.more_vert_rounded : Icons.more_horiz_rounded, color: MyColors.darkIconColor), - ).onPress(() { - setState(() { - showFabOptions = true; - }); - }) - ], - ), - ) + child: Row( + children: [ + if (isRejectAvailable) + DefaultButton( + LocaleKeys.reject.tr(), + () {}, + colors: const [ + Color(0xffEB8C90), + Color(0xffDE6C70), + ], + ).expanded, + if (isApproveAvailable && isRejectAvailable) 8.width, + if (isApproveAvailable) + DefaultButton( + LocaleKeys.approve.tr(), + () {}, + colors: const [ + Color(0xff32D892), + Color(0xff1AB170), + ], + ).expanded, + if (isCloseAvailable) + DefaultButton( + LocaleKeys.ok.tr(), + () {}, + colors: const [ + Color(0xff32D892), + Color(0xff1AB170), + ], + ).expanded, + 8.width, + Container( + height: 43, + width: 43, + decoration: const BoxDecoration( + shape: BoxShape.circle, + color: MyColors.lightGreyE6Color, + ), + child: Icon(showFabOptions ? Icons.more_vert_rounded : Icons.more_horiz_rounded, color: MyColors.darkIconColor), + ).onPress(() { + setState(() { + showFabOptions = true; + }); + }) + ], + ), + ) ], ), IgnorePointer( @@ -143,7 +218,7 @@ class _MissingSwipeScreenState extends State { opacity: showFabOptions ? 1 : 0, duration: const Duration(milliseconds: 250), child: Container( - padding: const EdgeInsets.only(left: 21, right: 21, bottom: 75), + padding: const EdgeInsets.only(left: 21, right: 21, bottom: 75 - 12), width: double.infinity, height: double.infinity, color: Colors.white.withOpacity(.67), @@ -154,9 +229,7 @@ class _MissingSwipeScreenState extends State { children: [ myFab("Skip", "assets/images/skip.svg"), 12.height, - myFab("Request Info", "assets/images/request_info.svg"), - 12.height, - myFab("Delegate", "assets/images/delegate.svg"), + ...viewApiButtonsList(notificationButtonsList), ], ), ), @@ -168,9 +241,54 @@ class _MissingSwipeScreenState extends State { ), ], ), + floatingActionButton: (!isApproveAvailable && !isRejectAvailable && !isCloseAvailable) + ? Container( + height: 43, + width: 43, + decoration: const BoxDecoration( + shape: BoxShape.circle, + color: MyColors.lightGreyE6Color, + ), + child: Icon(showFabOptions ? Icons.more_vert_rounded : Icons.more_horiz_rounded, color: MyColors.darkIconColor), + ).onPress(() { + setState(() { + showFabOptions = true; + }); + }) + : null, ); } + List viewApiButtonsList(List notificationButtonsList) { + List fabs = []; + for (int i = 0; i < notificationButtonsList.length; i++) { + if (notificationButtonsList[i].bUTTONACTION! == "REJECTED" || notificationButtonsList[i].bUTTONACTION! == "APPROVED" || notificationButtonsList[i].bUTTONACTION! == "CLOSE") { + continue; + } + fabs.add(myFab(notificationButtonsList[i].bUTTONLABEL!, notificationButtonsList[i].bUTTONICON ?? "", isIconAsset: false) + .paddingOnly(bottom: 12) + .onPress(() => handleFabAction(notificationButtonsList[i]))); + } + return fabs; + } + + void handleFabAction(GetNotificationButtonsList notificationButton) { + switch (notificationButton.bUTTONACTION) { + case "DELEGATE": + // do something + break; + case "REQUEST_INFO": + // do something else + break; + case "RFC": + // do something else + break; + case "UPDATE_ACTION": + // do something else + break; + } + } + Widget myTab(String title, int index) { bool isSelected = (index == tabIndex); return Column( @@ -197,7 +315,7 @@ class _MissingSwipeScreenState extends State { }).expanded; } - Widget myFab(String title, String icon) { + Widget myFab(String title, String icon, {bool isIconAsset = true}) { return Row( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.center, @@ -220,7 +338,12 @@ class _MissingSwipeScreenState extends State { ], ), ), - child: SvgPicture.asset(icon), + child: isIconAsset + ? SvgPicture.asset(icon) + : Image.memory( + base64Decode(icon), + fit: BoxFit.cover, + ), ) ], ); diff --git a/lib/ui/work_list/work_list_screen.dart b/lib/ui/work_list/work_list_screen.dart index 1e46783..49fb8ac 100644 --- a/lib/ui/work_list/work_list_screen.dart +++ b/lib/ui/work_list/work_list_screen.dart @@ -76,7 +76,7 @@ class _WorkListScreenState extends State { try { Utils.showLoading(context); if (workListItemTypes[workListItemIndex].key == "ITG") { - itgFormsModel = await WorkListApiClient().GetITGTaskCountRequestType(); + itgFormsModel = await WorkListApiClient().getITGTaskCountRequestType(); List requestAllList = []; for (int i = 0; i < (itgFormsModel?.requestType!.length ?? 0); i++) { requestAllList = requestAllList + (itgFormsModel?.requestType![i].requestDetails ?? []); @@ -274,7 +274,7 @@ class _WorkListScreenState extends State { Widget rowItem(WorkListItemTypeModelData data, WorkListResponseModel workData) { return InkWell( onTap: () { - Navigator.pushNamed(context, AppRoutes.missingSwipe); + Navigator.pushNamed(context, AppRoutes.missingSwipe, arguments: workData); }, child: Container( width: double.infinity, diff --git a/lib/widgets/circular_avatar.dart b/lib/widgets/circular_avatar.dart index cd60e06..ad94052 100644 --- a/lib/widgets/circular_avatar.dart +++ b/lib/widgets/circular_avatar.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:flutter/material.dart'; class CircularAvatar extends StatelessWidget { @@ -5,8 +7,9 @@ class CircularAvatar extends StatelessWidget { final double radius; final double width; final double height; + final bool isImageBase64; - CircularAvatar({Key? key, this.radius = 70.0, this.width = 70, this.height = 60, this.url}) : super(key: key); + CircularAvatar({Key? key, this.radius = 70.0, this.width = 70, this.height = 60, this.url, this.isImageBase64 = false}) : super(key: key); @override Widget build(BuildContext context) { @@ -15,10 +18,23 @@ class CircularAvatar extends StatelessWidget { height: height, decoration: BoxDecoration( shape: BoxShape.circle, - image: DecorationImage( - fit: BoxFit.cover, - image: NetworkImage(url ?? "https://cdn4.iconfinder.com/data/icons/professions-2-2/151/89-512.png"), - ), + image: isImageBase64 + ? null + : DecorationImage( + fit: BoxFit.cover, + image: NetworkImage(url ?? "https://cdn4.iconfinder.com/data/icons/professions-2-2/151/89-512.png"), + ), + ), + child: isImageBase64 ? imageFromBase64String(url!) : null, + ); + } + + Widget imageFromBase64String(String base64String) { + return ClipRRect( + borderRadius: BorderRadius.circular(100), + child: Image.memory( + base64Decode(base64String), + fit: BoxFit.cover, ), ); }