diff --git a/analysis_options.yaml b/analysis_options.yaml index 90c25c1..a84033c 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -9,6 +9,17 @@ # packages, and plugins designed to encourage good coding practices. include: package:flutter_lints/flutter.yaml +analyzer: + errors: + always_use_package_imports: error + camel_case_types: error + always_declare_return_types: error + null_check_on_nullable_type_parameter: error + avoid_annotating_with_dynamic: error + unnecessary_null_checks: error + unnecessary_brace_in_string_interps: error + + linter: # The lint rules applied to this project can be customized in the # section below to disable rules from the `package:flutter_lints/flutter.yaml` @@ -25,8 +36,19 @@ linter: always_specify_types: true always_declare_return_types: true always_use_package_imports: true + avoid_unnecessary_containers: true + unnecessary_this: true + unnecessary_new: true + camel_case_types: true + null_check_on_nullable_type_parameter: true + sort_child_properties_last: true + camel_case_extensions: true + require_trailing_commas: true avoid_empty_else: true avoid_annotating_with_dynamic: true + unnecessary_null_checks: true + unnecessary_brace_in_string_interps: true + unnecessary_string_interpolations: true # avoid_print: false # Uncomment to disable the `avoid_print` rule # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule diff --git a/android/app/build.gradle b/android/app/build.gradle index 596d981..a3de0ed 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -27,7 +27,7 @@ apply plugin: 'com.google.gms.google-services' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 31 + compileSdkVersion 32 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -46,7 +46,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "hmg.cloudSolutions.mohem" minSdkVersion 21 - targetSdkVersion 30 + targetSdkVersion 32 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index d44cea3..dd9a8de 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/logos/bn_cloud_soloution.jpg b/assets/images/logos/bn_cloud_soloution.jpg new file mode 100644 index 0000000..844bc43 Binary files /dev/null and b/assets/images/logos/bn_cloud_soloution.jpg differ diff --git a/assets/images/logos/main_mohemm_logo.png b/assets/images/logos/main_mohemm_logo.png new file mode 100644 index 0000000..5536c07 Binary files /dev/null and b/assets/images/logos/main_mohemm_logo.png differ diff --git a/assets/images/logos/mohemm_logo.svg b/assets/images/logos/mohemm_logo.svg index 1cb9a0b..2fc235f 100644 --- a/assets/images/logos/mohemm_logo.svg +++ b/assets/images/logos/mohemm_logo.svg @@ -1,7 +1,6 @@ - - - + + - + - - - - - - - - - - + + + - - - - - + + + + + - - - - - + C107.1,30.8,99.6,21.8,99.2,12.7z" /> + + + + - - - - - + C80.6,30.8,73.1,21.8,72.8,12.7z" /> + + + + - + C54.1,30.8,46.6,21.8,46.3,12.7z" /> diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index 7f22931..ecedbdf 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -30,6 +30,9 @@ "services": "خدمات", "viewAllServices": "عرض جميع الخدمات", "monthlyAttendance": "الحضور الشهري", + "vacationRule": "حكم اجازة", + "startDateT": "تاريخ البدء", + "endDateT": "تاريخ الانتهاء", "workFromHome": "العمل من المنزل", "ticketRequest": "طلب تذكرة", "viewAllOffers": "مشاهدة جميع العروض", @@ -41,7 +44,7 @@ "confirmPassword": "تأكيد كلمة المرور", "update": "تحديث", "title": "عنوان", - "home": "مسكن", + "home": "الرئيسية", "mySalary": "راتبي", "createRequest": "إنشاء طلب", "forgotPassword": "هل نسيت كلمة السر", @@ -231,17 +234,18 @@ "myAttendance": "حضوري", "workOnBreak": "التعويض عن العمل اثناءالاستراحه", "next": "التالي", + "apply": "يتقدم", "mobile": "التليفون المحمول", "completingYear": "نحن نقدر لك لاستكمال خدمة", "year": "سنة", "month": "شهر", "day": "يوم", - "address" : "العنوان", + "address": "العنوان", "phoneNumber": "رقم الجوال", "businessGroup": "مجموعة العمل", "Payroll": "الراتب", "civilIdentityNumber": "رقم الهويه", - "dateOfBirth" : "تاريخ الميلاد", + "dateOfBirth": "تاريخ الميلاد", "maritalStatus ": "الحالة الاجتماعية", "fullName": "الأسم الكامل", "remove": "حذف", @@ -251,6 +255,66 @@ "writeComment": "أكتب تعليقا", "approversList": "قائمة الموافقين", "yourRequestHasBeenSubmittedForApprovals": "تم تقديم طلبك للموافقات", + "monthlyPaySlip": "قسيمة الراتب الشهرية", + "particular": "خاص", + "earnings": "أرباح", + "deductions": "الخصومات", + "paymentMethodName": "اسم طريقة الدفع", + "bankName": "اسم البنك", + "branchCode": "رمز الفرع", + "accountNo": "رقم الحساب", + "summaryOfInformation": "ملخص المعلومات", + "totalPayAmount": "المبلغ الإجمالي للدفع", + "paymentInformation": "معلومات الدفع", + "amount": "مقدار", + "correctCurrentDatails": "تعديل او اكمال التفاصيل الحالية", + "selectType": " حدد نوع التغيير الذي تريد القيام به", + "enterNewInfo": " أدخل معلومات جديدة بسبب تغيير حقيقي في التفاصيل الحالية (على سبيل المثال بسبب تغيير في الحالة الاجتماعية", + "endDate": "تاريخ الانتهاء", + "removeThisMember": "هل انت متأكد تريد ازالة هذا العضو؟", + "updateThisMember ": "هل انت متأكد تريد تحديث بيانات هذا العضو؟", + "addNewFamilyMember": "اضافة عضو جديد", + "addRow": "اضافة صف جديد", + "pleaseSelect": "الرجاء اختيار", + "delete": "حذف", + "edit": "تعديل", + "add": "اضافه", + "myProfile": "معلوماتي", + "mowadhafhi": "موظفي", + "searchAnnouncements": "بحث الاعلانات", + "announcements": "اعلانات", + "swipeRequest": "طلب تسجيل حضور", + "serviceType": "نوع الخدمه", + "departmentName": "اسم القسم", + "selectDepartment": "اختر القسم", + "relatedSection": "قسم ذو صله", + "selectSection": "اختيار القسم", + "relatedTopic": "عنوان ذو صله", + "selectTopic": "اختر العنوان", + "supportingDocument": "ارفاق مستند", + "mowadhafhiRequest": "طلب موظفي", + "ticketReference": "مرجع التذكره", + "section": "القسم", + "topic": "العنوان", + "actionBy": "الرد بواسطة", + "pending": "معلق", + "pendingTransactions": "المعاملات المعلقه", + "selectRequestType": "الرجاء اختيار نوع الطلب", + "dateFrom": "من تاريخ", + "dateTo": "الى تاريخ", + "requestName": "اسم الطلب", + "createdFor": "انشاء لأجل", + "requestCreatedSuccessfully": "تم انشاء الطلب بنجاح", + "search": "بحث", + "wantToReject": "هل انت متأكد تريد الرفض", + "requestType": "نوع الطلب", + "employeeDigitalID": "هويةالموظف الرقمية", + "businessCard": "بطاقة العمل", + "checkOut":"وقت الخروج", + "regular":"منتظم", + "mark" : "علامة", + "selectMethodOfAttendance":"اختر طريقة تسجيل الحضور", + "comeNearHMGWifi": "HMG wifi من فضلك اقترب من", "profile": { "reset_password": { "label": "Reset Password", @@ -261,8 +325,11 @@ "completeProfile": "الملف الشخصي الكامل", "personalInformation": "معلومات شخصية", "basicDetails": "تفاصيل أساسية", + "address": "تبوك", "contactDetails": "بيانات التواصل", - "familyDetails": "تفاصيل عائلية" + "familyDetails": "تفاصيل عائلية", + "effectiveDate": "تاريخ النفاذ", + "country": "دولة" }, "clicked": { "zero": "You clicked {} times!", @@ -272,14 +339,6 @@ "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 :)", diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index 5934ab3..32a5e43 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -30,6 +30,9 @@ "services": "Services", "viewAllServices": "View All Services", "monthlyAttendance": "Monthly Attendance", + "vacationRule": "Vacation Rule", + "startDateT": "Start Date", + "endDateT": "End Date", "workFromHome": "Work From Home", "ticketRequest": "Ticket Request", "viewAllOffers": "View All Offers", @@ -231,6 +234,7 @@ "myAttendance": "My Attendance", "workOnBreak": "Work On Break", "next": "Next", + "apply": "Apply", "mobile": "Mobile", "year": "Year", "month": "Month", @@ -245,13 +249,72 @@ "maritalStatus ": "Marital Status ", "fullName": "Full Name", "remove": "Remove", - "Attendance":"Attendance", + "Attendance": "Attendance", "submit": "Submit", "areYouSureYouWantToSubmit": "Are you sure you want to submit?", "comments": "Comments", "writeComment": "Write a comment", "approversList": "Approvers List", "yourRequestHasBeenSubmittedForApprovals": "Your request has been submitted for approvals", + "monthlyPaySlip": "Monthly Pay Slip", + "particular": "Particular", + "earnings": "Earnings", + "deductions": "Deductions", + "paymentMethodName": "Payment Method Name", + "bankName": "Bank Name", + "branchCode": "Branch Code", + "accountNo": "Account No", + "summaryOfInformation": "Summary of Information", + "totalPayAmount": "Total Pay Amount", + "paymentInformation": "Payment Information", + "amount": "Amount", + "correctCurrentDatails": "correct or complete the current details", + "selectType": "Select the type of change you want to make", + "enterNewInfo": "Enter new Information because of a real change to the current details (e.g because of a change in marital status)", + "endDate": "*End Date", + "removeThisMember": "Are You Sure You Want to Remove this Member?", + "updateThisMember": "Are You Sure You Want to Update this Member?", + "addNewFamilyMember": "Add New Family Member", + "addRow": "Add new row", + "pleaseSelect": "Please Select *", + "delete": "delete", + "add": "Add", + "edit": "Edit", + "myProfile": "My Profile", + "mowadhafhi": "Mowadhafhi", + "searchAnnouncements": "Search Announcements", + "announcements": "Announcements", + "swipeRequest": "Swipe Request", + "serviceType": "Service Type", + "departmentName": "Department Name", + "selectDepartment": "Select Department", + "relatedSection": "Related Section", + "selectSection": "Select Section", + "relatedTopic": "Related Topic", + "selectTopic": "Select Topic", + "supportingDocument": "Supporting Document", + "mowadhafhiRequest": "Mowadhafhi Request", + "ticketReference": "Ticket Reference", + "section": "Section", + "topic": "Topic", + "actionBy": "Action By", + "pendingTransactions": "Pending Transactions", + "selectRequestType": "Please select request type", + "dateFrom": "Date From", + "dateTo": "Date To", + "requestName": "Request Name", + "createdFor": "Created For", + "requestType": "Request Type", + "requestCreatedSuccessfully": "Request created successfully", + "search": "Search", + "wantToReject": "Are you sure want to reject?", + "employeeDigitalID": "Employee Digital ID", + "businessCard": "Business Card", + "checkOut":"Check Out", + "regular":"Regular", + "mark" : "Mark", + "selectMethodOfAttendance":"Select the method to mark the attendance", + "comeNearHMGWifi": "Please come near to HMG wifi", "profile": { "reset_password": { "label": "Reset Password", @@ -262,8 +325,11 @@ "completeProfile": "Complete Profile", "personalInformation": "Personal Information", "basicDetails": "Basic Details", + "address": "Address", "contactDetails": "Contact Details", - "familyDetails": "Family Members" + "familyDetails": "Family Members", + "effectiveDate": "Effective Date", + "country": "Country" }, "clicked": { "zero": "You clicked {} times!", @@ -273,14 +339,6 @@ "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 :)", diff --git a/lib/api/api_client.dart b/lib/api/api_client.dart index 258b2af..2f53f78 100644 --- a/lib/api/api_client.dart +++ b/lib/api/api_client.dart @@ -7,8 +7,8 @@ import 'package:http/http.dart'; import 'package:http/io_client.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/exceptions/api_exception.dart'; - -import '../main.dart'; +import 'package:mohem_flutter_app/main.dart'; +// ignore_for_file: avoid_annotating_with_dynamic typedef FactoryConstructor = U Function(dynamic); diff --git a/lib/api/dashboard_api_client.dart b/lib/api/dashboard_api_client.dart index 444eb21..1dd58b1 100644 --- a/lib/api/dashboard_api_client.dart +++ b/lib/api/dashboard_api_client.dart @@ -1,17 +1,13 @@ import 'dart:async'; +import 'package:mohem_flutter_app/api/api_client.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/consts.dart'; -import 'package:mohem_flutter_app/models/basic_member_information_model.dart'; -import 'package:mohem_flutter_app/models/check_mobile_app_version_model.dart'; import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_model.dart'; import 'package:mohem_flutter_app/models/dashboard/itg_forms_model.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart'; -import 'package:mohem_flutter_app/models/member_login_list_model.dart'; import 'package:uuid/uuid.dart'; -import 'api_client.dart'; - class DashboardApiClient { static final DashboardApiClient _instance = DashboardApiClient._internal(); @@ -92,7 +88,7 @@ class DashboardApiClient { } //Mark Attendance - Future markAttendance({String lat = "0", String? long = "0", required int pointType, String nfcValue = "", bool isGpsRequired = false}) async { + Future markAttendance({String lat = "0", String? long = "0", required int pointType, String nfcValue = "", bool isGpsRequired = false, String QRValue = ""}) async { String url = "${ApiConsts.swpRest}AuthenticateAndSwipeUserSupportNFC"; var uuid = Uuid(); // Generate a v4 (random) id @@ -101,7 +97,7 @@ class DashboardApiClient { "UID": uuid.v4(), //Mobile Id "Latitude": lat, "Longitude": long, - "QRValue": "", + "QRValue": QRValue, "PointType": pointType, // NFC=2, Wifi = 3, QR= 1, "NFCValue": nfcValue, "WifiValue": pointType == 3 ? "100" : "", diff --git a/lib/api/eit_api_client.dart b/lib/api/eit_api_client.dart index e3f78bf..9e4f292 100644 --- a/lib/api/eit_api_client.dart +++ b/lib/api/eit_api_client.dart @@ -10,7 +10,7 @@ import 'package:mohem_flutter_app/models/eit/get_eit_transaction_model.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/member_login_list_model.dart'; -import 'api_client.dart'; +import 'package:mohem_flutter_app/api/api_client.dart'; class EITApiClient { static final EITApiClient _instance = EITApiClient._internal(); @@ -24,7 +24,7 @@ class EITApiClient { Map postParams = {'P_FUNCTION_NAME': functionName, "P_MENU_TYPE": "E", "P_PAGE_LIMIT": 50, "P_PAGE_NUM": 1}; postParams.addAll(AppState().postParamsJson); return await ApiClient().postJsonForObject((json) { - List? responseData = GET_EIT_Transactions_Model.fromJson(json['GetEITTransactionList'][0]).collectionTransaction; + List? responseData = GetEitTransactionsModel.fromJson(json['GetEITTransactionList'][0]).collectionTransaction; return responseData; }, url, postParams); } diff --git a/lib/api/login_api_client.dart b/lib/api/login_api_client.dart index ed7191c..cd6a948 100644 --- a/lib/api/login_api_client.dart +++ b/lib/api/login_api_client.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:mohem_flutter_app/api/api_client.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/consts.dart'; import 'package:mohem_flutter_app/models/basic_member_information_model.dart'; @@ -8,8 +9,6 @@ import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/get_mobile_login_info_list_model.dart'; import 'package:mohem_flutter_app/models/member_login_list_model.dart'; -import 'api_client.dart'; - class LoginApiClient { static final LoginApiClient _instance = LoginApiClient._internal(); diff --git a/lib/api/monthlyAttendance_api_client.dart b/lib/api/monthly_attendance_api_client.dart similarity index 96% rename from lib/api/monthlyAttendance_api_client.dart rename to lib/api/monthly_attendance_api_client.dart index bcbf69f..543addb 100644 --- a/lib/api/monthlyAttendance_api_client.dart +++ b/lib/api/monthly_attendance_api_client.dart @@ -8,8 +8,9 @@ import 'package:mohem_flutter_app/models/get_day_hours_type_details_list_model.d import 'package:mohem_flutter_app/models/get_mobile_login_info_list_model.dart'; import 'package:mohem_flutter_app/models/get_schedule_shifts_details_list_model.dart'; import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart'; -import 'api_client.dart'; +import 'package:mohem_flutter_app/api/api_client.dart'; +// todo '@fatima' change file name according to structure class MonthlyAttendanceApiClient { static final MonthlyAttendanceApiClient _instance = MonthlyAttendanceApiClient._internal(); @@ -17,7 +18,6 @@ class MonthlyAttendanceApiClient { factory MonthlyAttendanceApiClient() => _instance; - Future getTimeCardSummary(String month, int year) async { String url = "${ApiConsts.erpRest}GET_TIME_CARD_SUMMARY"; Map postParams = { diff --git a/lib/api/monthly_pay_slip_api_client.dart b/lib/api/monthly_pay_slip_api_client.dart new file mode 100644 index 0000000..95bf847 --- /dev/null +++ b/lib/api/monthly_pay_slip_api_client.dart @@ -0,0 +1,68 @@ +import 'package:mohem_flutter_app/api/api_client.dart'; +import 'package:mohem_flutter_app/app_state/app_state.dart'; +import 'package:mohem_flutter_app/classes/consts.dart'; +import 'package:mohem_flutter_app/models/generic_response_model.dart'; +import 'package:mohem_flutter_app/models/monthly_pay_slip/get_deductions_List_model.dart'; +import 'package:mohem_flutter_app/models/monthly_pay_slip/get_earnings_list_model.dart'; +import 'package:mohem_flutter_app/models/monthly_pay_slip/get_pay_slip_list_model.dart'; +import 'package:mohem_flutter_app/models/monthly_pay_slip/get_payment_information_list_model.dart'; +import 'package:mohem_flutter_app/models/monthly_pay_slip/get_summary_of_payment_list_model.dart'; + +class MonthlyPaySlipApiClient { + static final MonthlyPaySlipApiClient _instance = MonthlyPaySlipApiClient._internal(); + + MonthlyPaySlipApiClient._internal(); + + factory MonthlyPaySlipApiClient() => _instance; + + Future> getPaySlip() async { + String url = "${ApiConsts.erpRest}GET_PAYSLIP"; + Map postParams = {"P_MENU_TYPE": "E", "P_SELECTED_RESP_ID": -999}; + postParams.addAll(AppState().postParamsJson); + print(postParams); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getPayslipList ?? []; + }, url, postParams); + } + + Future> getSummaryOfPayment(int pActionContextID) async { + String url = "${ApiConsts.erpRest}GET_SUMMARY_OF_PAYMENT"; + Map postParams = {"P_ACTION_CONTEXT_ID": pActionContextID}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getSummaryOfPaymentList ?? []; + }, url, postParams); + } + + Future> getPaymentInformation(int pActionContextID) async { + String url = "${ApiConsts.erpRest}GET_PAYMENT_INFORMATION"; + Map postParams = {"P_ACTION_CONTEXT_ID": pActionContextID}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getPaymentInformationList ?? []; + }, url, postParams); + } + + Future> getDeductions(int pActionContextID) async { + String url = "${ApiConsts.erpRest}GET_DEDUCTIONS"; + Map postParams = {"P_ACTION_CONTEXT_ID": pActionContextID, "P_PAGE_LIMIT": 100, "P_PAGE_NUM": 1}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getDeductionsList ?? []; + }, url, postParams); + } + + Future> getEarnings(int pActionContextID) async { + String url = "${ApiConsts.erpRest}GET_EARNINGS"; + Map postParams = {"P_ACTION_CONTEXT_ID": pActionContextID, "P_PAGE_LIMIT": 100, "P_PAGE_NUM": 1}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getEarningsList ?? []; + }, url, postParams); + } +} diff --git a/lib/api/mowadhafhi/mowadhafhi_api_client.dart b/lib/api/mowadhafhi/mowadhafhi_api_client.dart index 935a22f..e5ecc4b 100644 --- a/lib/api/mowadhafhi/mowadhafhi_api_client.dart +++ b/lib/api/mowadhafhi/mowadhafhi_api_client.dart @@ -9,8 +9,7 @@ import 'package:mohem_flutter_app/models/mowadhafhi/get_section_topics.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_details.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_transactions.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_types.dart'; - -import '../../models/mowadhafhi/get_tickets_list.dart'; +import 'package:mohem_flutter_app/models/mowadhafhi/get_tickets_list.dart'; class MowadhafhiApiClient { static final MowadhafhiApiClient _instance = MowadhafhiApiClient._internal(); @@ -115,7 +114,7 @@ class MowadhafhiApiClient { String url = "${ApiConsts.cocRest}Mohemm_ITG_CreateTicketMobile"; Map postParams = { "EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER, - "ItgImageCollList" : attachmentList, + "ItgImageCollList": attachmentList, "channelId": 3, "departmentId": departmentID, "description": description, diff --git a/lib/api/my_attendance_api_client.dart b/lib/api/my_attendance_api_client.dart index afae637..9e58b9b 100644 --- a/lib/api/my_attendance_api_client.dart +++ b/lib/api/my_attendance_api_client.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:mohem_flutter_app/api/api_client.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/consts.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart'; @@ -9,8 +10,6 @@ import 'package:mohem_flutter_app/models/get_eit_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/start_eit_approval_process_model.dart'; import 'package:mohem_flutter_app/models/submit_eit_transaction_list_model.dart'; -import 'api_client.dart'; - class MyAttendanceApiClient { static final MyAttendanceApiClient _instance = MyAttendanceApiClient._internal(); @@ -83,12 +82,8 @@ class MyAttendanceApiClient { "P_MENU_TYPE": "E", "P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode, "P_FUNCTION_NAME": pFunctionName, - // "EITTransactionTBL": list, + "EITTransactionTBL": list, }; - print(postParams); - postParams["EITTransactionTBL"] =list; - - postParams.addAll(AppState().postParamsJson); return await ApiClient().postJsonForObject((json) { GenericResponseModel? responseData = GenericResponseModel.fromJson(json); @@ -103,13 +98,10 @@ class MyAttendanceApiClient { "P_MENU_TYPE": "E", "P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode, "P_FUNCTION_NAME": pFunctionName, - //"EITTransactionTBL": list, - // "EITTransactionTBLModel": list, + "EITTransactionTBL": list, + "EITTransactionTBLModel": list, }; postParams.addAll(AppState().postParamsJson); - print("postParams:$postParams"); - postParams["EITTransactionTBL"] = list; - postParams["EITTransactionTBLModel"] = list; return await ApiClient().postJsonForObject((json) { GenericResponseModel responseData = GenericResponseModel.fromJson(json); return responseData.submitEITTransactionList!; //ESERVICESDV.fromJson(responseData.getDefaultValueList!.toJson()); diff --git a/lib/api/pending_transactions_api_client.dart b/lib/api/pending_transactions_api_client.dart index 30c6241..b8ddd60 100644 --- a/lib/api/pending_transactions_api_client.dart +++ b/lib/api/pending_transactions_api_client.dart @@ -5,6 +5,8 @@ import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/pending_transactions/get_pending_transactions_details.dart'; import 'package:mohem_flutter_app/models/pending_transactions/get_req_functions.dart'; +// todo '@haroon' kindly format code + class PendingTransactionsApiClient { static final PendingTransactionsApiClient _instance = PendingTransactionsApiClient._internal(); @@ -37,7 +39,6 @@ class PendingTransactionsApiClient { Future getAnnouncements(int itgAwarenessID, int itgPageNo, int itgRowID) async { String url = "${ApiConsts.cocRest}GetAnnouncementDiscountsConfigData"; Map postParams = {"EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER.toString(), "ItgAwarenessID": itgAwarenessID, "ItgPageNo": itgPageNo, "ItgPageSize": 5, "ItgRowID": itgRowID}; - postParams.addAll(AppState().postParamsJson); return await ApiClient().postJsonForObject((json) { GenericResponseModel? responseData = GenericResponseModel.fromJson(json); diff --git a/lib/api/profile_api_client.dart b/lib/api/profile_api_client.dart index 3768a64..b332499 100644 --- a/lib/api/profile_api_client.dart +++ b/lib/api/profile_api_client.dart @@ -3,13 +3,28 @@ import 'dart:async'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/consts.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart'; +import 'package:mohem_flutter_app/models/get_approves_list_model.dart'; +import 'package:mohem_flutter_app/models/get_contact_dff_structure_list.dart'; import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; import 'package:mohem_flutter_app/models/get_employee_address_model.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; import 'package:mohem_flutter_app/models/get_employee_phones_model.dart'; -import 'package:mohem_flutter_app/models/profile/phone_number_types_modek.dart'; -import 'api_client.dart'; +import 'package:mohem_flutter_app/models/profile/get_countries_list_model.dart'; +import 'package:mohem_flutter_app/models/profile/phone_number_types_model.dart'; +import 'package:mohem_flutter_app/models/profile/start_address_approval_process_model.dart'; +import 'package:mohem_flutter_app/models/profile/submit_address_transaction.dart'; +import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart'; +import 'package:mohem_flutter_app/models/profile/get_contact_clos_structure_list.dart'; +import 'package:mohem_flutter_app/models/profile/get_contact_details_list.dart'; +import 'package:mohem_flutter_app/models/profile/submit_basic_details_transaction_model.dart'; +import 'package:mohem_flutter_app/models/profile/submit_contact_transaction_list_model.dart'; +import 'package:mohem_flutter_app/models/profile/submit_phone_transactions.dart'; +import 'package:mohem_flutter_app/models/start_phone_approval_process_model.dart'; +import 'package:mohem_flutter_app/models/profile/submit_contact_transaction_list_model.dart'; +import 'package:mohem_flutter_app/models/profile/submit_phone_transactions.dart'; +import 'package:mohem_flutter_app/models/start_eit_approval_process_model.dart'; +import 'package:mohem_flutter_app/api/api_client.dart'; class ProfileApiClient { static final ProfileApiClient _instance = ProfileApiClient._internal(); @@ -83,7 +98,7 @@ class ProfileApiClient { Future getDffStructure(String pFunctionName, String uRL, String requestType) async { String url = ApiConsts.erpRest + uRL; - Map postParams = {"P_SELECTED_RESP_ID": -999, "P_MENU_TYPE": "E", "P_FUNCTION_NAME": pFunctionName, "P_REQUEST_TYPE": requestType}; + Map postParams = {"P_SELECTED_RESP_ID": -999, "P_MENU_TYPE": "E", "P_REQUEST_TYPE": pFunctionName, "P_COUNTRY_CODE": "SA"}; postParams.addAll(AppState().postParamsJson); return await ApiClient().postJsonForObject((json) { GenericResponseModel? responseData = GenericResponseModel.fromJson(json); @@ -130,4 +145,254 @@ class ProfileApiClient { return responseData.getObjectValuesList ?? []; }, url, postParams); } + + Future submetConatctTransaction( + String pFunctionName, + String actionType, + int contactRelationId, + String date, + ) async { + String url = "${ApiConsts.erpRest}SUBMIT_CONTACT_TRANSACTION"; + Map postParams = { + "P_MENU_TYPE": "E", + "P_SELECTED_RESP_ID": -999, + "P_FUNCTION_NAME": pFunctionName, + "EITTransactionTBL": [ + { + "TRANSACTION_NUMBER": 1, + "NAME": "DATE_END", + "VARCHAR2_VALUE": null, + "NUMBER_VALUE": null, + "DATE_VALUE": date, + } + ], + "P_CONTACT_RELATIONSHIP_ID": contactRelationId, + "P_ACTION": actionType, + "PayrollCodeStr": "CS", + "LegislationCodeStr": "SA", + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.submitContactTransactionList; + }, url, postParams); + } + + Future getApproves(String action, String comments, int transactionId, String itemKey) async { + String url = "${ApiConsts.erpRest}GET_APPROVERS_LIST"; + Map postParams = { + "P_AME_TRANSACTION_TYPE": "SSHRMS", + "P_PAGE_LIMIT": 1000, + "P_PAGE_NUM": 1, + "P_TRANSACTION_ID": transactionId, + "P_ACTION_MODE": action, + "P_COMMENTS": comments, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + // return responseData.getApprovesList; + return (responseData.getApprovesList?.length ?? 0) > 0 ? responseData.getApprovesList!.first : null; + }, url, postParams); + } + + Future submitPhoneNumbers(List empList) async { + String url = "${ApiConsts.erpRest}SUBMIT_PHONES_TRANSACTION"; + Map postParams = { + "P_MENU_TYPE": "E", + "P_SELECTED_RESP_ID": -999, + "P_FUNCTION_NAME": "HR_PERINFO_SS", + "P_MBL_PHONES_TBL": empList.map((element) { + return element.toJson(); + }).toList() + }; + + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return SubmitPhonesTransactionList.fromJson(responseData.submitPhonesTransactionList ?? {}); + }, url, postParams); + } + + Future startPhoneApprovalProcess(String action, String comments, String itemKey, int transactionId) async { + String url = "${ApiConsts.erpRest}START_PHONES_APPROVAL_PROCESS"; + Map postParams = { + "P_SELECTED_RESP_ID": -999, + "P_MENU_TYPE": "E", + "P_ACTION_MODE": action, + "P_COMMENTS": comments, + "P_ITEM_KEY": itemKey, + "P_TRANSACTION_ID": transactionId, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.startPhonesApprovalProcessList; + }, url, postParams); + } + + Future startAddressApprovalProcess(String action, String comments, String itemKey, int transactionId) async { + String url = "${ApiConsts.erpRest}START_ADDRESS_APPROVAL_PROCESS"; + Map postParams = { + "P_SELECTED_RESP_ID": -999, + "P_MENU_TYPE": "E", + "P_ACTION_MODE": action, + "P_COMMENTS": comments, + "P_ITEM_KEY": itemKey, + "P_TRANSACTION_ID": transactionId, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.startAddressApprovalProcessList; + }, url, postParams); + } + + Future submitBasicDetailsTransaction(String pDescFlexContextCode, String pFunctionName, List> list, int correctOrNew) async { + String url = "${ApiConsts.erpRest}SUBMIT_BASIC_DET_TRANSACTION"; + Map postParams = { + "P_SELECTED_RESP_ID": -999, + "P_MENU_TYPE": "E", + "P_FUNCTION_NAME": pFunctionName, + "P_ACTION_TYPE": correctOrNew == 1 ? 'CORRECT' : 'CHANGE', + //"EITTransactionTBL": list, + // "EITTransactionTBLModel": list, + }; + postParams.addAll(AppState().postParamsJson); + print("postParams:$postParams"); + postParams["EITTransactionTBL"] = list; + postParams["EITTransactionTBLModel"] = list; + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData.submitBasicDetTransactionList!; //ESERVICESDV.fromJson(responseData.getDefaultValueList!.toJson()); + }, url, postParams); + } + + Future startBasicDetailsApprovalProcess(String action, String comments, String itemKey, int transactionId) async { + String url = "${ApiConsts.erpRest}START_BASIC_DET_APPR_PROCESS"; + Map postParams = { + "P_SELECTED_RESP_ID": -999, + "P_MENU_TYPE": "E", + "P_ACTION_MODE": action, + "P_COMMENTS": comments, + "P_ITEM_KEY": itemKey, + "P_TRANSACTION_ID": transactionId, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.startAddressApprovalProcessList; + }, url, postParams); + } + + Future submitAddressTransaction( + String pDescFlexContextCode, String pFunctionName, List> list, int correctOrNew, String countryCode, String effectiveDate) async { + String url = "${ApiConsts.erpRest}SUBMIT_ADDRESS_TRANSACTION"; + Map postParams = { + "P_SELECTED_RESP_ID": -999, + "P_MENU_TYPE": "E", + "P_COUNTRY_CODE": countryCode, //"SA", + "P_DESC_FLEX_CONTEXT_CODE": "SA", + "P_FUNCTION_NAME": pFunctionName, + "P_ACTION": correctOrNew == 1 ? 'CORRECT' : 'NEW', + "P_EFFECTIVE_DATE": effectiveDate, + + //"EITTransactionTBL": list, + // "EITTransactionTBLModel": list, + }; + postParams.addAll(AppState().postParamsJson); + print("postParams:$postParams"); + postParams["EITTransactionTBL"] = list; + // postParams["EITTransactionTBLModel"] = list; + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData.submitAddressTransactionList!; //ESERVICESDV.fromJson(responseData.getDefaultValueList!.toJson()); + }, url, postParams); + } + + Future> getCountriesList() async { + String url = "${ApiConsts.erpRest}GET_COUNTRIES"; + Map postParams = { + "P_MENU_TYPE": "E", + "P_SELECTED_RESP_ID": -999, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getCountriesList ?? []; + }, url, postParams); + } + + // add & update family member + Future> getBasicDetDffStructure() async { + String url = "${ApiConsts.erpRest}GET_BASIC_DET_DFF_STRUCTURE"; + Map postParams = {"P_FUNCTION_NAME": "HR_PERINFO_SS", "P_MENU_TYPE": "E", "P_REQUEST_TYPE": "CONTACT", "P_SELECTED_RESP_ID": -999}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getBasicDetDffStructureList ?? []; + }, url, postParams); + } + + // add & update family member + Future> getContactColsStructureList(String actionType) async { + String url = "${ApiConsts.erpRest}GET_CONTACT_COLS_STRUCTURE"; + Map postParams = { + "P_ACTION": actionType, + "P_FUNCTION_NAME": "HR_PERINFO_SS", + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getContactColsStructureList ?? []; + }, url, postParams); + } + + // update family member + Future> getContactDetailsList(int contactRelationId) async { + String url = "${ApiConsts.erpRest}GET_CONTACT_DETAILS"; + Map postParams = { + "P_MENU_TYPE": "E", + "P_SELECTED_RESP_ID": -999, + "P_CONTACT_RELATIONSHIP_ID": contactRelationId, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getContactDetailsList ?? []; + }, url, postParams); + } + + // add & update family member + Future> getContactDffStructureList() async { + String url = "${ApiConsts.erpRest}GET_CONTACT_DFF_STRUCTURE"; + Map postParams = { + "P_DESC_FLEX_CONTEXT_CODE": "HMG_ADD_CONTACT_DETAILS", + "P_FUNCTION_NAME": "HR_PERINFO_SS", + "P_MENU_TYPE": "E", + "P_SELECTED_RESP_ID": -999, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getContactDffStructureList ?? []; + }, url, postParams); + } + + Future submetConatctTransactionAddAndUpdate(String actionType, int relationId, List> list) async { + String url = "${ApiConsts.erpRest}SUBMIT_CONTACT_TRANSACTION"; + Map postParams = { + "P_MENU_TYPE": "E", + "P_SELECTED_RESP_ID": -999, + "P_FUNCTION_NAME": "HR_PERINFO_SS", + "P_ACTION": actionType, + "P_CONTACT_RELATIONSHIP_ID": relationId, + }; + postParams["EITTransactionTBL"] = list; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.submitContactTransactionList; + }, url, postParams); + } } diff --git a/lib/api/tangheem_user_api_client.dart b/lib/api/tangheem_user_api_client.dart deleted file mode 100644 index 32a5a82..0000000 --- a/lib/api/tangheem_user_api_client.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'dart:async'; - -import 'package:mohem_flutter_app/classes/consts.dart'; -import 'package:mohem_flutter_app/models/content_info_model.dart'; -import 'package:mohem_flutter_app/models/member_login_list_model.dart'; -import 'package:mohem_flutter_app/models/surah_model.dart'; - -import 'api_client.dart'; - -class TangheemUserApiClient { - static final TangheemUserApiClient _instance = TangheemUserApiClient._internal(); - - TangheemUserApiClient._internal(); - - factory TangheemUserApiClient() => _instance; - - // Future getSurahs() async { - // String url = "${ApiConsts.tangheemUsers}AlSuar_Get"; - // var postParams = {}; - // return await ApiClient().postJsonForObject((json) => SurahModel.fromJson(json), url, postParams); - // } - // - // Future getMembers() async { - // String url = "${ApiConsts.tangheemUsers}Committee_Get"; - // var postParams = {}; - // return await ApiClient().postJsonForObject((json) => MemberModel.fromJson(json), url, postParams); - // } - // - // Future getContentInfo(int contentId) async { - // String url = "${ApiConsts.tangheemUsers}ContentInfo_Get"; - // var postParams = {"contentTypeId": contentId}; - // return await ApiClient().postJsonForObject((json) => ContentInfoModel.fromJson(json), url, postParams); - // } -} diff --git a/lib/api/vacation_rule_api_client.dart b/lib/api/vacation_rule_api_client.dart new file mode 100644 index 0000000..d144174 --- /dev/null +++ b/lib/api/vacation_rule_api_client.dart @@ -0,0 +1,78 @@ +import 'package:mohem_flutter_app/api/api_client.dart'; +import 'package:mohem_flutter_app/app_state/app_state.dart'; +import 'package:mohem_flutter_app/classes/consts.dart'; +import 'package:mohem_flutter_app/models/generic_response_model.dart'; +import 'package:mohem_flutter_app/models/vacation_rule/get_item_type_notifications_list_model.dart'; +import 'package:mohem_flutter_app/models/vacation_rule/get_notification_reassign_mode_list_model.dart'; +import 'package:mohem_flutter_app/models/vacation_rule/get_vacation_rules_list_model.dart'; +import 'package:mohem_flutter_app/models/vacation_rule/respond_attributes_list_model.dart'; +import 'package:mohem_flutter_app/models/vacation_rule/vr_item_types_list_model.dart'; +import 'package:mohem_flutter_app/models/vacation_rule/wf_look_up_list_model.dart'; + +class VacationRuleApiClient { + static final VacationRuleApiClient _instance = VacationRuleApiClient._internal(); + + VacationRuleApiClient._internal(); + + factory VacationRuleApiClient() => _instance; + + Future> getVacationRules() async { + String url = "${ApiConsts.erpRest}GET_VACATION_RULES"; + Map postParams = {"P_PAGE_LIMIT": 50, "P_PAGE_NUM": 1}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getVacationRulesList ?? []; + }, url, postParams); + } + + Future> getVrItemTypes() async { + String url = "${ApiConsts.erpRest}GET_VR_ITEM_TYPES"; + Map postParams = {}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.vrItemTypesList ?? []; + }, url, postParams); + } + + Future> getItemTypeNotifications(String pItemType) async { + String url = "${ApiConsts.erpRest}GET_ITEM_TYPE_NOTIFICATIONS"; + Map postParams = {"P_ITEM_TYPE": pItemType}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getItemTypeNotificationsList ?? []; + }, url, postParams); + } + + Future> getNotificationReassignMode() async { + String url = "${ApiConsts.erpRest}GET_NOTIFICATION_REASSIGN_MODE"; + Map postParams = {}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getNotificationReassignModeList ?? []; + }, url, postParams); + } + + Future> getRespondAttributes(String pItemType, String pNotificationName) async { + String url = "${ApiConsts.erpRest}GET_RESPOND_ATTRIBUTES"; + Map postParams = {"P_ITEM_TYPE": pItemType, "P_NOTIFICATION_NAME": pNotificationName}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.respondAttributesList ?? []; + }, url, postParams); + } + + Future> getWfLookup(String pLookupType) async { + String url = "${ApiConsts.erpRest}GET_WF_LOOKUP"; + Map postParams = {"P_LOOKUP_TYPE": pLookupType}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.wFLookUpList ?? []; + }, url, postParams); + } +} diff --git a/lib/api/worklist/worklist_api_client.dart b/lib/api/worklist/worklist_api_client.dart index 2cb4a5c..bc05627 100644 --- a/lib/api/worklist/worklist_api_client.dart +++ b/lib/api/worklist/worklist_api_client.dart @@ -20,17 +20,14 @@ import 'package:mohem_flutter_app/models/get_stamp_ns_notification_body_list_mod import 'package:mohem_flutter_app/models/itg_forms_models/itg_request_model.dart'; import 'package:mohem_flutter_app/models/member_information_list_model.dart'; import 'package:mohem_flutter_app/models/notification_get_respond_attributes_list_model.dart'; +import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart'; +import 'package:mohem_flutter_app/models/worklist/hr/eit_otification_body_model.dart'; +import 'package:mohem_flutter_app/models/worklist/hr/get_basic_det_ntf_body_list_model.dart'; +import 'package:mohem_flutter_app/models/worklist/hr/get_contact_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/worklist/hr/get_phones_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart'; import 'package:mohem_flutter_app/models/worklist_response_model.dart'; -import '../../models/worklist/hr/eit_otification_body_model.dart'; -import '../../models/worklist/get_favorite_replacements_model.dart'; -import '../../models/worklist/hr/get_basic_det_ntf_body_list_model.dart'; -import '../../models/worklist/hr/get_contact_notification_body_list_model.dart'; -import '../../models/worklist/hr/get_phones_notification_body_list_model.dart'; -import '../../models/worklist/hr/get_phones_notification_body_list_model.dart'; - class WorkListApiClient { static final WorkListApiClient _instance = WorkListApiClient._internal(); diff --git a/lib/classes/app_permissions.dart b/lib/classes/app_permissions.dart index a70342c..983b400 100644 --- a/lib/classes/app_permissions.dart +++ b/lib/classes/app_permissions.dart @@ -1,7 +1,7 @@ import 'package:permission_handler/permission_handler.dart'; class AppPermissions{ - static location(Function(bool) completion) { + static void location(Function(bool) completion) { Permission.location.isGranted.then((isGranted){ if(!isGranted){ Permission.location.request().then((granted){ @@ -13,7 +13,7 @@ class AppPermissions{ } - static checkAll(Function(bool) completion){ + static void checkAll(Function(bool) completion){ [ Permission.location ].request().then((value){ diff --git a/lib/classes/date_uitl.dart b/lib/classes/date_uitl.dart index 7fb4b9f..8754fdb 100644 --- a/lib/classes/date_uitl.dart +++ b/lib/classes/date_uitl.dart @@ -133,7 +133,7 @@ class DateUtil { /// get month by /// [month] convert month number in to month name - static getMonth(int month) { + static String getMonth(int month) { switch (month) { case 1: return "January"; @@ -159,12 +159,14 @@ class DateUtil { return "November"; case 12: return "December"; + default: + return ""; } } /// get month by /// [month] convert month number in to month name in Arabic - static getMonthArabic(int month) { + static String getMonthArabic(int month) { switch (month) { case 1: return "يناير"; @@ -190,10 +192,12 @@ class DateUtil { return " نوفمبر"; case 12: return "ديسمبر"; + default: + return ""; } } - static getMonthByName(String month) { + static int getMonthByName(String month) { switch (month.toLowerCase()) { case 'january': return 1; @@ -219,6 +223,8 @@ class DateUtil { return 11; case 'december': return 12; + default: + return 0; } } @@ -234,7 +240,7 @@ class DateUtil { /// get month by /// [weekDay] convert week day in int to week day name - static getWeekDay(int weekDay) { + static String getWeekDay(int weekDay) { switch (weekDay) { case 1: return "Monday"; @@ -250,12 +256,14 @@ class DateUtil { return "Saturday "; case 7: return "Sunday"; + default: + return ""; } } /// get month by /// [weekDay] convert week day in int to week day name arabic - static getWeekDayArabic(int weekDay) { + static String getWeekDayArabic(int weekDay) { switch (weekDay) { case 1: return "الاثنين"; @@ -271,10 +279,12 @@ class DateUtil { return "السبت "; case 7: return "الاحد"; + default: + return ""; } } - static getWeekDayEnglish(int weekDay) { + static String getWeekDayEnglish(int weekDay) { switch (weekDay) { case 1: return "Monday"; @@ -290,6 +300,8 @@ class DateUtil { return "Saturday "; case 7: return "Sunday"; + default: + return ""; } } @@ -415,7 +427,7 @@ class DateUtil { return DateFormat(formattedString).format(dateTime); } - static convertISODateToJsonDate(String isoDate) { + static String convertISODateToJsonDate(String isoDate) { return "/Date(" + DateFormat('mm-dd-yyy').parse(isoDate).millisecondsSinceEpoch.toString() + ")/"; } diff --git a/lib/classes/file_process.dart b/lib/classes/file_process.dart index 29f24c8..6974702 100644 --- a/lib/classes/file_process.dart +++ b/lib/classes/file_process.dart @@ -9,7 +9,7 @@ class FileProcess { static bool isFolderCreated = false; static Directory? directory; - static checkDocumentFolder() async { + static Future checkDocumentFolder() async { try { if (!isFolderCreated) { directory = await getApplicationDocumentsDirectory(); @@ -24,7 +24,7 @@ class FileProcess { } static void openFile(String fileName) { - String dir = directory!.path + "/${fileName}.pdf"; + String dir = directory!.path + "/$fileName.pdf"; OpenFile.open(dir); } diff --git a/lib/classes/utils.dart b/lib/classes/utils.dart index 20d791b..292bc4c 100644 --- a/lib/classes/utils.dart +++ b/lib/classes/utils.dart @@ -1,17 +1,22 @@ import 'dart:convert'; import 'dart:typed_data'; +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/config/routes.dart'; - -// import 'package:fluttertoast/fluttertoast.dart'; import 'package:mohem_flutter_app/exceptions/api_exception.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/widgets/dialogs/confirm_dialog.dart'; import 'package:mohem_flutter_app/widgets/loading_dialog.dart'; import 'package:shared_preferences/shared_preferences.dart'; +// ignore_for_file: avoid_annotating_with_dynamic class Utils { static bool _isLoadingVisible = false; @@ -120,33 +125,29 @@ class Utils { } static Widget getNoDataWidget(BuildContext context) { - return Container( - child: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - SvgPicture.asset('assets/images/not_found.svg', width: 110.0, height: 110.0), - Container(margin: const EdgeInsets.only(top: 15.0), child: const Text("No Result Found", style: TextStyle(fontSize: 14, fontWeight: FontWeight.w600, color: Color(0xFFBABABA)))), - ], - ), - ), - ); + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SvgPicture.asset('assets/images/not_found.svg', width: 110.0, height: 110.0), + Container(margin: const EdgeInsets.only(top: 15.0), child: LocaleKeys.noDataAvailable.tr().toText16().center), + ], + ).center; } - static getPostBytes(img) { + static Uint8List getPostBytes(img) { try { var b64 = img.replaceFirst('data:image/png;base64,', ''); if (img != null && Utils.isBase64(b64)) return Utils.dataFromBase64String(b64); } catch (e) {} - return null; + return Uint8List.fromList([]); } - static getBase64FromJpeg(img) { + static String getBase64FromJpeg(img) { try { var b64 = img.replaceFirst('data:image/jpeg;base64,', ''); return b64; } catch (e) {} - return null; + return ""; } static bool isBase64(String str) { @@ -157,4 +158,38 @@ class Utils { static Uint8List dataFromBase64String(String base64String) { return base64Decode(base64String); } + + static Widget tableColumnTitle(String? text, {bool showDivider = true, bool alignCenter = false}) { + text ??= ""; + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + 6.height, + alignCenter ? text.toText12().center : text.toText12(), + 5.height, + if (showDivider) + const Divider( + height: 1, + color: Color(0xff2E303A), + thickness: 1, + ) + ], + ); + } + + static Widget tableColumnValue(String text, {bool isCapitable = true, bool alignCenter = false}) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + 12.height, + if (alignCenter) + (isCapitable ? text.toLowerCase().capitalizeFirstofEach : text).toText12(color: MyColors.normalTextColor).center + else + (isCapitable ? text.toLowerCase().capitalizeFirstofEach : text).toText12(color: MyColors.normalTextColor), + 12.height, + ], + ); + } } diff --git a/lib/config/routes.dart b/lib/config/routes.dart index 509f6f8..72dc5ed 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:mohem_flutter_app/ui/attendance/monthly_attendance.dart'; +import 'package:mohem_flutter_app/ui/attendance/add_vacation_rule_screen.dart'; +import 'package:mohem_flutter_app/ui/attendance/monthly_attendance_screen.dart'; +import 'package:mohem_flutter_app/ui/attendance/vacation_rule_screen.dart'; import 'package:mohem_flutter_app/ui/bottom_sheets/attendence_details_bottom_sheet.dart'; import 'package:mohem_flutter_app/ui/landing/dashboard_screen.dart'; import 'package:mohem_flutter_app/ui/landing/today_attendance_screen.dart'; @@ -12,10 +14,13 @@ import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/my_attendance_screen.dart'; +import 'package:mohem_flutter_app/ui/payslip/monthly_pay_slip_screen.dart'; +import 'package:mohem_flutter_app/ui/profile/add_update_family_member.dart'; import 'package:mohem_flutter_app/ui/profile/basic_details.dart'; import 'package:mohem_flutter_app/ui/profile/contact_details.dart'; -import 'package:mohem_flutter_app/ui/profile/delete_familyMember.dart'; -import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart'; +import 'package:mohem_flutter_app/ui/profile/delete_family_member.dart'; +import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_address_screen.dart'; +import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart'; import 'package:mohem_flutter_app/ui/profile/family_members.dart'; import 'package:mohem_flutter_app/ui/profile/personal_info.dart'; import 'package:mohem_flutter_app/ui/screens/announcements/announcement_details.dart'; @@ -23,6 +28,7 @@ import 'package:mohem_flutter_app/ui/screens/announcements/announcements.dart'; // import 'package:mohem_flutter_app/ui/my_attendance/work_from_home_screen.dart'; import 'package:mohem_flutter_app/ui/screens/eit/add_eit.dart'; +import 'package:mohem_flutter_app/ui/screens/mowadhafhi/mowadhafhi_home.dart'; import 'package:mohem_flutter_app/ui/screens/mowadhafhi/mowadhafhi_hr_request.dart'; import 'package:mohem_flutter_app/ui/screens/mowadhafhi/request_details.dart'; import 'package:mohem_flutter_app/ui/screens/my_requests/my_requests.dart'; @@ -36,8 +42,6 @@ import 'package:mohem_flutter_app/ui/work_list/itg_detail_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/work_list_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/worklist_detail_screen.dart'; -import '../ui/screens/mowadhafhi/mowadhafhi_home.dart'; - class AppRoutes { static const String splash = "/splash"; static const String registerSelection = "/registerSelection"; @@ -68,10 +72,13 @@ class AppRoutes { //profile static const String addDynamicInputProfile = 'addDynamicInputProfile'; + static const String addDynamicAddressScreen = 'addDynamicAddressProfile'; //Attendance static const String attendance = "/attendance"; static const String monthlyAttendance = "/monthlyAttendance"; + static const String vacationRule = "/vacationRule"; + static const String addVacationRule = "/addVacationRule"; //Bottom Sheet static const String attendanceDetailsBottomSheet = "/attendanceDetailsBottomSheet"; @@ -83,6 +90,7 @@ class AppRoutes { static const String contactDetails = "/contactDetails"; static const String familyMembers = "/familyMembers"; static const String deleteFamilyMember = "/deleteFamilyMember"; + static const String addUpdateFamilyMember = "/addUpdateFamilyMember"; // Mowadhafhi static const String mowadhafhi = "/mowadhafhi"; @@ -101,7 +109,8 @@ class AppRoutes { static const String myRequests = "/myRequests"; static const String newRequest = "/newRequests"; - + //Pay slip + static const String monthlyPaySlip = "/monthlyPaySlip"; static final Map routes = { login: (context) => LoginScreen(), @@ -128,7 +137,9 @@ class AppRoutes { // addWorkFromHome: (context) => AddWorkFromHomeScreen(), profile: (context) => ProfileScreen(), //Attendance - monthlyAttendance: (context) => MonthlyAttendance(), + monthlyAttendance: (context) => MonthlyAttendanceScreen(), + vacationRule: (context) => VacationRuleScreen(), + addVacationRule: (context) => AddVacationRuleScreen(), //Bottom Sheet attendanceDetailsBottomSheet: (context) => AttendenceDetailsBottomSheet(), @@ -143,8 +154,11 @@ class AppRoutes { dynamicScreen: (context) => DynamicListViewScreen(), addDynamicInput: (context) => DynamicInputScreen(), addDynamicInputProfile: (context) => DynamicInputScreenProfile(), - deleteFamilyMember: (context) => DeleteFamilyMember(), + addDynamicAddressScreen: (context) => DynamicInputScreenAddress(), + + deleteFamilyMember: (context) => DeleteFamilyMember(ModalRoute.of(context)!.settings.arguments as int), requestSubmitScreen: (context) => RequestSubmitScreen(), + addUpdateFamilyMember: (context) => AddUpdateFamilyMember(), //mowadhafhi mowadhafhi: (context) => MowadhafhiHome(), @@ -161,5 +175,7 @@ class AppRoutes { myRequests: (context) => MyRequests(), newRequest: (context) => NewRequest(), + //pay slip + monthlyPaySlip: (context) => MonthlyPaySlipScreen(), }; } diff --git a/lib/dialogs/otp_dialog.dart b/lib/dialogs/otp_dialog.dart index 3789980..b761f00 100644 --- a/lib/dialogs/otp_dialog.dart +++ b/lib/dialogs/otp_dialog.dart @@ -218,12 +218,12 @@ class OtpDialog { } } - static getSignature() async { - // if (Platform.isAndroid) { - // return await SmsRetriever.getAppSignature(); - // } else { - // return null; - // } - } + // static getSignature() async { + // // if (Platform.isAndroid) { + // // return await SmsRetriever.getAppSignature(); + // // } else { + // // return null; + // // } + // } } diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index 69aca90..869b61c 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -23,11 +23,12 @@ extension EmailValidator on String { Widget toText11({Color? color, bool isUnderLine = false, bool isBold = false}) => Text( this, style: TextStyle( - fontSize: 11, - fontWeight: isBold ? FontWeight.bold : FontWeight.w600, - color: color ?? MyColors.darkTextColor, - letterSpacing: -0.33, - decoration: isUnderLine ? TextDecoration.underline : null), + fontSize: 11, + fontWeight: isBold ? FontWeight.bold : FontWeight.w600, + color: color ?? MyColors.darkTextColor, + letterSpacing: -0.33, + decoration: isUnderLine ? TextDecoration.underline : null, + ), ); Widget toText12({Color? color, bool isUnderLine = false, bool isBold = false, bool isCenter = false, int maxLine = 0}) => Text( @@ -35,11 +36,12 @@ extension EmailValidator on String { textAlign: isCenter ? TextAlign.center : null, maxLines: (maxLine > 0) ? maxLine : null, style: TextStyle( - fontSize: 12, - fontWeight: isBold ? FontWeight.bold : FontWeight.w600, - color: color ?? MyColors.darkTextColor, - letterSpacing: -0.72, - decoration: isUnderLine ? TextDecoration.underline : null), + fontSize: 12, + fontWeight: isBold ? FontWeight.bold : FontWeight.w600, + color: color ?? MyColors.darkTextColor, + letterSpacing: -0.72, + decoration: isUnderLine ? TextDecoration.underline : null, + ), ); Widget toText13({Color? color, bool isUnderLine = false}) => Text( @@ -52,7 +54,7 @@ extension EmailValidator on String { style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 14, letterSpacing: -0.48, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), ); - Widget toText16({Color? color, bool isBold = false,int? maxlines}) => Text( + Widget toText16({Color? color, bool isBold = false, int? maxlines}) => Text( this, maxLines: maxlines, style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 16, letterSpacing: -0.64, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), @@ -131,7 +133,7 @@ extension EmailValidator on String { return "${dates[2]} ${getMonth(int.parse(dates[1]))} ${dates[0]} ${DateFormat('hh:mm a').format(DateFormat('hh:mm:ss').parse(time))}"; } - getMonth(int month) { + String getMonth(int month) { switch (month) { case 1: return "January"; @@ -157,6 +159,8 @@ extension EmailValidator on String { return "November"; case 12: return "December"; + default: + return ""; } } } diff --git a/lib/extensions/widget_extensions.dart b/lib/extensions/widget_extensions.dart index f511422..bbe50b4 100644 --- a/lib/extensions/widget_extensions.dart +++ b/lib/extensions/widget_extensions.dart @@ -11,6 +11,8 @@ extension WidgetExtensions on Widget { Widget get center => Center(child: this); + Widget circle(double _value) => ClipRRect(borderRadius: BorderRadius.circular(_value), child: this); + Widget paddingAll(double _value) => Padding(padding: EdgeInsets.all(_value), child: this); Widget paddingOnly({double left = 0.0, double right = 0.0, double top = 0.0, double bottom = 0.0}) => @@ -21,8 +23,8 @@ extension WidgetExtensions on Widget { baseColor: Color(0xffe8eff0), highlightColor: Colors.white, child: Container( - child: this, color: Colors.white, + child: this, ), ) : Container( diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index ad3a70e..2fa8d35 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -46,6 +46,7 @@ class CodegenLoader extends AssetLoader{ "services": "خدمات", "viewAllServices": "عرض جميع الخدمات", "monthlyAttendance": "الحضور الشهري", + "vacationRule": "حكم اجازة", "workFromHome": "العمل من المنزل", "ticketRequest": "طلب تذكرة", "viewAllOffers": "مشاهدة جميع العروض", @@ -57,7 +58,7 @@ class CodegenLoader extends AssetLoader{ "confirmPassword": "تأكيد كلمة المرور", "update": "تحديث", "title": "عنوان", - "home": "مسكن", + "home": "الرئيسية", "mySalary": "راتبي", "createRequest": "إنشاء طلب", "forgotPassword": "هل نسيت كلمة السر", @@ -267,6 +268,66 @@ class CodegenLoader extends AssetLoader{ "writeComment": "أكتب تعليقا", "approversList": "قائمة الموافقين", "yourRequestHasBeenSubmittedForApprovals": "تم تقديم طلبك للموافقات", + "monthlyPaySlip": "قسيمة الراتب الشهرية", + "particular": "خاص", + "earnings": "أرباح", + "deductions": "الخصومات", + "paymentMethodName": "اسم طريقة الدفع", + "bankName": "اسم البنك", + "branchCode": "رمز الفرع", + "accountNo": "رقم الحساب", + "summaryOfInformation": "ملخص المعلومات", + "totalPayAmount": "المبلغ الإجمالي للدفع", + "paymentInformation": "معلومات الدفع", + "amount": "مقدار", + "correctCurrentDatails": "تعديل او اكمال التفاصيل الحالية", + "selectType": " حدد نوع التغيير الذي تريد القيام به", + "enterNewInfo": " أدخل معلومات جديدة بسبب تغيير حقيقي في التفاصيل الحالية (على سبيل المثال بسبب تغيير في الحالة الاجتماعية", + "endDate": "تاريخ الانتهاء", + "removeThisMember": "هل انت متأكد تريد ازالة هذا العضو؟", + "updateThisMember ": "هل انت متأكد تريد تحديث بيانات هذا العضو؟", + "addNewFamilyMember": "اضافة عضو جديد", + "addRow": "اضافة صف جديد", + "pleaseSelect": "الرجاء اختيار", + "delete": "حذف", + "edit": "تعديل", + "add": "اضافه", + "myProfile": "معلوماتي", + "mowadhafhi": "موظفي", + "searchAnnouncements": "بحث الاعلانات", + "announcements": "اعلانات", + "swipeRequest": "طلب تسجيل حضور", + "serviceType": "نوع الخدمه", + "departmentName": "اسم القسم", + "selectDepartment": "اختر القسم", + "relatedSection": "قسم ذو صله", + "selectSection": "اختيار القسم", + "relatedTopic": "عنوان ذو صله", + "selectTopic": "اختر العنوان", + "supportingDocument": "ارفاق مستند", + "mowadhafhiRequest": "طلب موظفي", + "ticketReference": "مرجع التذكره", + "section": "القسم", + "topic": "العنوان", + "actionBy": "الرد بواسطة", + "pending": "معلق", + "pendingTransactions": "المعاملات المعلقه", + "selectRequestType": "الرجاء اختيار نوع الطلب", + "dateFrom": "من تاريخ", + "dateTo": "الى تاريخ", + "requestName": "اسم الطلب", + "createdFor": "انشاء لأجل", + "requestCreatedSuccessfully": "تم انشاء الطلب بنجاح", + "search": "بحث", + "wantToReject": "هل انت متأكد تريد الرفض", + "requestType": "نوع الطلب", + "employeeDigitalID": "هويةالموظف الرقمية", + "businessCard": "بطاقة العمل", + "checkOut": "وقت الخروج", + "regular": "منتظم", + "mark": "علامة", + "selectMethodOfAttendance": "اختر طريقة تسجيل الحضور", + "comeNearHMGWifi": "HMG wifi من فضلك اقترب من", "profile": { "reset_password": { "label": "Reset Password", @@ -277,8 +338,11 @@ class CodegenLoader extends AssetLoader{ "completeProfile": "الملف الشخصي الكامل", "personalInformation": "معلومات شخصية", "basicDetails": "تفاصيل أساسية", + "address": "تبوك", "contactDetails": "بيانات التواصل", - "familyDetails": "تفاصيل عائلية" + "familyDetails": "تفاصيل عائلية", + "effectiveDate": "تاريخ النفاذ", + "country": "دولة" }, "clicked": { "zero": "You clicked {} times!", @@ -288,14 +352,6 @@ class CodegenLoader extends AssetLoader{ "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 :)", @@ -338,6 +394,7 @@ static const Map en_US = { "services": "Services", "viewAllServices": "View All Services", "monthlyAttendance": "Monthly Attendance", + "vacationRule": "Vacation Rule", "workFromHome": "Work From Home", "ticketRequest": "Ticket Request", "viewAllOffers": "View All Offers", @@ -560,6 +617,65 @@ static const Map en_US = { "writeComment": "Write a comment", "approversList": "Approvers List", "yourRequestHasBeenSubmittedForApprovals": "Your request has been submitted for approvals", + "monthlyPaySlip": "Monthly Pay Slip", + "particular": "Particular", + "earnings": "Earnings", + "deductions": "Deductions", + "paymentMethodName": "Payment Method Name", + "bankName": "Bank Name", + "branchCode": "Branch Code", + "accountNo": "Account No", + "summaryOfInformation": "Summary of Information", + "totalPayAmount": "Total Pay Amount", + "paymentInformation": "Payment Information", + "amount": "Amount", + "correctCurrentDatails": "correct or complete the current details", + "selectType": "Select the type of change you want to make", + "enterNewInfo": "Enter new Information because of a real change to the current details (e.g because of a change in marital status)", + "endDate": "*End Date", + "removeThisMember": "Are You Sure You Want to Remove this Member?", + "updateThisMember": "Are You Sure You Want to Update this Member?", + "addNewFamilyMember": "Add New Family Member", + "addRow": "Add new row", + "pleaseSelect": "Please Select *", + "delete": "delete", + "add": "Add", + "edit": "Edit", + "myProfile": "My Profile", + "mowadhafhi": "Mowadhafhi", + "searchAnnouncements": "Search Announcements", + "announcements": "Announcements", + "swipeRequest": "Swipe Request", + "serviceType": "Service Type", + "departmentName": "Department Name", + "selectDepartment": "Select Department", + "relatedSection": "Related Section", + "selectSection": "Select Section", + "relatedTopic": "Related Topic", + "selectTopic": "Select Topic", + "supportingDocument": "Supporting Document", + "mowadhafhiRequest": "Mowadhafhi Request", + "ticketReference": "Ticket Reference", + "section": "Section", + "topic": "Topic", + "actionBy": "Action By", + "pendingTransactions": "Pending Transactions", + "selectRequestType": "Please select request type", + "dateFrom": "Date From", + "dateTo": "Date To", + "requestName": "Request Name", + "createdFor": "Created For", + "requestType": "Request Type", + "requestCreatedSuccessfully": "Request created successfully", + "search": "Search", + "wantToReject": "Are you sure want to reject?", + "employeeDigitalID": "Employee Digital ID", + "businessCard": "Business Card", + "checkOut": "Check Out", + "regular": "Regular", + "mark": "Mark", + "selectMethodOfAttendance": "Select the method to mark the attendance", + "comeNearHMGWifi": "Please come near to HMG wifi", "profile": { "reset_password": { "label": "Reset Password", @@ -570,8 +686,11 @@ static const Map en_US = { "completeProfile": "Complete Profile", "personalInformation": "Personal Information", "basicDetails": "Basic Details", + "address": "Address", "contactDetails": "Contact Details", - "familyDetails": "Family Members" + "familyDetails": "Family Members", + "effectiveDate": "Effective Date", + "country": "Country" }, "clicked": { "zero": "You clicked {} times!", @@ -581,14 +700,6 @@ static const Map en_US = { "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 :)", diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index 21d18f5..eac063d 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -31,6 +31,9 @@ abstract class LocaleKeys { static const services = 'services'; static const viewAllServices = 'viewAllServices'; static const monthlyAttendance = 'monthlyAttendance'; + static const vacationRule = 'vacationRule'; + static const startDateT = 'startDateT'; + static const endDateT = 'endDateT'; static const workFromHome = 'workFromHome'; static const ticketRequest = 'ticketRequest'; static const viewAllOffers = 'viewAllOffers'; @@ -232,6 +235,7 @@ abstract class LocaleKeys { static const myAttendance = 'myAttendance'; static const workOnBreak = 'workOnBreak'; static const next = 'next'; + static const apply = 'apply'; static const mobile = 'mobile'; static const completingYear = 'completingYear'; static const year = 'year'; @@ -252,6 +256,66 @@ abstract class LocaleKeys { static const writeComment = 'writeComment'; static const approversList = 'approversList'; static const yourRequestHasBeenSubmittedForApprovals = 'yourRequestHasBeenSubmittedForApprovals'; + static const monthlyPaySlip = 'monthlyPaySlip'; + static const particular = 'particular'; + static const earnings = 'earnings'; + static const deductions = 'deductions'; + static const paymentMethodName = 'paymentMethodName'; + static const bankName = 'bankName'; + static const branchCode = 'branchCode'; + static const accountNo = 'accountNo'; + static const summaryOfInformation = 'summaryOfInformation'; + static const totalPayAmount = 'totalPayAmount'; + static const paymentInformation = 'paymentInformation'; + static const amount = 'amount'; + static const correctCurrentDatails = 'correctCurrentDatails'; + static const selectType = 'selectType'; + static const enterNewInfo = 'enterNewInfo'; + static const endDate = 'endDate'; + static const removeThisMember = 'removeThisMember'; + static const updateThisMember = 'updateThisMember '; + static const addNewFamilyMember = 'addNewFamilyMember'; + static const addRow = 'addRow'; + static const pleaseSelect = 'pleaseSelect'; + static const delete = 'delete'; + static const edit = 'edit'; + static const add = 'add'; + static const myProfile = 'myProfile'; + static const mowadhafhi = 'mowadhafhi'; + static const searchAnnouncements = 'searchAnnouncements'; + static const announcements = 'announcements'; + static const swipeRequest = 'swipeRequest'; + static const serviceType = 'serviceType'; + static const departmentName = 'departmentName'; + static const selectDepartment = 'selectDepartment'; + static const relatedSection = 'relatedSection'; + static const selectSection = 'selectSection'; + static const relatedTopic = 'relatedTopic'; + static const selectTopic = 'selectTopic'; + static const supportingDocument = 'supportingDocument'; + static const mowadhafhiRequest = 'mowadhafhiRequest'; + static const ticketReference = 'ticketReference'; + static const section = 'section'; + static const topic = 'topic'; + static const actionBy = 'actionBy'; + static const pending = 'pending'; + static const pendingTransactions = 'pendingTransactions'; + static const selectRequestType = 'selectRequestType'; + static const dateFrom = 'dateFrom'; + static const dateTo = 'dateTo'; + static const requestName = 'requestName'; + static const createdFor = 'createdFor'; + static const requestCreatedSuccessfully = 'requestCreatedSuccessfully'; + static const search = 'search'; + static const wantToReject = 'wantToReject'; + static const requestType = 'requestType'; + static const employeeDigitalID = 'employeeDigitalID'; + static const businessCard = 'businessCard'; + static const checkOut = 'checkOut'; + static const regular = 'regular'; + static const mark = 'mark'; + static const selectMethodOfAttendance = 'selectMethodOfAttendance'; + static const comeNearHMGWifi = 'comeNearHMGWifi'; 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'; @@ -260,11 +324,13 @@ abstract class LocaleKeys { static const profile_completeProfile = 'profile.completeProfile'; static const profile_personalInformation = 'profile.personalInformation'; static const profile_basicDetails = 'profile.basicDetails'; + static const profile_address = 'profile.address'; static const profile_contactDetails = 'profile.contactDetails'; static const profile_familyDetails = 'profile.familyDetails'; + static const profile_effectiveDate = 'profile.effectiveDate'; + static const profile_country = 'profile.country'; static const profile = 'profile'; static const clicked = 'clicked'; - static const amount = 'amount'; static const gender_with_arg = 'gender.with_arg'; static const gender = 'gender'; static const reset_locale = 'reset_locale'; diff --git a/lib/main.dart b/lib/main.dart index 77e94e8..cd00082 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -5,20 +5,16 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'package:logger/logger.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; +import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/generated/codegen_loader.g.dart'; import 'package:mohem_flutter_app/models/post_params_model.dart'; import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; import 'package:mohem_flutter_app/provider/eit_provider_model.dart'; import 'package:mohem_flutter_app/theme/app_theme.dart'; -import 'package:mohem_flutter_app/widgets/nfc/nfc_reader_sheet.dart'; import 'package:month_year_picker/month_year_picker.dart'; -import 'package:nfc_manager/nfc_manager.dart'; -import 'package:nfc_manager/platform_tags.dart'; import 'package:provider/provider.dart'; import 'package:sizer/sizer.dart'; -import 'config/routes.dart'; - var logger = Logger( // filter: null, // Use the default LogFilter (-> only log in debug mode) printer: PrettyPrinter(lineLength: 0), // Use the PrettyPrinter to format and print log @@ -68,22 +64,17 @@ class MyApp extends StatelessWidget { builder: (context, orientation, deviceType) { print(AppState().postParamsObject?.toJson()); var obj = AppState().postParamsObject; - obj?.languageID = EasyLocalization - .of(context) - ?.locale - .languageCode == "ar" ? 1 : 2; + obj?.languageID = EasyLocalization.of(context)?.locale.languageCode == "ar" ? 1 : 2; AppState().setPostParamsModel(obj!); List delegates = context.localizationDelegates; - // delegates.add(GlobalMaterialLocalizations.delegate); - delegates.add(MonthYearPickerLocalizations.delegate,); + // delegates.add(GlobalMaterialLocalizations.delegate); + delegates.add( + MonthYearPickerLocalizations.delegate, + ); return MaterialApp( - theme: AppTheme.getTheme(EasyLocalization - .of(context) - ?.locale - .languageCode == "ar"), + theme: AppTheme.getTheme(EasyLocalization.of(context)?.locale.languageCode == "ar"), debugShowCheckedModeBanner: false, - localizationsDelegates - :delegates, + localizationsDelegates: delegates, supportedLocales: context.supportedLocales, locale: context.locale, initialRoute: AppRoutes.initialRoute, diff --git a/lib/models/eit/get_eit_transaction_model.dart b/lib/models/eit/get_eit_transaction_model.dart index 186ef9c..309c0a4 100644 --- a/lib/models/eit/get_eit_transaction_model.dart +++ b/lib/models/eit/get_eit_transaction_model.dart @@ -1,9 +1,9 @@ -class GET_EIT_Transactions_Model { +class GetEitTransactionsModel { List? collectionTransaction; - GET_EIT_Transactions_Model({this.collectionTransaction}); + GetEitTransactionsModel({this.collectionTransaction}); - GET_EIT_Transactions_Model.fromJson(Map json) { + GetEitTransactionsModel.fromJson(Map json) { if (json['Collection_Transaction'] != null) { collectionTransaction = []; json['Collection_Transaction'].forEach((v) { diff --git a/lib/models/generic_response_model.dart b/lib/models/generic_response_model.dart index a550e9d..e548a92 100644 --- a/lib/models/generic_response_model.dart +++ b/lib/models/generic_response_model.dart @@ -1,9 +1,17 @@ import 'package:mohem_flutter_app/models/add_att_success_list_model.dart'; import 'package:mohem_flutter_app/models/add_attachment_list_model.dart'; +import 'package:mohem_flutter_app/models/basic_member_information_model.dart'; +import 'package:mohem_flutter_app/models/dashboard/get_accrual_balances_list_model.dart'; +import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_model.dart'; +import 'package:mohem_flutter_app/models/dashboard/get_open_missing_swipes_list_model.dart'; +import 'package:mohem_flutter_app/models/dashboard/get_open_notifications_list.dart'; +import 'package:mohem_flutter_app/models/dashboard/list_menu.dart'; +import 'package:mohem_flutter_app/models/dashboard/menu_entries.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_approves_list_model.dart'; import 'package:mohem_flutter_app/models/get_attachement_list_model.dart'; +import 'package:mohem_flutter_app/models/get_contact_dff_structure_list.dart'; import 'package:mohem_flutter_app/models/get_day_hours_type_details_list_model.dart'; import 'package:mohem_flutter_app/models/get_default_value_list_model.dart'; import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; @@ -15,6 +23,7 @@ import 'package:mohem_flutter_app/models/get_employee_phones_model.dart'; import 'package:mohem_flutter_app/models/get_item_creation_ntf_body_list_model.dart'; import 'package:mohem_flutter_app/models/get_mo_Item_history_list_model.dart'; import 'package:mohem_flutter_app/models/get_mo_notification_body_list_model.dart'; +import 'package:mohem_flutter_app/models/get_mobile_login_info_list_model.dart'; import 'package:mohem_flutter_app/models/get_notification_buttons_list_model.dart'; import 'package:mohem_flutter_app/models/get_po_Item_history_list_model.dart'; import 'package:mohem_flutter_app/models/get_po_notification_body_list_model.dart'; @@ -23,7 +32,13 @@ import 'package:mohem_flutter_app/models/get_schedule_shifts_details_list_model. import 'package:mohem_flutter_app/models/get_stamp_ms_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/get_stamp_ns_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart'; +import 'package:mohem_flutter_app/models/member_information_list_model.dart'; import 'package:mohem_flutter_app/models/member_login_list_model.dart'; +import 'package:mohem_flutter_app/models/monthly_pay_slip/get_deductions_List_model.dart'; +import 'package:mohem_flutter_app/models/monthly_pay_slip/get_earnings_list_model.dart'; +import 'package:mohem_flutter_app/models/monthly_pay_slip/get_pay_slip_list_model.dart'; +import 'package:mohem_flutter_app/models/monthly_pay_slip/get_payment_information_list_model.dart'; +import 'package:mohem_flutter_app/models/monthly_pay_slip/get_summary_of_payment_list_model.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_department_sections.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_project_departments.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_projects.dart'; @@ -40,12 +55,28 @@ import 'package:mohem_flutter_app/models/notification_action_model.dart'; import 'package:mohem_flutter_app/models/notification_get_respond_attributes_list_model.dart'; import 'package:mohem_flutter_app/models/pending_transactions/get_pending_transactions_details.dart'; import 'package:mohem_flutter_app/models/pending_transactions/get_req_functions.dart'; +import 'package:mohem_flutter_app/models/privilege_list_model.dart'; import 'package:mohem_flutter_app/models/profile/basic_details_cols_structions.dart'; import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart'; -import 'package:mohem_flutter_app/models/profile/phone_number_types_modek.dart'; +import 'package:mohem_flutter_app/models/profile/get_address_dff_structure_list.dart'; +import 'package:mohem_flutter_app/models/profile/get_contact_clos_structure_list.dart'; +import 'package:mohem_flutter_app/models/profile/get_contact_details_list.dart'; +import 'package:mohem_flutter_app/models/profile/get_countries_list_model.dart'; +import 'package:mohem_flutter_app/models/profile/phone_number_types_model.dart'; +import 'package:mohem_flutter_app/models/profile/start_address_approval_process_model.dart'; +import 'package:mohem_flutter_app/models/profile/submit_address_transaction.dart'; +import 'package:mohem_flutter_app/models/profile/submit_basic_details_transaction_model.dart'; +import 'package:mohem_flutter_app/models/profile/submit_contact_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/start_eit_approval_process_model.dart'; +import 'package:mohem_flutter_app/models/start_phone_approval_process_model.dart'; import 'package:mohem_flutter_app/models/submit_eit_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/subordinates_on_leaves_model.dart'; +import 'package:mohem_flutter_app/models/vacation_rule/get_item_type_notifications_list_model.dart'; +import 'package:mohem_flutter_app/models/vacation_rule/get_notification_reassign_mode_list_model.dart'; +import 'package:mohem_flutter_app/models/vacation_rule/get_vacation_rules_list_model.dart'; +import 'package:mohem_flutter_app/models/vacation_rule/respond_attributes_list_model.dart'; +import 'package:mohem_flutter_app/models/vacation_rule/vr_item_types_list_model.dart'; +import 'package:mohem_flutter_app/models/vacation_rule/wf_look_up_list_model.dart'; import 'package:mohem_flutter_app/models/validate_eit_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart'; import 'package:mohem_flutter_app/models/worklist/hr/eit_otification_body_model.dart'; @@ -55,17 +86,6 @@ import 'package:mohem_flutter_app/models/worklist/hr/get_phones_notification_bod import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart'; import 'package:mohem_flutter_app/models/worklist_response_model.dart'; -import 'basic_member_information_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'; - class GenericResponseModel { String? date; int? languageID; @@ -107,13 +127,15 @@ class GenericResponseModel { String? companyImageDescription; String? companyImageURL; String? companyMainCompany; - String? countryList; + List? countryList; String? createVacationRuleList; String? deleteAttachmentList; String? deleteVacationRuleList; String? disableSessionList; String? employeeQR; String? forgetPasswordTokenID; + List? getCcpTransactionsListNew; + List? getConcurrentProgramsList; List? getAbsenceAttachmentsList; List? getAbsenceAttendanceTypesList; List? getAbsenceCollectionNotificationBodyList; @@ -121,7 +143,7 @@ class GenericResponseModel { List? getAbsenceTransactionList; List? getAccrualBalancesList; List? getActionHistoryList; - List? getAddressDffStructureList; + List? getAddressDffStructureList; List? getAddressNotificationBodyList; List? getApprovesList; List? getAttachementList; @@ -133,18 +155,18 @@ class GenericResponseModel { List? getCEIDFFStructureList; List? getCEITransactionList; List? getCcpTransactionsList; - List? getContactColsStructureList; - List? getContactDetailsList; - List? getContactDffStructureList; + List? getContactColsStructureList; + List? getContactDetailsList; + List? getContactDffStructureList; GetContactNotificationBodyList? getContactNotificationBodyList; - List? getCountriesList; + List? getCountriesList; List? getDayHoursTypeDetailsList; - List? getDeductionsList; + List? getDeductionsList; GetDefaultValueList? getDefaultValueList; List? getEITCollectionNotificationBodyList; List? getEITDFFStructureList; List? getEITTransactionList; - List? getEarningsList; + List? getEarningsList; List? getEmployeeAddressList; List? getEmployeeBasicDetailsList; List? getEmployeeContactsList; @@ -154,22 +176,22 @@ class GenericResponseModel { List? getHrCollectionNotificationBodyList; List? getHrTransactionList; GetItemCreationNtfBodyList? getItemCreationNtfBodyList; - List? getItemTypeNotificationsList; + List? getItemTypeNotificationsList; List? getItemTypesList; List? getLookupValuesList; List? getMenuEntriesList; List? getMoItemHistoryList; List? getMoNotificationBodyList; List? getNotificationButtonsList; - List? getNotificationReassignModeList; + List? getNotificationReassignModeList; List? getObjectValuesList; GetOpenMissingSwipesList? getOpenMissingSwipesList; List? getOpenNotificationsList; List? getOpenNotificationsNumList; List? getOpenPeriodDatesList; List? getOrganizationsSalariesList; - List? getPaymentInformationList; - List? getPayslipList; + List? getPaymentInformationList; + List? getPayslipList; List? getPerformanceAppraisalList; List? getPhonesNotificationBodyList; List? getPoItemHistoryList; @@ -185,10 +207,14 @@ class GenericResponseModel { List? getShiftTypesList; List? getStampMsNotificationBodyList; List? getStampNsNotificationBodyList; + List? getConcurrentProgramsModel; + List? getCCPTransactionsModel; + GetCCPOutputModel? getCCPOutputModel; + List? getCCPDFFStructureModel; List? getSubordinatesAttdStatusList; List? getSubordinatesLeavesList; List? getSubordinatesLeavesTotalVacationsList; - List? getSummaryOfPaymentList; + List? getSummaryOfPaymentList; List? getSwipesList; List? getTermColsStructureList; List? getTermDffStructureList; @@ -204,12 +230,8 @@ class GenericResponseModel { List? getDepartmentSections; List? getPendingTransactionsFunctions; List? getPendingTransactionsDetails; - List? getConcurrentProgramsModel; - List? getCCPTransactionsModel; - GetCCPOutputModel? getCCPOutputModel; - List? getCCPDFFStructureModel; List? getUserItemTypesList; - List? getVacationRulesList; + List? getVacationRulesList; List? getVaccinationOnHandList; List? getVaccinationsList; List? getValueSetValuesList; @@ -274,7 +296,7 @@ class GenericResponseModel { String? processTransactions; String? registerUserNameList; List? replacementList; - String? respondAttributesList; + List? respondAttributesList; String? respondRolesList; String? resubmitAbsenceTransactionList; String? resubmitEITTransactionList; @@ -282,23 +304,23 @@ class GenericResponseModel { String? sFHGetPoNotificationBodyList; String? sFHGetPrNotificationBodyList; String? startAbsenceApprovalProccess; - String? startAddressApprovalProcessList; + StartAddressApprovalProcess? startAddressApprovalProcessList; String? startBasicDetApprProcessList; String? startCeiApprovalProcess; String? startContactApprovalProcessList; StartEitApprovalProcess? startEitApprovalProcess; String? startHrApprovalProcessList; - String? startPhonesApprovalProcessList; + StartPhoneApprovalProcess? startPhonesApprovalProcessList; String? startSitApprovalProcess; String? startTermApprovalProcessList; - String? submitAddressTransactionList; - String? submitBasicDetTransactionList; + SubmitAddressTransaction? submitAddressTransactionList; + SubmitBasicDetailsTransactionList? submitBasicDetTransactionList; String? submitCEITransactionList; String? submitCcpTransactionList; - String? submitContactTransactionList; + SubmitContactTransactionList? submitContactTransactionList; SubmitEITTransactionList? submitEITTransactionList; String? submitHrTransactionList; - String? submitPhonesTransactionList; + Map? submitPhonesTransactionList; String? submitSITTransactionList; String? submitTermTransactionList; List? subordinatesOnLeavesList; @@ -317,8 +339,8 @@ class GenericResponseModel { String? validateAbsenceTransactionList; ValidateEITTransactionList? validateEITTransactionList; String? validatePhonesTransactionList; - String? vrItemTypesList; - String? wFLookUpList; + List? vrItemTypesList; + List? wFLookUpList; String? eLearningGETEMPLOYEEPROFILEList; String? eLearningLOGINList; String? eLearningValidateLoginList; @@ -394,6 +416,8 @@ class GenericResponseModel { this.getCEIDFFStructureList, this.getCEITransactionList, this.getCcpTransactionsList, + this.getCcpTransactionsListNew, + this.getConcurrentProgramsList, this.getContactColsStructureList, this.getContactDetailsList, this.getContactDffStructureList, @@ -634,7 +658,13 @@ class GenericResponseModel { companyImageDescription = json['CompanyImageDescription']; companyImageURL = json['CompanyImageURL']; companyMainCompany = json['CompanyMainCompany']; - countryList = json['CountryList']; + + if (json['CountryList'] != null) { + countryList = []; + json['CountryList'].forEach((v) { + countryList!.add(new GetCountriesListModel.fromJson(v)); + }); + } createVacationRuleList = json['CreateVacationRuleList']; deleteAttachmentList = json['DeleteAttachmentList']; deleteVacationRuleList = json['DeleteVacationRuleList']; @@ -662,7 +692,12 @@ class GenericResponseModel { }); } - getAddressDffStructureList = json['GetAddressDffStructureList']; + if (json['GetAddressDffStructureList'] != null) { + getAddressDffStructureList = []; + json['GetAddressDffStructureList'].forEach((v) { + getAddressDffStructureList!.add(new GetAddressDffStructureList.fromJson(v)); + }); + } getAddressNotificationBodyList = json['GetAddressNotificationBodyList']; if (json['GetApprovesList'] != null) { @@ -692,6 +727,13 @@ class GenericResponseModel { getBasicDetDffStructureList!.add(new GetBasicDetDffStructureList.fromJson(v)); }); } + if (json['GetContactDffStructureList'] != null) { + getContactDffStructureList = []; + json['GetContactDffStructureList'].forEach((v) { + getContactDffStructureList!.add(new GetContactDffStructureList.fromJson(v)); + }); + } + if (json['GetBasicDetNtfBodyList'] != null) { getBasicDetNtfBodyList = []; json['GetBasicDetNtfBodyList'].forEach((v) { @@ -703,18 +745,45 @@ class GenericResponseModel { getCEIDFFStructureList = json['GetCEIDFFStructureList']; getCEITransactionList = json['GetCEITransactionList']; getCcpTransactionsList = json['GetCcpTransactionsList']; + getCcpTransactionsListNew = json['GetCcpTransactionsList_New']; + getConcurrentProgramsList = json['GetConcurrentProgramsList']; + if (json['GetContactDetailsList'] != null) { + getContactDetailsList = []; + json['GetContactDetailsList'].forEach((v) { + getContactDetailsList!.add(new GetContactDetailsList.fromJson(v)); + }); + } + if (json['GetContactColsStructureList'] != null) { + getContactColsStructureList = []; + json['GetContactColsStructureList'].forEach((v) { + getContactColsStructureList!.add(new GetContactColsStructureList.fromJson(v)); + }); + } getContactColsStructureList = json['GetContactColsStructureList']; getContactDetailsList = json['GetContactDetailsList']; getContactDffStructureList = json['GetContactDffStructureList']; getContactNotificationBodyList = json["GetContactNotificationBodyList"] == null ? null : GetContactNotificationBodyList.fromJson(json["GetContactNotificationBodyList"]); - getCountriesList = json['GetCountriesList']; + + if (json['GetCountriesList'] != null) { + getCountriesList = []; + json['GetCountriesList'].forEach((v) { + getCountriesList!.add(new GetCountriesListModel.fromJson(v)); + }); + } + if (json['GetDayHoursTypeDetailsList'] != null) { getDayHoursTypeDetailsList = []; json['GetDayHoursTypeDetailsList'].forEach((v) { getDayHoursTypeDetailsList!.add(new GetDayHoursTypeDetailsList.fromJson(v)); }); } - getDeductionsList = json['GetDeductionsList']; + + if (json['GetDeductionsList'] != null) { + getDeductionsList = []; + json['GetDeductionsList'].forEach((v) { + getDeductionsList!.add(new GetDeductionsList.fromJson(v)); + }); + } getDefaultValueList = json['GetDefaultValueList'] != null ? GetDefaultValueList.fromJson(json['GetDefaultValueList']) : null; getEITCollectionNotificationBodyList = json["GetEITCollectionNotificationBodyList"] == null ? null @@ -731,7 +800,13 @@ class GenericResponseModel { getEITTransactionList!.add(new GetEITTransactionList.fromJson(v)); }); } - getEarningsList = json['GetEarningsList']; + + if (json['GetEarningsList'] != null) { + getEarningsList = []; + json['GetEarningsList'].forEach((v) { + getEarningsList!.add(new GetEarningsList.fromJson(v)); + }); + } if (json['GetEmployeeAddressList'] != null) { getEmployeeAddressList = []; json['GetEmployeeAddressList'].forEach((v) { @@ -763,7 +838,13 @@ class GenericResponseModel { getItemCreationNtfBodyList = json['GetItemCreationNtfBodyList'] != null ? new GetItemCreationNtfBodyList.fromJson(json['GetItemCreationNtfBodyList']) : null; - getItemTypeNotificationsList = json['GetItemTypeNotificationsList']; + if (json['GetItemTypeNotificationsList'] != null) { + getItemTypeNotificationsList = []; + json['GetItemTypeNotificationsList'].forEach((v) { + getItemTypeNotificationsList!.add(new GetItemTypeNotificationsList.fromJson(v)); + }); + } + getItemTypesList = json['GetItemTypesList']; getLookupValuesList = json['GetLookupValuesList']; getMenuEntriesList = json["GetMenuEntriesList"] == null ? null : List.from(json["GetMenuEntriesList"].map((x) => GetMenuEntriesList.fromJson(x))); @@ -784,14 +865,21 @@ class GenericResponseModel { if (json['GetNotificationButtonsList'] != null) { getNotificationButtonsList = []; json['GetNotificationButtonsList'].forEach((v) { - getNotificationButtonsList!.add(new GetNotificationButtonsList.fromJson(v)); + getNotificationButtonsList!.add(GetNotificationButtonsList.fromJson(v)); + }); + } + + if (json['GetNotificationReassignModeList'] != null) { + getNotificationReassignModeList = []; + json['GetNotificationReassignModeList'].forEach((v) { + getNotificationReassignModeList!.add(GetNotificationReassignModeList.fromJson(v)); }); } if (json['GetObjectValuesList'] != null) { getObjectValuesList = []; json['GetObjectValuesList'].forEach((v) { - getObjectValuesList!.add(new GetPhoneNumberTypesModel.fromJson(v)); + getObjectValuesList!.add(GetPhoneNumberTypesModel.fromJson(v)); }); } @@ -800,8 +888,20 @@ class GenericResponseModel { getOpenNotificationsNumList = json['GetOpenNotificationsNumList']; getOpenPeriodDatesList = json['GetOpenPeriodDatesList']; getOrganizationsSalariesList = json['GetOrganizationsSalariesList']; - getPaymentInformationList = json['GetPaymentInformationList']; - getPayslipList = json['GetPayslipList']; + + if (json['GetPaymentInformationList'] != null) { + getPaymentInformationList = []; + json['GetPaymentInformationList'].forEach((v) { + getPaymentInformationList!.add(new GetPaymentInformationList.fromJson(v)); + }); + } + + if (json['GetPayslipList'] != null) { + getPayslipList = []; + json['GetPayslipList'].forEach((v) { + getPayslipList!.add(new GetPayslipList.fromJson(v)); + }); + } // getPendingReqDetailsList = json['GetPendingReqDetailsList']; // getPendingReqFunctionsList = json['GetPendingReqFunctionsList']; getPerformanceAppraisalList = json['GetPerformanceAppraisalList']; @@ -857,7 +957,12 @@ class GenericResponseModel { } getSubordinatesLeavesTotalVacationsList = json['GetSubordinatesLeavesTotalVacationsList']; - getSummaryOfPaymentList = json['GetSummaryOfPaymentList']; + if (json['GetSummaryOfPaymentList'] != null) { + getSummaryOfPaymentList = []; + json['GetSummaryOfPaymentList'].forEach((v) { + getSummaryOfPaymentList!.add(new GetSummaryOfPaymentList.fromJson(v)); + }); + } getSwipesList = json['GetSwipesList']; getTermColsStructureList = json['GetTermColsStructureList']; getTermDffStructureList = json['GetTermDffStructureList']; @@ -966,7 +1071,12 @@ class GenericResponseModel { } getUserItemTypesList = json['GetUserItemTypesList']; - getVacationRulesList = json['GetVacationRulesList']; + if (json['GetVacationRulesList'] != null) { + getVacationRulesList = []; + json['GetVacationRulesList'].forEach((v) { + getVacationRulesList!.add(GetVacationRulesList.fromJson(v)); + }); + } getVaccinationOnHandList = json['GetVaccinationOnHandList']; getVaccinationsList = json['GetVaccinationsList']; @@ -1075,7 +1185,13 @@ class GenericResponseModel { processTransactions = json['ProcessTransactions']; registerUserNameList = json['RegisterUserNameList']; replacementList = json["ReplacementList"] == null ? null : List.from(json["ReplacementList"].map((x) => ReplacementList.fromJson(x))); - respondAttributesList = json['RespondAttributesList']; + + if (json['RespondAttributesList'] != null) { + respondAttributesList = []; + json['RespondAttributesList'].forEach((v) { + respondAttributesList!.add(new RespondAttributesList.fromJson(v)); + }); + } respondRolesList = json['RespondRolesList']; resubmitAbsenceTransactionList = json['ResubmitAbsenceTransactionList']; resubmitEITTransactionList = json['ResubmitEITTransactionList']; @@ -1083,25 +1199,29 @@ class GenericResponseModel { sFHGetPoNotificationBodyList = json['SFH_GetPoNotificationBodyList']; sFHGetPrNotificationBodyList = json['SFH_GetPrNotificationBodyList']; startAbsenceApprovalProccess = json['StartAbsenceApprovalProccess']; - startAddressApprovalProcessList = json['StartAddressApprovalProcessList']; + startAddressApprovalProcessList = json['StartAddressApprovalProcessList'] != null ? new StartAddressApprovalProcess.fromJson(json['StartAddressApprovalProcessList']) : null; + startBasicDetApprProcessList = json['StartBasicDetApprProcessList']; startCeiApprovalProcess = json['StartCeiApprovalProcess']; startContactApprovalProcessList = json['StartContactApprovalProcessList']; startEitApprovalProcess = json['StartEitApprovalProcess'] != null ? new StartEitApprovalProcess.fromJson(json['StartEitApprovalProcess']) : null; startHrApprovalProcessList = json['StartHrApprovalProcessList']; - startPhonesApprovalProcessList = json['StartPhonesApprovalProcessList']; + + startPhonesApprovalProcessList = json['StartPhonesApprovalProcessList'] != null ? new StartPhoneApprovalProcess.fromJson(json['startPhonesApprovalProcessList']) : null; startSitApprovalProcess = json['StartSitApprovalProcess']; startTermApprovalProcessList = json['StartTermApprovalProcessList']; - submitAddressTransactionList = json['SubmitAddressTransactionList']; - submitBasicDetTransactionList = json['SubmitBasicDetTransactionList']; + + submitAddressTransactionList = json['SubmitAddressTransactionList'] != null ? new SubmitAddressTransaction.fromJson(json['SubmitAddressTransactionList']) : null; + submitBasicDetTransactionList = json['SubmitBasicDetTransactionList'] != null ? new SubmitBasicDetailsTransactionList.fromJson(json['SubmitBasicDetTransactionList']) : null; submitCEITransactionList = json['SubmitCEITransactionList']; submitCcpTransactionList = json['SubmitCcpTransactionList']; - submitContactTransactionList = json['SubmitContactTransactionList']; + submitContactTransactionList = json['SubmitContactTransactionList'] != null ? new SubmitContactTransactionList.fromJson(json['SubmitContactTransactionList']) : null; submitEITTransactionList = json['SubmitEITTransactionList'] != null ? new SubmitEITTransactionList.fromJson(json['SubmitEITTransactionList']) : null; submitHrTransactionList = json['SubmitHrTransactionList']; submitPhonesTransactionList = json['SubmitPhonesTransactionList']; + submitSITTransactionList = json['SubmitSITTransactionList']; submitTermTransactionList = json['SubmitTermTransactionList']; @@ -1129,8 +1249,18 @@ class GenericResponseModel { validateEITTransactionList = json['ValidateEITTransactionList'] != null ? new ValidateEITTransactionList.fromJson(json['ValidateEITTransactionList']) : null; validatePhonesTransactionList = json['ValidatePhonesTransactionList']; - vrItemTypesList = json['VrItemTypesList']; - wFLookUpList = json['WFLookUpList']; + if (json['VrItemTypesList'] != null) { + vrItemTypesList = []; + json['VrItemTypesList'].forEach((v) { + vrItemTypesList!.add(VrItemTypesList.fromJson(v)); + }); + } + if (json['WFLookUpList'] != null) { + wFLookUpList = []; + json['WFLookUpList'].forEach((v) { + wFLookUpList!.add(new WFLookUpList.fromJson(v)); + }); + } eLearningGETEMPLOYEEPROFILEList = json['eLearning_GET_EMPLOYEE_PROFILEList']; eLearningLOGINList = json['eLearning_LOGINList']; eLearningValidateLoginList = json['eLearning_ValidateLoginList']; @@ -1190,7 +1320,9 @@ class GenericResponseModel { data['CompanyImageDescription'] = this.companyImageDescription; data['CompanyImageURL'] = this.companyImageURL; data['CompanyMainCompany'] = this.companyMainCompany; - data['CountryList'] = this.countryList; + if (this.countryList != null) { + data['CountryList'] = this.countryList!.map((v) => v.toJson()).toList(); + } data['CreateVacationRuleList'] = this.createVacationRuleList; data['DeleteAttachmentList'] = this.deleteAttachmentList; data['DeleteVacationRuleList'] = this.deleteVacationRuleList; @@ -1235,6 +1367,17 @@ class GenericResponseModel { data['GetCEIDFFStructureList'] = this.getCEIDFFStructureList; data['GetCEITransactionList'] = this.getCEITransactionList; data['GetCcpTransactionsList'] = this.getCcpTransactionsList; + data['GetCcpTransactionsList_New'] = this.getCcpTransactionsListNew; + data['GetConcurrentProgramsList'] = this.getConcurrentProgramsList; + if (this.getContactDetailsList != null) { + data['GetContactDetailsList'] = this.getContactDetailsList!.map((v) => v.toJson()).toList(); + } + if (this.getContactColsStructureList != null) { + data['GetContactColsStructureList'] = this.getContactColsStructureList!.map((v) => v.toJson()).toList(); + } + if (this.getContactDffStructureList != null) { + data['GetContactDffStructureList'] = this.getContactDffStructureList!.map((v) => v.toJson()).toList(); + } // data['GetCcpTransactionsList_New'] = this.getCcpTransactionsListNew; data['GetContactColsStructureList'] = this.getContactColsStructureList; data['GetContactDetailsList'] = this.getContactDetailsList; @@ -1244,7 +1387,10 @@ class GenericResponseModel { if (this.getDayHoursTypeDetailsList != null) { data['GetDayHoursTypeDetailsList'] = this.getDayHoursTypeDetailsList!.map((v) => v.toJson()).toList(); } - data['GetDeductionsList'] = this.getDeductionsList; + + if (this.getDeductionsList != null) { + data['GetDeductionsList'] = this.getDeductionsList!.map((v) => v.toJson()).toList(); + } if (this.getDefaultValueList != null) { data['GetDefaultValueList'] = this.getDefaultValueList!.toJson(); } @@ -1255,7 +1401,10 @@ class GenericResponseModel { if (this.getEITTransactionList != null) { data['GetEITTransactionList'] = this.getEITTransactionList!.map((v) => v.toJson()).toList(); } - data['GetEarningsList'] = this.getEarningsList; + + if (this.getEarningsList != null) { + data['GetEarningsList'] = this.getEarningsList!.map((v) => v.toJson()).toList(); + } if (this.getEmployeeAddressList != null) { data['GetEmployeeAddressList'] = this.getEmployeeAddressList!.map((v) => v.toJson()).toList(); } @@ -1277,7 +1426,10 @@ class GenericResponseModel { data['GetItemCreationNtfBodyList'] = this.getItemCreationNtfBodyList!.toJson(); } - data['GetItemTypeNotificationsList'] = this.getItemTypeNotificationsList; + if (this.getItemTypeNotificationsList != null) { + data['GetItemTypeNotificationsList'] = this.getItemTypeNotificationsList!.map((v) => v.toJson()).toList(); + } + data['GetItemTypesList'] = this.getItemTypesList; data['GetLookupValuesList'] = this.getLookupValuesList; data['GetMenuEntriesList'] = this.getMenuEntriesList; @@ -1293,15 +1445,22 @@ class GenericResponseModel { data['GetNotificationButtonsList'] = this.getNotificationButtonsList!.map((v) => v.toJson()).toList(); } - data['GetNotificationReassignModeList'] = this.getNotificationReassignModeList; + if (getNotificationReassignModeList != null) { + data['GetNotificationReassignModeList'] = getNotificationReassignModeList!.map((v) => v.toJson()).toList(); + } + data['GetObjectValuesList'] = this.getObjectValuesList; data['GetOpenMissingSwipesList'] = this.getOpenMissingSwipesList; data['GetOpenNotificationsList'] = this.getOpenNotificationsList; data['GetOpenNotificationsNumList'] = this.getOpenNotificationsNumList; data['GetOpenPeriodDatesList'] = this.getOpenPeriodDatesList; data['GetOrganizationsSalariesList'] = this.getOrganizationsSalariesList; - data['GetPaymentInformationList'] = this.getPaymentInformationList; - data['GetPayslipList'] = this.getPayslipList; + if (this.getPaymentInformationList != null) { + data['GetPaymentInformationList'] = this.getPaymentInformationList!.map((v) => v.toJson()).toList(); + } + if (this.getPayslipList != null) { + data['GetPayslipList'] = this.getPayslipList!.map((v) => v.toJson()).toList(); + } // data['GetPendingReqDetailsList'] = this.getPendingReqDetailsList; // data['GetPendingReqFunctionsList'] = this.getPendingReqFunctionsList; data['GetPerformanceAppraisalList'] = this.getPerformanceAppraisalList; @@ -1344,7 +1503,9 @@ class GenericResponseModel { } data['GetSubordinatesLeavesTotalVacationsList'] = this.getSubordinatesLeavesTotalVacationsList; - data['GetSummaryOfPaymentList'] = this.getSummaryOfPaymentList; + if (this.getSummaryOfPaymentList != null) { + data['GetSummaryOfPaymentList'] = this.getSummaryOfPaymentList!.map((v) => v.toJson()).toList(); + } data['GetSwipesList'] = this.getSwipesList; data['GetTermColsStructureList'] = this.getTermColsStructureList; data['GetTermDffStructureList'] = this.getTermDffStructureList; @@ -1353,7 +1514,9 @@ class GenericResponseModel { data['GetTimeCardSummaryList'] = this.getTimeCardSummaryList!.map((v) => v.toJson()).toList(); } data['GetUserItemTypesList'] = this.getUserItemTypesList; - data['GetVacationRulesList'] = this.getVacationRulesList; + if (this.getVacationRulesList != null) { + data['GetVacationRulesList'] = this.getVacationRulesList!.map((v) => v.toJson()).toList(); + } data['GetVaccinationOnHandList'] = this.getVaccinationOnHandList; data['GetVaccinationsList'] = this.getVaccinationsList; if (getValueSetValuesList != null) { @@ -1438,7 +1601,10 @@ class GenericResponseModel { data['ProcessTransactions'] = this.processTransactions; data['RegisterUserNameList'] = this.registerUserNameList; data['ReplacementList'] = this.replacementList; - data['RespondAttributesList'] = this.respondAttributesList; + + if (respondAttributesList != null) { + data['RespondAttributesList'] = respondAttributesList!.map((v) => v.toJson()).toList(); + } data['RespondRolesList'] = this.respondRolesList; data['ResubmitAbsenceTransactionList'] = this.resubmitAbsenceTransactionList; data['ResubmitEITTransactionList'] = this.resubmitEITTransactionList; @@ -1458,8 +1624,14 @@ class GenericResponseModel { data['StartPhonesApprovalProcessList'] = this.startPhonesApprovalProcessList; data['StartSitApprovalProcess'] = this.startSitApprovalProcess; data['StartTermApprovalProcessList'] = this.startTermApprovalProcessList; - data['SubmitAddressTransactionList'] = this.submitAddressTransactionList; - data['SubmitBasicDetTransactionList'] = this.submitBasicDetTransactionList; + + if (this.submitAddressTransactionList != null) { + data['SubmitAddressTransactionList'] = this.submitAddressTransactionList!.toJson(); + } + if (this.submitBasicDetTransactionList != null) { + data['SubmitBasicDetTransactionList'] = this.submitBasicDetTransactionList!.toJson(); + } + data['SubmitCEITransactionList'] = this.submitCEITransactionList; data['SubmitCcpTransactionList'] = this.submitCcpTransactionList; data['SubmitContactTransactionList'] = this.submitContactTransactionList; @@ -1492,13 +1664,16 @@ class GenericResponseModel { data['VHR_IsVerificationCodeValid'] = this.vHRIsVerificationCodeValid; data['ValidateAbsenceTransactionList'] = this.validateAbsenceTransactionList; - if (this.validateEITTransactionList != null) { - data['ValidateEITTransactionList'] = this.validateEITTransactionList!.toJson(); + if (validateEITTransactionList != null) { + data['ValidateEITTransactionList'] = validateEITTransactionList!.toJson(); } - data['ValidatePhonesTransactionList'] = this.validatePhonesTransactionList; - data['VrItemTypesList'] = this.vrItemTypesList; - data['WFLookUpList'] = this.wFLookUpList; + if (vrItemTypesList != null) { + data['VrItemTypesList'] = vrItemTypesList!.map((v) => v.toJson()).toList(); + } + if (wFLookUpList != null) { + data['WFLookUpList'] = wFLookUpList!.map((v) => v.toJson()).toList(); + } data['eLearning_GET_EMPLOYEE_PROFILEList'] = this.eLearningGETEMPLOYEEPROFILEList; data['eLearning_LOGINList'] = this.eLearningLOGINList; data['eLearning_ValidateLoginList'] = this.eLearningValidateLoginList; diff --git a/lib/models/get_absence_collection_notification_body_list_model.dart b/lib/models/get_absence_collection_notification_body_list_model.dart index 480a81f..057cb64 100644 --- a/lib/models/get_absence_collection_notification_body_list_model.dart +++ b/lib/models/get_absence_collection_notification_body_list_model.dart @@ -1,4 +1,3 @@ - class GetAbsenceCollectionNotificationBodyList { List? collectionNotification; @@ -16,8 +15,7 @@ class GetAbsenceCollectionNotificationBodyList { Map toJson() { final Map data = new Map(); if (this.collectionNotification != null) { - data['Collection_Notification'] = - this.collectionNotification!.map((v) => v.toJson()).toList(); + data['Collection_Notification'] = this.collectionNotification!.map((v) => v.toJson()).toList(); } return data; } @@ -42,20 +40,20 @@ class CollectionNotificationAbsence { CollectionNotificationAbsence( {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}); + 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}); CollectionNotificationAbsence.fromJson(Map json) { aCTION = json['ACTION']; @@ -94,4 +92,4 @@ class CollectionNotificationAbsence { data['VARCHAR2_VALUE'] = this.vARCHAR2VALUE; return data; } -} \ No newline at end of file +} diff --git a/lib/models/get_contact_dff_structure_list.dart b/lib/models/get_contact_dff_structure_list.dart new file mode 100644 index 0000000..44a86be --- /dev/null +++ b/lib/models/get_contact_dff_structure_list.dart @@ -0,0 +1,179 @@ + + +import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; +import 'package:mohem_flutter_app/models/profile/get_contact_details_list.dart'; + +class GetContactDffStructureList { + String? aLPHANUMERICALLOWEDFLAG; + String? aPPLICATIONCOLUMNNAME; + String? cHILDSEGMENTSVS; + dynamic? cHILDSEGMENTSVSSplited; + String? dEFAULTTYPE; + String? dEFAULTVALUE; + String? dESCFLEXCONTEXTCODE; + String? dESCFLEXCONTEXTNAME; + String? dESCFLEXNAME; + String? dISPLAYFLAG; + String? eNABLEDFLAG; + ESERVICESDV? eSERVICESDV; + List? eSERVICESVS; + String? fLEXVALUESETNAME; + String? fORMATTYPE; + String? fORMATTYPEDSP; + String? lONGLISTFLAG; + int? mAXIMUMSIZE; + String? mAXIMUMVALUE; + String? mINIMUMVALUE; + String? mOBILEENABLED; + String? nUMBERPRECISION; + String? nUMERICMODEENABLEDFLAG; + String? pARENTSEGMENTSDV; + List? pARENTSEGMENTSDVSplited; + String? pARENTSEGMENTSVS; + List? pARENTSEGMENTSVSSplitedVS; + String? rEADONLY; + String? rEQUIREDFLAG; + String? sEGMENTNAME; + String? sEGMENTPROMPT; + int? sEGMENTSEQNUM; + String? uPPERCASEONLYFLAG; + String? uSEDFLAG; + String? vALIDATIONTYPE; + String? vALIDATIONTYPEDSP; + GetContactDetailsList? getContactDetailsList; + + GetContactDffStructureList( + {this.aLPHANUMERICALLOWEDFLAG, + this.aPPLICATIONCOLUMNNAME, + this.cHILDSEGMENTSVS, + this.cHILDSEGMENTSVSSplited, + this.dEFAULTTYPE, + this.dEFAULTVALUE, + this.dESCFLEXCONTEXTCODE, + this.dESCFLEXCONTEXTNAME, + this.dESCFLEXNAME, + this.dISPLAYFLAG, + this.eNABLEDFLAG, + this.eSERVICESDV, + this.eSERVICESVS, + this.fLEXVALUESETNAME, + this.fORMATTYPE, + this.fORMATTYPEDSP, + this.lONGLISTFLAG, + this.mAXIMUMSIZE, + this.mAXIMUMVALUE, + this.mINIMUMVALUE, + this.mOBILEENABLED, + this.nUMBERPRECISION, + this.nUMERICMODEENABLEDFLAG, + this.pARENTSEGMENTSDV, + this.pARENTSEGMENTSDVSplited, + this.pARENTSEGMENTSVS, + this.pARENTSEGMENTSVSSplitedVS, + this.rEADONLY, + this.rEQUIREDFLAG, + this.sEGMENTNAME, + this.sEGMENTPROMPT, + this.sEGMENTSEQNUM, + this.uPPERCASEONLYFLAG, + this.uSEDFLAG, + this.vALIDATIONTYPE, + this.vALIDATIONTYPEDSP, + this.getContactDetailsList}); + + GetContactDffStructureList.fromJson(Map json) { + aLPHANUMERICALLOWEDFLAG = json['ALPHANUMERIC_ALLOWED_FLAG']; + aPPLICATIONCOLUMNNAME = json['APPLICATION_COLUMN_NAME']; + cHILDSEGMENTSVS = json['CHILD_SEGMENTS_VS']; + cHILDSEGMENTSVSSplited = json['CHILD_SEGMENTS_VS_Splited']; + dEFAULTTYPE = json['DEFAULT_TYPE']; + dEFAULTVALUE = json['DEFAULT_VALUE']; + dESCFLEXCONTEXTCODE = json['DESC_FLEX_CONTEXT_CODE']; + dESCFLEXCONTEXTNAME = json['DESC_FLEX_CONTEXT_NAME']; + dESCFLEXNAME = json['DESC_FLEX_NAME']; + dISPLAYFLAG = json['DISPLAY_FLAG']; + eNABLEDFLAG = json['ENABLED_FLAG']; + eSERVICESDV = json['E_SERVICES_DV'] != null + ? new ESERVICESDV.fromJson(json['E_SERVICES_DV']) + : null; + if (json['E_SERVICES_VS'] != null) { + eSERVICESVS = []; + json['E_SERVICES_VS'].forEach((v) { + eSERVICESVS!.add(new ESERVICESVS.fromJson(v)); + }); + } + fLEXVALUESETNAME = json['FLEX_VALUE_SET_NAME']; + fORMATTYPE = json['FORMAT_TYPE']; + fORMATTYPEDSP = json['FORMAT_TYPE_DSP']; + lONGLISTFLAG = json['LONGLIST_FLAG']; + mAXIMUMSIZE = json['MAXIMUM_SIZE']; + mAXIMUMVALUE = json['MAXIMUM_VALUE']; + mINIMUMVALUE = json['MINIMUM_VALUE']; + mOBILEENABLED = json['MOBILE_ENABLED']; + nUMBERPRECISION = json['NUMBER_PRECISION']; + nUMERICMODEENABLEDFLAG = json['NUMERIC_MODE_ENABLED_FLAG']; + pARENTSEGMENTSDV = json['PARENT_SEGMENTS_DV']; + pARENTSEGMENTSVS = json['PARENT_SEGMENTS_VS']; + rEADONLY = json['READ_ONLY']; + rEQUIREDFLAG = json['REQUIRED_FLAG']; + sEGMENTNAME = json['SEGMENT_NAME']; + sEGMENTPROMPT = json['SEGMENT_PROMPT']; + sEGMENTSEQNUM = json['SEGMENT_SEQ_NUM']; + uPPERCASEONLYFLAG = json['UPPERCASE_ONLY_FLAG']; + uSEDFLAG = json['USED_FLAG']; + vALIDATIONTYPE = json['VALIDATION_TYPE']; + vALIDATIONTYPEDSP = json['VALIDATION_TYPE_DSP']; + } + + Map toJson() { + final Map data = new Map(); + data['ALPHANUMERIC_ALLOWED_FLAG'] = this.aLPHANUMERICALLOWEDFLAG; + data['APPLICATION_COLUMN_NAME'] = this.aPPLICATIONCOLUMNNAME; + data['CHILD_SEGMENTS_VS'] = this.cHILDSEGMENTSVS; + data['CHILD_SEGMENTS_VS_Splited'] = this.cHILDSEGMENTSVSSplited; + data['DEFAULT_TYPE'] = this.dEFAULTTYPE; + data['DEFAULT_VALUE'] = this.dEFAULTVALUE; + data['DESC_FLEX_CONTEXT_CODE'] = this.dESCFLEXCONTEXTCODE; + data['DESC_FLEX_CONTEXT_NAME'] = this.dESCFLEXCONTEXTNAME; + data['DESC_FLEX_NAME'] = this.dESCFLEXNAME; + data['DISPLAY_FLAG'] = this.dISPLAYFLAG; + data['ENABLED_FLAG'] = this.eNABLEDFLAG; + if (this.eSERVICESDV != null) { + data['E_SERVICES_DV'] = this.eSERVICESDV!.toJson(); + } + if (this.eSERVICESVS != null) { + data['E_SERVICES_VS'] = this.eSERVICESVS!.map((v) => v.toJson()).toList(); + } + data['FLEX_VALUE_SET_NAME'] = this.fLEXVALUESETNAME; + data['FORMAT_TYPE'] = this.fORMATTYPE; + data['FORMAT_TYPE_DSP'] = this.fORMATTYPEDSP; + data['LONGLIST_FLAG'] = this.lONGLISTFLAG; + data['MAXIMUM_SIZE'] = this.mAXIMUMSIZE; + data['MAXIMUM_VALUE'] = this.mAXIMUMVALUE; + data['MINIMUM_VALUE'] = this.mINIMUMVALUE; + data['MOBILE_ENABLED'] = this.mOBILEENABLED; + data['NUMBER_PRECISION'] = this.nUMBERPRECISION; + data['NUMERIC_MODE_ENABLED_FLAG'] = this.nUMERICMODEENABLEDFLAG; + data['PARENT_SEGMENTS_DV'] = this.pARENTSEGMENTSDV; + if (this.pARENTSEGMENTSDVSplited != null) { + data['PARENT_SEGMENTS_DV_Splited'] = + this.pARENTSEGMENTSDVSplited!.map((v) => v.toJson()).toList(); + } + data['PARENT_SEGMENTS_VS'] = this.pARENTSEGMENTSVS; + if (this.pARENTSEGMENTSVSSplitedVS != null) { + data['PARENT_SEGMENTS_VS_SplitedVS'] = + this.pARENTSEGMENTSVSSplitedVS!.map((v) => v.toJson()).toList(); + } + data['READ_ONLY'] = this.rEADONLY; + data['REQUIRED_FLAG'] = this.rEQUIREDFLAG; + data['SEGMENT_NAME'] = this.sEGMENTNAME; + data['SEGMENT_PROMPT'] = this.sEGMENTPROMPT; + data['SEGMENT_SEQ_NUM'] = this.sEGMENTSEQNUM; + data['UPPERCASE_ONLY_FLAG'] = this.uPPERCASEONLYFLAG; + data['USED_FLAG'] = this.uSEDFLAG; + data['VALIDATION_TYPE'] = this.vALIDATIONTYPE; + data['VALIDATION_TYPE_DSP'] = this.vALIDATIONTYPEDSP; + return data; + } +} + diff --git a/lib/models/monthly_pay_slip/get_deductions_List_model.dart b/lib/models/monthly_pay_slip/get_deductions_List_model.dart new file mode 100644 index 0000000..7a99447 --- /dev/null +++ b/lib/models/monthly_pay_slip/get_deductions_List_model.dart @@ -0,0 +1,36 @@ +class GetDeductionsList { + int? aMOUNT; + String? eLEMENTNAME; + int? fROMROWNUM; + int? nOOFROWS; + int? rOWNUM; + int? tOROWNUM; + + GetDeductionsList( + {this.aMOUNT, + this.eLEMENTNAME, + this.fROMROWNUM, + this.nOOFROWS, + this.rOWNUM, + this.tOROWNUM}); + + GetDeductionsList.fromJson(Map json) { + aMOUNT = json['AMOUNT']; + eLEMENTNAME = json['ELEMENT_NAME']; + fROMROWNUM = json['FROM_ROW_NUM']; + nOOFROWS = json['NO_OF_ROWS']; + rOWNUM = json['ROW_NUM']; + tOROWNUM = json['TO_ROW_NUM']; + } + + Map toJson() { + final Map data = new Map(); + data['AMOUNT'] = this.aMOUNT; + data['ELEMENT_NAME'] = this.eLEMENTNAME; + data['FROM_ROW_NUM'] = this.fROMROWNUM; + data['NO_OF_ROWS'] = this.nOOFROWS; + data['ROW_NUM'] = this.rOWNUM; + data['TO_ROW_NUM'] = this.tOROWNUM; + return data; + } +} \ No newline at end of file diff --git a/lib/models/monthly_pay_slip/get_earnings_list_model.dart b/lib/models/monthly_pay_slip/get_earnings_list_model.dart new file mode 100644 index 0000000..4c38fa6 --- /dev/null +++ b/lib/models/monthly_pay_slip/get_earnings_list_model.dart @@ -0,0 +1,36 @@ +class GetEarningsList { + int? aMOUNT; + String? eLEMENTNAME; + int? fROMROWNUM; + int? nOOFROWS; + int? rOWNUM; + int? tOROWNUM; + + GetEarningsList( + {this.aMOUNT, + this.eLEMENTNAME, + this.fROMROWNUM, + this.nOOFROWS, + this.rOWNUM, + this.tOROWNUM}); + + GetEarningsList.fromJson(Map json) { + aMOUNT = json['AMOUNT']; + eLEMENTNAME = json['ELEMENT_NAME']; + fROMROWNUM = json['FROM_ROW_NUM']; + nOOFROWS = json['NO_OF_ROWS']; + rOWNUM = json['ROW_NUM']; + tOROWNUM = json['TO_ROW_NUM']; + } + + Map toJson() { + final Map data = new Map(); + data['AMOUNT'] = this.aMOUNT; + data['ELEMENT_NAME'] = this.eLEMENTNAME; + data['FROM_ROW_NUM'] = this.fROMROWNUM; + data['NO_OF_ROWS'] = this.nOOFROWS; + data['ROW_NUM'] = this.rOWNUM; + data['TO_ROW_NUM'] = this.tOROWNUM; + return data; + } +} \ No newline at end of file diff --git a/lib/models/monthly_pay_slip/get_pay_slip_list_model.dart b/lib/models/monthly_pay_slip/get_pay_slip_list_model.dart new file mode 100644 index 0000000..7cf8883 --- /dev/null +++ b/lib/models/monthly_pay_slip/get_pay_slip_list_model.dart @@ -0,0 +1,36 @@ +class GetPayslipList { + int? aCTIONCONTEXTID; + String? pAYMENTDATE; + String? pAYSLIPCHOICE; + String? pERIODENDDATE; + String? pERIODNAME; + String? pERIODSTARTDATE; + + GetPayslipList( + {this.aCTIONCONTEXTID, + this.pAYMENTDATE, + this.pAYSLIPCHOICE, + this.pERIODENDDATE, + this.pERIODNAME, + this.pERIODSTARTDATE}); + + GetPayslipList.fromJson(Map json) { + aCTIONCONTEXTID = json['ACTION_CONTEXT_ID']; + pAYMENTDATE = json['PAYMENT_DATE']; + pAYSLIPCHOICE = json['PAYSLIP_CHOICE']; + pERIODENDDATE = json['PERIOD_END_DATE']; + pERIODNAME = json['PERIOD_NAME']; + pERIODSTARTDATE = json['PERIOD_START_DATE']; + } + + Map toJson() { + final Map data = new Map(); + data['ACTION_CONTEXT_ID'] = this.aCTIONCONTEXTID; + data['PAYMENT_DATE'] = this.pAYMENTDATE; + data['PAYSLIP_CHOICE'] = this.pAYSLIPCHOICE; + data['PERIOD_END_DATE'] = this.pERIODENDDATE; + data['PERIOD_NAME'] = this.pERIODNAME; + data['PERIOD_START_DATE'] = this.pERIODSTARTDATE; + return data; + } +} \ No newline at end of file diff --git a/lib/models/monthly_pay_slip/get_payment_information_list_model.dart b/lib/models/monthly_pay_slip/get_payment_information_list_model.dart new file mode 100644 index 0000000..75ed21c --- /dev/null +++ b/lib/models/monthly_pay_slip/get_payment_information_list_model.dart @@ -0,0 +1,32 @@ +class GetPaymentInformationList { + String? aCCOUNTNUMBER; + String? aMOUNT; + String? bANKNAME; + String? bRANCHNAME; + String? pAYMENTMETHODNAME; + + GetPaymentInformationList( + {this.aCCOUNTNUMBER, + this.aMOUNT, + this.bANKNAME, + this.bRANCHNAME, + this.pAYMENTMETHODNAME}); + + GetPaymentInformationList.fromJson(Map json) { + aCCOUNTNUMBER = json['ACCOUNT_NUMBER']; + aMOUNT = json['AMOUNT']; + bANKNAME = json['BANK_NAME']; + bRANCHNAME = json['BRANCH_NAME']; + pAYMENTMETHODNAME = json['PAYMENT_METHOD_NAME']; + } + + Map toJson() { + final Map data = new Map(); + data['ACCOUNT_NUMBER'] = this.aCCOUNTNUMBER; + data['AMOUNT'] = this.aMOUNT; + data['BANK_NAME'] = this.bANKNAME; + data['BRANCH_NAME'] = this.bRANCHNAME; + data['PAYMENT_METHOD_NAME'] = this.pAYMENTMETHODNAME; + return data; + } +} \ No newline at end of file diff --git a/lib/models/monthly_pay_slip/get_summary_of_payment_list_model.dart b/lib/models/monthly_pay_slip/get_summary_of_payment_list_model.dart new file mode 100644 index 0000000..72ee89b --- /dev/null +++ b/lib/models/monthly_pay_slip/get_summary_of_payment_list_model.dart @@ -0,0 +1,36 @@ +class GetSummaryOfPaymentList { + int? tOTALDEDUCTIONSAMOUNT; + int? tOTALDEDUCTIONSPERCENTAGE; + int? tOTALEARNINGSAMOUNT; + int? tOTALEARNINGSPERCENTAGE; + int? tOTALPAYAMOUNT; + int? tOTALPAYPERCENTAGE; + + GetSummaryOfPaymentList( + {this.tOTALDEDUCTIONSAMOUNT, + this.tOTALDEDUCTIONSPERCENTAGE, + this.tOTALEARNINGSAMOUNT, + this.tOTALEARNINGSPERCENTAGE, + this.tOTALPAYAMOUNT, + this.tOTALPAYPERCENTAGE}); + + GetSummaryOfPaymentList.fromJson(Map json) { + tOTALDEDUCTIONSAMOUNT = json['TOTAL_DEDUCTIONS_AMOUNT']; + tOTALDEDUCTIONSPERCENTAGE = json['TOTAL_DEDUCTIONS_PERCENTAGE']; + tOTALEARNINGSAMOUNT = json['TOTAL_EARNINGS_AMOUNT']; + tOTALEARNINGSPERCENTAGE = json['TOTAL_EARNINGS_PERCENTAGE']; + tOTALPAYAMOUNT = json['TOTAL_PAY_AMOUNT']; + tOTALPAYPERCENTAGE = json['TOTAL_PAY_PERCENTAGE']; + } + + Map toJson() { + final Map data = new Map(); + data['TOTAL_DEDUCTIONS_AMOUNT'] = this.tOTALDEDUCTIONSAMOUNT; + data['TOTAL_DEDUCTIONS_PERCENTAGE'] = this.tOTALDEDUCTIONSPERCENTAGE; + data['TOTAL_EARNINGS_AMOUNT'] = this.tOTALEARNINGSAMOUNT; + data['TOTAL_EARNINGS_PERCENTAGE'] = this.tOTALEARNINGSPERCENTAGE; + data['TOTAL_PAY_AMOUNT'] = this.tOTALPAYAMOUNT; + data['TOTAL_PAY_PERCENTAGE'] = this.tOTALPAYPERCENTAGE; + return data; + } +} \ No newline at end of file diff --git a/lib/models/payslip/get_deductions_list.dart b/lib/models/payslip/get_deductions_list.dart new file mode 100644 index 0000000..7a99447 --- /dev/null +++ b/lib/models/payslip/get_deductions_list.dart @@ -0,0 +1,36 @@ +class GetDeductionsList { + int? aMOUNT; + String? eLEMENTNAME; + int? fROMROWNUM; + int? nOOFROWS; + int? rOWNUM; + int? tOROWNUM; + + GetDeductionsList( + {this.aMOUNT, + this.eLEMENTNAME, + this.fROMROWNUM, + this.nOOFROWS, + this.rOWNUM, + this.tOROWNUM}); + + GetDeductionsList.fromJson(Map json) { + aMOUNT = json['AMOUNT']; + eLEMENTNAME = json['ELEMENT_NAME']; + fROMROWNUM = json['FROM_ROW_NUM']; + nOOFROWS = json['NO_OF_ROWS']; + rOWNUM = json['ROW_NUM']; + tOROWNUM = json['TO_ROW_NUM']; + } + + Map toJson() { + final Map data = new Map(); + data['AMOUNT'] = this.aMOUNT; + data['ELEMENT_NAME'] = this.eLEMENTNAME; + data['FROM_ROW_NUM'] = this.fROMROWNUM; + data['NO_OF_ROWS'] = this.nOOFROWS; + data['ROW_NUM'] = this.rOWNUM; + data['TO_ROW_NUM'] = this.tOROWNUM; + return data; + } +} \ No newline at end of file diff --git a/lib/models/payslip/get_earnings_list.dart b/lib/models/payslip/get_earnings_list.dart new file mode 100644 index 0000000..272dab3 --- /dev/null +++ b/lib/models/payslip/get_earnings_list.dart @@ -0,0 +1,37 @@ + +class GetEarningsList { + int? aMOUNT; + String? eLEMENTNAME; + int? fROMROWNUM; + int? nOOFROWS; + int? rOWNUM; + int? tOROWNUM; + + GetEarningsList( + {this.aMOUNT, + this.eLEMENTNAME, + this.fROMROWNUM, + this.nOOFROWS, + this.rOWNUM, + this.tOROWNUM}); + + GetEarningsList.fromJson(Map json) { + aMOUNT = json['AMOUNT']; + eLEMENTNAME = json['ELEMENT_NAME']; + fROMROWNUM = json['FROM_ROW_NUM']; + nOOFROWS = json['NO_OF_ROWS']; + rOWNUM = json['ROW_NUM']; + tOROWNUM = json['TO_ROW_NUM']; + } + + Map toJson() { + final Map data = new Map(); + data['AMOUNT'] = this.aMOUNT; + data['ELEMENT_NAME'] = this.eLEMENTNAME; + data['FROM_ROW_NUM'] = this.fROMROWNUM; + data['NO_OF_ROWS'] = this.nOOFROWS; + data['ROW_NUM'] = this.rOWNUM; + data['TO_ROW_NUM'] = this.tOROWNUM; + return data; + } +} \ No newline at end of file diff --git a/lib/models/payslip/get_payment_information.dart b/lib/models/payslip/get_payment_information.dart new file mode 100644 index 0000000..277b409 --- /dev/null +++ b/lib/models/payslip/get_payment_information.dart @@ -0,0 +1,33 @@ + +class GetPaymentInformationList { + String? aCCOUNTNUMBER; + String? aMOUNT; + String? bANKNAME; + String? bRANCHNAME; + String? pAYMENTMETHODNAME; + + GetPaymentInformationList( + {this.aCCOUNTNUMBER, + this.aMOUNT, + this.bANKNAME, + this.bRANCHNAME, + this.pAYMENTMETHODNAME}); + + GetPaymentInformationList.fromJson(Map json) { + aCCOUNTNUMBER = json['ACCOUNT_NUMBER']; + aMOUNT = json['AMOUNT']; + bANKNAME = json['BANK_NAME']; + bRANCHNAME = json['BRANCH_NAME']; + pAYMENTMETHODNAME = json['PAYMENT_METHOD_NAME']; + } + + Map toJson() { + final Map data = new Map(); + data['ACCOUNT_NUMBER'] = this.aCCOUNTNUMBER; + data['AMOUNT'] = this.aMOUNT; + data['BANK_NAME'] = this.bANKNAME; + data['BRANCH_NAME'] = this.bRANCHNAME; + data['PAYMENT_METHOD_NAME'] = this.pAYMENTMETHODNAME; + return data; + } +} \ No newline at end of file diff --git a/lib/models/payslip/get_payslip.dart b/lib/models/payslip/get_payslip.dart new file mode 100644 index 0000000..2bb8280 --- /dev/null +++ b/lib/models/payslip/get_payslip.dart @@ -0,0 +1,38 @@ + + +class GetPayslipList { + int? aCTIONCONTEXTID; + String? pAYMENTDATE; + String? pAYSLIPCHOICE; + String? pERIODENDDATE; + String? pERIODNAME; + String? pERIODSTARTDATE; + + GetPayslipList( + {this.aCTIONCONTEXTID, + this.pAYMENTDATE, + this.pAYSLIPCHOICE, + this.pERIODENDDATE, + this.pERIODNAME, + this.pERIODSTARTDATE}); + + GetPayslipList.fromJson(Map json) { + aCTIONCONTEXTID = json['ACTION_CONTEXT_ID']; + pAYMENTDATE = json['PAYMENT_DATE']; + pAYSLIPCHOICE = json['PAYSLIP_CHOICE']; + pERIODENDDATE = json['PERIOD_END_DATE']; + pERIODNAME = json['PERIOD_NAME']; + pERIODSTARTDATE = json['PERIOD_START_DATE']; + } + + Map toJson() { + final Map data = new Map(); + data['ACTION_CONTEXT_ID'] = this.aCTIONCONTEXTID; + data['PAYMENT_DATE'] = this.pAYMENTDATE; + data['PAYSLIP_CHOICE'] = this.pAYSLIPCHOICE; + data['PERIOD_END_DATE'] = this.pERIODENDDATE; + data['PERIOD_NAME'] = this.pERIODNAME; + data['PERIOD_START_DATE'] = this.pERIODSTARTDATE; + return data; + } +} \ No newline at end of file diff --git a/lib/models/payslip/get_summary_of_payment.dart b/lib/models/payslip/get_summary_of_payment.dart new file mode 100644 index 0000000..abf3dc4 --- /dev/null +++ b/lib/models/payslip/get_summary_of_payment.dart @@ -0,0 +1,38 @@ + + +class GetSummaryOfPaymentList { + int? tOTALDEDUCTIONSAMOUNT; + int? tOTALDEDUCTIONSPERCENTAGE; + int? tOTALEARNINGSAMOUNT; + int? tOTALEARNINGSPERCENTAGE; + int? tOTALPAYAMOUNT; + int? tOTALPAYPERCENTAGE; + + GetSummaryOfPaymentList( + {this.tOTALDEDUCTIONSAMOUNT, + this.tOTALDEDUCTIONSPERCENTAGE, + this.tOTALEARNINGSAMOUNT, + this.tOTALEARNINGSPERCENTAGE, + this.tOTALPAYAMOUNT, + this.tOTALPAYPERCENTAGE}); + + GetSummaryOfPaymentList.fromJson(Map json) { + tOTALDEDUCTIONSAMOUNT = json['TOTAL_DEDUCTIONS_AMOUNT']; + tOTALDEDUCTIONSPERCENTAGE = json['TOTAL_DEDUCTIONS_PERCENTAGE']; + tOTALEARNINGSAMOUNT = json['TOTAL_EARNINGS_AMOUNT']; + tOTALEARNINGSPERCENTAGE = json['TOTAL_EARNINGS_PERCENTAGE']; + tOTALPAYAMOUNT = json['TOTAL_PAY_AMOUNT']; + tOTALPAYPERCENTAGE = json['TOTAL_PAY_PERCENTAGE']; + } + + Map toJson() { + final Map data = new Map(); + data['TOTAL_DEDUCTIONS_AMOUNT'] = this.tOTALDEDUCTIONSAMOUNT; + data['TOTAL_DEDUCTIONS_PERCENTAGE'] = this.tOTALDEDUCTIONSPERCENTAGE; + data['TOTAL_EARNINGS_AMOUNT'] = this.tOTALEARNINGSAMOUNT; + data['TOTAL_EARNINGS_PERCENTAGE'] = this.tOTALEARNINGSPERCENTAGE; + data['TOTAL_PAY_AMOUNT'] = this.tOTALPAYAMOUNT; + data['TOTAL_PAY_PERCENTAGE'] = this.tOTALPAYPERCENTAGE; + return data; + } +} \ No newline at end of file diff --git a/lib/models/post_params_model.dart b/lib/models/post_params_model.dart index 0bb48d0..7e62257 100644 --- a/lib/models/post_params_model.dart +++ b/lib/models/post_params_model.dart @@ -37,7 +37,7 @@ class PostParamsModel { languageID = json['LanguageID']; mobileType = json['MobileType']; logInTokenID = json['LogInTokenID']; - payrollCodeStr = json['payrollCodeStr']; + payrollCodeStr = json['PayrollCodeStr']; pLegislationCode = json['LegislationCodeStr']; tokenID = json['TokenID']; } @@ -49,7 +49,7 @@ class PostParamsModel { data['LanguageID'] = this.languageID; data['MobileType'] = this.mobileType; data['LogInTokenID'] = this.logInTokenID; - data['payrollCodeStr'] = this.payrollCodeStr; + data['PayrollCodeStr'] = this.payrollCodeStr; data['LegislationCodeStr'] = this.pLegislationCode; data['TokenID'] = this.tokenID; return data; @@ -67,7 +67,7 @@ class PostParamsModel { data['UserName'] = this.userName; data['P_EMAIL_ADDRESS'] = this.pEmailAddress; data['P_SESSION_ID'] = this.pSessionId; - data['payrollCodeStr'] = this.payrollCodeStr; + data['PayrollCodeStr'] = this.payrollCodeStr; data['LegislationCodeStr'] = this.pLegislationCode; data['P_SELECTED_EMPLOYEE_NUMBER'] = this.pSelectedEmployeeNumber; data['P_USER_NAME'] = this.pUserName; diff --git a/lib/models/profile/basic_details_dff_structure.dart b/lib/models/profile/basic_details_dff_structure.dart index db3312e..9d44b85 100644 --- a/lib/models/profile/basic_details_dff_structure.dart +++ b/lib/models/profile/basic_details_dff_structure.dart @@ -1,11 +1,12 @@ import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; +import 'package:mohem_flutter_app/models/profile/get_contact_details_list.dart'; class GetBasicDetDffStructureList { String? aLPHANUMERICALLOWEDFLAG; String? aPPLICATIONCOLUMNNAME; String? cHILDSEGMENTSVS; - Null? cHILDSEGMENTSVSSplited; + dynamic? cHILDSEGMENTSVSSplited; String? dEFAULTTYPE; String? dEFAULTVALUE; String? dESCFLEXCONTEXTCODE; @@ -27,9 +28,9 @@ class GetBasicDetDffStructureList { String? nUMBERPRECISION; String? nUMERICMODEENABLEDFLAG; String? pARENTSEGMENTSDV; - List? pARENTSEGMENTSDVSplited; + List? pARENTSEGMENTSDVSplited; String? pARENTSEGMENTSVS; - List? pARENTSEGMENTSVSSplitedVS; + List? pARENTSEGMENTSVSSplitedVS; String? rEADONLY; String? rEQUIREDFLAG; String? sEGMENTNAME; @@ -40,6 +41,7 @@ class GetBasicDetDffStructureList { String? vALIDATIONTYPE; String? vALIDATIONTYPEDSP; GetEmployeeBasicDetailsList? userBasicDetail; + GetContactDetailsList? getContactDetailsList; GetBasicDetDffStructureList( {this.aLPHANUMERICALLOWEDFLAG, @@ -79,7 +81,9 @@ class GetBasicDetDffStructureList { this.uSEDFLAG, this.vALIDATIONTYPE, this.vALIDATIONTYPEDSP, - this.userBasicDetail}); + this.userBasicDetail, + this.getContactDetailsList + }); GetBasicDetDffStructureList.fromJson(Map json) { aLPHANUMERICALLOWEDFLAG = json['ALPHANUMERIC_ALLOWED_FLAG']; @@ -134,6 +138,7 @@ class GetBasicDetDffStructureList { uSEDFLAG = json['USED_FLAG']; vALIDATIONTYPE = json['VALIDATION_TYPE']; vALIDATIONTYPEDSP = json['VALIDATION_TYPE_DSP']; + } Map toJson() { diff --git a/lib/models/profile/get_address_dff_structure_list.dart b/lib/models/profile/get_address_dff_structure_list.dart new file mode 100644 index 0000000..50d9b97 --- /dev/null +++ b/lib/models/profile/get_address_dff_structure_list.dart @@ -0,0 +1,189 @@ +import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; +import 'package:mohem_flutter_app/models/get_employee_address_model.dart'; + +class GetAddressDffStructureList { + String? aLPHANUMERICALLOWEDFLAG; + String? aPPLICATIONCOLUMNNAME; + String? cHILDSEGMENTSVS; + Null? cHILDSEGMENTSVSSplited; + String? dEFAULTTYPE; + String? dEFAULTVALUE; + String? dESCFLEXCONTEXTCODE; + String? dESCFLEXCONTEXTNAME; + String? dESCFLEXNAME; + String? dISPLAYFLAG; + String? eNABLEDFLAG; + ESERVICESDV? eSERVICESDV; + List? eSERVICESVS; + String? fLEXVALUESETNAME; + String? fORMATTYPE; + String? fORMATTYPEDSP; + bool? isEmptyOption; + String? lONGLISTFLAG; + int? mAXIMUMSIZE; + String? mAXIMUMVALUE; + String? mINIMUMVALUE; + String? mOBILEENABLED; + String? nUMBERPRECISION; + String? nUMERICMODEENABLEDFLAG; + String? pARENTSEGMENTSDV; + List? pARENTSEGMENTSDVSplited; + String? pARENTSEGMENTSVS; + List? pARENTSEGMENTSVSSplitedVS; + String? rEADONLY; + String? rEQUIREDFLAG; + String? sEGMENTNAME; + String? sEGMENTPROMPT; + int? sEGMENTSEQNUM; + String? uPPERCASEONLYFLAG; + String? uSEDFLAG; + String? vALIDATIONTYPE; + String? vALIDATIONTYPEDSP; + GetEmployeeAddressList? getEmployeeAddressList; + GetAddressDffStructureList( + {this.aLPHANUMERICALLOWEDFLAG, + this.aPPLICATIONCOLUMNNAME, + this.cHILDSEGMENTSVS, + this.cHILDSEGMENTSVSSplited, + this.dEFAULTTYPE, + this.dEFAULTVALUE, + this.dESCFLEXCONTEXTCODE, + this.dESCFLEXCONTEXTNAME, + this.dESCFLEXNAME, + this.dISPLAYFLAG, + this.eNABLEDFLAG, + this.eSERVICESDV, + this.eSERVICESVS, + this.fLEXVALUESETNAME, + this.fORMATTYPE, + this.fORMATTYPEDSP, + this.isEmptyOption, + this.lONGLISTFLAG, + this.mAXIMUMSIZE, + this.mAXIMUMVALUE, + this.mINIMUMVALUE, + this.mOBILEENABLED, + this.nUMBERPRECISION, + this.nUMERICMODEENABLEDFLAG, + this.pARENTSEGMENTSDV, + this.pARENTSEGMENTSDVSplited, + this.pARENTSEGMENTSVS, + this.pARENTSEGMENTSVSSplitedVS, + this.rEADONLY, + this.rEQUIREDFLAG, + this.sEGMENTNAME, + this.sEGMENTPROMPT, + this.sEGMENTSEQNUM, + this.uPPERCASEONLYFLAG, + this.uSEDFLAG, + this.vALIDATIONTYPE, + this.vALIDATIONTYPEDSP, + this.getEmployeeAddressList}); + + GetAddressDffStructureList.fromJson(Map json) { + aLPHANUMERICALLOWEDFLAG = json['ALPHANUMERIC_ALLOWED_FLAG']; + aPPLICATIONCOLUMNNAME = json['APPLICATION_COLUMN_NAME']; + cHILDSEGMENTSVS = json['CHILD_SEGMENTS_VS']; + cHILDSEGMENTSVSSplited = json['CHILD_SEGMENTS_VS_Splited']; + dEFAULTTYPE = json['DEFAULT_TYPE']; + dEFAULTVALUE = json['DEFAULT_VALUE']; + dESCFLEXCONTEXTCODE = json['DESC_FLEX_CONTEXT_CODE']; + dESCFLEXCONTEXTNAME = json['DESC_FLEX_CONTEXT_NAME']; + dESCFLEXNAME = json['DESC_FLEX_NAME']; + dISPLAYFLAG = json['DISPLAY_FLAG']; + eNABLEDFLAG = json['ENABLED_FLAG']; + eSERVICESDV = json['E_SERVICES_DV'] != null ? new ESERVICESDV.fromJson(json['E_SERVICES_DV']) : null; + if (json['E_SERVICES_VS'] != null) { + eSERVICESVS = []; + json['E_SERVICES_VS'].forEach((v) { + eSERVICESVS!.add(new ESERVICESVS.fromJson(v)); + }); + } + fLEXVALUESETNAME = json['FLEX_VALUE_SET_NAME']; + fORMATTYPE = json['FORMAT_TYPE']; + fORMATTYPEDSP = json['FORMAT_TYPE_DSP']; + isEmptyOption = json['IsEmptyOption']; + lONGLISTFLAG = json['LONGLIST_FLAG']; + mAXIMUMSIZE = json['MAXIMUM_SIZE']; + mAXIMUMVALUE = json['MAXIMUM_VALUE']; + mINIMUMVALUE = json['MINIMUM_VALUE']; + mOBILEENABLED = json['MOBILE_ENABLED']; + nUMBERPRECISION = json['NUMBER_PRECISION']; + nUMERICMODEENABLEDFLAG = json['NUMERIC_MODE_ENABLED_FLAG']; + pARENTSEGMENTSDV = json['PARENT_SEGMENTS_DV']; + if (json['PARENT_SEGMENTS_DV_Splited'] != null) { + pARENTSEGMENTSDVSplited = []; + json['PARENT_SEGMENTS_DV_Splited'].forEach((v) { + pARENTSEGMENTSDVSplited!.add(v); + }); + } + pARENTSEGMENTSVS = json['PARENT_SEGMENTS_VS']; + if (json['PARENT_SEGMENTS_VS_SplitedVS'] != null) { + pARENTSEGMENTSVSSplitedVS = []; + json['PARENT_SEGMENTS_VS_SplitedVS'].forEach((v) { + pARENTSEGMENTSVSSplitedVS!.add(v); + }); + } + rEADONLY = json['READ_ONLY']; + rEQUIREDFLAG = json['REQUIRED_FLAG']; + sEGMENTNAME = json['SEGMENT_NAME']; + sEGMENTPROMPT = json['SEGMENT_PROMPT']; + sEGMENTSEQNUM = json['SEGMENT_SEQ_NUM']; + uPPERCASEONLYFLAG = json['UPPERCASE_ONLY_FLAG']; + uSEDFLAG = json['USED_FLAG']; + vALIDATIONTYPE = json['VALIDATION_TYPE']; + vALIDATIONTYPEDSP = json['VALIDATION_TYPE_DSP']; + getEmployeeAddressList = json['GetEmployeeAddressList'] != null ? new GetEmployeeAddressList.fromJson(json['GetEmployeeAddressList']) : GetEmployeeAddressList(); + } + + Map toJson() { + final Map data = new Map(); + data['ALPHANUMERIC_ALLOWED_FLAG'] = this.aLPHANUMERICALLOWEDFLAG; + data['APPLICATION_COLUMN_NAME'] = this.aPPLICATIONCOLUMNNAME; + data['CHILD_SEGMENTS_VS'] = this.cHILDSEGMENTSVS; + data['CHILD_SEGMENTS_VS_Splited'] = this.cHILDSEGMENTSVSSplited; + data['DEFAULT_TYPE'] = this.dEFAULTTYPE; + data['DEFAULT_VALUE'] = this.dEFAULTVALUE; + data['DESC_FLEX_CONTEXT_CODE'] = this.dESCFLEXCONTEXTCODE; + data['DESC_FLEX_CONTEXT_NAME'] = this.dESCFLEXCONTEXTNAME; + data['DESC_FLEX_NAME'] = this.dESCFLEXNAME; + data['DISPLAY_FLAG'] = this.dISPLAYFLAG; + data['ENABLED_FLAG'] = this.eNABLEDFLAG; + if (this.eSERVICESDV != null) { + data['E_SERVICES_DV'] = this.eSERVICESDV!.toJson(); + } + if (this.eSERVICESVS != null) { + data['E_SERVICES_VS'] = this.eSERVICESVS!.map((v) => v.toJson()).toList(); + } + data['FLEX_VALUE_SET_NAME'] = this.fLEXVALUESETNAME; + data['FORMAT_TYPE'] = this.fORMATTYPE; + data['FORMAT_TYPE_DSP'] = this.fORMATTYPEDSP; + data['IsEmptyOption'] = this.isEmptyOption; + data['LONGLIST_FLAG'] = this.lONGLISTFLAG; + data['MAXIMUM_SIZE'] = this.mAXIMUMSIZE; + data['MAXIMUM_VALUE'] = this.mAXIMUMVALUE; + data['MINIMUM_VALUE'] = this.mINIMUMVALUE; + data['MOBILE_ENABLED'] = this.mOBILEENABLED; + data['NUMBER_PRECISION'] = this.nUMBERPRECISION; + data['NUMERIC_MODE_ENABLED_FLAG'] = this.nUMERICMODEENABLEDFLAG; + data['PARENT_SEGMENTS_DV'] = this.pARENTSEGMENTSDV; + if (this.pARENTSEGMENTSDVSplited != null) { + data['PARENT_SEGMENTS_DV_Splited'] = this.pARENTSEGMENTSDVSplited!.map((v) => v).toList(); + } + data['PARENT_SEGMENTS_VS'] = this.pARENTSEGMENTSVS; + if (this.pARENTSEGMENTSVSSplitedVS != null) { + data['PARENT_SEGMENTS_VS_SplitedVS'] = this.pARENTSEGMENTSVSSplitedVS!.map((v) => v).toList(); + } + data['READ_ONLY'] = this.rEADONLY; + data['REQUIRED_FLAG'] = this.rEQUIREDFLAG; + data['SEGMENT_NAME'] = this.sEGMENTNAME; + data['SEGMENT_PROMPT'] = this.sEGMENTPROMPT; + data['SEGMENT_SEQ_NUM'] = this.sEGMENTSEQNUM; + data['UPPERCASE_ONLY_FLAG'] = this.uPPERCASEONLYFLAG; + data['USED_FLAG'] = this.uSEDFLAG; + data['VALIDATION_TYPE'] = this.vALIDATIONTYPE; + data['VALIDATION_TYPE_DSP'] = this.vALIDATIONTYPEDSP; + data['GetEmployeeAddressList'] != null ? this.getEmployeeAddressList!.toJson() : GetEmployeeAddressList(); + return data; + } +} diff --git a/lib/models/profile/get_contact_clos_structure_list.dart b/lib/models/profile/get_contact_clos_structure_list.dart new file mode 100644 index 0000000..7f3ad90 --- /dev/null +++ b/lib/models/profile/get_contact_clos_structure_list.dart @@ -0,0 +1,93 @@ + + +import 'package:mohem_flutter_app/models/profile/get_contact_details_list.dart'; + +class GetContactColsStructureList { + String? aPPLICATIONCOLUMNNAME; + String? dATATYPE; + String? dISPLAYFLAG; + int? gROUPNUM; + dynamic? mAXIMUMSIZE; + String? oBJECTNAME; + String? oBJECTTYPE; + List? objectValuesList; + //List? objectValuesList; + String? rEQUIREDFLAG; + String? sEGMENTPROMPT; + int? sEGMENTSEQNUM; + GetContactDetailsList? getContactDetailsList; + + GetContactColsStructureList( + {this.aPPLICATIONCOLUMNNAME, + this.dATATYPE, + this.dISPLAYFLAG, + this.gROUPNUM, + this.mAXIMUMSIZE, + this.oBJECTNAME, + this.oBJECTTYPE, + this.objectValuesList, + this.rEQUIREDFLAG, + this.sEGMENTPROMPT, + this.sEGMENTSEQNUM, + this.getContactDetailsList}); + + GetContactColsStructureList.fromJson(Map json) { + aPPLICATIONCOLUMNNAME = json['APPLICATION_COLUMN_NAME']; + dATATYPE = json['DATATYPE']; + dISPLAYFLAG = json['DISPLAY_FLAG']; + gROUPNUM = json['GROUP_NUM']; + mAXIMUMSIZE = json['MAXIMUM_SIZE']; + oBJECTNAME = json['OBJECT_NAME']; + oBJECTTYPE = json['OBJECT_TYPE']; + if (json['ObjectValuesList'] != null) { + objectValuesList = []; + json['ObjectValuesList'].forEach((v) { + objectValuesList!.add(new ObjectValuesList.fromJson(v)); + }); + } + rEQUIREDFLAG = json['REQUIRED_FLAG']; + sEGMENTPROMPT = json['SEGMENT_PROMPT']; + sEGMENTSEQNUM = json['SEGMENT_SEQ_NUM']; + } + + Map toJson() { + final Map data = new Map(); + data['APPLICATION_COLUMN_NAME'] = this.aPPLICATIONCOLUMNNAME; + data['DATATYPE'] = this.dATATYPE; + data['DISPLAY_FLAG'] = this.dISPLAYFLAG; + data['GROUP_NUM'] = this.gROUPNUM; + data['MAXIMUM_SIZE'] = this.mAXIMUMSIZE; + data['OBJECT_NAME'] = this.oBJECTNAME; + data['OBJECT_TYPE'] = this.oBJECTTYPE; + if (this.objectValuesList != null) { + data['ObjectValuesList'] = + this.objectValuesList!.map((v) => v.toJson()).toList(); + } + data['REQUIRED_FLAG'] = this.rEQUIREDFLAG; + data['SEGMENT_PROMPT'] = this.sEGMENTPROMPT; + data['SEGMENT_SEQ_NUM'] = this.sEGMENTSEQNUM; + return data; + } +} + +class ObjectValuesList { + String? cODE; + String? dESCRIPTION; + String? mEANING; + + ObjectValuesList({this.cODE, this.dESCRIPTION, this.mEANING}); + + ObjectValuesList.fromJson(Map json) { + cODE = json['CODE']; + dESCRIPTION = json['DESCRIPTION']; + mEANING = json['MEANING']; + } + + Map toJson() { + final Map data = new Map(); + data['CODE'] = this.cODE; + data['DESCRIPTION'] = this.dESCRIPTION; + data['MEANING'] = this.mEANING; + return data; + } +} \ No newline at end of file diff --git a/lib/models/profile/get_contact_details_list.dart b/lib/models/profile/get_contact_details_list.dart new file mode 100644 index 0000000..9097291 --- /dev/null +++ b/lib/models/profile/get_contact_details_list.dart @@ -0,0 +1,54 @@ + + +class GetContactDetailsList { + String? aPPLICATIONCOLUMNNAME; + String? dATATYPE; + String? dATEVALUE; + String? dISPLAYFLAG; + int? gROUPNUM; + dynamic? nUMBERVALUE; + String? sEGMENTPROMPT; + int? sEGMENTSEQNUM; + String? sEGMENTVALUEDSP; + String? vARCHAR2VALUE; + + GetContactDetailsList( + {this.aPPLICATIONCOLUMNNAME, + this.dATATYPE, + this.dATEVALUE, + this.dISPLAYFLAG, + this.gROUPNUM, + this.nUMBERVALUE, + this.sEGMENTPROMPT, + this.sEGMENTSEQNUM, + this.sEGMENTVALUEDSP, + this.vARCHAR2VALUE}); + + GetContactDetailsList.fromJson(Map json) { + aPPLICATIONCOLUMNNAME = json['APPLICATION_COLUMN_NAME']; + dATATYPE = json['DATATYPE']; + dATEVALUE = json['DATE_VALUE']; + dISPLAYFLAG = json['DISPLAY_FLAG']; + gROUPNUM = json['GROUP_NUM']; + nUMBERVALUE = json['NUMBER_VALUE']; + sEGMENTPROMPT = json['SEGMENT_PROMPT']; + sEGMENTSEQNUM = json['SEGMENT_SEQ_NUM']; + sEGMENTVALUEDSP = json['SEGMENT_VALUE_DSP']; + vARCHAR2VALUE = json['VARCHAR2_VALUE']; + } + + Map toJson() { + final Map data = new Map(); + data['APPLICATION_COLUMN_NAME'] = this.aPPLICATIONCOLUMNNAME; + data['DATATYPE'] = this.dATATYPE; + data['DATE_VALUE'] = this.dATEVALUE; + data['DISPLAY_FLAG'] = this.dISPLAYFLAG; + data['GROUP_NUM'] = this.gROUPNUM; + data['NUMBER_VALUE'] = this.nUMBERVALUE; + data['SEGMENT_PROMPT'] = this.sEGMENTPROMPT; + data['SEGMENT_SEQ_NUM'] = this.sEGMENTSEQNUM; + data['SEGMENT_VALUE_DSP'] = this.sEGMENTVALUEDSP; + data['VARCHAR2_VALUE'] = this.vARCHAR2VALUE; + return data; + } +} \ No newline at end of file diff --git a/lib/models/profile/get_countries_list_model.dart b/lib/models/profile/get_countries_list_model.dart new file mode 100644 index 0000000..dc9e9c7 --- /dev/null +++ b/lib/models/profile/get_countries_list_model.dart @@ -0,0 +1,18 @@ +class GetCountriesListModel { + String? cOUNTRYCODE; + String? cOUNTRYNAME; + + GetCountriesListModel({this.cOUNTRYCODE, this.cOUNTRYNAME}); + + GetCountriesListModel.fromJson(Map json) { + cOUNTRYCODE = json['COUNTRY_CODE']; + cOUNTRYNAME = json['COUNTRY_NAME']; + } + + Map toJson() { + final Map data = new Map(); + data['COUNTRY_CODE'] = this.cOUNTRYCODE; + data['COUNTRY_NAME'] = this.cOUNTRYNAME; + return data; + } +} diff --git a/lib/models/profile/phone_number_types_modek.dart b/lib/models/profile/phone_number_types_model.dart similarity index 100% rename from lib/models/profile/phone_number_types_modek.dart rename to lib/models/profile/phone_number_types_model.dart diff --git a/lib/models/profile/start_address_approval_process_model.dart b/lib/models/profile/start_address_approval_process_model.dart new file mode 100644 index 0000000..717298d --- /dev/null +++ b/lib/models/profile/start_address_approval_process_model.dart @@ -0,0 +1,18 @@ +class StartAddressApprovalProcess { + String? pRETURNMSG; + String? pRETURNSTATUS; + + StartAddressApprovalProcess({this.pRETURNMSG, this.pRETURNSTATUS}); + + StartAddressApprovalProcess.fromJson(Map json) { + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + } + + Map toJson() { + final Map data = new Map(); + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + return data; + } +} diff --git a/lib/models/profile/submit_address_transaction.dart b/lib/models/profile/submit_address_transaction.dart new file mode 100644 index 0000000..193cb68 --- /dev/null +++ b/lib/models/profile/submit_address_transaction.dart @@ -0,0 +1,24 @@ +class SubmitAddressTransaction { + String? pITEMKEY; + String? pRETURNMSG; + String? pRETURNSTATUS; + int? pTRANSACTIONID; + + SubmitAddressTransaction({this.pITEMKEY, this.pRETURNMSG, this.pRETURNSTATUS, this.pTRANSACTIONID}); + + SubmitAddressTransaction.fromJson(Map json) { + pITEMKEY = json['P_ITEM_KEY']; + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + pTRANSACTIONID = json['P_TRANSACTION_ID']; + } + + Map toJson() { + final Map data = new Map(); + data['P_ITEM_KEY'] = this.pITEMKEY; + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + data['P_TRANSACTION_ID'] = this.pTRANSACTIONID; + return data; + } +} diff --git a/lib/models/profile/submit_basic_details_transaction_model.dart b/lib/models/profile/submit_basic_details_transaction_model.dart new file mode 100644 index 0000000..db6ea7a --- /dev/null +++ b/lib/models/profile/submit_basic_details_transaction_model.dart @@ -0,0 +1,24 @@ +class SubmitBasicDetailsTransactionList { + String? pITEMKEY; + String? pRETURNMSG; + String? pRETURNSTATUS; + int? pTRANSACTIONID; + + SubmitBasicDetailsTransactionList({this.pITEMKEY, this.pRETURNMSG, this.pRETURNSTATUS, this.pTRANSACTIONID}); + + SubmitBasicDetailsTransactionList.fromJson(Map json) { + pITEMKEY = json['P_ITEM_KEY']; + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + pTRANSACTIONID = json['P_TRANSACTION_ID']; + } + + Map toJson() { + final Map data = new Map(); + data['P_ITEM_KEY'] = this.pITEMKEY; + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + data['P_TRANSACTION_ID'] = this.pTRANSACTIONID; + return data; + } +} diff --git a/lib/models/profile/submit_contact_transaction_list_model.dart b/lib/models/profile/submit_contact_transaction_list_model.dart new file mode 100644 index 0000000..3510473 --- /dev/null +++ b/lib/models/profile/submit_contact_transaction_list_model.dart @@ -0,0 +1,34 @@ + +class SubmitContactTransactionList { + String? pITEMKEY; + String? pRETURNMSG; + String? pRETURNSTATUS; + int? pTRANSACTIONID; + + SubmitContactTransactionList( + {this.pITEMKEY, + this.pRETURNMSG, + this.pRETURNSTATUS, + this.pTRANSACTIONID}); + + SubmitContactTransactionList.fromJson(Map json) { + pITEMKEY = json['P_ITEM_KEY']; + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + pTRANSACTIONID = json['P_TRANSACTION_ID']; + } + + Map toJson() { + final Map data = new Map(); + data['P_ITEM_KEY'] = this.pITEMKEY; + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + data['P_TRANSACTION_ID'] = this.pTRANSACTIONID; + return data; + } +} + +// if (this.submitContactTransactionList != null) { +// data['SubmitContactTransactionList'] = +// this.submitContactTransactionList!.toJson(); +// } \ No newline at end of file diff --git a/lib/models/profile/submit_phone_transactions.dart b/lib/models/profile/submit_phone_transactions.dart new file mode 100644 index 0000000..6b7afd1 --- /dev/null +++ b/lib/models/profile/submit_phone_transactions.dart @@ -0,0 +1,24 @@ +class SubmitPhonesTransactionList { + String? pITEMKEY; + String? pRETURNMSG; + String? pRETURNSTATUS; + int? pTRANSACTIONID; + + SubmitPhonesTransactionList({this.pITEMKEY, this.pRETURNMSG, this.pRETURNSTATUS, this.pTRANSACTIONID}); + + SubmitPhonesTransactionList.fromJson(Map json) { + pITEMKEY = json['P_ITEM_KEY']; + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + pTRANSACTIONID = json['P_TRANSACTION_ID']; + } + + Map toJson() { + final Map data = new Map(); + data['P_ITEM_KEY'] = this.pITEMKEY; + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + data['P_TRANSACTION_ID'] = this.pTRANSACTIONID; + return data; + } +} diff --git a/lib/models/profile_menu.model.dart b/lib/models/profile_menu.model.dart index c1b77b7..65a9069 100644 --- a/lib/models/profile_menu.model.dart +++ b/lib/models/profile_menu.model.dart @@ -1,5 +1,6 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart'; class ProfileMenu { final String name; @@ -8,5 +9,6 @@ class ProfileMenu { final String dynamicUrl; final String functionName; final String requestID; - ProfileMenu({this.name = '', this.icon = '', this.route = '', this.dynamicUrl = '', this.functionName = '', this.requestID = ''}); + final GetMenuEntriesList menuEntries; + ProfileMenu({this.name = '', this.icon = '', this.route = '', this.dynamicUrl = '', this.functionName = '', this.requestID = '', required this.menuEntries}); } diff --git a/lib/models/start_phone_approval_process_model.dart b/lib/models/start_phone_approval_process_model.dart new file mode 100644 index 0000000..2ce3a15 --- /dev/null +++ b/lib/models/start_phone_approval_process_model.dart @@ -0,0 +1,18 @@ +class StartPhoneApprovalProcess { + String? pRETURNMSG; + String? pRETURNSTATUS; + + StartPhoneApprovalProcess({this.pRETURNMSG, this.pRETURNSTATUS}); + + StartPhoneApprovalProcess.fromJson(Map json) { + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + } + + Map toJson() { + final Map data = new Map(); + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + return data; + } +} diff --git a/lib/models/vacation_rule/get_item_type_notifications_list_model.dart b/lib/models/vacation_rule/get_item_type_notifications_list_model.dart new file mode 100644 index 0000000..4d80a0e --- /dev/null +++ b/lib/models/vacation_rule/get_item_type_notifications_list_model.dart @@ -0,0 +1,28 @@ +class GetItemTypeNotificationsList { + String? fYIFLAG; + String? nOTIFICATIONDISPLAYNAME; + String? nOTIFICATIONNAME; + String? nOTIFICATIONSUBJECT; + + GetItemTypeNotificationsList( + {this.fYIFLAG, + this.nOTIFICATIONDISPLAYNAME, + this.nOTIFICATIONNAME, + this.nOTIFICATIONSUBJECT}); + + GetItemTypeNotificationsList.fromJson(Map json) { + fYIFLAG = json['FYI_FLAG']; + nOTIFICATIONDISPLAYNAME = json['NOTIFICATION_DISPLAY_NAME']; + nOTIFICATIONNAME = json['NOTIFICATION_NAME']; + nOTIFICATIONSUBJECT = json['NOTIFICATION_SUBJECT']; + } + + Map toJson() { + final Map data = new Map(); + data['FYI_FLAG'] = this.fYIFLAG; + data['NOTIFICATION_DISPLAY_NAME'] = this.nOTIFICATIONDISPLAYNAME; + data['NOTIFICATION_NAME'] = this.nOTIFICATIONNAME; + data['NOTIFICATION_SUBJECT'] = this.nOTIFICATIONSUBJECT; + return data; + } +} \ No newline at end of file diff --git a/lib/models/vacation_rule/get_notification_reassign_mode_list_model.dart b/lib/models/vacation_rule/get_notification_reassign_mode_list_model.dart new file mode 100644 index 0000000..e3495d0 --- /dev/null +++ b/lib/models/vacation_rule/get_notification_reassign_mode_list_model.dart @@ -0,0 +1,22 @@ +class GetNotificationReassignModeList { + String? rADIOBUTTONACTION; + String? rADIOBUTTONLABEL; + int? rADIOBUTTONSEQ; + + GetNotificationReassignModeList( + {this.rADIOBUTTONACTION, this.rADIOBUTTONLABEL, this.rADIOBUTTONSEQ}); + + GetNotificationReassignModeList.fromJson(Map json) { + rADIOBUTTONACTION = json['RADIO_BUTTON_ACTION']; + rADIOBUTTONLABEL = json['RADIO_BUTTON_LABEL']; + rADIOBUTTONSEQ = json['RADIO_BUTTON_SEQ']; + } + + Map toJson() { + final Map data = new Map(); + data['RADIO_BUTTON_ACTION'] = this.rADIOBUTTONACTION; + data['RADIO_BUTTON_LABEL'] = this.rADIOBUTTONLABEL; + data['RADIO_BUTTON_SEQ'] = this.rADIOBUTTONSEQ; + return data; + } +} \ No newline at end of file diff --git a/lib/models/vacation_rule/get_vacation_rules_list_model.dart b/lib/models/vacation_rule/get_vacation_rules_list_model.dart new file mode 100644 index 0000000..5abd32a --- /dev/null +++ b/lib/models/vacation_rule/get_vacation_rules_list_model.dart @@ -0,0 +1,92 @@ +class GetVacationRulesList { + String? aCTION; + String? aCTIONDISPLAY; + String? bEGINDATE; + String? eNDDATE; + int? fROMROWNUM; + String? fYIFLAG; + String? iTEMTYPE; + String? iTEMTYPEDISPLAYNAME; + String? mESSAGE; + String? nOTIFICATIONDISPLAYNAME; + String? nOTIFICATIONNAME; + String? nOTIFICATIONSUBJECT; + int? nOOFROWS; + String? rEPLACEMENTUSERNAME; + int? rOWNUM; + int? rULEID; + String? rULENAME; + String? rULESTATUS; + String? rULETIPMESSAGE; + int? tOROWNUM; + + GetVacationRulesList( + {this.aCTION, + this.aCTIONDISPLAY, + this.bEGINDATE, + this.eNDDATE, + this.fROMROWNUM, + this.fYIFLAG, + this.iTEMTYPE, + this.iTEMTYPEDISPLAYNAME, + this.mESSAGE, + this.nOTIFICATIONDISPLAYNAME, + this.nOTIFICATIONNAME, + this.nOTIFICATIONSUBJECT, + this.nOOFROWS, + this.rEPLACEMENTUSERNAME, + this.rOWNUM, + this.rULEID, + this.rULENAME, + this.rULESTATUS, + this.rULETIPMESSAGE, + this.tOROWNUM}); + + GetVacationRulesList.fromJson(Map json) { + aCTION = json['ACTION']; + aCTIONDISPLAY = json['ACTION_DISPLAY']; + bEGINDATE = json['BEGIN_DATE']; + eNDDATE = json['END_DATE']; + fROMROWNUM = json['FROM_ROW_NUM']; + fYIFLAG = json['FYI_FLAG']; + iTEMTYPE = json['ITEM_TYPE']; + iTEMTYPEDISPLAYNAME = json['ITEM_TYPE_DISPLAY_NAME']; + mESSAGE = json['MESSAGE']; + nOTIFICATIONDISPLAYNAME = json['NOTIFICATION_DISPLAY_NAME']; + nOTIFICATIONNAME = json['NOTIFICATION_NAME']; + nOTIFICATIONSUBJECT = json['NOTIFICATION_SUBJECT']; + nOOFROWS = json['NO_OF_ROWS']; + rEPLACEMENTUSERNAME = json['REPLACEMENT_USER_NAME']; + rOWNUM = json['ROW_NUM']; + rULEID = json['RULE_ID']; + rULENAME = json['RULE_NAME']; + rULESTATUS = json['RULE_STATUS']; + rULETIPMESSAGE = json['RULE_TIP_MESSAGE']; + tOROWNUM = json['TO_ROW_NUM']; + } + + Map toJson() { + final Map data = new Map(); + data['ACTION'] = this.aCTION; + data['ACTION_DISPLAY'] = this.aCTIONDISPLAY; + data['BEGIN_DATE'] = this.bEGINDATE; + data['END_DATE'] = this.eNDDATE; + data['FROM_ROW_NUM'] = this.fROMROWNUM; + data['FYI_FLAG'] = this.fYIFLAG; + data['ITEM_TYPE'] = this.iTEMTYPE; + data['ITEM_TYPE_DISPLAY_NAME'] = this.iTEMTYPEDISPLAYNAME; + data['MESSAGE'] = this.mESSAGE; + data['NOTIFICATION_DISPLAY_NAME'] = this.nOTIFICATIONDISPLAYNAME; + data['NOTIFICATION_NAME'] = this.nOTIFICATIONNAME; + data['NOTIFICATION_SUBJECT'] = this.nOTIFICATIONSUBJECT; + data['NO_OF_ROWS'] = this.nOOFROWS; + data['REPLACEMENT_USER_NAME'] = this.rEPLACEMENTUSERNAME; + data['ROW_NUM'] = this.rOWNUM; + data['RULE_ID'] = this.rULEID; + data['RULE_NAME'] = this.rULENAME; + data['RULE_STATUS'] = this.rULESTATUS; + data['RULE_TIP_MESSAGE'] = this.rULETIPMESSAGE; + data['TO_ROW_NUM'] = this.tOROWNUM; + return data; + } +} \ No newline at end of file diff --git a/lib/models/vacation_rule/respond_attributes_list_model.dart b/lib/models/vacation_rule/respond_attributes_list_model.dart new file mode 100644 index 0000000..ca7b2db --- /dev/null +++ b/lib/models/vacation_rule/respond_attributes_list_model.dart @@ -0,0 +1,28 @@ +class RespondAttributesList { + String? aTTRIBUTEDISPLAYNAME; + String? aTTRIBUTEFORMAT; + String? aTTRIBUTENAME; + String? aTTRIBUTETYPE; + + RespondAttributesList( + {this.aTTRIBUTEDISPLAYNAME, + this.aTTRIBUTEFORMAT, + this.aTTRIBUTENAME, + this.aTTRIBUTETYPE}); + + RespondAttributesList.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 = new Map(); + data['ATTRIBUTE_DISPLAY_NAME'] = this.aTTRIBUTEDISPLAYNAME; + data['ATTRIBUTE_FORMAT'] = this.aTTRIBUTEFORMAT; + data['ATTRIBUTE_NAME'] = this.aTTRIBUTENAME; + data['ATTRIBUTE_TYPE'] = this.aTTRIBUTETYPE; + return data; + } +} \ No newline at end of file diff --git a/lib/models/vacation_rule/vr_item_types_list_model.dart b/lib/models/vacation_rule/vr_item_types_list_model.dart new file mode 100644 index 0000000..d31ffa6 --- /dev/null +++ b/lib/models/vacation_rule/vr_item_types_list_model.dart @@ -0,0 +1,18 @@ +class VrItemTypesList { + String? iTEMTYPE; + String? iTEMTYPEDISPLAYNAME; + + VrItemTypesList({this.iTEMTYPE, this.iTEMTYPEDISPLAYNAME}); + + VrItemTypesList.fromJson(Map json) { + iTEMTYPE = json['ITEM_TYPE']; + iTEMTYPEDISPLAYNAME = json['ITEM_TYPE_DISPLAY_NAME']; + } + + Map toJson() { + final Map data = new Map(); + data['ITEM_TYPE'] = this.iTEMTYPE; + data['ITEM_TYPE_DISPLAY_NAME'] = this.iTEMTYPEDISPLAYNAME; + return data; + } +} \ No newline at end of file diff --git a/lib/models/vacation_rule/wf_look_up_list_model.dart b/lib/models/vacation_rule/wf_look_up_list_model.dart new file mode 100644 index 0000000..25fb2ee --- /dev/null +++ b/lib/models/vacation_rule/wf_look_up_list_model.dart @@ -0,0 +1,21 @@ +class WFLookUpList { + String? lOOKUPCODE; + String? lOOKUPDESCRIPTION; + String? lOOKUPMEANING; + + WFLookUpList({this.lOOKUPCODE, this.lOOKUPDESCRIPTION, this.lOOKUPMEANING}); + + WFLookUpList.fromJson(Map json) { + lOOKUPCODE = json['LOOKUP_CODE']; + lOOKUPDESCRIPTION = json['LOOKUP_DESCRIPTION']; + lOOKUPMEANING = json['LOOKUP_MEANING']; + } + + Map toJson() { + final Map data = new Map(); + data['LOOKUP_CODE'] = this.lOOKUPCODE; + data['LOOKUP_DESCRIPTION'] = this.lOOKUPDESCRIPTION; + data['LOOKUP_MEANING'] = this.lOOKUPMEANING; + return data; + } +} \ No newline at end of file diff --git a/lib/provider/dashboard_provider_model.dart b/lib/provider/dashboard_provider_model.dart index 9316182..511fc03 100644 --- a/lib/provider/dashboard_provider_model.dart +++ b/lib/provider/dashboard_provider_model.dart @@ -1,9 +1,11 @@ import 'dart:convert'; +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/dashboard_api_client.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/main.dart'; import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_model.dart'; import 'package:mohem_flutter_app/models/dashboard/get_open_notifications_list.dart'; @@ -11,7 +13,6 @@ import 'package:mohem_flutter_app/models/dashboard/itg_forms_model.dart'; import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart'; import 'package:mohem_flutter_app/models/dashboard/menus.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart'; -import 'package:mohem_flutter_app/widgets/Updater.dart'; /// Mix-in [DiagnosticableTreeMixin] to have access to [debugFillProperties] for the devtool // ignore: prefer_mixin @@ -71,7 +72,7 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin { return ((hour * 60 * 60) + (mints * 60) + seconds); } - update(context) { + void update(context) { fetchAttendanceTracking(context); // isAttendanceTrackingLoading = !isAttendanceTrackingLoading; // isWorkListLoading = !isWorkListLoading; @@ -137,7 +138,7 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin { } //List Menu API's & Methods - fetchListMenu() async { + void fetchListMenu() async { try { GenericResponseModel? genericResponseModel = await DashboardApiClient().getListMenu(); Map map = {}; @@ -156,11 +157,15 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin { } //Menu Entries API's & Methods - fetchMenuEntries() async { + void fetchMenuEntries() async { try { GenericResponseModel? genericResponseModel = await DashboardApiClient().getGetMenuEntries(); getMenuEntriesList = genericResponseModel!.getMenuEntriesList; - homeMenus = parseMenues(getMenuEntriesList ?? []); + homeMenus = parseMenus(getMenuEntriesList ?? []); + if (homeMenus!.isNotEmpty) { + homeMenus!.first.menuEntiesList.insert(0, GetMenuEntriesList(requestType: "MONTHLY_ATTENDANCE", prompt: LocaleKeys.monthlyAttendance.tr())); + homeMenus!.first.menuEntiesList.add(GetMenuEntriesList(requestType: "VACATION_RULE", prompt: LocaleKeys.vacationRule.tr())); + } isServicesMenusLoading = false; notifyListeners(); } catch (ex) { @@ -170,21 +175,13 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin { } } - List parseMenues(List getMenuEntriesList) { + List parseMenus(List getMenuEntriesList) { List menus = []; for (int i = 0; i < getMenuEntriesList.length; i++) { if (getMenuEntriesList[i].parentMenuName!.isEmpty) { menus.add(Menus(getMenuEntriesList[i], getMenuEntriesList.where((element) => getMenuEntriesList[i].menuName == element.parentMenuName).toList())); } } - - // Verify Menus by printing in log - // for(int i=0;i ThemeData( + static ThemeData getTheme(isArabic) => ThemeData( fontFamily: isArabic ? 'Cairo' : 'Poppins', primarySwatch: Colors.red, visualDensity: VisualDensity.adaptivePlatformDensity, diff --git a/lib/ui/attendance/add_vacation_rule_screen.dart b/lib/ui/attendance/add_vacation_rule_screen.dart new file mode 100644 index 0000000..b3c3780 --- /dev/null +++ b/lib/ui/attendance/add_vacation_rule_screen.dart @@ -0,0 +1,124 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/vacation_rule_api_client.dart'; +import 'package:mohem_flutter_app/classes/utils.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/vacation_rule/get_item_type_notifications_list_model.dart'; +import 'package:mohem_flutter_app/models/vacation_rule/get_notification_reassign_mode_list_model.dart'; +import 'package:mohem_flutter_app/models/vacation_rule/respond_attributes_list_model.dart'; +import 'package:mohem_flutter_app/models/vacation_rule/vr_item_types_list_model.dart'; +import 'package:mohem_flutter_app/models/vacation_rule/wf_look_up_list_model.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'package:mohem_flutter_app/widgets/button/default_button.dart'; + +class AddVacationRuleScreen extends StatefulWidget { + AddVacationRuleScreen({Key? key}) : super(key: key); + + @override + _AddVacationRuleScreenState createState() { + return _AddVacationRuleScreenState(); + } +} + +class _AddVacationRuleScreenState extends State { + List? vrItemTypesList; + List? itemTypeNotificationsList; + + List? notificationReassignModeList; + List? respondAttributesList; + List? wfLookupList; + + int currentStage = 0; + + @override + void initState() { + super.initState(); + getVacationRulesList(); + } + + void getVacationRulesList() async { + try { + Utils.showLoading(context); + vrItemTypesList = await VacationRuleApiClient().getVrItemTypes(); + Utils.hideLoading(context); + currentStage = 1; + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + void getItemTypeNotificationsList() async { + try { + Utils.showLoading(context); + //itemTypeNotificationsList = await VacationRuleApiClient().getItemTypeNotifications(); + Utils.hideLoading(context); + currentStage = 2; + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + void callCombineApis() async { + try { + Utils.showLoading(context); + List results = await Future.wait([ + // VacationRuleApiClient().getNotificationReassignMode(), + // VacationRuleApiClient().getRespondAttributes("", ""), + // VacationRuleApiClient().getWfLookup(P_LOOKUP_TYPE), + ]); + notificationReassignModeList = results[0]; + respondAttributesList = results[1]; + wfLookupList = results[2]; + Utils.hideLoading(context); + currentStage = 3; + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBarWidget( + context, + title: LocaleKeys.vacationRule.tr(), + ), + body: vrItemTypesList == null + ? const SizedBox() + : (vrItemTypesList!.isEmpty + ? Utils.getNoDataWidget(context) + : Column( + children: [ + ListView( + padding: const EdgeInsets.all(21), + physics: const BouncingScrollPhysics(), + children: [], + ).expanded, + DefaultButton( + currentStage == 3 ? LocaleKeys.apply.tr() : LocaleKeys.next.tr(), + () { + if (currentStage == 1) { + getItemTypeNotificationsList(); + } else if (currentStage == 2) { + callCombineApis(); + } + }, + ).insideContainer, + ], + )), + ); + } +} diff --git a/lib/ui/attendance/monthly_attendance.dart b/lib/ui/attendance/monthly_attendance_screen.dart similarity index 82% rename from lib/ui/attendance/monthly_attendance.dart rename to lib/ui/attendance/monthly_attendance_screen.dart index 9ec5cdd..6a73f70 100644 --- a/lib/ui/attendance/monthly_attendance.dart +++ b/lib/ui/attendance/monthly_attendance_screen.dart @@ -1,38 +1,36 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/src/public_ext.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/painting.dart'; -import 'package:flutter/scheduler.dart'; -import 'package:mohem_flutter_app/api/monthlyAttendance_api_client.dart'; +import 'package:intl/intl.dart'; +import 'package:mohem_flutter_app/api/monthly_attendance_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/get_day_hours_type_details_list_model.dart'; import 'package:mohem_flutter_app/models/get_schedule_shifts_details_list_model.dart'; import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart'; import 'package:mohem_flutter_app/widgets/circular_step_progress_bar.dart'; -import 'package:provider/provider.dart'; -import 'package:syncfusion_flutter_calendar/calendar.dart'; -import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:pie_chart/pie_chart.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:intl/intl.dart'; -import 'package:month_year_picker/month_year_picker.dart'; import 'package:month_picker_dialog/month_picker_dialog.dart'; +import 'package:pie_chart/pie_chart.dart'; +import 'package:syncfusion_flutter_calendar/calendar.dart'; -class MonthlyAttendance extends StatefulWidget { - MonthlyAttendance({Key? key}) : super(key: key); +class MonthlyAttendanceScreen extends StatefulWidget { + MonthlyAttendanceScreen({Key? key}) : super(key: key); @override - _MonthlyAttendanceState createState() { - return _MonthlyAttendanceState(); + _MonthlyAttendanceScreenState createState() { + return _MonthlyAttendanceScreenState(); } } -class _MonthlyAttendanceState extends State { +// todo '@fatima' use extension methods for widgets + +class _MonthlyAttendanceScreenState extends State { bool isPresent = false; bool isAbsent = false; bool isMissing = false; @@ -69,7 +67,6 @@ class _MonthlyAttendanceState extends State { } } - Future getScheduleShiftsDetails(index, pRTPID) async { try { Utils.showLoading(context); @@ -138,17 +135,17 @@ class _MonthlyAttendanceState extends State { ], ).paddingOnly(left: 21, right: 21), 18.height, - AspectRatio(aspectRatio: 333 / 270, child: calendarWidget()).paddingOnly(left: 18, right: 25), + AspectRatio(aspectRatio: 333 / 270, child: calendarWidget()).paddingOnly(left: 21, right: 21), Row( mainAxisAlignment: MainAxisAlignment.start, children: [ - optionUI(LocaleKeys.scheduleDays.tr(), "${getTimeCardSummaryList?.sCHEDULEDAYS}"), + optionUI(LocaleKeys.scheduleDays.tr(), "${getTimeCardSummaryList?.sCHEDULEDAYS != null ? getTimeCardSummaryList!.sCHEDULEDAYS : 0}"), 6.width, - optionUI(LocaleKeys.offDays.tr(), "${getTimeCardSummaryList?.oFFDAYS}"), + optionUI(LocaleKeys.offDays.tr(), "${getTimeCardSummaryList?.oFFDAYS != null ? getTimeCardSummaryList!.oFFDAYS : 0}"), 6.width, - optionUI(LocaleKeys.nonAnalyzed.tr(), "${getTimeCardSummaryList?.uNAUTHORIZEDLEAVE}"), + optionUI(LocaleKeys.nonAnalyzed.tr(), "${getTimeCardSummaryList?.uNAUTHORIZEDLEAVE != null ? getTimeCardSummaryList!.uNAUTHORIZEDLEAVE : 0}"), 6.width, - optionUI(LocaleKeys.shortageHour.tr(), "${getTimeCardSummaryList?.sHORTAGEHRS}"), + optionUI(LocaleKeys.shortageHour.tr(), "${getTimeCardSummaryList?.sHORTAGEHRS != null ? getTimeCardSummaryList!.sHORTAGEHRS : 0}"), ], ).paddingOnly(left: 21, right: 21), 35.height, @@ -189,7 +186,7 @@ class _MonthlyAttendanceState extends State { ), Container( margin: const EdgeInsets.only(left: 5, right: 5), - child: "${LocaleKeys.present.tr()} ${getTimeCardSummaryList!.aTTENDEDDAYS}".toText16(isBold: true, color: MyColors.lightGreenColor), + child: "${LocaleKeys.present.tr()} ${getTimeCardSummaryList?.aTTENDEDDAYS}".toText16(isBold: true, color: MyColors.lightGreenColor), ), ], ).paddingOnly(left: 21, right: 23), @@ -206,7 +203,7 @@ class _MonthlyAttendanceState extends State { ), Container( margin: const EdgeInsets.only(left: 5, right: 5), - child: "${LocaleKeys.absent.tr()} ${getTimeCardSummaryList!.aBSENTDAYS}".toText16( + child: "${LocaleKeys.absent.tr()} ${getTimeCardSummaryList?.aBSENTDAYS}".toText16( isBold: true, color: MyColors.backgroundBlackColor, ), @@ -288,7 +285,9 @@ class _MonthlyAttendanceState extends State { view: CalendarView.month, showDatePickerButton: false, controller: _calendarController, + backgroundColor: Colors.white, headerHeight: 0, + viewNavigationMode: ViewNavigationMode.none, todayHighlightColor: MyColors.grey3AColor, showNavigationArrow: false, showCurrentTimeIndicator: false, @@ -305,7 +304,7 @@ class _MonthlyAttendanceState extends State { dayFormat: 'EEE', showTrailingAndLeadingDates: false, showAgenda: false, - navigationDirection: MonthNavigationDirection.horizontal, + //navigationDirection: MonthNavigationDirection.vertical, monthCellStyle: MonthCellStyle( textStyle: TextStyle( fontStyle: FontStyle.normal, @@ -321,81 +320,87 @@ class _MonthlyAttendanceState extends State { if (details.date.month == formattedDate.month && details.date.year == formattedDate.year) { int val = details.date.day; //check day is off - if (getDayHoursTypeDetailsList[val - 1].aTTENDEDFLAG == 'N' && getDayHoursTypeDetailsList[val - 1].dAYTYPE == 'OFF') { - return Container( - margin: const EdgeInsets.all(4), - decoration: BoxDecoration( - color: MyColors.greyACColor.withOpacity(.12), - shape: BoxShape.circle, - ), - alignment: Alignment.center, - child: Text( - "${val}", - style: const TextStyle( - fontSize: 13, - fontWeight: FontWeight.w500, - color: MyColors.greyA5Color, - ), - ), - ); - } - //check day is Present - else if (getDayHoursTypeDetailsList[val - 1].aTTENDEDFLAG == 'Y') { - return Container( - margin: const EdgeInsets.all(4), - decoration: BoxDecoration( - gradient: const LinearGradient( - transform: GradientRotation(.46), - begin: Alignment.topRight, - end: Alignment.bottomLeft, - colors: [MyColors.gradiantEndColor, MyColors.gradiantStartColor], - ), - shape: BoxShape.circle, - boxShadow: [ - BoxShadow( - offset: const Offset(0, 2), - blurRadius: 26, - color: MyColors.blackColor.withOpacity(0.100), + if(getDayHoursTypeDetailsList.isNotEmpty) + + { + if (getDayHoursTypeDetailsList?[val - 1].aTTENDEDFLAG == 'N' && getDayHoursTypeDetailsList?[val - 1].dAYTYPE == 'OFF') { + return Container( + margin: const EdgeInsets.all(4), + decoration: BoxDecoration( + color: MyColors.greyACColor.withOpacity(.12), + shape: BoxShape.circle, ), - ], - ), - alignment: Alignment.center, - child: Text( - "${val}", - style: const TextStyle( - fontSize: 13, - fontWeight: FontWeight.w500, - color: MyColors.white, - ), - ), - ); - } - //check day is Absent - else if (getDayHoursTypeDetailsList[val - 1].aTTENDEDFLAG == 'N' && getDayHoursTypeDetailsList[val - 1].aBSENTFLAG == 'Y') { - return Container( - margin: const EdgeInsets.all(4), - decoration: BoxDecoration( - color: MyColors.backgroundBlackColor, - shape: BoxShape.circle, - boxShadow: [ - BoxShadow( - offset: const Offset(0, 2), - blurRadius: 26, - color: MyColors.blackColor.withOpacity(0.100), + alignment: Alignment.center, + child: Text( + "$val", + style: const TextStyle( + fontSize: 13, + fontWeight: FontWeight.w500, + color: MyColors.greyA5Color, + ), ), - ], - ), - alignment: Alignment.center, - child: Text( - "${val}", - style: const TextStyle( - fontSize: 13, - fontWeight: FontWeight.w500, - color: MyColors.white, - ), - ), - ); - } + ); + } + //check day is Present + else if (getDayHoursTypeDetailsList?[val - 1].aTTENDEDFLAG == 'Y') { + return Container( + margin: const EdgeInsets.all(4), + decoration: BoxDecoration( + gradient: const LinearGradient( + transform: GradientRotation(.46), + begin: Alignment.topRight, + end: Alignment.bottomLeft, + colors: [MyColors.gradiantEndColor, MyColors.gradiantStartColor], + ), + shape: BoxShape.circle, + boxShadow: [ + BoxShadow( + offset: const Offset(0, 2), + blurRadius: 26, + color: MyColors.blackColor.withOpacity(0.100), + ), + ], + ), + alignment: Alignment.center, + child: Text( + "$val", + style: const TextStyle( + fontSize: 13, + fontWeight: FontWeight.w500, + color: MyColors.white, + ), + ), + ); + } + //check day is Absent + else if (getDayHoursTypeDetailsList?[val - 1].aTTENDEDFLAG == 'N' && getDayHoursTypeDetailsList?[val - 1].aBSENTFLAG == 'Y') { + return Container( + margin: const EdgeInsets.all(4), + decoration: BoxDecoration( + color: MyColors.backgroundBlackColor, + shape: BoxShape.circle, + boxShadow: [ + BoxShadow( + offset: const Offset(0, 2), + blurRadius: 26, + color: MyColors.blackColor.withOpacity(0.100), + ), + ], + ), + alignment: Alignment.center, + child: Text( + "$val", + style: const TextStyle( + fontSize: 13, + fontWeight: FontWeight.w500, + color: MyColors.white, + ), + ), + ); + } + + + } return Container( margin: const EdgeInsets.all(4), decoration: BoxDecoration( @@ -411,7 +416,7 @@ class _MonthlyAttendanceState extends State { ), alignment: Alignment.center, child: Text( - "${val}", + "$val", style: const TextStyle( fontSize: 13, fontWeight: FontWeight.w500, @@ -430,7 +435,7 @@ class _MonthlyAttendanceState extends State { ); } - calendarTapped(CalendarTapDetails details) async { + void calendarTapped(CalendarTapDetails details) async { dynamic index = details.date?.day; if (index != null) { index = index - 1; @@ -458,8 +463,8 @@ class _MonthlyAttendanceState extends State { maxChildSize: 0.9, expand: false, builder: (_, controller) { - dynamic dmyString = getScheduleShiftsDetailsList!.sCHEDULEDATE; - DateTime dateTime1 = DateFormat("MM/dd/yyyy hh:mm:ss a").parse(dmyString); + dynamic dmyString = getScheduleShiftsDetailsList!.sCHEDULEDATE; + DateTime dateTime1 = DateFormat("MM/dd/yyyy hh:mm:ss a").parse(dmyString); return Column( children: [ Container( @@ -485,11 +490,11 @@ class _MonthlyAttendanceState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Container(child: - "${DateFormat("MMMM-dd-yyyy").format(dateTime1).replaceAll('-', " ")}".toText24(isBold: true, color: Colors.white), + Container( + child: "${DateFormat("MMMM-dd-yyyy").format(dateTime1).replaceAll('-', " ")}".toText24(isBold: true, color: Colors.white), ).paddingOnly(top: 26, left: 21, right: 21), Container( - child: LocaleKeys.attendanceDetails.tr().toText16(color: MyColors.greyACColor).paddingOnly(left: 21,bottom: 16), + child: LocaleKeys.attendanceDetails.tr().toText16(color: MyColors.greyACColor).paddingOnly(left: 21, bottom: 16), ), Center( child: CircularStepProgressBar( @@ -540,8 +545,8 @@ class _MonthlyAttendanceState extends State { color: MyColors.grey67Color, ), 8.height, - "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}" !="" - ? "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}".toText22(color: Colors.black, isBold: true) + "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}" != "" + ? "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}".toText22(color: Colors.black, isBold: true) : "__".toText22(color: Colors.black, isBold: true), ], ), @@ -555,7 +560,7 @@ class _MonthlyAttendanceState extends State { ), 8.height, "${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}" != "" - ? "${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}".toText22(color: Colors.black, isBold: true) + ? "${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}".toText22(color: Colors.black, isBold: true) : "__".toText22(color: Colors.black, isBold: true), ], ), @@ -579,9 +584,9 @@ class _MonthlyAttendanceState extends State { color: MyColors.grey67Color, ), 8.height, - "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}" !="" - ? "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}".toText22(color: MyColors.greenColor, isBold: true) - :"__".toText22(color: MyColors.greenColor, isBold: true), + "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}" != "" + ? "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}".toText22(color: MyColors.greenColor, isBold: true) + : "__".toText22(color: MyColors.greenColor, isBold: true), ], ), ), @@ -593,9 +598,9 @@ class _MonthlyAttendanceState extends State { color: MyColors.grey67Color, ), 8.height, - "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}"!= "" - ? "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}".toText22(color: MyColors.greenColor, isBold: true) - :"__".toText22(color: MyColors.greenColor, isBold: true), + "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}" != "" + ? "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}".toText22(color: MyColors.greenColor, isBold: true) + : "__".toText22(color: MyColors.greenColor, isBold: true), ], ), ], @@ -693,7 +698,7 @@ class _MonthlyAttendanceState extends State { return meetings; } - static getMonth(int month) { + static String getMonth(int month) { switch (month) { case 1: return "January"; @@ -719,36 +724,40 @@ class _MonthlyAttendanceState extends State { return "November"; case 12: return "December"; + default: + return ""; } } - static getMonthAr(int month){ - switch (month) { - case 1: - return 'يناير'; - case 2: - return ' فبراير'; - case 3: - return 'مارس'; - case 4: - return 'أبريل'; - case 5: - return 'مايو'; - case 6: - return 'يونيو'; - case 7: - return 'يوليو'; - case 8: - return 'أغسطس'; - case 9: - return 'سبتمبر'; - case 10: - return ' اكتوبر'; - case 11: - return ' نوفمبر'; - case 12: - return 'ديسمبر'; - } + static String getMonthAr(int month) { + switch (month) { + case 1: + return 'يناير'; + case 2: + return ' فبراير'; + case 3: + return 'مارس'; + case 4: + return 'أبريل'; + case 5: + return 'مايو'; + case 6: + return 'يونيو'; + case 7: + return 'يوليو'; + case 8: + return 'أغسطس'; + case 9: + return 'سبتمبر'; + case 10: + return ' اكتوبر'; + case 11: + return ' نوفمبر'; + case 12: + return 'ديسمبر'; + default: + return ""; + } } } diff --git a/lib/ui/attendance/vacation_rule_screen.dart b/lib/ui/attendance/vacation_rule_screen.dart new file mode 100644 index 0000000..a2aa5df --- /dev/null +++ b/lib/ui/attendance/vacation_rule_screen.dart @@ -0,0 +1,146 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/vacation_rule_api_client.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/config/routes.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/models/vacation_rule/get_vacation_rules_list_model.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart'; + +class VacationRuleScreen extends StatefulWidget { + VacationRuleScreen({Key? key}) : super(key: key); + + @override + _VacationRuleScreenState createState() { + return _VacationRuleScreenState(); + } +} + +class _VacationRuleScreenState extends State { + List? vacationRuleList; + + @override + void initState() { + super.initState(); + getVacationRulesList(); + } + + void getVacationRulesList() async { + try { + Utils.showLoading(context); + vacationRuleList = await VacationRuleApiClient().getVacationRules(); + Utils.hideLoading(context); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBarWidget( + context, + title: LocaleKeys.vacationRule.tr(), + ), + body: vacationRuleList == null + ? const SizedBox() + : (vacationRuleList!.isEmpty + ? Utils.getNoDataWidget(context) + : ListView.separated( + physics: const BouncingScrollPhysics(), + padding: const EdgeInsets.all(21), + itemBuilder: (cxt, int parentIndex) => Container( + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + boxShadow: [ + BoxShadow( + color: const Color(0xff000000).withOpacity(.05), + blurRadius: 26, + offset: const Offset(0, -3), + ), + ], + ), + clipBehavior: Clip.antiAlias, + child: Stack( + clipBehavior: Clip.antiAlias, + children: [ + Positioned( + left: -20, + top: -10, + child: Transform.rotate( + angle: 15, + child: Container( + width: 50, + height: 30, + color: getStatusColor(vacationRuleList![parentIndex].rULESTATUS!), + ), + ), + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + ("${vacationRuleList![parentIndex].rULENAME!} | ${vacationRuleList![parentIndex].iTEMTYPEDISPLAYNAME!}").toText16(), + 4.height, + ItemDetailView(LocaleKeys.startDateT.tr(), getParsedTime(vacationRuleList![parentIndex].bEGINDATE!)), + ItemDetailView(LocaleKeys.endDateT.tr(), getParsedTime(vacationRuleList![parentIndex].eNDDATE!)), + 4.height, + vacationRuleList![parentIndex].rULESTATUS!.toText12(color: getStatusColor(vacationRuleList![parentIndex].rULESTATUS!)), + ], + ).paddingOnly(top: 16, left: 16, right: 16, bottom: 16), + ], + ), + ), + separatorBuilder: (cxt, index) => 12.height, + itemCount: vacationRuleList!.length)), + floatingActionButton: Container( + height: 54, + width: 54, + decoration: const BoxDecoration( + shape: BoxShape.circle, + gradient: LinearGradient(transform: GradientRotation(.83), begin: Alignment.topRight, end: Alignment.bottomLeft, colors: [ + MyColors.gradiantEndColor, + MyColors.gradiantStartColor, + ]), + ), + child: const Icon(Icons.add, color: Colors.white, size: 30), + ).onPress(() { + Navigator.pushNamed(context, AppRoutes.addVacationRule); + }), + ); + } + + Color getStatusColor(String code) { + if (code == "SUBMIT") { + return const Color(0xff2E303A); + } else if (code == "Inactive") { + return const Color(0xffD02127); + } else if (code == "active") { + return const Color(0xff1FA269); + } else if (code == "REQUEST_INFO") { + return const Color(0xff2E303A); + } else { + return const Color(0xff2E303A); + } + } + + String getParsedTime(String time) { + DateTime date = DateFormat("mm/dd/yyyy").parse(time); + return DateFormat("d MMM yyyy").format(date); + } +} diff --git a/lib/ui/dialogs/id/business_card_dialog.dart b/lib/ui/dialogs/id/business_card_dialog.dart new file mode 100644 index 0000000..3488958 --- /dev/null +++ b/lib/ui/dialogs/id/business_card_dialog.dart @@ -0,0 +1,67 @@ +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; + +import 'package:mohem_flutter_app/app_state/app_state.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; + +class BusinessCardDialog extends StatelessWidget { + @override + Widget build(BuildContext context) { + return RotatedBox( + quarterTurns: 1, + child: Container( + width: MediaQuery.of(context).size.height / 2, + color: Colors.white, + margin: EdgeInsets.all(20), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Image.asset( + "assets/images/logos/bn_cloud_soloution.jpg", + width: 80, + height: 80, + ), + 12.height, + (AppState().memberInformationList!.eMPLOYEENAME ?? "").toText20(), + ], + ), + ), + Image.memory( + Utils.getPostBytes(AppState().memberInformationList!.businessCardQR ?? ""), + width: 100, + height: 100, + ), + ], + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + 1.height, + (AppState().memberInformationList!.pOSITIONNAME ?? "").toText12(isBold: false), + 12.height, + (AppState().memberInformationList!.eMPLOYEENUMBER ?? "").toText12(isBold: false), + 1.height, + (AppState().memberInformationList!.eMPLOYEEEMAILADDRESS ?? "").toText12(isBold: false), + 1.height, + (AppState().memberInformationList!.jOBNAME ?? "").toText12(isBold: false), + ], + ), + ], + ), + ), + ); + } +} diff --git a/lib/ui/dialogs/id/employee_digital_id_dialog.dart b/lib/ui/dialogs/id/employee_digital_id_dialog.dart new file mode 100644 index 0000000..e0e1054 --- /dev/null +++ b/lib/ui/dialogs/id/employee_digital_id_dialog.dart @@ -0,0 +1,77 @@ +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/app_state/app_state.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/widgets/button/default_button.dart'; +import 'package:qr_flutter/qr_flutter.dart'; + +import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/main.dart'; + +class EmployeeDigitialIdDialog extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Container( + width: double.infinity, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Image.asset("assets/images/bn_logo.png"), + Padding( + padding: const EdgeInsets.all(20.0), + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Row( + children: [ + Container( + width: 80, + height: 80, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: const BorderRadius.all(Radius.circular(12)), + boxShadow: [BoxShadow(color: Colors.white60, blurRadius: 10, spreadRadius: 10)], + ), + clipBehavior: Clip.antiAlias, + child: Image.memory( + Utils.getPostBytes( + AppState().memberInformationList!.eMPLOYEEIMAGE ?? "", + ), + fit: BoxFit.cover, + ), + ), + 16.width, + (AppState().memberInformationList!.eMPLOYEENUMBER ?? "").toText20(), + ], + ), + Container( + width: double.infinity, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + 12.height, + (AppState().memberInformationList!.eMPLOYEENAME ?? "").toText16(), + 4.height, + (AppState().memberInformationList!.pOSITIONNAME ?? "").toText12(isBold: false), + ], + ), + ), + Image.memory( + Utils.getPostBytes(AppState().memberInformationList!.employeeQR ?? ""), + width: 160, + height: 160, + ), + DefaultButton("Cancel", () { + Navigator.pop(context); + }) + ], + ), + ), + ], + ), + ); + } +} diff --git a/lib/ui/landing/dashboard.dart b/lib/ui/landing/dashboard.dart deleted file mode 100644 index e69de29..0000000 diff --git a/lib/ui/landing/dashboard_screen.dart b/lib/ui/landing/dashboard_screen.dart index 2e7757c..2e7e769 100644 --- a/lib/ui/landing/dashboard_screen.dart +++ b/lib/ui/landing/dashboard_screen.dart @@ -3,7 +3,9 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_countdown_timer/flutter_countdown_timer.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; @@ -13,7 +15,6 @@ import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; import 'package:mohem_flutter_app/ui/landing/widget/app_drawer.dart'; import 'package:mohem_flutter_app/ui/landing/widget/menus_widget.dart'; import 'package:mohem_flutter_app/ui/landing/widget/services_widget.dart'; -import 'package:mohem_flutter_app/widgets/circular_avatar.dart'; import 'package:mohem_flutter_app/widgets/shimmer/dashboard_shimmer_widget.dart'; import 'package:provider/provider.dart'; @@ -29,6 +30,9 @@ class DashboardScreen extends StatefulWidget { class _DashboardScreenState extends State { late DashboardProviderModel data; final GlobalKey _scaffoldState = GlobalKey(); + + int currentIndex = 0; + @override void initState() { super.initState(); @@ -50,276 +54,344 @@ class _DashboardScreenState extends State { List namesD = ["Nostalgia Perfume Perfume", "Al Nafoura", "AlJadi", "Nostalgia Perfume"]; final GlobalKey _key = GlobalKey(); // return Scaffold( - key: _scaffoldState, - body: Column( - children: [ - Row( - children: [ - Builder(builder: (context) { - return Row( - mainAxisSize: MainAxisSize.min, - children: [ - CircularAvatar( - width: 34, - height: 34, - url: "https://cdn4.iconfinder.com/data/icons/professions-2-2/151/89-512.png", + key: _scaffoldState, + body: Column( + children: [ + Row( + children: [ + Builder(builder: (context) { + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + Image.memory( + Utils.getPostBytes( + AppState().memberInformationList!.eMPLOYEEIMAGE ?? "", ), - 8.width, - SvgPicture.asset("assets/images/side_nav.svg"), - ], - ).onPress(() { - _scaffoldState.currentState!.openDrawer(); - }); - }), - Expanded( - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - mainAxisSize: MainAxisSize.min, - children: [ - //AppLogo(), - 8.width, - LocaleKeys.mohemm.tr().toText14() - ], - ), + width: 34, + height: 34, + fit: BoxFit.cover, + ).circle(50), + // CircularAvatar( + // width: 34, + // height: 34, + // url: "https://cdn4.iconfinder.com/data/icons/professions-2-2/151/89-512.png", + // ), + 8.width, + SvgPicture.asset("assets/images/side_nav.svg"), + ], + ).onPress(() { + _scaffoldState.currentState!.openDrawer(); + }); + }), + Image.asset("assets/images/logos/main_mohemm_logo.png", width: 134, height: 28).expanded, + SizedBox( + width: 36, + height: 36, + child: Stack( + alignment: Alignment.centerLeft, + children: [ + SvgPicture.asset("assets/images/announcements.svg"), + Positioned( + right: 0, + top: 0, + child: Container( + padding: const EdgeInsets.only(left: 5, right: 5), + decoration: BoxDecoration(color: MyColors.redColor, borderRadius: BorderRadius.circular(17)), + child: "3".toText12(color: Colors.white), + ), + ) + ], ), - SizedBox( - width: 36, - height: 36, - child: Stack( - alignment: Alignment.centerLeft, + ).onPress(() async { + await Navigator.pushNamed(context, AppRoutes.announcements); + }) + ], + ).paddingOnly(left: 21, right: 21, top: 48, bottom: 7), + Expanded( + child: SingleChildScrollView( + child: Column( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - SvgPicture.asset("assets/images/announcements.svg"), - Positioned( - right: 0, - top: 0, - child: Container( - padding: const EdgeInsets.only(left: 5, right: 5), - decoration: BoxDecoration(color: MyColors.redColor, borderRadius: BorderRadius.circular(17)), - child: "3".toText12(color: Colors.white), - ), - ) - ], - ), - ).onPress(() async { - // data.update(context); - await Navigator.pushNamed(context, AppRoutes.announcements); - }) - ], - ).paddingOnly(left: 21, right: 21, top: 48, bottom: 7), - Expanded( - child: SingleChildScrollView( - child: Column( - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LocaleKeys.goodMorning.tr().toText14(color: MyColors.grey77Color), - "Mahmoud Shrouf".toText24(isBold: true), - 16.height, - Row( - children: [ - Expanded( - child: AspectRatio( - aspectRatio: 159 / 159, - child: Consumer( - builder: (context, model, child) { - return (model.isAttendanceTrackingLoading - ? GetAttendanceTrackingShimmer() - : Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(15), - gradient: const LinearGradient(transform: GradientRotation(.46), begin: Alignment.topRight, end: Alignment.bottomLeft, colors: [ - MyColors.gradiantEndColor, - MyColors.gradiantStartColor, - ]), - ), - child: Stack( - alignment: Alignment.center, - children: [ - if (model.isTimeRemainingInSeconds == 0) SvgPicture.asset("assets/images/thumb.svg"), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LocaleKeys.markAttendance.tr().toText14(color: Colors.white, isBold: true), - if (model.isTimeRemainingInSeconds == 0) "01-02-2022".toText12(color: Colors.white), - if (model.isTimeRemainingInSeconds != 0) - Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - 9.height, - CountdownTimer( - endTime: model.endTime, - onEnd: null, - endWidget: "00:00:00".toText14(color: Colors.white, isBold: true), - textStyle: TextStyle(color: Colors.white, fontSize: 14, letterSpacing: -0.48, fontWeight: FontWeight.bold), - ), - LocaleKeys.timeLeftToday.tr().toText12(color: Colors.white), - 9.height, - ClipRRect( - borderRadius: BorderRadius.all( - Radius.circular(20), - ), - child: LinearProgressIndicator( - value: model.progress, - minHeight: 8, - valueColor: const AlwaysStoppedAnimation(Colors.white), - backgroundColor: const Color(0xff196D73), - ), - ), - ], - ), - ], - ).paddingOnly(top: 12, right: 15, left: 12), - ), - Row( + LocaleKeys.goodMorning.tr().toText14(color: MyColors.grey77Color), + (AppState().memberInformationList!.eMPLOYEENAME ?? "").toText24(isBold: true), + 16.height, + Row( + children: [ + Expanded( + child: AspectRatio( + aspectRatio: 159 / 159, + child: Consumer( + builder: (context, model, child) { + return (model.isAttendanceTrackingLoading + ? GetAttendanceTrackingShimmer() + : Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(15), + gradient: const LinearGradient(transform: GradientRotation(.46), begin: Alignment.topRight, end: Alignment.bottomLeft, colors: [ + MyColors.gradiantEndColor, + MyColors.gradiantStartColor, + ]), + ), + child: Stack( + alignment: Alignment.center, + children: [ + if (model.isTimeRemainingInSeconds == 0) SvgPicture.asset("assets/images/thumb.svg"), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Expanded( - child: Column( + LocaleKeys.markAttendance.tr().toText14(color: Colors.white, isBold: true), + if (model.isTimeRemainingInSeconds == 0) "01-02-2022".toText12(color: Colors.white), + if (model.isTimeRemainingInSeconds != 0) + Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - LocaleKeys.checkIn.tr().toText12(color: Colors.white), - (model.attendanceTracking!.pSwipeIn == null ? "--:--" : model.attendanceTracking!.pSwipeIn) - .toString() - .toText14(color: Colors.white, isBold: true), - 4.height, + 9.height, + CountdownTimer( + endTime: model.endTime, + onEnd: null, + endWidget: "00:00:00".toText14(color: Colors.white, isBold: true), + textStyle: TextStyle(color: Colors.white, fontSize: 14, letterSpacing: -0.48, fontWeight: FontWeight.bold), + ), + LocaleKeys.timeLeftToday.tr().toText12(color: Colors.white), + 9.height, + ClipRRect( + borderRadius: BorderRadius.all( + Radius.circular(20), + ), + child: LinearProgressIndicator( + value: model.progress, + minHeight: 8, + valueColor: const AlwaysStoppedAnimation(Colors.white), + backgroundColor: const Color(0xff196D73), + ), + ), ], - ).paddingOnly(left: 12), - ), - Container( - width: 45, - height: 45, - padding: const EdgeInsets.only(left: 14, right: 14), - decoration: const BoxDecoration( - color: Color(0xff259EA4), - borderRadius: BorderRadius.only( - bottomRight: Radius.circular(15), - ), ), - child: SvgPicture.asset(model.isTimeRemainingInSeconds == 0 ? "assets/images/play.svg" : "assets/images/stop.svg"), - ), ], - ), - ], - ), - ], - ), - ).onPress(() { - Navigator.pushNamed(context, AppRoutes.todayAttendance); - })) - .animatedSwither(); - }, - ), + ).paddingOnly(top: 12, right: 15, left: 12), + ), + Row( + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + LocaleKeys.checkIn.tr().toText12(color: Colors.white), + (model.attendanceTracking!.pSwipeIn == null ? "--:--" : model.attendanceTracking!.pSwipeIn) + .toString() + .toText14(color: Colors.white, isBold: true), + 4.height, + ], + ).paddingOnly(left: 12), + ), + Container( + width: 45, + height: 45, + padding: const EdgeInsets.only(left: 14, right: 14), + decoration: const BoxDecoration( + color: Color(0xff259EA4), + borderRadius: BorderRadius.only( + bottomRight: Radius.circular(15), + ), + ), + child: SvgPicture.asset(model.isTimeRemainingInSeconds == 0 ? "assets/images/play.svg" : "assets/images/stop.svg"), + ), + ], + ), + ], + ), + ], + ), + ).onPress(() { + Navigator.pushNamed(context, AppRoutes.todayAttendance); + })) + .animatedSwither(); + }, ), ), - 9.width, - Expanded( - child: MenusWidget(), - ), - ], - ), - ], - ).paddingOnly(left: 21, right: 21, top: 7), - ServicesWidget(), - 8.height, - Container( - width: double.infinity, - padding: EdgeInsets.only(top: 31), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.only(topRight: Radius.circular(50), topLeft: Radius.circular(50)), - border: Border.all(color: MyColors.lightGreyEDColor, width: 1), + ), + 9.width, + Expanded( + child: MenusWidget(), + ), + ], ), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - LocaleKeys.offers.tr().toText12(), - Row( - children: [ - LocaleKeys.discounts.tr().toText24(isBold: true), - 6.width, - Container( - padding: const EdgeInsets.only(left: 8, right: 8), - decoration: BoxDecoration( - color: MyColors.yellowColor, - borderRadius: BorderRadius.circular(10), - ), - child: LocaleKeys.newString.tr().toText10(isBold: true)), - ], - ), - ], - ), - ), - LocaleKeys.viewAllOffers.tr().toText12(isUnderLine: true), - ], - ).paddingOnly(left: 21, right: 21), - SizedBox( - height: 103 + 33, - child: ListView.separated( - shrinkWrap: true, - physics: const BouncingScrollPhysics(), - padding: const EdgeInsets.only(left: 21, right: 21, top: 13), - scrollDirection: Axis.horizontal, - itemBuilder: (cxt, index) { - return SizedBox( - width: 73, - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Container( - width: 73, - height: 73, + ], + ).paddingOnly(left: 21, right: 21, top: 7), + ServicesWidget(), + 8.height, + Container( + width: double.infinity, + padding: EdgeInsets.only(top: 31), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.only(topRight: Radius.circular(50), topLeft: Radius.circular(50)), + border: Border.all(color: MyColors.lightGreyEDColor, width: 1), + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + LocaleKeys.offers.tr().toText12(), + Row( + children: [ + LocaleKeys.discounts.tr().toText24(isBold: true), + 6.width, + Container( + padding: const EdgeInsets.only(left: 8, right: 8), decoration: BoxDecoration( - borderRadius: const BorderRadius.all( - Radius.circular(100), - ), - border: Border.all(color: MyColors.lightGreyEDColor, width: 1), + color: MyColors.yellowColor, + borderRadius: BorderRadius.circular(10), ), - child: ClipRRect( - borderRadius: const BorderRadius.all( - Radius.circular(50), - ), - child: Image.network( - "https://play-lh.googleusercontent.com/NPo88ojmhah4HDiposucJmfQIop4z4xc8kqJK9ITO9o-yCab2zxIp7PPB_XPj2iUojo", - fit: BoxFit.cover, - ), + child: LocaleKeys.newString.tr().toText10(isBold: true)), + ], + ), + ], + ), + ), + LocaleKeys.viewAllOffers.tr().toText12(isUnderLine: true), + ], + ).paddingOnly(left: 21, right: 21), + SizedBox( + height: 103 + 33, + child: ListView.separated( + shrinkWrap: true, + physics: const BouncingScrollPhysics(), + padding: const EdgeInsets.only(left: 21, right: 21, top: 13), + scrollDirection: Axis.horizontal, + itemBuilder: (cxt, index) { + return SizedBox( + width: 73, + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + width: 73, + height: 73, + decoration: BoxDecoration( + borderRadius: const BorderRadius.all( + Radius.circular(100), ), + border: Border.all(color: MyColors.lightGreyEDColor, width: 1), ), - 4.height, - Expanded( - child: namesD[6 % (index + 1)].toText12(isCenter: true, maxLine: 2), + child: ClipRRect( + borderRadius: const BorderRadius.all( + Radius.circular(50), + ), + child: Image.network( + "https://play-lh.googleusercontent.com/NPo88ojmhah4HDiposucJmfQIop4z4xc8kqJK9ITO9o-yCab2zxIp7PPB_XPj2iUojo", + fit: BoxFit.cover, + ), ), - ], - ), - ); - }, - separatorBuilder: (cxt, index) => 8.width, - itemCount: 6), - ), - ], - ), - ) - ], - ), + ), + 4.height, + Expanded( + child: namesD[6 % (index + 1)].toText12(isCenter: true, maxLine: 2), + ), + ], + ), + ); + }, + separatorBuilder: (cxt, index) => 8.width, + itemCount: 6), + ), + ], + ), + ) + ], + ), + ), + ) + ], + ), + drawer: SafeArea( + child: AppDrawer(), + ), + bottomNavigationBar: SizedBox( + height: 70, + child: BottomNavigationBar( + items: [ + BottomNavigationBarItem( + icon: SvgPicture.asset( + "assets/icons/home.svg", + color: currentIndex == 0 ? MyColors.grey3AColor : MyColors.grey98Color, + ).paddingAll(4), + label: LocaleKeys.home.tr(), + ), + BottomNavigationBarItem( + icon: SvgPicture.asset( + "assets/icons/create_req.svg", + color: currentIndex == 1 ? MyColors.grey3AColor : MyColors.grey98Color, + ).paddingAll(4), + label: LocaleKeys.createRequest.tr(), + ), + BottomNavigationBarItem( + icon: Stack( + alignment: Alignment.centerLeft, + children: [ + SvgPicture.asset( + "assets/icons/work_list.svg", + color: currentIndex == 2 ? MyColors.grey3AColor : MyColors.grey98Color, + ).paddingAll(4), + Consumer( + builder: (cxt, data, child) { + if (data.workListCounter == 0) { + return const SizedBox(); + } + return Positioned( + right: 0, + top: 0, + child: Container( + padding: const EdgeInsets.only(left: 4, right: 4), + alignment: Alignment.center, + decoration: BoxDecoration(color: MyColors.redColor, borderRadius: BorderRadius.circular(17)), + child: data.workListCounter.toString().toText10(color: Colors.white), + ), + ); + }, + ), + ], ), - ) + label: LocaleKeys.workList.tr(), + ), + BottomNavigationBarItem( + icon: SvgPicture.asset( + "assets/icons/item_for_sale.svg", + color: currentIndex == 3 ? MyColors.grey3AColor : MyColors.grey98Color, + ).paddingAll(4), + label: LocaleKeys.itemsForSale.tr(), + ), ], + currentIndex: currentIndex, + selectedLabelStyle: const TextStyle(fontSize: 10, color: MyColors.grey3AColor, fontWeight: FontWeight.w600), + unselectedLabelStyle: const TextStyle(fontSize: 10, color: MyColors.grey98Color, fontWeight: FontWeight.w600), + type: BottomNavigationBarType.fixed, + selectedItemColor: MyColors.grey3AColor, + backgroundColor: MyColors.backgroundColor, + selectedIconTheme: const IconThemeData(color: MyColors.grey3AColor, size: 28), + unselectedIconTheme: const IconThemeData(color: MyColors.grey98Color, size: 28), + onTap: (int index) { + currentIndex = index; + setState(() {}); + }, ), - drawer: SafeArea(child: AppDrawer())); + ), + ); } } diff --git a/lib/ui/landing/today_attendance_screen.dart b/lib/ui/landing/today_attendance_screen.dart index 821b01c..9346773 100644 --- a/lib/ui/landing/today_attendance_screen.dart +++ b/lib/ui/landing/today_attendance_screen.dart @@ -1,5 +1,6 @@ import 'package:easy_localization/src/public_ext.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_countdown_timer/flutter_countdown_timer.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; @@ -13,14 +14,18 @@ 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/provider/dashboard_provider_model.dart'; import 'package:mohem_flutter_app/widgets/circular_step_progress_bar.dart'; +import 'package:mohem_flutter_app/widgets/dialogs/dialogs.dart'; +import 'package:mohem_flutter_app/widgets/location/Location.dart'; import 'package:mohem_flutter_app/widgets/nfc/nfc_reader_sheet.dart'; import 'package:nfc_manager/nfc_manager.dart'; import 'package:provider/provider.dart'; import 'package:wifi_iot/wifi_iot.dart'; -import '../../provider/dashboard_provider_model.dart'; -import '../../widgets/location/Location.dart'; +import 'package:mohem_flutter_app/widgets/qr_scanner_dialog.dart'; + + class TodayAttendanceScreen extends StatefulWidget { TodayAttendanceScreen({Key? key}) : super(key: key); @@ -34,7 +39,7 @@ class TodayAttendanceScreen extends StatefulWidget { class _TodayAttendanceScreenState extends State { ValueNotifier result = ValueNotifier(null); late DashboardProviderModel data; - bool isNfcEnabled = true, isNfcLocationEnabled = false, isQrEnabled = false, isQrLocationEnabled = false, isWifiEnabled = false, isWifiLocationEnabled = false; + bool isNfcEnabled = false, isNfcLocationEnabled = false, isQrEnabled = false, isQrLocationEnabled = false, isWifiEnabled = false, isWifiLocationEnabled = false; @override void initState() { @@ -129,7 +134,7 @@ class _TodayAttendanceScreenState extends State { textStyle: TextStyle(color: Colors.white, fontSize: 32, letterSpacing: -1.92, fontWeight: FontWeight.bold, height: 1), ), 19.height, - "Shift Time".tr().toText12(color: MyColors.greyACColor), + LocaleKeys.shiftTime.tr().tr().toText12(color: MyColors.greyACColor), (model.attendanceTracking!.pShtName ?? "00:00:00").toString().toText22(color: Colors.white, isBold: true), ], ), @@ -157,15 +162,15 @@ class _TodayAttendanceScreenState extends State { children: [ Row( children: [ - commonStatusView("Check In", (model.attendanceTracking!.pSwipeIn) ?? "- - : - -"), - commonStatusView("Check Out", (model.attendanceTracking!.pSwipeOut) ?? "- - : - -") + commonStatusView(LocaleKeys.checkIn.tr(), (model.attendanceTracking!.pSwipeIn) ?? "- - : - -"), + commonStatusView(LocaleKeys.checkOut.tr(), (model.attendanceTracking!.pSwipeOut) ?? "- - : - -") ], ), 21.height, Row( children: [ - commonStatusView("Late In", (model.attendanceTracking!.pLateInHours) ?? "- - : - -"), - commonStatusView("Regular", (model.attendanceTracking!.pScheduledHours) ?? "- - : - -") + commonStatusView(LocaleKeys.lateIn.tr(), (model.attendanceTracking!.pLateInHours) ?? "- - : - -"), + commonStatusView(LocaleKeys.regular.tr(), (model.attendanceTracking!.pScheduledHours) ?? "- - : - -") ], ), ], @@ -180,9 +185,9 @@ class _TodayAttendanceScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - "Mark".tr().toText12(), - "Attendance".tr().toText24(), - "Select the method to mark the attendance".tr().toText12(color: Color(0xff535353)), + LocaleKeys.mark.tr().tr().toText12(), + LocaleKeys.attendance.tr().tr().toText24(), + LocaleKeys.selectMethodOfAttendance.tr().tr().toText12(color: Color(0xff535353)), 24.height, GridView( physics: const NeverScrollableScrollPhysics(), @@ -190,25 +195,39 @@ class _TodayAttendanceScreenState extends State { padding: EdgeInsets.zero, gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3, childAspectRatio: 1 / 1, crossAxisSpacing: 8, mainAxisSpacing: 8), children: [ - attendanceMethod("NFC", "assets/images/nfc.svg", isNfcEnabled, () { - if (isNfcLocationEnabled) { - Location.getCurrentLocation((LatLng? latlng) { - performNfcAttendance(model, lat: latlng?.latitude.toString() ?? "", lng: latlng?.longitude.toString() ?? ""); - }); - } else { - performNfcAttendance(model); - } - }), - attendanceMethod("Wifi", "assets/images/wufu.svg", isWifiEnabled, () { - if (isWifiLocationEnabled) { - Location.getCurrentLocation((LatLng? latlng) { - performWifiAttendance(model, lat: latlng?.latitude.toString() ?? "", lng: latlng?.longitude.toString() ?? ""); - }); - } else { - performWifiAttendance(model); - } - // connectWifi(); - }), + if (isNfcEnabled) + attendanceMethod("NFC", "assets/images/nfc.svg", isNfcEnabled, () { + if (isNfcLocationEnabled) { + Location.getCurrentLocation((LatLng? latlng) { + performNfcAttendance(model, lat: latlng?.latitude.toString() ?? "", lng: latlng?.longitude.toString() ?? ""); + }); + } else { + performNfcAttendance(model); + } + }), + if (isWifiEnabled) + attendanceMethod("Wifi", "assets/images/wufu.svg", isWifiEnabled, () { + if (isWifiLocationEnabled) { + + Location.getCurrentLocation((LatLng? latlng) { + performWifiAttendance(model, lat: latlng?.latitude.toString() ?? "", lng: latlng?.longitude.toString() ?? ""); + }); + } else { + performWifiAttendance(model); + } + // connectWifi(); + }), + if (isQrEnabled) + attendanceMethod("QR", "assets/images/ic_qr.svg", isQrEnabled, () async { + if (isQrLocationEnabled) { + Location.getCurrentLocation((LatLng? latlng) { + performQrCodeAttendance(model, lat: latlng?.latitude.toString() ?? "", lng: latlng?.longitude.toString() ?? ""); + }); + } else { + performQrCodeAttendance(model); + } + // performQrCodeAttendance(model); + }), ], ) ], @@ -273,6 +292,7 @@ class _TodayAttendanceScreenState extends State { } else { print("wifi not location enabled"); } + bool v = await WiFiForIoTPlugin.connect(AppState().mohemmWifiSSID ?? "", password: AppState().mohemmWifiPassword ?? "", joinOnce: true, security: NetworkSecurity.WPA, withInternet: false); if (v) { await WiFiForIoTPlugin.forceWifiUsage(true); @@ -292,7 +312,7 @@ class _TodayAttendanceScreenState extends State { }); } } else { - Utils.confirmDialog(context, "Please come near to HMG wifi"); + Utils.confirmDialog(context, LocaleKeys.comeNearHMGWifi.tr()); } } @@ -302,6 +322,29 @@ class _TodayAttendanceScreenState extends State { return v; } + Future performQrCodeAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) async { + var qrCodeValue = await Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => QrScannerDialog(), + ), + ); + if(qrCodeValue!=null){ + print("qrCode: " + qrCodeValue); + Utils.showLoading(context); + try { + GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 1, isGpsRequired: isQrLocationEnabled, lat: lat, long: lng, QRValue: qrCodeValue); + bool status = await model.fetchAttendanceTracking(context); + Utils.hideLoading(context); + } catch (ex) { + print(ex); + Utils.hideLoading(context); + Utils.handleException(ex, context, (msg) { + Utils.confirmDialog(context, msg); + }); + } + } + } + Widget attendanceMethod(String title, String image, bool isEnabled, VoidCallback onPress) => Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(15), @@ -318,7 +361,11 @@ class _TodayAttendanceScreenState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Expanded(child: SvgPicture.asset(image)), + Expanded( + child: SvgPicture.asset( + image, + color: Colors.white, + )), title.toText17(isBold: true, color: Colors.white), ], ), diff --git a/lib/ui/landing/widget/app_drawer.dart b/lib/ui/landing/widget/app_drawer.dart index 346f93a..ffba945 100644 --- a/lib/ui/landing/widget/app_drawer.dart +++ b/lib/ui/landing/widget/app_drawer.dart @@ -1,6 +1,8 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:mohem_flutter_app/config/routes.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/ui/landing/widget/drawer_item.dart'; class AppDrawer extends StatefulWidget { @@ -20,53 +22,177 @@ class _AppDrawerState extends State { ), Expanded( child: ListView(padding: const EdgeInsets.all(21), physics: const BouncingScrollPhysics(), children: [ - const Divider(), + Divider(), InkWell( - child: const DrawerItem( - 'My Profile', + child: DrawerItem( + //'My Profile', + LocaleKeys.myProfile.tr(), icon: Icons.person, color: Colors.grey, ), onTap: () { drawerNavigator(context, AppRoutes.profile); }), - const Divider(), - InkWell( - child: const DrawerItem( - 'Mowadhafhi', - icon: Icons.person, - color: Colors.grey, - ), - onTap: () { - drawerNavigator(context, AppRoutes.mowadhafhi); - }), - const Divider(), - InkWell( - child: const DrawerItem( - 'Pending Transactions', - icon: Icons.person, - color: Colors.grey, - ), - onTap: () { - drawerNavigator(context, AppRoutes.pendingTransactions); - }), - const Divider(), - InkWell( - child: const DrawerItem( - 'My Requests', - icon: Icons.person, - color: Colors.grey, - ), - onTap: () { - drawerNavigator(context, AppRoutes.myRequests); - }) + Divider(), + InkWell( + child: DrawerItem( + // 'Mowadhafhi', + LocaleKeys.mowadhafhi.tr(), + icon: Icons.person, + color: Colors.grey, + ), + onTap: () { + drawerNavigator(context, AppRoutes.mowadhafhi); + }, + ), + Divider(), + InkWell( + child: DrawerItem( + LocaleKeys.pendingTransactions.tr(), + icon: Icons.person, + color: Colors.grey, + ), + onTap: () { + drawerNavigator(context, AppRoutes.pendingTransactions); + }, + ), + Divider(), + InkWell( + child: const DrawerItem( + 'My Requests', + icon: Icons.person, + color: Colors.grey, + ), + onTap: () { + drawerNavigator(context, AppRoutes.myRequests); + }) ])) ]))); } - drawerNavigator(context, routeName) { - Navigator.of(context).pushNamed(routeName); - } +// , +// +// ) +// +// , +// +// InkWell +// +// ( +// +// child +// +// : +// +// DrawerItem +// +// ( +// +// LocaleKeys.employeeDigitalID.tr +// +// ( +// +// ) +// +// , +// +// icon +// +// : +// +// Icons.insert_drive_file_outlined +// +// , +// +// color +// +// : +// +// Colors.grey +// +// , +// +// ) +// +// , +// +// onTap +// +// : () { +// showMDialog(context, child: EmployeeDigitialIdDialog()); +// }, +// +// ) +// +// , +// +// Divider() +// +// , +// +// InkWell +// +// ( +// +// child +// +// : +// +// DrawerItem +// +// ( +// +// LocaleKeys.businessCard.tr +// +// ( +// +// ) +// +// , +// +// icon +// +// : +// +// Icons.insert_drive_file_outlined +// +// , +// +// color +// +// : +// +// Colors.grey +// +// , +// +// ) +// +// , +// +// onTap +// +// : () { +// showMDialog(context, child: BusinessCardDialog()); +// }, +// ), +// ], +// ), +// ) +// ], +// ) +// +// , +// +// ) +// +// , +// +// ); +} + +void drawerNavigator(context, routeName) { + Navigator.of(context).pushNamed(routeName); } String capitalizeOnlyFirstLater(String text) { diff --git a/lib/ui/landing/widget/drawer_item.dart b/lib/ui/landing/widget/drawer_item.dart index 65c3132..4654e5b 100644 --- a/lib/ui/landing/widget/drawer_item.dart +++ b/lib/ui/landing/widget/drawer_item.dart @@ -32,7 +32,7 @@ class _DrawerItemState extends State { if (widget.assetLink == null) Icon( widget.icon, - color: widget.color ?? Colors.black87, + color: widget.color, size: 25, ), Expanded( diff --git a/lib/ui/landing/widget/services_widget.dart b/lib/ui/landing/widget/services_widget.dart index fc873cd..e99205b 100644 --- a/lib/ui/landing/widget/services_widget.dart +++ b/lib/ui/landing/widget/services_widget.dart @@ -1,7 +1,6 @@ import 'package:easy_localization/src/public_ext.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; -import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; @@ -9,6 +8,7 @@ import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart'; import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; +import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; import 'package:mohem_flutter_app/widgets/shimmer/dashboard_shimmer_widget.dart'; import 'package:provider/provider.dart'; @@ -18,9 +18,9 @@ class ServicesWidget extends StatelessWidget { List namesT = [LocaleKeys.monthlyAttendance.tr(), LocaleKeys.workFromHome.tr(), LocaleKeys.ticketRequest.tr(), LocaleKeys.monthlyAttendance.tr()]; List iconT = [ "assets/images/monthly_attendance.svg", - "assets/images/dynamic_screens.svg", + "assets/images/monthly_attendance.svg", + "assets/images/ticket_request.svg", "assets/images/ticket_request.svg", - "assets/images/dynamic_screens.svg", "assets/images/dynamic_screens.svg", "assets/images/dynamic_screens.svg", "assets/images/dynamic_screens.svg", @@ -109,17 +109,26 @@ class ServicesWidget extends StatelessWidget { void handleOnPress(context, GetMenuEntriesList menuEntry) { var pro = Provider.of(context, listen: false); - List? menuList = pro.getMenuEntriesList?.where((element) => element.parentMenuName == menuEntry.menuName && element.menuEntryType == "FUNCTION").toList(); + if (menuEntry.requestType == "MONTHLY_ATTENDANCE") { + Navigator.pushNamed(context, AppRoutes.monthlyAttendance); + return; + } else if (menuEntry.requestType == "VACATION_RULE") { + Navigator.pushNamed(context, AppRoutes.vacationRule); + return; + } + List menuList = pro.getMenuEntriesList?.where((element) => element.parentMenuName == menuEntry.menuName && element.menuEntryType == "FUNCTION").toList() ?? []; menuEntry.icon = ""; print(menuEntry.toJson()); - Navigator.pushNamed(context, AppRoutes.myAttendance, arguments: menuList ?? []); - return; - - if (menuEntry.menuName == "HMG_OTL_SS" || menuEntry.menuName == "HMG_PT_OTL_SS") { - Navigator.pushNamed(context, AppRoutes.myAttendance); + if (menuList.isEmpty) { + if (menuEntry.requestType == "EIT") { + Navigator.pushNamed(context, AppRoutes.dynamicScreen, arguments: DynamicListViewParams(menuEntry.prompt!, menuEntry.functionName!)); + } else if (menuEntry.requestType == "PAYSLIP") { + Navigator.pushNamed(context, AppRoutes.monthlyPaySlip); + } } else { - Utils.showToast("In Progress"); + Navigator.pushNamed(context, AppRoutes.myAttendance, arguments: menuList); } + return; } String firstWord(String value) { diff --git a/lib/ui/misc/request_submit_screen.dart b/lib/ui/misc/request_submit_screen.dart index a0722da..63874c7 100644 --- a/lib/ui/misc/request_submit_screen.dart +++ b/lib/ui/misc/request_submit_screen.dart @@ -5,6 +5,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/my_attendance_api_client.dart'; +import 'package:mohem_flutter_app/api/profile_api_client.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/config/routes.dart'; @@ -25,8 +26,8 @@ class RequestSubmitScreenParams { String title; int transactionId; String pItemId; - - RequestSubmitScreenParams(this.title, this.transactionId, this.pItemId); + String approvalFlag; + RequestSubmitScreenParams(this.title, this.transactionId, this.pItemId, this.approvalFlag); } class RequestSubmitScreen extends StatefulWidget { @@ -83,12 +84,44 @@ class _RequestSubmitScreenState extends State { }); } await MyAttendanceApiClient().addAttachment(list); - await MyAttendanceApiClient().startEitApprovalProcess( - "SUBMIT", - comments.text, - params!.pItemId, - params!.transactionId, - ); + + if (params!.approvalFlag == 'phone_numbers') { + await ProfileApiClient().startPhoneApprovalProcess( + LocaleKeys.submit.tr(), + comments.text, + params!.pItemId, + params!.transactionId, + ); + } else if (params!.approvalFlag == 'address') { + await ProfileApiClient().startAddressApprovalProcess( + "SUBMIT", + comments.text, + params!.pItemId, + params!.transactionId, + ); + } else if (params!.approvalFlag == 'family_member') { + await ProfileApiClient().getApproves( + LocaleKeys.submit.tr(), + comments.text, + params!.transactionId!.toInt(), + params!.pItemId.toString(), + ); + } else if (params!.approvalFlag == 'basicDetails') { + await ProfileApiClient().startBasicDetailsApprovalProcess( + "SUBMIT", + comments.text, + params!.pItemId, + params!.transactionId, + ); + } else { + await MyAttendanceApiClient().startEitApprovalProcess( + LocaleKeys.submit.tr(), + comments.text, + params!.pItemId, + params!.transactionId, + ); + } + Utils.hideLoading(context); Utils.showToast(LocaleKeys.yourRequestHasBeenSubmittedForApprovals.tr(), longDuration: true); Navigator.of(context).popUntil((route) { @@ -124,7 +157,7 @@ class _RequestSubmitScreenState extends State { padding: const EdgeInsets.all(21).copyWith(top: 14), physics: const BouncingScrollPhysics(), children: [ - attachmentView("Attachments"), + attachmentView(LocaleKeys.attachments.tr(),), 14.height, InputWidget( LocaleKeys.comments.tr(), @@ -214,7 +247,7 @@ class _RequestSubmitScreenState extends State { children: [ title.toText16().expanded, 6.width, - SimpleButton("Add", () async { + SimpleButton(LocaleKeys.add.tr(), () async { FilePickerResult? result = await FilePicker.platform.pickFiles(allowMultiple: true); if (result != null) { attachmentFiles = attachmentFiles + result.paths.map((path) => File(path!)).toList(); diff --git a/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart b/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart index 1a430ea..a88e041 100644 --- a/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart +++ b/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart @@ -7,7 +7,6 @@ import 'package:mohem_flutter_app/api/my_attendance_api_client.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; -import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/dyanmic_forms/get_set_values_request_model.dart'; @@ -63,26 +62,37 @@ class _DynamicInputScreenState extends State { String tempVar = e.eSERVICESDV?.pIDCOLUMNNAME ?? ""; if (e.fORMATTYPE == "X") { // for date format type, date format is changed - tempVar = e.eSERVICESDV?.pVALUECOLUMNNAME ?? ""; + tempVar = e.eSERVICESDV?.pIDCOLUMNNAME ?? ""; if (tempVar.isNotEmpty) { - DateTime date = DateFormat('yyyy-MM-dd').parse(tempVar); - tempVar = DateFormat('yyyy/MM/dd HH:mm:ss').format(date); + if (!tempVar.contains("/")) { + DateTime date = DateFormat('yyyy-MM-dd').parse(tempVar); + tempVar = DateFormat('yyyy/MM/dd HH:mm:ss').format(date); + } } } + // else if (e.fORMATTYPE == "N") { + // // for date format type, date format is changed + // tempVar = e.eSERVICESDV?.pIDCOLUMNNAME ?? ""; + // print("------------------------sEGMENTNAME:${e.sEGMENTNAME}"); + // print("------------------------tempVar:$tempVar"); + // if (tempVar.isNotEmpty) { + // if (!tempVar.contains("/")) { + // DateTime date = DateFormat('yyyy-MM-dd').parse(tempVar); + // tempVar = DateFormat('yyyy/MM/dd HH:mm:ss').format(date); + // } + // } + // } return ValidateEitTransactionModel(dATEVALUE: null, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: null, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: tempVar.toString()).toJson(); }).toList(); values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_ACTION", nUMBERVALUE: null, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: "NEW_ROW").toJson()); values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_EXTRA_INFO_ID", nUMBERVALUE: -1, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: null).toJson()); values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_OBJECT_VERSION_NUMBER", nUMBERVALUE: 0, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: null).toJson()); - values.forEach((element) { - print(element); - }); + genericResponseModel = await MyAttendanceApiClient().validateEitTransaction(dESCFLEXCONTEXTCODE, dynamicParams!.dynamicId, values); SubmitEITTransactionList submitEITTransactionList = await MyAttendanceApiClient().submitEitTransaction(dESCFLEXCONTEXTCODE, dynamicParams!.dynamicId, values); Utils.hideLoading(context); - Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, - arguments: RequestSubmitScreenParams(descFlexConTextTitle, submitEITTransactionList.pTRANSACTIONID!, submitEITTransactionList.pITEMKEY!)); + Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, arguments: RequestSubmitScreenParams("title", submitEITTransactionList.pTRANSACTIONID!, submitEITTransactionList.pITEMKEY!, 'eit')); } catch (ex) { Utils.hideLoading(context); Utils.handleException(ex, context, null); @@ -92,7 +102,7 @@ class _DynamicInputScreenState extends State { String dESCFLEXCONTEXTCODE = ""; String descFlexConTextTitle = ""; - void calGetValueSetValues(GetEITDFFStructureList structureList) async { + Future calGetValueSetValues(GetEITDFFStructureList structureList) async { try { Utils.showLoading(context); String segmentId = structureList.cHILDSEGMENTSVS!; @@ -120,28 +130,32 @@ class _DynamicInputScreenState extends State { } } - void getDefaultValues(GetEITDFFStructureList structureList) async { - if ((structureList.cHILDSEGMENTSDVSplited?.length ?? 0) < 1) { - return; - } + Future getDefaultValues(GetEITDFFStructureList structureList) async { try { Utils.showLoading(context); for (int i = 0; i < (structureList.cHILDSEGMENTSDVSplited?.length ?? 0); i++) { String segmentId = structureList.cHILDSEGMENTSDVSplited![i]; - GetEITDFFStructureList? reqObj = getEitDffStructureList!.firstWhere((element) => element.sEGMENTNAME == segmentId); - List parentRequired = reqObj.pARENTSEGMENTSDVSplited ?? []; + GetEITDFFStructureList? parent = getEitDffStructureList!.firstWhere((element) => element.sEGMENTNAME == segmentId); + List parentDvRequired = parent.pARENTSEGMENTSDVSplited ?? []; + List parentVsRequired = parent.pARENTSEGMENTSVSSplitedVS ?? []; + List filteredList = - getEitDffStructureList!.where((outerElement) => parentRequired.any((element) => outerElement.sEGMENTNAME == element.name && element.isRequired == "REQUIRED")).toList(); + getEitDffStructureList!.where((outerElement) => parentDvRequired.any((element) => outerElement.sEGMENTNAME == element.name && element.isRequired == "REQUIRED")).toList(); + List> values = filteredList .map((e) => GetSetValuesRequestModel( sEGMENTNAME: e.sEGMENTNAME, vALUECOLUMNNAME: e.eSERVICESDV!.pVALUECOLUMNNAME, dESCRIPTION: "", iDCOLUMNNAME: e.eSERVICESDV!.pIDCOLUMNNAME, fLEXVALUESETNAME: e.fLEXVALUESETNAME) .toJson()) .toList(); - ESERVICESDV defaultValue = await MyAttendanceApiClient().getDefaultValue(segmentId, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, values); - int index = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == segmentId); - getEitDffStructureList![index].eSERVICESDV = defaultValue; + List> getSetList = getDefaultValuesIonicLogic(parent); + if (getSetList.isNotEmpty) { + ESERVICESDV defaultValue = await MyAttendanceApiClient().getDefaultValue(segmentId, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, getSetList); + int index = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == segmentId); + getEitDffStructureList![index].eSERVICESDV = defaultValue; + } } + await Future.delayed(const Duration(seconds: 1)); Utils.hideLoading(context); setState(() {}); } catch (ex) { @@ -150,6 +164,221 @@ class _DynamicInputScreenState extends State { } } + // List> calGetValueSetValuesIonicLogic(GetEITDFFStructureList structureElement) { + // let descFlexName: any = ""; + // let descFlexContextCode: any = ""; + // let parentValue: any = []; + // let ParentsList: any = []; + // let parentVal: any = null; + // let dependenciesList: any = []; + // let validationType: string = ""; + // } + + List> getDefaultValuesIonicLogic(GetEITDFFStructureList structureElement) { + try { + Utils.showLoading(context); + List parentValue = structureElement.pARENTSEGMENTSVSSplitedVS ?? []; + List parentsList = structureElement.pARENTSEGMENTSDVSplited ?? []; + + List> dependenciesList = []; + String? parentVal; + bool isStandardDate = false; + bool isStandardTimeDate = false; + bool isStandardTime = false; + bool isHidden = false; + bool isReadOnlyList = false; + bool isSelectElement = false; + + // isStandardDate = this.isStandardDate(obj); + // isStandardTimeDate = this.isStandardDateTime(obj); + // isStandardTime = this.isStandardTime(obj); + if (structureElement.dISPLAYFLAG == "N") isHidden = true; + if (structureElement.vALIDATIONTYPE != "N" && structureElement.rEADONLY == "Y") { + isReadOnlyList = true; + } + if (structureElement.vALIDATIONTYPE != "N" && structureElement.rEADONLY == "N") { + isSelectElement = true; + } + + if (parentValue.isNotEmpty && (structureElement.vALIDATIONTYPE == "D" || structureElement.vALIDATIONTYPE == "Y")) { + List parValue = getDependenciesParams(parentValue); + + if (parValue.isNotEmpty) { + parentVal = parValue.first.ID_COLUMN_NAME; + } + + if (parentVal == null) { + return []; + } + } + if (parentsList.isNotEmpty) { + if (parentValue.isNotEmpty) { + parentsList = parentsList + parentValue.map((e) => PARENTSEGMENTSDVSplited.fromJson(e.toJson())).toList(); + // parentsList.addAll(parentValue.map((e) => PARENTSEGMENTSDVSplited.fromJson(e.toJson()))); + // parentsList.concat(parentValue); + } + dependenciesList = getDependenciesParams(parentsList); + } + return dependenciesList; + // for (int i = 0; i < (structureList.cHILDSEGMENTSDVSplited?.length ?? 0); i++) { + // String segmentId = structureList.cHILDSEGMENTSDVSplited![i]; + // print("segmentId:$segmentId"); + // print("segmentName:${structureList.sEGMENTNAME}"); + // GetEITDFFStructureList? parent = getEitDffStructureList!.firstWhere((element) => element.sEGMENTNAME == segmentId); + // List parentDvRequired = parent.pARENTSEGMENTSDVSplited ?? []; + // List parentVsRequired = parent.pARENTSEGMENTSVSSplitedVS ?? []; + // + // List filteredList = + // getEitDffStructureList!.where((outerElement) => parentDvRequired.any((element) => outerElement.sEGMENTNAME == element.name && element.isRequired == "REQUIRED")).toList(); + // + // List> values = filteredList + // .map((e) => GetSetValuesRequestModel( + // sEGMENTNAME: e.sEGMENTNAME, vALUECOLUMNNAME: e.eSERVICESDV!.pVALUECOLUMNNAME, dESCRIPTION: "", iDCOLUMNNAME: e.eSERVICESDV!.pIDCOLUMNNAME, fLEXVALUESETNAME: e.fLEXVALUESETNAME) + // .toJson()) + // .toList(); + // print("values:$values"); + // + // ESERVICESDV defaultValue = await MyAttendanceApiClient().getDefaultValue(segmentId, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, values); + // int index = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == segmentId); + // getEitDffStructureList![index].eSERVICESDV = defaultValue; + // } + // Utils.hideLoading(context); + // setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + return []; + } + } + + List> getDependenciesParams(parentsList) { + List> parentArr = []; + + for (int i = 0; i < parentsList.length; i++) { + for (int j = 0; j < (getEitDffStructureList?.length ?? 0); j++) { + if (getEitDffStructureList![j].sEGMENTNAME == parentsList[i].name) { + if (getEitDffStructureList![j].dISPLAYFLAG != "N") { + if (getEitDffStructureList![j].vALIDATIONTYPE == "N") { + String? idColName; + String? val; + if (getEitDffStructureList![j].fORMATTYPE == "Y" || getEitDffStructureList![j].fORMATTYPE == "I") { + //standard date time or //time + val = getEitDffStructureList![j].eSERVICESDV?.pVALUECOLUMNNAME; + // val = getEitDffStructureList![j].eSERVICESDV?.pVALUECOLUMNNAME; + // var elem = document.getElementById(getEitDffStructureList![j].aPPLICATIONCOLUMNNAME) as HTMLDivElement; + + if ((val ?? "").isEmpty && parentsList[i].isRequired == "REQUIRED") { + //alert(parentsList[i].Name +" Is required"); + return []; + // return false; + } + idColName = val; + if (getEitDffStructureList![j].fORMATTYPE == "Y") { + // if (idColName!.contains("/")) { + // DateTime date = DateFormat('yyyy/MM/dd').parse(idColName); + // idColName = DateFormat('yyyy/MM/dd HH:mm:ss').format(DateTime(date.year, date.month, date.day)); + // } else { + // DateTime date = DateFormat('yyyy-MM-dd').parse(idColName); + // idColName = DateFormat('yyyy/MM/dd HH:mm:ss').format(DateTime(date.year, date.month, date.day)); + // } + + idColName = formatStandardDate(idColName!); + } + } else { + val = getEitDffStructureList![j].eSERVICESDV?.pVALUECOLUMNNAME; + // val = (document.getElementById(getEitDffStructureList![j].aPPLICATIONCOLUMNNAME) as HTMLInputElement).value; + if ((val ?? "").isEmpty && parentsList[i].isRequired == "REQUIRED") { + //alert(parentsList[i].Name +" Is required"); + return []; + } + idColName = val; + + if (getEitDffStructureList![j].fORMATTYPE == "X") { + idColName = formatDateNew(idColName!); + // commenting to test + // DateTime date = DateFormat('yyyy-MM-dd').parse(idColName!); + // idColName = DateFormat('yyyy-MM-dd HH:mm:ss').format(date); + } + } + + parentArr.add(GetSetValuesRequestModel( + sEGMENTNAME: getEitDffStructureList![j].sEGMENTNAME, + vALUECOLUMNNAME: val, + dESCRIPTION: "", + iDCOLUMNNAME: idColName, + fLEXVALUESETNAME: getEitDffStructureList![j].fLEXVALUESETNAME, + ).toJson()); + break; + } else { + if (getEitDffStructureList![j].rEADONLY != "Y") { + var data = getEitDffStructureList![j].eSERVICESDV; + + // let x = document.getElementById(getEitDffStructureList![j].aPPLICATIONCOLUMNNAME) as HTMLSelectElement; + String? text = data?.pIDCOLUMNNAME; //x.options[x.selectedIndex] ? x.options[x.selectedIndex].text : ""; + String? val = data?.pVALUECOLUMNNAME; //x.options[x.selectedIndex] ? x.options[x.selectedIndex].value : null; + if ((val ?? "").isEmpty && parentsList[i].isRequired == "REQUIRED") { + //alert(parentsList[i].Name +" Is required"); + return []; + } else {} + + text ??= ""; + + parentArr.add(GetSetValuesRequestModel( + sEGMENTNAME: getEitDffStructureList![j].sEGMENTNAME, + vALUECOLUMNNAME: val, + dESCRIPTION: "", + iDCOLUMNNAME: text, + fLEXVALUESETNAME: getEitDffStructureList![j].fLEXVALUESETNAME, + ).toJson()); + break; + } else { + var data = getEitDffStructureList![j].eSERVICESDV; + + String? text = data?.pVALUECOLUMNNAME; + String? val = data?.pIDCOLUMNNAME; + if ((val ?? "").isEmpty && parentsList[i].IsRequired == "REQUIRED") { + //alert(parentsList[i].Name +" Is required"); + return []; + } else {} + text ??= ""; + + parentArr.add(GetSetValuesRequestModel( + sEGMENTNAME: getEitDffStructureList![j].sEGMENTNAME, + vALUECOLUMNNAME: text, + dESCRIPTION: "", + iDCOLUMNNAME: val, + fLEXVALUESETNAME: getEitDffStructureList![j].fLEXVALUESETNAME, + ).toJson()); + + //break; + } + } + } else { + var data = getEitDffStructureList![j].eSERVICESDV; + + String? text = data?.pVALUECOLUMNNAME; + String? val = data?.pIDCOLUMNNAME; + if ((val ?? "").isEmpty && parentsList[i].IsRequired == "REQUIRED") { + //alert(parentsList[i].Name +" Is required"); + return []; + } else {} + text ??= ""; + + parentArr.add(GetSetValuesRequestModel( + sEGMENTNAME: getEitDffStructureList![j].sEGMENTNAME, + vALUECOLUMNNAME: text, + dESCRIPTION: "", + iDCOLUMNNAME: val, + fLEXVALUESETNAME: getEitDffStructureList![j].fLEXVALUESETNAME, + ).toJson()); + // break; + } + } + } + } + return parentArr; + } + @override void dispose() { super.dispose(); @@ -172,7 +401,7 @@ class _DynamicInputScreenState extends State { (getEitDffStructureList == null ? const SizedBox() : (getEitDffStructureList!.isEmpty - ? LocaleKeys.noDataAvailable.tr().toText16().center + ? Utils.getNoDataWidget(context) : ListView.separated( physics: const BouncingScrollPhysics(), padding: const EdgeInsets.all(21), @@ -206,9 +435,7 @@ class _DynamicInputScreenState extends State { isReadOnly: model.rEADONLY == "Y", onChange: (text) { model.fieldAnswer = text; - if (model.eSERVICESDV == null) { - model.eSERVICESDV = ESERVICESDV(); - } + model.eSERVICESDV ??= ESERVICESDV(); model.eSERVICESDV!.pIDCOLUMNNAME = text; }, ).paddingOnly(bottom: 12); @@ -220,19 +447,18 @@ class _DynamicInputScreenState extends State { isInputTypeNum: true, onChange: (text) { model.fieldAnswer = text; - if (model.eSERVICESDV == null) { - model.eSERVICESDV = ESERVICESDV(); - } + model.eSERVICESDV ??= ESERVICESDV(); model.eSERVICESDV!.pIDCOLUMNNAME = text; }, ).paddingOnly(bottom: 12); } else if (model.fORMATTYPE == "X") { String displayText = model.eSERVICESDV?.pIDCOLUMNNAME ?? (getEitDffStructureList![index].fieldAnswer ?? ""); + if (getEitDffStructureList![index].isDefaultTypeIsCDPS) { if (displayText.contains(" 00:00:00")) { displayText = displayText.replaceAll(" 00:00:00", ""); } - if (!displayText.contains("-")) { + if (displayText.contains("/")) { displayText = DateFormat('yyyy-MM-dd').format(DateFormat("yyyy/MM/dd").parse(displayText)); } } @@ -250,38 +476,43 @@ class _DynamicInputScreenState extends State { } } DateTime date = await _selectDate(context); - DateTime date1 = DateTime(date.year, date.month, date.day); + String dateString = date.toString().split(' ').first; + // DateTime date1 = DateTime(date.year, date.month, date.day); // getEitDffStructureList![index].fieldAnswer = date.toString(); ESERVICESDV eservicesdv; if (getEitDffStructureList![index].isDefaultTypeIsCDPS) { eservicesdv = ESERVICESDV( - pIDCOLUMNNAME: DateFormat('yyyy/MM/dd HH:MM:SS').format(date1), + pIDCOLUMNNAME: formatDate(dateString), pRETURNMSG: "null", pRETURNSTATUS: getEitDffStructureList![index].dEFAULTVALUE, - pVALUECOLUMNNAME: getEitDffStructureList![index].isDefaultTypeIsCDPS ? DateFormat('yyyy/MM/dd HH:MM:SS').format(date) : DateFormat('yyyy-MM-ddThh:mm:ss.s').format(date)); + pVALUECOLUMNNAME: getEitDffStructureList![index].isDefaultTypeIsCDPS ? reverseFormatStandardDate(formatDate(dateString)) : DateFormat('yyyy-MM-ddThh:mm:ss.s').format(date)); } else { eservicesdv = ESERVICESDV( - pIDCOLUMNNAME: DateFormat('yyyy-MM-dd').format(date1), + pIDCOLUMNNAME: dateString, pRETURNMSG: "null", pRETURNSTATUS: getEitDffStructureList![index].dEFAULTVALUE, - pVALUECOLUMNNAME: getEitDffStructureList![index].isDefaultTypeIsCDPS ? DateFormat('yyyy-MM-dd hh:mm:ss').format(date) : DateFormat('yyyy-MM-ddThh:mm:ss.s').format(date)); + pVALUECOLUMNNAME: getEitDffStructureList![index].isDefaultTypeIsCDPS ? reverseFormatStandardDate(formatDate(dateString)) : DateFormat('yyyy-MM-ddThh:mm:ss.s').format(date)); } getEitDffStructureList![index].eSERVICESDV = eservicesdv; setState(() {}); + if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) { + await calGetValueSetValues(model); + } if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) { - calGetValueSetValues(model); + await getDefaultValues(model); } }, ).paddingOnly(bottom: 12); } else if (model.fORMATTYPE == "Y") { String displayText = model.eSERVICESDV?.pIDCOLUMNNAME ?? (getEitDffStructureList![index].fieldAnswer ?? ""); if (getEitDffStructureList![index].isDefaultTypeIsCDPS) { - if (displayText.contains(" 00:00:00")) { - displayText = displayText.replaceAll(" 00:00:00", ""); - } - if (!displayText.contains("-")) { - displayText = DateFormat('yyyy-MM-dd').format(DateFormat("yyyy/MM/dd").parse(displayText)); - } + displayText = reverseFormatDate(displayText); + // if (displayText.contains(" 00:00:00")) { + // displayText = displayText.replaceAll(" 00:00:00", ""); + // } + // if (!displayText.contains("-")) { + // displayText = DateFormat('yyyy-MM-dd').format(DateFormat("yyyy/MM/dd").parse(displayText)); + // } } return DynamicTextFieldWidget( (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), @@ -295,35 +526,40 @@ class _DynamicInputScreenState extends State { if (tempDate.contains("00:00:00")) { tempDate = tempDate.replaceAll("00:00:00", '').trim(); } - selectedDate = DateFormat("yyyy/MM/dd").parse(tempDate); + if (tempDate.contains("/")) { + selectedDate = DateFormat("yyyy/MM/dd").parse(tempDate); + } else { + selectedDate = DateFormat("yyyy-MM-dd").parse(tempDate); + } } else { selectedDate = DateTime.parse(getEitDffStructureList![index].eSERVICESDV!.pVALUECOLUMNNAME!); } } DateTime date = await _selectDate(context); - DateTime date1 = DateTime(date.year, date.month, date.day); + String dateString = date.toString().split(' ').first; // getEitDffStructureList![index].fieldAnswer = date.toString(); ESERVICESDV eservicesdv; if (getEitDffStructureList![index].isDefaultTypeIsCDPS) { eservicesdv = ESERVICESDV( - pIDCOLUMNNAME: DateFormat('yyyy/MM/dd HH:MM:SS').format(date1), + pIDCOLUMNNAME: formatDate(dateString), pRETURNMSG: "null", pRETURNSTATUS: getEitDffStructureList![index].dEFAULTVALUE, - pVALUECOLUMNNAME: getEitDffStructureList![index].isDefaultTypeIsCDPS ? DateFormat('yyyy-MM-dd HH:MM:SS').format(date) : DateFormat('yyyy-MM-ddThh:mm:ss.s').format(date)); + pVALUECOLUMNNAME: getEitDffStructureList![index].isDefaultTypeIsCDPS ? reverseFormatStandardDate(formatDate(dateString)) : DateFormat('yyyy-MM-ddThh:mm:ss.s').format(date)); } else { eservicesdv = ESERVICESDV( - pIDCOLUMNNAME: DateFormat('yyyy-MM-dd').format(date1), + pIDCOLUMNNAME: dateString, pRETURNMSG: "null", pRETURNSTATUS: getEitDffStructureList![index].dEFAULTVALUE, - pVALUECOLUMNNAME: getEitDffStructureList![index].isDefaultTypeIsCDPS ? DateFormat('yyyy-MM-dd hh:mm:ss').format(date) : DateFormat('yyyy-MM-ddThh:mm:ss.s').format(date)); + pVALUECOLUMNNAME: getEitDffStructureList![index].isDefaultTypeIsCDPS ? reverseFormatStandardDate(formatDate(dateString)) : DateFormat('yyyy-MM-ddThh:mm:ss.s').format(date)); } getEitDffStructureList![index].eSERVICESDV = eservicesdv; setState(() {}); + if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) { + await calGetValueSetValues(model); + } if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) { - if (getEitDffStructureList![index].isDefaultTypeIsCDPS) { - calGetValueSetValues(model); - } else {} + await getDefaultValues(model); } }, ).paddingOnly(bottom: 12); @@ -339,18 +575,22 @@ class _DynamicInputScreenState extends State { isReadOnly: model.rEADONLY == "Y", ).paddingOnly(bottom: 12), itemBuilder: (_) => >[ - for (int i = 0; i < model.eSERVICESVS!.length; i++) PopupMenuItem(child: Text(model.eSERVICESVS![i].vALUECOLUMNNAME!), value: i), + if (model.rEADONLY != "Y") + for (int i = 0; i < model.eSERVICESVS!.length; i++) PopupMenuItem(child: Text(model.eSERVICESVS![i].vALUECOLUMNNAME!), value: i), ], - onSelected: (int popipIndex) { + onSelected: (int popipIndex) async { ESERVICESDV eservicesdv = ESERVICESDV( pIDCOLUMNNAME: model.eSERVICESVS![popipIndex].iDCOLUMNNAME, pRETURNMSG: "null", - pRETURNSTATUS: getEitDffStructureList![popipIndex].dEFAULTVALUE, + pRETURNSTATUS: "null", //getEitDffStructureList![popipIndex].dEFAULTVALUE, pVALUECOLUMNNAME: model.eSERVICESVS![popipIndex].vALUECOLUMNNAME); getEitDffStructureList![index].eSERVICESDV = eservicesdv; setState(() {}); + if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) { + await calGetValueSetValues(model); + } if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) { - getDefaultValues(model); + await getDefaultValues(model); } }); } @@ -369,18 +609,19 @@ class _DynamicInputScreenState extends State { isReadOnly: model.rEADONLY == "Y", ).paddingOnly(bottom: 12), itemBuilder: (_) => >[ - for (int i = 0; i < model.eSERVICESVS!.length; i++) PopupMenuItem(child: Text(model.eSERVICESVS![i].vALUECOLUMNNAME!), value: i), + if (model.rEADONLY != "Y") + for (int i = 0; i < model.eSERVICESVS!.length; i++) PopupMenuItem(value: i, child: Text(model.eSERVICESVS![i].vALUECOLUMNNAME!)), ], - onSelected: (int popipIndex) { - ESERVICESDV eservicesdv = ESERVICESDV( - pIDCOLUMNNAME: model.eSERVICESVS![popipIndex].iDCOLUMNNAME, - pRETURNMSG: "null", - pRETURNSTATUS: getEitDffStructureList![popipIndex].dEFAULTVALUE, - pVALUECOLUMNNAME: model.eSERVICESVS![popipIndex].vALUECOLUMNNAME); + onSelected: (int popipIndex) async { + ESERVICESDV eservicesdv = + ESERVICESDV(pIDCOLUMNNAME: model.eSERVICESVS![popipIndex].iDCOLUMNNAME, pRETURNMSG: "null", pRETURNSTATUS: "null", pVALUECOLUMNNAME: model.eSERVICESVS![popipIndex].vALUECOLUMNNAME); getEitDffStructureList![index].eSERVICESDV = eservicesdv; setState(() {}); + if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) { + await calGetValueSetValues(model); + } if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) { - getDefaultValues(model); + await getDefaultValues(model); } }); } @@ -417,17 +658,20 @@ class _DynamicInputScreenState extends State { } } DateTime date = await _selectDate(context); - DateTime date1 = DateTime(date.year, date.month, date.day); + String dateString = date.toString().split(' ').first; getEitDffStructureList![index].fieldAnswer = date.toString(); ESERVICESDV eservicesdv = ESERVICESDV( - pIDCOLUMNNAME: DateFormat('yyyy-MM-dd').format(date1), + pIDCOLUMNNAME: dateString, pRETURNMSG: "null", pRETURNSTATUS: getEitDffStructureList![index].dEFAULTVALUE, - pVALUECOLUMNNAME: getEitDffStructureList![index].isDefaultTypeIsCDPS ? DateFormat('yyyy-MM-dd hh:mm:ss').format(date) : DateFormat('yyyy-MM-ddThh:mm:ss.s').format(date)); + pVALUECOLUMNNAME: getEitDffStructureList![index].isDefaultTypeIsCDPS ? reverseFormatStandardDate(formatDate(dateString)) : DateFormat('yyyy-MM-ddThh:mm:ss.s').format(date)); getEitDffStructureList![index].eSERVICESDV = eservicesdv; setState(() {}); + if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) { + await calGetValueSetValues(model); + } if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) { - calGetValueSetValues(model); + await getDefaultValues(model); } }, ).paddingOnly(bottom: 12); @@ -453,8 +697,11 @@ class _DynamicInputScreenState extends State { ESERVICESDV eservicesdv = ESERVICESDV(pIDCOLUMNNAME: time, pRETURNMSG: "null", pRETURNSTATUS: getEitDffStructureList![index].dEFAULTVALUE, pVALUECOLUMNNAME: time); getEitDffStructureList![index].eSERVICESDV = eservicesdv; setState(() {}); + if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) { + await calGetValueSetValues(model); + } if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) { - calGetValueSetValues(model); + await getDefaultValues(model); } }, ).paddingOnly(bottom: 12); @@ -467,7 +714,7 @@ class _DynamicInputScreenState extends State { ).objectContainerView(); } - DateTime selectedDate = DateTime.now(); + DateTime selectedDate = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day); Future _selectDate(BuildContext context) async { DateTime time = selectedDate; @@ -496,6 +743,7 @@ class _DynamicInputScreenState extends State { time = picked; } } + time = DateTime(time.year, time.month, time.day); return time; } @@ -539,4 +787,59 @@ class _DynamicInputScreenState extends State { } return time; } + + String reverseFormatDate(String date) { + String formattedDate; + if (date.isNotEmpty) { + formattedDate = date.replaceAll('/', '-'); + formattedDate = formattedDate.replaceAll(' 00:00:00', ''); + } else { + formattedDate = date; + } + return formattedDate; + } + + String formatStandardDate(String date) { + String formattedDate; + if (date.isNotEmpty) { + formattedDate = date.replaceAll('-', '/'); + } else { + formattedDate = date; + } + return formattedDate; + } + + String reverseFormatStandardDate(String date) { + String formattedDate; + if (date.isNotEmpty) { + formattedDate = date.replaceAll('/', '-'); + } else { + formattedDate = date; + } + return formattedDate; + } + + String formatDate(String date) { + String formattedDate; + + if (date.isNotEmpty) { + date = date.substring(0, 10); + formattedDate = date.replaceAll('-', '/'); + formattedDate = formattedDate + ' 00:00:00'; + } else { + formattedDate = date; + } + return formattedDate; + } + + String formatDateNew(String date) { + String formattedDate; + if (date.isNotEmpty) { + formattedDate = date.split('T')[0]; + formattedDate = formattedDate + ' 00:00:00'; + } else { + formattedDate = date; + } + return formattedDate; + } } diff --git a/lib/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart b/lib/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart index 129dc5b..8dd78f7 100644 --- a/lib/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart +++ b/lib/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart @@ -1,13 +1,10 @@ -import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/my_attendance_api_client.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; -import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; -import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/get_eit_transaction_list_model.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart'; @@ -47,6 +44,8 @@ class _DynamicListViewScreenState extends State { getEITTransactionList?.forEach((element) { element.collectionTransaction = element.collectionTransaction?.where((elemen) => elemen.dISPLAYFLAG == "Y").toList() ?? []; }); + + getEITTransactionList = getEITTransactionList?.where((element) => element.collectionTransaction?.isNotEmpty ?? false).toList() ?? []; Utils.hideLoading(context); setState(() {}); } catch (ex) { @@ -69,14 +68,11 @@ class _DynamicListViewScreenState extends State { return Scaffold( backgroundColor: Colors.white, - appBar: AppBarWidget( - context, - title: dynamicParams!.title, - ), + appBar: AppBarWidget(context, title: dynamicParams!.title), body: getEITTransactionList == null ? const SizedBox() : (getEITTransactionList!.isEmpty - ? LocaleKeys.noDataAvailable.tr().toText16().center + ? Utils.getNoDataWidget(context) : ListView.separated( physics: const BouncingScrollPhysics(), padding: const EdgeInsets.all(21), @@ -95,8 +91,8 @@ class _DynamicListViewScreenState extends State { separatorBuilder: (cxt, index) => 12.height, itemCount: getEITTransactionList!.length)), floatingActionButton: Container( - height: 50, - width: 50, + height: 54, + width: 54, decoration: const BoxDecoration( shape: BoxShape.circle, gradient: LinearGradient(transform: GradientRotation(.83), begin: Alignment.topRight, end: Alignment.bottomLeft, colors: [ diff --git a/lib/ui/my_attendance/my_attendance_screen.dart b/lib/ui/my_attendance/my_attendance_screen.dart index 2a337a3..207e2c7 100644 --- a/lib/ui/my_attendance/my_attendance_screen.dart +++ b/lib/ui/my_attendance/my_attendance_screen.dart @@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; @@ -26,33 +27,18 @@ class MyAttendanceScreen extends StatelessWidget { title: LocaleKeys.myAttendance.tr(), ), body: SizedBox( - width: double.infinity, - height: double.infinity, - child: list.isEmpty - ? LocaleKeys.noDataAvailable.tr().toText16().center - : Column( - children: [ - itemView( - "assets/images/pdf.svg", - LocaleKeys.missingSwipes.tr(), - ).onPress(() { - Navigator.pushNamed(context, AppRoutes.monthlyAttendance); + width: double.infinity, + height: double.infinity, + child: list.isEmpty + ? Utils.getNoDataWidget(context) + : ListView.separated( + padding: const EdgeInsets.all(21), + itemBuilder: (cxt, index) => itemView("assets/images/pdf.svg", list[index].prompt!).onPress(() { + Navigator.pushNamed(context, AppRoutes.dynamicScreen, arguments: DynamicListViewParams(list[index].prompt!, list[index].functionName!)); }), - 12.height, - ListView.separated( - padding: const EdgeInsets.all(21), - itemBuilder: (cxt, index) => itemView( - "assets/images/pdf.svg", - //LocaleKeys.missingSwipes.tr(), - list[index].prompt!, - ).onPress(() { - Navigator.pushNamed(context, AppRoutes.dynamicScreen, arguments: DynamicListViewParams(list[index].prompt!, list[index].functionName!)); - }), - separatorBuilder: (cxt, index) => 12.height, - itemCount: list.length) - .expanded - ], - )), + separatorBuilder: (cxt, index) => 12.height, + itemCount: list.length), + ), ); } diff --git a/lib/ui/payslip/monthly_pay_slip_screen.dart b/lib/ui/payslip/monthly_pay_slip_screen.dart new file mode 100644 index 0000000..a277fcd --- /dev/null +++ b/lib/ui/payslip/monthly_pay_slip_screen.dart @@ -0,0 +1,290 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/monthly_pay_slip_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/monthly_pay_slip/get_deductions_List_model.dart'; +import 'package:mohem_flutter_app/models/monthly_pay_slip/get_earnings_list_model.dart'; +import 'package:mohem_flutter_app/models/monthly_pay_slip/get_pay_slip_list_model.dart'; +import 'package:mohem_flutter_app/models/monthly_pay_slip/get_payment_information_list_model.dart'; +import 'package:mohem_flutter_app/models/monthly_pay_slip/get_summary_of_payment_list_model.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart'; + +class MonthlyPaySlipScreen extends StatefulWidget { + MonthlyPaySlipScreen({Key? key}) : super(key: key); + + @override + _MonthlyPaySlipScreenState createState() { + return _MonthlyPaySlipScreenState(); + } +} + +class _MonthlyPaySlipScreenState extends State { + List paySlipList = []; + List summaryOfPaymentList = []; + List paymentInformationList = []; + List deductionList = []; + List earningList = []; + int? selectedMonthIndex; + + @override + void initState() { + super.initState(); + getData(); + } + + void getData() async { + try { + Utils.showLoading(context); + paySlipList = await MonthlyPaySlipApiClient().getPaySlip(); + if (paySlipList.isNotEmpty) { + selectedMonthIndex = 0; + await getDataByActionContextID(paySlipList[selectedMonthIndex!].aCTIONCONTEXTID!); + } + Utils.hideLoading(context); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + Future getDataByActionContextID(int actionContextID, {bool showLoading = false}) async { + try { + if (showLoading) { + Utils.showLoading(context); + } + List results = await Future.wait([ + MonthlyPaySlipApiClient().getSummaryOfPayment(actionContextID), + MonthlyPaySlipApiClient().getPaymentInformation(actionContextID), + MonthlyPaySlipApiClient().getDeductions(actionContextID), + MonthlyPaySlipApiClient().getEarnings(actionContextID), + ]); + summaryOfPaymentList = results[0]; + paymentInformationList = results[1]; + deductionList = results[2]; + earningList = results[3]; + if (showLoading) { + Utils.hideLoading(context); + setState(() {}); + } + } catch (ex) { + if (showLoading) { + Utils.hideLoading(context); + } + Utils.handleException(ex, context, null); + } + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBarWidget( + context, + title: LocaleKeys.monthlyPaySlip.tr(), + ), + body: Column( + children: [ + if (selectedMonthIndex != null) + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Container(alignment: Alignment.centerLeft, child: LocaleKeys.month.tr().toText17(isBold: true, color: MyColors.darkIconColor)), + Row( + children: [ + DateFormat("MMMM-yyyy").format(DateFormat("MM/dd/yyyy").parse(paySlipList[selectedMonthIndex!].pAYMENTDATE!)).toText16(color: MyColors.greyACColor), + const Icon(Icons.keyboard_arrow_down_rounded, color: MyColors.greyACColor), + ], + ).onPress(() async { + int tempIndex = selectedMonthIndex!; + showModalBottomSheet( + context: context, + builder: (cxt) { + return Container( + height: 200, + color: Colors.white, + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + LocaleKeys.ok.tr().toText16(color: MyColors.gradiantEndColor).paddingOnly(right: 21, top: 16).onPress(() { + if (selectedMonthIndex != tempIndex) { + selectedMonthIndex = tempIndex; + Navigator.pop(context); + getDataByActionContextID(paySlipList[selectedMonthIndex!].aCTIONCONTEXTID!, showLoading: true); + } + }), + CupertinoPicker( + itemExtent: 40, + onSelectedItemChanged: (index) { + tempIndex = index; + }, + children: [for (int i = 0; i < paySlipList.length; i++) paySlipList[i].pERIODNAME!.toText16().center]).expanded, + ], + ), + ); + }); + }) + ], + ).paddingOnly(left: 21, right: 21), + ListView( + padding: const EdgeInsets.all(21), + children: [ + if (summaryOfPaymentList.isNotEmpty) ...[paymentSummaryData(context)], + if (earningList.isNotEmpty) ...[18.height, earningData(context)], + if (deductionList.isNotEmpty) ...[18.height, deductionData(context)], + if (paymentInformationList.isNotEmpty) ...[12.height, paymentInformationData(context)] + ], + ).expanded, + ], + ), + ); + } + + Widget earningData(context) { + List tableRow = []; + tableRow.add( + TableRow( + children: [ + Utils.tableColumnTitle(LocaleKeys.particular.tr()), + Utils.tableColumnTitle(LocaleKeys.amount.tr(), alignCenter: true), + ], + ), + ); + for (int i = 0; i < earningList.length; i++) { + tableRow.add( + TableRow(children: [ + Utils.tableColumnValue('${earningList[i].eLEMENTNAME}'), + Utils.tableColumnValue('${earningList[i].aMOUNT}', alignCenter: true), + ]), + ); + } + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + LocaleKeys.earnings.tr().toSectionHeading(), + 12.height, + Table( + columnWidths: const {0: FlexColumnWidth(1.5), 1: FlexColumnWidth(1.0)}, + children: tableRow, + ).objectContainerView(), + ], + ); + } + + Widget deductionData(context) { + List tableRow = []; + tableRow.add( + TableRow( + children: [ + Utils.tableColumnTitle(LocaleKeys.particular.tr()), + Utils.tableColumnTitle(LocaleKeys.amount.tr(), alignCenter: true), + ], + ), + ); + for (int i = 0; i < deductionList.length; i++) { + tableRow.add( + TableRow(children: [ + Utils.tableColumnValue('${deductionList[i].eLEMENTNAME}'), + Utils.tableColumnValue('${deductionList[i].aMOUNT}', alignCenter: true), + ]), + ); + } + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + LocaleKeys.deductions.tr().toSectionHeading(), + 12.height, + Table( + columnWidths: const {0: FlexColumnWidth(1.5), 1: FlexColumnWidth(1.0)}, + children: tableRow, + ).objectContainerView(), + ], + ); + } + + Widget paymentSummaryData(context) { + List tableRow = []; + tableRow.add( + TableRow( + children: [ + Utils.tableColumnTitle(LocaleKeys.particular.tr()), + Utils.tableColumnTitle("%", alignCenter: true), + Utils.tableColumnTitle(LocaleKeys.amount.tr(), alignCenter: true), + ], + ), + ); + + tableRow.add( + TableRow(children: [ + Utils.tableColumnValue(LocaleKeys.deductions.tr()), + Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALDEDUCTIONSPERCENTAGE}', alignCenter: true), + Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALDEDUCTIONSAMOUNT}', alignCenter: true), + ]), + ); + tableRow.add( + TableRow(children: [ + Utils.tableColumnValue(LocaleKeys.earnings.tr()), + Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALEARNINGSPERCENTAGE}', alignCenter: true), + Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALEARNINGSAMOUNT}', alignCenter: true), + ]), + ); + tableRow.add( + TableRow(children: [ + Utils.tableColumnValue(LocaleKeys.totalPayAmount.tr()), + Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALPAYPERCENTAGE}', alignCenter: true), + Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALPAYAMOUNT}', alignCenter: true), + ]), + ); + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + LocaleKeys.summaryOfInformation.tr().toSectionHeading(), + 12.height, + Table( + columnWidths: const {0: FlexColumnWidth(2.0), 1: FlexColumnWidth(1.0), 2: FlexColumnWidth(1.0)}, + children: tableRow, + ).objectContainerView(), + ], + ); + } + + Widget paymentInformationData(context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + LocaleKeys.paymentInformation.tr().toSectionHeading(), + 12.height, + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + ItemDetailView(LocaleKeys.paymentMethodName.tr(), paymentInformationList[0].pAYMENTMETHODNAME ?? ""), + ItemDetailView(LocaleKeys.bankName.tr(), paymentInformationList[0].bANKNAME ?? ""), + ItemDetailView(LocaleKeys.branchCode.tr(), paymentInformationList[0].bRANCHNAME ?? ""), + ItemDetailView(LocaleKeys.accountNo.tr(), paymentInformationList[0].aCCOUNTNUMBER ?? ""), + ItemDetailView(LocaleKeys.amount.tr(), paymentInformationList[0].aMOUNT ?? ""), + ], + ).objectContainerView(), + ], + ); + } +} diff --git a/lib/ui/profile/add_update_family_member.dart b/lib/ui/profile/add_update_family_member.dart new file mode 100644 index 0000000..9a0bd66 --- /dev/null +++ b/lib/ui/profile/add_update_family_member.dart @@ -0,0 +1,466 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/profile_api_client.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/config/routes.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/models/dyanmic_forms/validate_eit_transaction_model.dart'; +import 'package:mohem_flutter_app/models/get_approves_list_model.dart'; +import 'package:mohem_flutter_app/models/get_contact_dff_structure_list.dart'; +import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart'; +import 'package:mohem_flutter_app/models/profile/get_contact_clos_structure_list.dart'; +import 'package:mohem_flutter_app/models/profile/get_contact_details_list.dart'; +import 'package:mohem_flutter_app/models/profile/submit_contact_transaction_list_model.dart'; +import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'dart:io'; +import 'package:flutter/cupertino.dart'; +import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; +import 'package:easy_localization/src/public_ext.dart'; + +class AddUpdateFamilyMember extends StatefulWidget { + const AddUpdateFamilyMember({Key? key}) : super(key: key); + + @override + _AddUpdateFamilyMemberState createState() => _AddUpdateFamilyMemberState(); +} + +class _AddUpdateFamilyMemberState extends State { + List getBasicDetDffStructureList = []; + List getContactColsStructureList = []; + List getContactDffStructureList = []; + List getContactDetailsList = []; + SubmitContactTransactionList? submitContactTransactionList; + dynamic args; + String? date = "MM/DD/YYYY"; + // String actionType = "UPDATE"; + + GetApprovesList? getApprovesList; + + @override + void initState() { + // + super.initState(); + } + + void callAddAndUpdateFamilyMember() async { + try { + Utils.showLoading(context); + getBasicDetDffStructureList = await ProfileApiClient().getBasicDetDffStructure(); + getContactColsStructureList = await ProfileApiClient().getContactColsStructureList(args['actionType']); + getContactDffStructureList = await ProfileApiClient().getContactDffStructureList(); + if (args['actionType'] == "ADD") { + getBasicDetDffStructureList?.forEach((element) { + element?.getContactDetailsList = new GetContactDetailsList(); + }); + getContactColsStructureList?.forEach((element) { + element?.getContactDetailsList = new GetContactDetailsList(); + }); + getContactDffStructureList?.forEach((element) { + element?.getContactDetailsList = new GetContactDetailsList(); + }); + } else if (args['actionType'] == "UPDATE") { + getContactDetailsList = await ProfileApiClient().getContactDetailsList(args['relationID']); + + getBasicDetDffStructureList?.forEach((element) { + element?.getContactDetailsList = getContactDetailsList?.singleWhere((userDetail) => userDetail?.aPPLICATIONCOLUMNNAME == element?.aPPLICATIONCOLUMNNAME); + }); + getContactColsStructureList?.forEach((element) { + element?.getContactDetailsList = getContactDetailsList?.singleWhere((userDetail) => userDetail?.aPPLICATIONCOLUMNNAME == element?.aPPLICATIONCOLUMNNAME); + }); + + getContactDffStructureList?.forEach((element) { + element?.getContactDetailsList = getContactDetailsList?.singleWhere((userDetail) => userDetail?.aPPLICATIONCOLUMNNAME == element?.aPPLICATIONCOLUMNNAME); + }); + } + Utils.hideLoading(context); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + @override + Widget build(BuildContext context) { + if (args == null) { + args = ModalRoute.of(context)!.settings.arguments; + callAddAndUpdateFamilyMember(); + } + return Scaffold( + appBar: AppBarWidget( + context, + title: LocaleKeys.profile_familyDetails.tr(), + ), + backgroundColor: MyColors.backgroundColor, + bottomSheet: footer(), + body: args['flag'] == 1 + ? Column( + children: [ + ListView(physics: const BouncingScrollPhysics(), padding: const EdgeInsets.all(21), children: [ + ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (BuildContext cxt, int parentIndex) { + return parseDynamicFormatTypeCols(getContactColsStructureList![parentIndex], parentIndex); + }, + separatorBuilder: (cxt, index) => 0.height, + itemCount: getContactColsStructureList!.length), + 12.height, + ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (BuildContext cxt, int parentIndex) { + return parseDynamicFormatTypeBasicDetDff(getBasicDetDffStructureList![parentIndex], parentIndex); + }, + separatorBuilder: (cxt, index) => 0.height, + itemCount: getBasicDetDffStructureList!.length), + ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (BuildContext cxt, int parentIndex) { + return parseDynamicFormatTypeContactDff(getContactDffStructureList![parentIndex], parentIndex); + }, + separatorBuilder: (cxt, index) => 0.height, + itemCount: getContactDffStructureList!.length), + ]).expanded, + SizedBox( + height: 50, + ), + ], + ) + : args['flag'] == 2 + ? Column( + children: [ + getContactDetailsList!.isEmpty + ? LocaleKeys.noDataAvailable.tr().toText16().center + : ListView(physics: const BouncingScrollPhysics(), padding: const EdgeInsets.all(21), children: [ + ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (BuildContext cxt, int parentIndex) { + return parseDynamicFormatTypeCols(getContactColsStructureList![parentIndex], parentIndex); + }, + separatorBuilder: (cxt, index) => 0.height, + itemCount: getContactColsStructureList!.length), + 12.height, + ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (BuildContext cxt, int parentIndex) { + return parseDynamicFormatTypeBasicDetDff(getBasicDetDffStructureList![parentIndex], parentIndex); + }, + separatorBuilder: (cxt, index) => 0.height, + itemCount: getBasicDetDffStructureList!.length), + ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (BuildContext cxt, int parentIndex) { + return parseDynamicFormatTypeContactDff(getContactDffStructureList![parentIndex], parentIndex); + }, + separatorBuilder: (cxt, index) => 0.height, + itemCount: getContactDffStructureList!.length), + ]).expanded, + SizedBox( + height: 50, + ), + ], + ) + : Container(), + ); + } + + Widget parseDynamicFormatTypeCols(GetContactColsStructureList? model, int index) { + if (model!.dISPLAYFLAG != "N") { + } else { + return const SizedBox(); + } + if (model.dATATYPE == "VARCHAR2") { + if (model!.objectValuesList?.isNotEmpty ?? false) { + return PopupMenuButton( + child: DynamicTextFieldWidget( + (model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""), + model!.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + isEnable: false, + isPopup: true, + ).paddingOnly(bottom: 12), + itemBuilder: (_) => >[ + for (int i = 0; i < getContactColsStructureList[index]!.objectValuesList!.length; i++) + PopupMenuItem(child: Text(getContactColsStructureList[index]!.objectValuesList![i].mEANING.toString()), value: i), + ], + onSelected: (int popupIndex) { + model.getContactDetailsList!.sEGMENTVALUEDSP = getContactColsStructureList[index]!.objectValuesList![popupIndex].mEANING.toString(); + model.getContactDetailsList!.vARCHAR2VALUE = getContactColsStructureList[index]!.objectValuesList![popupIndex].cODE.toString(); + setState(() {}); + }); + } else { + return DynamicTextFieldWidget( + (model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""), + model!.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + onChange: (text) { + model!.getContactDetailsList!.sEGMENTVALUEDSP = text; + }, + ).paddingOnly(bottom: 12); + } + } else if (model.dATATYPE == "DATE") { + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model!.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + suffixIconData: Icons.calendar_today, + isEnable: false, + onTap: () async { + DateTime dateValue = await _selectDate(context); + date = DateFormat('yyyy/MM/dd').format(dateValue); + model!.getContactDetailsList!.sEGMENTVALUEDSP = date; + setState(() {}); + }, + ).paddingOnly(bottom: 12); + } + return Container(); + } + + Widget parseDynamicFormatTypeBasicDetDff(GetBasicDetDffStructureList? model, int index) { + if (model!.dISPLAYFLAG != "N") { + } else { + return const SizedBox(); + } + if (model!.fORMATTYPE == "C") { + if (model!.eSERVICESVS?.isNotEmpty ?? false) { + return PopupMenuButton( + child: DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + isEnable: false, + isPopup: true, + ).paddingOnly(bottom: 12), + itemBuilder: (_) => >[ + for (int i = 0; i < getBasicDetDffStructureList[index]!.eSERVICESVS!.length; i++) + PopupMenuItem(child: Text(getBasicDetDffStructureList[index]!.eSERVICESVS![i].vALUECOLUMNNAME.toString()), value: i), + ], + onSelected: (int popupIndex) { + model.getContactDetailsList!.sEGMENTVALUEDSP = getBasicDetDffStructureList[index]!.eSERVICESVS![popupIndex].vALUECOLUMNNAME.toString(); + model.getContactDetailsList!.vARCHAR2VALUE = getBasicDetDffStructureList[index]!.eSERVICESVS![popupIndex].iDCOLUMNNAME.toString(); + + setState(() {}); + }); + } else { + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + onChange: (text) { + model.getContactDetailsList!.sEGMENTVALUEDSP = text; + }, + ).paddingOnly(bottom: 12); + } + } else if (model.fORMATTYPE == "X") { + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model!.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + suffixIconData: Icons.calendar_today, + isEnable: false, + onTap: () async { + DateTime dateValue = await _selectDate(context); + date = DateFormat('yyyy/MM/dd').format(dateValue); + model!.getContactDetailsList!.sEGMENTVALUEDSP = date; + setState(() {}); + }, + ).paddingOnly(bottom: 12); + } + return Container(); + } + + Widget parseDynamicFormatTypeContactDff(GetContactDffStructureList? model, int index) { + if (model!.dISPLAYFLAG != "N") { + } else { + return const SizedBox(); + } + if (model!.fORMATTYPE == "C") { + if (model.eSERVICESVS?.isNotEmpty ?? false) { + return PopupMenuButton( + child: DynamicTextFieldWidget( + (model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""), + model!.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + isEnable: false, + isPopup: true, + ).paddingOnly(bottom: 12), + itemBuilder: (_) => >[ + for (int i = 0; i < getContactDffStructureList[index]!.eSERVICESVS!.length; i++) + PopupMenuItem(child: Text(getContactDffStructureList[index]!.eSERVICESVS![i].vALUECOLUMNNAME.toString()), value: i), + ], + onSelected: (int popupIndex) { + model.getContactDetailsList!.sEGMENTVALUEDSP = getContactDffStructureList[index]!.eSERVICESVS![popupIndex].vALUECOLUMNNAME.toString(); + model.getContactDetailsList!.vARCHAR2VALUE = getContactDffStructureList[index]!.eSERVICESVS![popupIndex].iDCOLUMNNAME.toString(); + setState(() {}); + }); + } else { + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + onChange: (text) { + model.getContactDetailsList!.sEGMENTVALUEDSP = text; + }, + ).paddingOnly(bottom: 12); + } + } else if (model.fORMATTYPE == "X") { + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model!.getContactDetailsList!.sEGMENTVALUEDSP ?? "", + suffixIconData: Icons.calendar_today, + isEnable: false, + onTap: () async { + DateTime dateValue = await _selectDate(context); + date = DateFormat('yyyy/MM/dd').format(dateValue); + model!.getContactDetailsList!.sEGMENTVALUEDSP = date; + setState(() {}); + }, + ).paddingOnly(bottom: 12); + } + return Container(); + } + + DateTime selectedDate = DateTime.now(); + + Future _selectDate(BuildContext context) async { + DateTime time = selectedDate; + if (!Platform.isIOS) { + await showCupertinoModalPopup( + context: context, + builder: (cxt) => Container( + height: 250, + color: Colors.white, + child: CupertinoDatePicker( + backgroundColor: Colors.white, + mode: CupertinoDatePickerMode.date, + onDateTimeChanged: (value) { + if (value != null && value != selectedDate) { + time = value; + } + }, + initialDateTime: selectedDate, + ), + ), + ); + } else { + final DateTime? picked = + await showDatePicker(context: context, initialDate: selectedDate, initialEntryMode: DatePickerEntryMode.calendarOnly, firstDate: DateTime(2015, 8), lastDate: DateTime(2101)); + if (picked != null && picked != selectedDate) { + time = picked; + } + } + return time; + } + + Widget footer() { + return Container( + color: MyColors.white, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + color: MyColors.gradiantEndColor, + margin: EdgeInsets.only(bottom: 20, top: 20), + padding: EdgeInsets.only(left: 50, right: 50), + child: TextButton( + style: TextButton.styleFrom( + primary: MyColors.white, + onSurface: MyColors.white, + backgroundColor: MyColors.gradiantEndColor, + ), + onPressed: () { + submitUpdateForm(); + }, + child: Text( + LocaleKeys.next.tr(), + style: TextStyle(fontStyle: FontStyle.normal, fontSize: 16, color: Colors.white, fontWeight: FontWeight.w600), + ), + )), + ], + ), + ); + } + + void submitUpdateForm() async { + try { + List> values1 = getBasicDetDffStructureList!.map((e) { + String? dateVal = ''; + String? vatcherVal = ''; + int? numberVal; + if (e!.fORMATTYPE == 'N') { + dateVal = null; + vatcherVal = null; + numberVal = e!.getContactDetailsList!.nUMBERVALUE; + } else if (e.fORMATTYPE == 'X') { + dateVal = e!.getContactDetailsList!.dATEVALUE.toString(); + vatcherVal = null; + numberVal = null; + } else { + dateVal = null; + vatcherVal = e!.getContactDetailsList!.vARCHAR2VALUE.toString(); + numberVal = null; + } + return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: vatcherVal.toString()).toJson(); + }).toList(); + List> values2 = getContactDffStructureList!.map((e) { + //String tempVar = e!.getContactDetailsList!.vARCHAR2VALUE ?? ""; + String? dateVal = ''; + String? vatcherVal = ''; + int? numberVal; + if (e!.fORMATTYPE == 'N') { + dateVal = null; + vatcherVal = null; + numberVal = e!.getContactDetailsList!.nUMBERVALUE; + } else if (e.fORMATTYPE == 'X') { + dateVal = e!.getContactDetailsList!.dATEVALUE.toString(); + vatcherVal = null; + numberVal = null; + } else { + dateVal = null; + numberVal = null; + vatcherVal = e!.getContactDetailsList!.vARCHAR2VALUE.toString(); + } + return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: vatcherVal.toString()).toJson(); + }).toList(); + List> values3 = getContactColsStructureList!.map((e) { + // String tempVar = e!.getContactDetailsList!.sEGMENTVALUEDSP ?? ""; + String? dateVal = ''; + String? vatcherVal = ''; + int? numberVal; + if (e!.dATATYPE == 'VARCHAR2') { + dateVal = null; + numberVal = null; + vatcherVal = e!.getContactDetailsList!.vARCHAR2VALUE.toString(); + } else if (e.dATATYPE == 'DATE') { + dateVal = e!.getContactDetailsList!.dATEVALUE.toString(); + vatcherVal = null; + numberVal = null; + } else if (e.dATATYPE == 'NUMBER') { + dateVal = null; + vatcherVal = null; + numberVal = e!.getContactDetailsList!.nUMBERVALUE; + } else {} + return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: vatcherVal.toString()).toJson(); + }).toList(); + List> valuesFinal = [...values1, ...values2, ...values3]; + Utils.showLoading(context); + if (args['actionType'] == "ADD") { + var relationID = null; + submitContactTransactionList = await ProfileApiClient().submetConatctTransactionAddAndUpdate(args['actionType'], relationID, valuesFinal); + } else if (args['actionType'] == "UPDATE") { + submitContactTransactionList = await ProfileApiClient().submetConatctTransactionAddAndUpdate(args['actionType'], args['relationID'], valuesFinal); + } + var transactionId = submitContactTransactionList!.pTRANSACTIONID; + var itemKey = submitContactTransactionList!.pITEMKEY; + Utils.hideLoading(context); + Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, + arguments: RequestSubmitScreenParams(LocaleKeys.profile_familyDetails.tr(), transactionId!.toInt(), itemKey.toString(), 'family_member')); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } +} diff --git a/lib/ui/profile/basic_details.dart b/lib/ui/profile/basic_details.dart index e74d21d..eae5c3d 100644 --- a/lib/ui/profile/basic_details.dart +++ b/lib/ui/profile/basic_details.dart @@ -1,15 +1,20 @@ import 'package:easy_localization/src/public_ext.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/profile_api_client.dart'; +import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; -import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart'; +import 'package:mohem_flutter_app/models/member_information_list_model.dart'; +import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; +import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; +import 'package:provider/provider.dart'; class BasicDetails extends StatefulWidget { const BasicDetails({Key? key}) : super(key: key); @@ -17,6 +22,7 @@ class BasicDetails extends StatefulWidget { @override _BasicDetailsState createState() => _BasicDetailsState(); } +// TODO(Sultan): kindly follow structure of code written. use extension methods for widgets, use localization and format code class _BasicDetailsState extends State { String? fullName = ""; @@ -25,12 +31,17 @@ class _BasicDetailsState extends State { String? civilIdentityNumber = ""; String? emailAddress = ""; String? employeeNo = ""; - + int correctOrNew = 1; List getEmployeeBasicDetailsList = []; - + late MemberInformationListModel memberInformationList; + GetMenuEntriesList menuEntries = GetMenuEntriesList(); @override void initState() { super.initState(); + memberInformationList = AppState().memberInformationList!; + List menuData = Provider.of(context, listen: false).getMenuEntriesList!; + + menuEntries = menuData.where((e) => e.requestType == 'BASIC_DETAILS').toList()[0]; getEmployeeBasicDetails(); basicDetails(); } @@ -41,8 +52,6 @@ class _BasicDetailsState extends State { getEmployeeBasicDetailsList = await ProfileApiClient().getEmployeeBasicDetails(); Utils.hideLoading(context); basicDetails(); - print("getEmployeeBasicDetailsList.length"); - print(getEmployeeBasicDetailsList.length); setState(() {}); } catch (ex) { Utils.hideLoading(context); @@ -50,7 +59,7 @@ class _BasicDetailsState extends State { } } - basicDetails() { + void basicDetails() { for (int i = 0; i < getEmployeeBasicDetailsList.length; i++) { if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'FULL_NAME') { fullName = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP; @@ -74,29 +83,13 @@ class _BasicDetailsState extends State { context, title: LocaleKeys.profile_basicDetails.tr(), ), - // appBar: AppBar( - // backgroundColor: MyColors.white, - // leading: Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - // children: [ - // IconButton( - // icon: const Icon( - // Icons.arrow_back_ios, - // color: MyColors.backgroundBlackColor, - // ), - // onPressed: () => Navigator.pop(context), - // ), - // "Basic Details".toText24(isBold: true, color: MyColors.blackColor), - // ], - // ), - // ), backgroundColor: MyColors.backgroundColor, bottomSheet: footer(), body: Column( children: [ Container( width: double.infinity, - margin: EdgeInsets.only(top: 20, left: 21, right: 21,bottom: 20), + margin: EdgeInsets.only(top: 20, left: 21, right: 21, bottom: 20), padding: EdgeInsets.only(left: 14, right: 14, top: 13, bottom: 5), height: 280, decoration: BoxDecoration( @@ -113,29 +106,29 @@ class _BasicDetailsState extends State { ), child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ LocaleKeys.fullName.tr().toText13(color: MyColors.lightGrayColor), - "${fullName}".toText16(isBold: true, color: MyColors.blackColor), + "$fullName".toText16(isBold: true, color: MyColors.blackColor), SizedBox( height: 20, ), LocaleKeys.maritalStatus.tr().toText13(color: MyColors.lightGrayColor), - "${maritalStatus}".toText16(isBold: true, color: MyColors.blackColor), + "$maritalStatus".toText16(isBold: true, color: MyColors.blackColor), SizedBox( height: 20, ), LocaleKeys.dateOfBirth.tr().toText13(color: MyColors.lightGrayColor), - "${birthDate}".toText16(isBold: true, color: MyColors.blackColor), + "$birthDate".toText16(isBold: true, color: MyColors.blackColor), SizedBox( height: 20, ), LocaleKeys.civilIdentityNumber.tr().toText13(color: MyColors.lightGrayColor), - "${civilIdentityNumber}".toText16(isBold: true, color: MyColors.blackColor), + "$civilIdentityNumber".toText16(isBold: true, color: MyColors.blackColor), ]), ), ], )); } - footer() { + Widget footer() { return Container( decoration: BoxDecoration( // borderRadius: BorderRadius.circular(10), @@ -144,22 +137,26 @@ class _BasicDetailsState extends State { BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3), ], ), - child: DefaultButton(LocaleKeys.update.tr(), () async { - showAlertDialog(context); - }).insideContainer, + child: DefaultButton( + LocaleKeys.update.tr(), + menuEntries.updateButton == 'Y' + ? () async { + showAlertDialog(context); + } + : null) + .insideContainer, ); } - showAlertDialog(BuildContext context) { - dynamic changeOrNew = 1; + void showAlertDialog(BuildContext context) { Widget cancelButton = TextButton( - child: Text("Cancel"), + child: Text(LocaleKeys.cancel.tr()), onPressed: () { Navigator.pop(context); }, ); Widget continueButton = TextButton( - child: Text("Next"), + child: Text(LocaleKeys.next.tr()), onPressed: () { continueDynamicForms(); }, @@ -167,7 +164,7 @@ class _BasicDetailsState extends State { StatefulBuilder alert = StatefulBuilder(builder: (context, setState) { return AlertDialog( shape: RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(10.0))), - title: Text("Confirm"), + title: Text(LocaleKeys.confirm.tr()), content: Builder(builder: (context) { // Get available height and width of the build area of this widget. Make a choice depending on the size. var height = MediaQuery.of(context).size.height * .5; @@ -175,33 +172,33 @@ class _BasicDetailsState extends State { height: height, child: Column(children: [ Text( - "Select the type of change you want to make.", + LocaleKeys.selectType.tr(), style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), ), Divider(), Column( children: [ ListTile( - title: Text("correct or complete the current details"), + title: Text(LocaleKeys.correctCurrentDatails.tr()), leading: Radio( value: 1, - groupValue: changeOrNew, + groupValue: correctOrNew, onChanged: (value) { setState(() { - changeOrNew = int.parse(value.toString()); + correctOrNew = int.parse(value.toString()); }); }, activeColor: Colors.green, ), ), ListTile( - title: Text("Enter new Information because of a real change to the current details (e.g because of a change in marital status)"), + title: Text(LocaleKeys.enterNewInfo.tr()), leading: Radio( value: 2, - groupValue: changeOrNew, + groupValue: correctOrNew, onChanged: (value) { setState(() { - changeOrNew = int.parse(value.toString()); + correctOrNew = int.parse(value.toString()); }); }, activeColor: Colors.green, @@ -229,6 +226,6 @@ class _BasicDetailsState extends State { void continueDynamicForms() { Navigator.pushNamed(context, AppRoutes.addDynamicInputProfile, arguments: DynamicProfileParams(LocaleKeys.profile_basicDetails.tr(), 'HR_PERINFO_SS', - uRL: 'GET_BASIC_DET_DFF_STRUCTURE', requestID: 'BASIC_DETAILS', getEmployeeBasicDetailsList: getEmployeeBasicDetailsList)); + uRL: 'GET_BASIC_DET_DFF_STRUCTURE', requestID: 'BASIC_DETAILS', getEmployeeBasicDetailsList: getEmployeeBasicDetailsList, correctOrNew: correctOrNew)); } } diff --git a/lib/ui/profile/contact_details.dart b/lib/ui/profile/contact_details.dart index d4927cf..034292d 100644 --- a/lib/ui/profile/contact_details.dart +++ b/lib/ui/profile/contact_details.dart @@ -3,17 +3,20 @@ import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/profile_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/config/routes.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; -import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart'; import 'package:mohem_flutter_app/models/get_employee_address_model.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; import 'package:mohem_flutter_app/models/get_employee_phones_model.dart'; +import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; +import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_address_screen.dart'; import 'package:mohem_flutter_app/ui/profile/phone_numbers.dart'; -import 'package:mohem_flutter_app/ui/profile/profile.dart'; +import 'package:mohem_flutter_app/ui/screens/profile/profile_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; +import 'package:provider/provider.dart'; class ContactDetails extends StatefulWidget { const ContactDetails({Key? key}) : super(key: key); @@ -29,14 +32,20 @@ class _ContactDetailsState extends State { String? civilIdentityNumber = ""; String? emailAddress = ""; String? employeeNo = ""; - + int? correctOrNew = 1; List getEmployeePhonesList = []; List getEmployeeAddressList = []; + List getEmployeeBasicDetailsList = []; + GetMenuEntriesList menuEntriesPhone = GetMenuEntriesList(); + GetMenuEntriesList menuEntriesAddress = GetMenuEntriesList(); @override void initState() { super.initState(); + List menuData = Provider.of(context, listen: false).getMenuEntriesList!; + menuEntriesPhone = menuData.where((GetMenuEntriesList e) => e.requestType == 'PHONE_NUMBERS').toList()[0]; + menuEntriesAddress = menuData.where((GetMenuEntriesList e) => e.requestType == 'ADDRESS').toList()[0]; getEmployeePhones(); setState(() {}); @@ -74,7 +83,7 @@ class _ContactDetailsState extends State { title: LocaleKeys.profile_contactDetails.tr(), ), backgroundColor: MyColors.backgroundColor, - bottomSheet: footer(), + // bottomSheet: footer(), body: SingleChildScrollView( child: Column(children: [ Container( @@ -84,7 +93,7 @@ class _ContactDetailsState extends State { left: 26, right: 26, ), - padding: EdgeInsets.only(left: 14, right: 14, top: 5, bottom: 20), + padding: EdgeInsets.all(15), ///height: 200, decoration: BoxDecoration( @@ -99,19 +108,21 @@ class _ContactDetailsState extends State { color: Colors.white, borderRadius: BorderRadius.circular(10.0), ), - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + child: Stack(children: [ Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - IconButton( - icon: Icon( - Icons.edit_location_alt_outlined, - size: 20, - ), - onPressed: () { - updatePhone(); - }, - ) + menuEntriesPhone.updateButton == 'Y' + ? IconButton( + icon: Icon( + Icons.edit_location_alt_outlined, + size: 20, + ), + onPressed: () { + updatePhone(); + }, + ) + : Container() ], ), Column( @@ -122,17 +133,7 @@ class _ContactDetailsState extends State { "${e.pHONENUMBER}".toText16(isBold: true, color: MyColors.blackColor), ])) .toList()) - ]) - - // [ - // "${getEmployeePhonesList[0].pHONETYPEMEANING}".toText13(color: MyColors.lightGrayColor), - // "${getEmployeePhonesList[0].pHONENUMBER}".toText16(isBold: true, color: MyColors.blackColor), - // SizedBox( - // height: 20,), - // "${getEmployeePhonesList[1].pHONETYPEMEANING}".toText13(color: MyColors.lightGrayColor), - // "${getEmployeePhonesList[1].pHONENUMBER}".toText16(isBold: true, color: MyColors.blackColor), - // ] - ), + ])), Container( width: double.infinity, margin: EdgeInsets.only( @@ -140,8 +141,8 @@ class _ContactDetailsState extends State { left: 26, right: 26, ), - padding: EdgeInsets.only(left: 14, right: 14, top: 5, bottom: 20), - height: 400, + padding: EdgeInsets.all(15), + // height: 400, decoration: BoxDecoration( boxShadow: [ BoxShadow( @@ -154,17 +155,21 @@ class _ContactDetailsState extends State { color: Colors.white, borderRadius: BorderRadius.circular(10.0), ), - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + child: Stack(children: [ Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - IconButton( - icon: Icon( - Icons.edit_location_alt_outlined, - size: 20, - ), - onPressed: () {}, - ) + menuEntriesAddress.updateButton == 'Y' + ? IconButton( + icon: Icon( + Icons.edit_location_alt_outlined, + size: 20, + ), + onPressed: () { + addUpdateAddress(); + }, + ) + : Container() ], ), Column( @@ -179,40 +184,10 @@ class _ContactDetailsState extends State { ])) .toList()) ])) - // "${getEmployeeAddressList[0].sEGMENTPROMPT}".toText13(color: MyColors.lightGrayColor), - // "${getEmployeeAddressList[0].sEGMENTVALUEDSP}".toText16(isBold: true, color: MyColors.blackColor), - // SizedBox( - // height: 20, - // ), - // "${getEmployeeAddressList[2].sEGMENTPROMPT}".toText13(color: MyColors.lightGrayColor), - // "${getEmployeeAddressList[2].sEGMENTVALUEDSP}".toText16(isBold: true, color: MyColors.blackColor), - // SizedBox( - // height: 20, - // ), - // "${getEmployeeAddressList[3].sEGMENTPROMPT}".toText13(color: MyColors.lightGrayColor), - // "${getEmployeeAddressList[3].sEGMENTVALUEDSP}".toText16(isBold: true, color: MyColors.blackColor), - // SizedBox( - // height: 20, - // ), - // "${getEmployeeAddressList[4].sEGMENTPROMPT}".toText13(color: MyColors.lightGrayColor), - // "${getEmployeeAddressList[4].sEGMENTVALUEDSP}".toText16(isBold: true, color: MyColors.blackColor), - // SizedBox( - // height: 20, - // ), - // "${getEmployeeAddressList[5].sEGMENTPROMPT}".toText13(color: MyColors.lightGrayColor), - // "${getEmployeeAddressList[5].sEGMENTVALUEDSP}".toText16(isBold: true, color: MyColors.blackColor), - // SizedBox( - // height: 20, - // ), - // "${getEmployeeAddressList[6].sEGMENTPROMPT}".toText13(color: MyColors.lightGrayColor), - // "${getEmployeeAddressList[6].sEGMENTVALUEDSP}".toText16(isBold: true, color: MyColors.blackColor), - //]), - //), - //], ]))); } - footer() { + Widget footer() { return Container( decoration: BoxDecoration( // borderRadius: BorderRadius.circular(10), @@ -223,15 +198,96 @@ class _ContactDetailsState extends State { ), child: DefaultButton(LocaleKeys.update.tr(), () async { // context.setLocale(const Locale("en", "US")); // to change Loacle - Profile(); + ProfileScreen(); }).insideContainer, ); } - updatePhone() { + void updatePhone() { Navigator.push( context, MaterialPageRoute(builder: (context) => PhoneNumbers(getEmployeePhonesList: this.getEmployeePhonesList)), ); } + + void addUpdateAddress() { + Widget cancelButton = TextButton( + child: Text("Cancel"), + onPressed: () { + Navigator.pop(context); + }, + ); + Widget continueButton = TextButton( + child: Text("Next"), + onPressed: () { + continueDynamicForms(); + }, + ); + StatefulBuilder alert = StatefulBuilder(builder: (context, setState) { + return AlertDialog( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(10.0))), + title: Text("Confirm"), + content: Builder(builder: (context) { + // Get available height and width of the build area of this widget. Make a choice depending on the size. + var height = MediaQuery.of(context).size.height * .5; + return Container( + height: height, + child: Column(children: [ + Text( + "Select the type of change you want to make.", + style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), + ), + Divider(), + Column( + children: [ + ListTile( + title: Text("Correct or amend this address"), + leading: Radio( + value: 1, + groupValue: correctOrNew, + onChanged: (value) { + setState(() { + correctOrNew = int.parse(value.toString()); + }); + }, + activeColor: Colors.green, + ), + ), + ListTile( + title: Text("Enter a new address if you have moved"), + leading: Radio( + value: 2, + groupValue: correctOrNew, + onChanged: (value) { + setState(() { + correctOrNew = int.parse(value.toString()); + }); + }, + activeColor: Colors.green, + ), + ), + ], + ) + ])); + }), + actions: [ + cancelButton, + continueButton, + ], + ); + }); + + showDialog( + context: context, + builder: (BuildContext context) { + return alert; + }, + ); + } + + void continueDynamicForms() { + Navigator.pushNamed(context, AppRoutes.addDynamicAddressScreen, + arguments: DynamicProfileParams(LocaleKeys.profile_address.tr(), 'HR_PERINFO_SS', + uRL: 'GET_ADDRESS_DFF_STRUCTURE', requestID: 'BASIC_DETAILS', getEmployeeAddressList: getEmployeeAddressList, correctOrNew: correctOrNew!)); + } } diff --git a/lib/ui/profile/delete_familyMember.dart b/lib/ui/profile/delete_familyMember.dart deleted file mode 100644 index 4876ef3..0000000 --- a/lib/ui/profile/delete_familyMember.dart +++ /dev/null @@ -1,74 +0,0 @@ - - -import 'package:easy_localization/src/public_ext.dart'; -import 'package:flutter/material.dart'; -import 'package:mohem_flutter_app/api/profile_api_client.dart'; -import 'package:mohem_flutter_app/classes/colors.dart'; -import 'package:mohem_flutter_app/classes/utils.dart'; -import 'package:mohem_flutter_app/config/routes.dart'; -import 'package:mohem_flutter_app/dialogs/otp_dialog.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_employee_basic_details.model.dart'; -import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; -import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart'; -import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart'; -import 'package:mohem_flutter_app/ui/profile/profile.dart'; -import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; -import 'package:mohem_flutter_app/widgets/button/default_button.dart'; - -class DeleteFamilyMember extends StatefulWidget { - const DeleteFamilyMember({Key? key}) : super(key: key); - - @override - _DeleteFamilyMemberState createState() => _DeleteFamilyMemberState(); -} - -class _DeleteFamilyMemberState extends State { - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBarWidget( - context, - title: "Dependents And Beneficiaries", - ), - backgroundColor: MyColors.backgroundColor, - bottomSheet: footer(), - body:Column( - children: [ - - ], - ) - - ); - } - footer() { - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Container( - color: MyColors.gradiantEndColor, - // margin: EdgeInsets.only(left: 50,right: 20), - padding: EdgeInsets.only(left: 50,right: 50), - child: TextButton( - style: TextButton.styleFrom( - primary:MyColors.white, - onSurface: MyColors.white, - backgroundColor: MyColors.gradiantEndColor, - ), - onPressed: (){}, - child: Text('Next', - style: TextStyle( - fontStyle: FontStyle.normal, - fontSize: 16, - color: Colors.white, - fontWeight: FontWeight.w600 - ),), - ) - ), - ], - ); - } -} diff --git a/lib/ui/profile/delete_family_member.dart b/lib/ui/profile/delete_family_member.dart new file mode 100644 index 0000000..58ec825 --- /dev/null +++ b/lib/ui/profile/delete_family_member.dart @@ -0,0 +1,152 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/profile_api_client.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/config/routes.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/models/get_approves_list_model.dart'; +import 'package:mohem_flutter_app/models/profile/submit_contact_transaction_list_model.dart'; +import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'dart:io'; +import 'package:flutter/cupertino.dart'; +import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; + +class DeleteFamilyMember extends StatefulWidget { + int relationId; + DeleteFamilyMember(@required this.relationId, {Key? key}) : super(key: key); + + @override + _DeleteFamilyMemberState createState() => _DeleteFamilyMemberState(); +} + +class _DeleteFamilyMemberState extends State { + String pFunctionName = "HR_PERINFO_SS"; + String actionType = "DELETE"; + // int? contactRelationId; + String? date = "MM/DD/YYYY"; + String? datePar; + // String? itemKey; + + SubmitContactTransactionList? submitContactTransactionList; + GetApprovesList? getApprovesList; + + //int? relationId; + @override + void initState() { + print(widget.relationId); + super.initState(); + } + + void deleteFamilyMember(datePar) async { + try { + Utils.showLoading(context); + submitContactTransactionList = await ProfileApiClient().submetConatctTransaction(pFunctionName.toString(), actionType.toString(), widget.relationId!.toInt(), datePar.toString()); + var transactionId = submitContactTransactionList!.pTRANSACTIONID; + var itemKey = submitContactTransactionList!.pITEMKEY; + Utils.hideLoading(context); + // getApprovesList = await ProfileApiClient().getApproves(transactionId!.toInt(), itemKey.toString() ); + Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, + arguments: RequestSubmitScreenParams(LocaleKeys.profile_familyDetails.tr(), transactionId!.toInt(), itemKey.toString(), 'family_member')); + + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBarWidget( + context, + title: LocaleKeys.profile_familyDetails.tr(), + ), + backgroundColor: MyColors.backgroundColor, + bottomSheet: footer(), + body: Column( + children: [ + DynamicTextFieldWidget( + LocaleKeys.endDate.tr(), date.toString(), + // suffixIconData: Icons.calendar_today, + isEnable: false, + onTap: () async { + DateTime dateValue = await _selectDate(context); + // DateTime date1 = DateTime(dateValue.year, dateValue.month, dateValue.day); + date = DateFormat('yyyy/MM/dd').format(dateValue); + datePar = DateFormat('yyyy/MM/dd hh:mm:ss').format(dateValue); + setState(() {}); + // if (date !=null) { + // print(datePar); + // deleteFamilyMember(datePar); + // } + }, + ).paddingOnly(bottom: 12) + ], + )); + } + + Widget footer() { + return Container( + color: MyColors.white, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + color: MyColors.gradiantEndColor, + margin: EdgeInsets.only(bottom: 20, top: 20), + padding: EdgeInsets.only(left: 50, right: 50), + child: TextButton( + style: TextButton.styleFrom( + primary: MyColors.white, + onSurface: MyColors.white, + backgroundColor: MyColors.gradiantEndColor, + ), + onPressed: () { + deleteFamilyMember(datePar); + }, + child: Text( + LocaleKeys.next.tr(), + style: TextStyle(fontStyle: FontStyle.normal, fontSize: 16, color: Colors.white, fontWeight: FontWeight.w600), + ), + )), + ], + ), + ); + } + + DateTime selectedDate = DateTime.now(); + + Future _selectDate(BuildContext context) async { + DateTime time = selectedDate; + if (!Platform.isIOS) { + await showCupertinoModalPopup( + context: context, + builder: (cxt) => Container( + height: 250, + color: Colors.white, + child: CupertinoDatePicker( + backgroundColor: Colors.white, + mode: CupertinoDatePickerMode.date, + onDateTimeChanged: (value) { + if (value != null && value != selectedDate) { + time = value; + } + }, + initialDateTime: selectedDate, + ), + ), + ); + } else { + final DateTime? picked = + await showDatePicker(context: context, initialDate: selectedDate, initialEntryMode: DatePickerEntryMode.calendarOnly, firstDate: DateTime(2015, 8), lastDate: DateTime(2101)); + if (picked != null && picked != selectedDate) { + time = picked; + } + } + return time; + } +} diff --git a/lib/ui/profile/dynamic_screens/dynamic_input_address_screen.dart b/lib/ui/profile/dynamic_screens/dynamic_input_address_screen.dart new file mode 100644 index 0000000..c4dadd2 --- /dev/null +++ b/lib/ui/profile/dynamic_screens/dynamic_input_address_screen.dart @@ -0,0 +1,336 @@ +import 'dart:io'; + +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/my_attendance_api_client.dart'; +import 'package:mohem_flutter_app/api/profile_api_client.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/config/routes.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/models/dyanmic_forms/get_set_values_request_model.dart'; +import 'package:mohem_flutter_app/models/dyanmic_forms/validate_eit_transaction_model.dart'; +import 'package:mohem_flutter_app/models/generic_response_model.dart'; +import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; +import 'package:mohem_flutter_app/models/get_employee_address_model.dart'; +import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; +import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; +import 'package:mohem_flutter_app/models/profile/basic_details_cols_structions.dart'; +import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart'; +import 'package:mohem_flutter_app/models/profile/get_address_dff_structure_list.dart'; +import 'package:mohem_flutter_app/models/profile/get_countries_list_model.dart'; +import 'package:mohem_flutter_app/models/profile/submit_address_transaction.dart'; +import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart'; +import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'package:mohem_flutter_app/widgets/button/default_button.dart'; +import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; + +class DynamicProfileParams { + String title; + String dynamicId; + String uRL; + String requestID; + String colsURL; + int correctOrNew; + List? getEmployeeAddressList; + + DynamicProfileParams(this.title, this.dynamicId, + {this.uRL = 'GET_EIT_DFF_STRUCTURE', this.requestID = '', this.colsURL = '', this.getEmployeeAddressList = const [], this.correctOrNew = 2}); +} + +class DynamicInputScreenAddress extends StatefulWidget { + DynamicInputScreenAddress({Key? key}) : super(key: key); + + @override + _DynamicInputScreenState createState() { + return _DynamicInputScreenState(); + } +} + +class _DynamicInputScreenState extends State { + GenericResponseModel? genericResponseModel; + List? getAddressDffStructureList; + SubmitAddressTransaction submitPhoneNumbers = SubmitAddressTransaction(); + DynamicProfileParams? dynamicParams; + List countriesList = []; + String dESCFLEXCONTEXTCODE = ""; + String countryCode = 'SA'; + String effectiveDate = ''; + @override + void initState() { + super.initState(); + } + + void getTransactionsStructure() async { + try { + Utils.showLoading(context); + genericResponseModel = await ProfileApiClient().getDffStructure(dynamicParams!.dynamicId, dynamicParams!.uRL, dynamicParams!.requestID); + getAddressDffStructureList = genericResponseModel?.getAddressDffStructureList ?? []; + + if (dynamicParams!.correctOrNew == 1) { + getAddressDffStructureList?.forEach((element) { + dynamicParams!.getEmployeeAddressList!.forEach((userDetail) { + if (userDetail.aPPLICATIONCOLUMNNAME == element.aPPLICATIONCOLUMNNAME) { + element.getEmployeeAddressList = userDetail; + } + }); + }); + } else { + getAddressDffStructureList!.insert(0, GetAddressDffStructureList(fORMATTYPE: 'X', sEGMENTPROMPT: LocaleKeys.profile_effectiveDate.tr())); + countriesList = await ProfileApiClient().getCountriesList(); + List eSerivceList = []; + countriesList.forEach((element) { + eSerivceList.add(ESERVICESVS( + dESCRIPTION: element.cOUNTRYCODE, + vALUECOLUMNNAME: element.cOUNTRYNAME, + )); + }); + getAddressDffStructureList! + .insert(1, GetAddressDffStructureList(fORMATTYPE: 'C', sEGMENTPROMPT: LocaleKeys.profile_country.tr(), eSERVICESVS: eSerivceList, getEmployeeAddressList: GetEmployeeAddressList())); + } + print(getAddressDffStructureList); + // genericResponseModel = await ProfileApiClient().getColStructure(dynamicParams!.dynamicId, 'GET_BASIC_DET_COLS_STRUCTURE', dynamicParams!.requestID); + // getBasicDetColsStructureList = genericResponseModel?.getBasicDetColsStructureList ?? []; + // getBasicDetColsStructureList?.forEach((element) { + // element.userBasicDetail = dynamicParams!.getEmployeeBasicDetailsList!.singleWhere((userDetail) => userDetail.aPPLICATIONCOLUMNNAME == element.aPPLICATIONCOLUMNNAME); + // }); + Utils.hideLoading(context); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + void calGetValueSetValues(GetAddressDffStructureList structureList) async { + try { + Utils.showLoading(context); + String segmentId = structureList.cHILDSEGMENTSVS!; + List filteredList = getAddressDffStructureList?.where((element) => element.cHILDSEGMENTSVS == segmentId).toList() ?? []; + List> values = filteredList + .map((e) => GetSetValuesRequestModel( + sEGMENTNAME: e.sEGMENTNAME, vALUECOLUMNNAME: e.eSERVICESDV!.pVALUECOLUMNNAME, dESCRIPTION: "", iDCOLUMNNAME: e.eSERVICESDV!.pIDCOLUMNNAME, fLEXVALUESETNAME: e.fLEXVALUESETNAME) + .toJson()) + .toList(); + ESERVICESVS genericResponseModel = await MyAttendanceApiClient().getValueSetValues(structureList.cHILDSEGMENTSVS!, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, values); + + int index = getAddressDffStructureList!.indexWhere((element) => element.sEGMENTNAME == structureList.cHILDSEGMENTSVS); + getAddressDffStructureList![index].eSERVICESVS!.add(genericResponseModel); + // getEitDffStructureList = genericResponseModel?.getEITDFFStructureList ?? []; + //getEitDffStructureList = getEitDffStructureList!.where((element) => element.dISPLAYFLAG != "N").toList(); + Utils.hideLoading(context); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + if (dynamicParams == null) { + dynamicParams = ModalRoute.of(context)!.settings.arguments as DynamicProfileParams; + getTransactionsStructure(); + } + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBarWidget( + context, + title: dynamicParams!.title, + ), + body: Column( + children: [ + (getAddressDffStructureList == null + ? const SizedBox() + : (getAddressDffStructureList!.isEmpty + ? LocaleKeys.noDataAvailable.tr().toText16().center + : ListView( + physics: const BouncingScrollPhysics(), + padding: const EdgeInsets.all(21), + children: [ + 12.height, + ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (BuildContext cxt, int parentIndex) { + return parseDynamicFormatType(getAddressDffStructureList![parentIndex], parentIndex); + }, + separatorBuilder: (cxt, index) => 0.height, + itemCount: getAddressDffStructureList!.length), + ], + ))) + .expanded, + // 12.height, + DefaultButton( + LocaleKeys.next.tr(), + (getAddressDffStructureList ?? []).isEmpty ? null : () => {validateTransaction()}, + ).insideContainer, + ], + ), + ); + } + + Widget parseDynamicFormatType(GetAddressDffStructureList model, int index) { + if (model.dISPLAYFLAG != "N") { + if (model.fORMATTYPE == "C") { + if (model.eSERVICESVS?.isNotEmpty ?? false) { + return PopupMenuButton( + child: DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model?.getEmployeeAddressList!.sEGMENTVALUEDSP ?? "", + isEnable: false, + isPopup: true, + ).paddingOnly(bottom: 12), + itemBuilder: (_) => >[ + for (int i = 0; i < model.eSERVICESVS!.length; i++) PopupMenuItem(child: Text(model.eSERVICESVS![i].vALUECOLUMNNAME!), value: i), + ], + onSelected: (int popupIndex) { + model?.getEmployeeAddressList!.sEGMENTVALUEDSP = model.eSERVICESVS![popupIndex].vALUECOLUMNNAME; + model?.getEmployeeAddressList!.vARCHAR2VALUE = model.eSERVICESVS![popupIndex].dESCRIPTION; + setState(() {}); + }); + } + + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model.getEmployeeAddressList?.sEGMENTVALUEDSP ?? "", + isReadOnly: model.rEADONLY == "Y", + onChange: (text) { + model.getEmployeeAddressList?.sEGMENTVALUEDSP = text; + }, + ).paddingOnly(bottom: 12); + } else if (model.fORMATTYPE == "N") { + if (model.eSERVICESVS?.isNotEmpty ?? false) { + return PopupMenuButton( + child: DynamicTextFieldWidget((model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), model?.getEmployeeAddressList!.sEGMENTVALUEDSP ?? "", + isEnable: false, isPopup: true, isInputTypeNum: true) + .paddingOnly(bottom: 12), + itemBuilder: (_) => >[ + for (int i = 0; i < model.eSERVICESVS!.length; i++) PopupMenuItem(child: Text(model.eSERVICESVS![i].dESCRIPTION!), value: i), + ], + onSelected: (int popupIndex) { + model?.getEmployeeAddressList!.sEGMENTVALUEDSP = model.eSERVICESVS![popupIndex].dESCRIPTION; + model?.getEmployeeAddressList!.vARCHAR2VALUE = model.eSERVICESVS![popupIndex].vALUECOLUMNNAME; + setState(() {}); + }); + } + + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model.getEmployeeAddressList?.sEGMENTVALUEDSP ?? "", + isReadOnly: model.rEADONLY == "Y", + onChange: (text) { + model.getEmployeeAddressList?.sEGMENTVALUEDSP = text; + }, + ).paddingOnly(bottom: 12); + } else if (model.fORMATTYPE == "X") { + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model.eSERVICESDV?.pIDCOLUMNNAME ?? (getAddressDffStructureList![index].dESCFLEXCONTEXTNAME ?? ""), + suffixIconData: Icons.calendar_today, + isEnable: false, + onTap: () async { + DateTime date = await _selectDate(context); + DateTime date1 = DateTime(date.year, date.month, date.day); + getAddressDffStructureList![index].dESCFLEXCONTEXTNAME = date.toString(); + ESERVICESDV eservicesdv = ESERVICESDV( + pIDCOLUMNNAME: DateFormat('yyyy-MM-dd').format(date1), + pRETURNMSG: "null", + pRETURNSTATUS: getAddressDffStructureList![index].dEFAULTVALUE, + pVALUECOLUMNNAME: DateFormat('yyyy-MM-ddThh:mm:ss.s').format(date)); + getAddressDffStructureList![index].eSERVICESDV = eservicesdv; + setState(() {}); + if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) { + calGetValueSetValues(model); + } + }, + ).paddingOnly(bottom: 12); + } + + return const SizedBox(); + } else { + return const SizedBox(); + } + } + + void validateTransaction() async { + try { + Utils.showLoading(context); + List> values = getAddressDffStructureList!.map((e) { + String tempVar = ''; + if (e.fORMATTYPE == "X") { + // for date format type, date format is changed + tempVar = e.eSERVICESDV?.pVALUECOLUMNNAME ?? ""; + + if (tempVar.isNotEmpty) { + DateTime date = DateFormat('yyyy-MM-dd').parse(tempVar); + tempVar = DateFormat('dd/MMM/yyy').format(date); + if (e.aPPLICATIONCOLUMNNAME == null) { + effectiveDate = tempVar; + } + } + } else if (e.eSERVICESVS?.isNotEmpty ?? false) { + tempVar = e.getEmployeeAddressList!.vARCHAR2VALUE!; + if (e.aPPLICATIONCOLUMNNAME == null) { + countryCode = tempVar; + } + } else { + tempVar = e.getEmployeeAddressList!.sEGMENTVALUEDSP ?? ""; + } + + return ValidateEitTransactionModel(dATEVALUE: null, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: null, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: tempVar.toString()).toJson(); + }).toList(); + + submitPhoneNumbers = await ProfileApiClient().submitAddressTransaction(dESCFLEXCONTEXTCODE, dynamicParams!.dynamicId, values, dynamicParams!.correctOrNew, countryCode, effectiveDate); + print(values); + Utils.hideLoading(context); + + Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, + arguments: RequestSubmitScreenParams(dynamicParams!.title, submitPhoneNumbers.pTRANSACTIONID!, submitPhoneNumbers.pITEMKEY!, 'address')); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + DateTime selectedDate = DateTime.now(); + + Future _selectDate(BuildContext context) async { + DateTime time = selectedDate; + if (!Platform.isIOS) { + await showCupertinoModalPopup( + context: context, + builder: (cxt) => Container( + height: 250, + color: Colors.white, + child: CupertinoDatePicker( + backgroundColor: Colors.white, + mode: CupertinoDatePickerMode.date, + onDateTimeChanged: (value) { + if (value != null && value != selectedDate) { + time = value; + } + }, + initialDateTime: selectedDate, + ), + ), + ); + } else { + final DateTime? picked = + await showDatePicker(context: context, initialDate: selectedDate, initialEntryMode: DatePickerEntryMode.calendarOnly, firstDate: DateTime(2015, 8), lastDate: DateTime(2101)); + if (picked != null && picked != selectedDate) { + time = picked; + } + } + return time; + } +} diff --git a/lib/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart b/lib/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart similarity index 68% rename from lib/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart rename to lib/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart index 3e25917..a279305 100644 --- a/lib/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart +++ b/lib/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart @@ -1,23 +1,26 @@ import 'dart:io'; - import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/my_attendance_api_client.dart'; import 'package:mohem_flutter_app/api/profile_api_client.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/dyanmic_forms/get_set_values_request_model.dart'; +import 'package:mohem_flutter_app/models/dyanmic_forms/validate_eit_transaction_model.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; import 'package:mohem_flutter_app/models/profile/basic_details_cols_structions.dart'; import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart'; +import 'package:mohem_flutter_app/models/profile/submit_basic_details_transaction_model.dart'; +import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; @@ -29,11 +32,11 @@ class DynamicProfileParams { String uRL; String requestID; String colsURL; + int correctOrNew; List? getEmployeeBasicDetailsList; - DynamicProfileParams(this.title, this.dynamicId, - {this.uRL = 'GET_EIT_DFF_STRUCTURE', this.requestID = '', this.colsURL = '', this.getEmployeeBasicDetailsList = const []}); + {this.uRL = 'GET_EIT_DFF_STRUCTURE', this.requestID = '', this.colsURL = '', this.getEmployeeBasicDetailsList = const [], this.correctOrNew = 2}); } class DynamicInputScreenProfile extends StatefulWidget { @@ -51,6 +54,7 @@ class _DynamicInputScreenState extends State { List? getBasicDetColsStructureList; DynamicProfileParams? dynamicParams; + String dESCFLEXCONTEXTCODE = ""; @override void initState() { super.initState(); @@ -59,18 +63,27 @@ class _DynamicInputScreenState extends State { void getTransactionsStructure() async { try { Utils.showLoading(context); - genericResponseModel = await ProfileApiClient().getDffStructure(dynamicParams!.dynamicId, dynamicParams!.uRL, dynamicParams!.requestID); + genericResponseModel = await ProfileApiClient().getDffStructure("BASIC_DETAILS", dynamicParams!.uRL, dynamicParams!.requestID); getBasicDetDffStructureList = genericResponseModel?.getBasicDetDffStructureList ?? []; - - getBasicDetDffStructureList?.forEach((element) { - element.userBasicDetail = dynamicParams!.getEmployeeBasicDetailsList!.singleWhere((userDetail) => userDetail.aPPLICATIONCOLUMNNAME == element.aPPLICATIONCOLUMNNAME); - }); - genericResponseModel = await ProfileApiClient().getColStructure(dynamicParams!.dynamicId, 'GET_BASIC_DET_COLS_STRUCTURE', dynamicParams!.requestID); getBasicDetColsStructureList = genericResponseModel?.getBasicDetColsStructureList ?? []; - getBasicDetColsStructureList?.forEach((element) { - element.userBasicDetail = dynamicParams!.getEmployeeBasicDetailsList!.singleWhere((userDetail) => userDetail.aPPLICATIONCOLUMNNAME == element.aPPLICATIONCOLUMNNAME); - }); + + if (dynamicParams!.correctOrNew == 1) { + getBasicDetDffStructureList?.forEach((element) { + element.userBasicDetail = dynamicParams!.getEmployeeBasicDetailsList!.singleWhere((userDetail) => userDetail.aPPLICATIONCOLUMNNAME == element.aPPLICATIONCOLUMNNAME); + }); + getBasicDetColsStructureList?.forEach((element) { + element.userBasicDetail = dynamicParams!.getEmployeeBasicDetailsList!.singleWhere((userDetail) => userDetail.aPPLICATIONCOLUMNNAME == element.aPPLICATIONCOLUMNNAME); + }); + } else { + getBasicDetDffStructureList?.forEach((element) { + element.userBasicDetail = new GetEmployeeBasicDetailsList(); + }); + getBasicDetColsStructureList?.forEach((element) { + element.userBasicDetail = GetEmployeeBasicDetailsList(); + }); + } + Utils.hideLoading(context); setState(() {}); } catch (ex) { @@ -125,7 +138,7 @@ class _DynamicInputScreenState extends State { (getBasicDetDffStructureList == null && getBasicDetColsStructureList == null ? const SizedBox() : (getBasicDetDffStructureList!.isEmpty && getBasicDetColsStructureList!.isEmpty - ? LocaleKeys.noDataAvailable.tr().toText16().center + ? Utils.getNoDataWidget(context) : ListView( physics: const BouncingScrollPhysics(), padding: const EdgeInsets.all(21), @@ -153,11 +166,7 @@ class _DynamicInputScreenState extends State { // 12.height, DefaultButton( LocaleKeys.next.tr(), - (getBasicDetDffStructureList ?? []).isEmpty - ? null - : () => { - //Navigator.of(context).pushNamed(LOGIN_TYPE) - }, + () => {validateTransaction()}, ).insideContainer, ], ), @@ -175,7 +184,7 @@ class _DynamicInputScreenState extends State { return PopupMenuButton( child: DynamicTextFieldWidget( (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), - model.userBasicDetail?.sEGMENTVALUEDSP ?? "", + model.userBasicDetail?.aPPLICATIONCOLUMNNAME ?? "", isEnable: false, isPopup: true, ).paddingOnly(bottom: 12), @@ -183,7 +192,8 @@ class _DynamicInputScreenState extends State { for (int i = 0; i < model.eSERVICESVS!.length; i++) PopupMenuItem(child: Text(model.eSERVICESVS![i].vALUECOLUMNNAME!), value: i), ], onSelected: (int popupIndex) { - getBasicDetDffStructureList![index].userBasicDetail!.sEGMENTVALUEDSP = model.eSERVICESVS![popupIndex].vALUECOLUMNNAME!; + getBasicDetDffStructureList![index].userBasicDetail!.sEGMENTVALUEDSP = model.eSERVICESVS![popupIndex].vALUECOLUMNNAME; + getBasicDetDffStructureList![index].userBasicDetail!.aPPLICATIONCOLUMNNAME = model.eSERVICESVS![popupIndex].dESCRIPTION; setState(() {}); }); } @@ -194,7 +204,6 @@ class _DynamicInputScreenState extends State { isReadOnly: model.rEADONLY == "Y", onChange: (text) { getBasicDetDffStructureList![index].userBasicDetail!.sEGMENTVALUEDSP = text; - }, ).paddingOnly(bottom: 12); } else if (model.fORMATTYPE == "X") { @@ -237,21 +246,30 @@ class _DynamicInputScreenState extends State { if (model.dATATYPE == "VARCHAR2") { if (model.objectValuesList?.isNotEmpty ?? false) { return PopupMenuButton( - child: DynamicTextFieldWidget( - (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), - model.userBasicDetail?.sEGMENTVALUEDSP ?? "", - isEnable: false, - isPopup: true, - ).paddingOnly(bottom: 12), - itemBuilder: (_) => >[ - for (int i = 0; i < model.objectValuesList!.length; i++) PopupMenuItem(child: Text(model.objectValuesList![i].mEANING!), value: i), - ], - onSelected: (int popupIndex) { + child: DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + getBasicDetColsStructureList![index].userBasicDetail!.sEGMENTVALUEDSP ?? "", + isEnable: false, + isPopup: true, + ).paddingOnly(bottom: 12), + itemBuilder: (_) => >[ + for (int i = 0; i < model.objectValuesList!.length; i++) PopupMenuItem(child: Text(model.objectValuesList![i].mEANING!), value: i), + ], + onSelected: (int popupIndex) { + if (model.objectValuesList![popupIndex].cODE != '') { ESERVICESDV eservicesdv = - ESERVICESDV(pIDCOLUMNNAME: model.objectValuesList![index].dESCRIPTION, pRETURNMSG: "null", pRETURNSTATUS: model.oBJECTNAME, pVALUECOLUMNNAME: model.aPPLICATIONCOLUMNNAME); - getBasicDetDffStructureList![index].userBasicDetail!.sEGMENTVALUEDSP = model.objectValuesList![popupIndex].dESCRIPTION!; - setState(() {}); - }); + ESERVICESDV(pIDCOLUMNNAME: model.objectValuesList![popupIndex].mEANING, pRETURNMSG: "null", pRETURNSTATUS: model.oBJECTNAME, pVALUECOLUMNNAME: model.aPPLICATIONCOLUMNNAME); + getBasicDetColsStructureList![index].userBasicDetail!.sEGMENTVALUEDSP = model.objectValuesList![popupIndex].mEANING; + getBasicDetColsStructureList![index].userBasicDetail!.vARCHAR2VALUE = model.objectValuesList![popupIndex].cODE; + } else { + ESERVICESDV eservicesdv = + ESERVICESDV(pIDCOLUMNNAME: model.objectValuesList![popupIndex].dESCRIPTION, pRETURNMSG: "null", pRETURNSTATUS: model.oBJECTNAME, pVALUECOLUMNNAME: model.aPPLICATIONCOLUMNNAME); + getBasicDetColsStructureList![index].userBasicDetail!.sEGMENTVALUEDSP = model.objectValuesList![popupIndex].dESCRIPTION; + getBasicDetColsStructureList![index].userBasicDetail!.vARCHAR2VALUE = model.objectValuesList![popupIndex].mEANING; + } + setState(() {}); + }, + ); } return DynamicTextFieldWidget( @@ -267,13 +285,13 @@ class _DynamicInputScreenState extends State { } else if (model.dATATYPE == "DATE") { return DynamicTextFieldWidget( (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), - model.aPPLICATIONCOLUMNNAME ?? (getBasicDetColsStructureList![index].userBasicDetail?.sEGMENTVALUEDSP ?? ""), + (getBasicDetColsStructureList![index].userBasicDetail?.dATEVALUE ?? ""), suffixIconData: Icons.calendar_today, isEnable: false, onTap: () async { DateTime date = await _selectDate(context); DateTime date1 = DateTime(date.year, date.month, date.day); - getBasicDetColsStructureList![index].userBasicDetail?.sEGMENTVALUEDSP = date.toString(); + getBasicDetColsStructureList![index].userBasicDetail?.dATEVALUE = date.toString(); // ESERVICESDV eservicesdv = ESERVICESDV( // pIDCOLUMNNAME: DateFormat('yyyy-MM-dd').format(date1), // pRETURNMSG: "null", @@ -326,4 +344,49 @@ class _DynamicInputScreenState extends State { } return time; } + + void validateTransaction() async { + try { + Utils.showLoading(context); + int numberValue = 0; + List> values = getBasicDetDffStructureList!.map((e) { + String tempVar = e.userBasicDetail!.vARCHAR2VALUE ?? ""; + + if (e.fORMATTYPE == "X") { + // for date format type, date format is changed + tempVar = e.eSERVICESDV?.pVALUECOLUMNNAME ?? ""; + if (tempVar.isNotEmpty) { + DateTime date = DateFormat('yyyy-MM-dd').parse(tempVar); + tempVar = DateFormat('yyyy/MM/dd HH:mm:ss').format(date); + } + } + return ValidateEitTransactionModel(dATEVALUE: null, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: null, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: tempVar.toString()).toJson(); + }).toList(); + + values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_ACTION", nUMBERVALUE: null, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: "NEW_ROW").toJson()); + values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_EXTRA_INFO_ID", nUMBERVALUE: -1, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: null).toJson()); + //values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_OBJECT_VERSION_NUMBER", nUMBERVALUE: 0, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: null).toJson()); + List> valuesCols = getBasicDetColsStructureList!.map((e) { + if (e.dATATYPE == 'NUMBER') { + numberValue = e.userBasicDetail!.nUMBERVALUE!; + } + return ValidateEitTransactionModel( + dATEVALUE: e.userBasicDetail!.dATEVALUE ?? "", nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberValue, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: e.userBasicDetail!.vARCHAR2VALUE ?? "") + .toJson(); + }).toList(); + List> transactionValues = new List.from(values)..addAll(valuesCols); + print(transactionValues); + + SubmitBasicDetailsTransactionList submitBasicDetails = + await ProfileApiClient().submitBasicDetailsTransaction(dESCFLEXCONTEXTCODE, dynamicParams!.dynamicId, transactionValues, dynamicParams!.correctOrNew); + print(submitBasicDetails); + Utils.hideLoading(context); + + Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, + arguments: RequestSubmitScreenParams(dynamicParams!.title, submitBasicDetails.pTRANSACTIONID!, submitBasicDetails.pITEMKEY!, 'basicDetails')); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } } diff --git a/lib/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart b/lib/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart index 0fa6845..7278318 100644 --- a/lib/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart +++ b/lib/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart @@ -5,24 +5,9 @@ import 'dart:io'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:mohem_flutter_app/api/my_attendance_api_client.dart'; -import 'package:mohem_flutter_app/api/profile_api_client.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/dyanmic_forms/get_set_values_request_model.dart'; -import 'package:mohem_flutter_app/models/generic_response_model.dart'; -import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; -import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; -import 'package:mohem_flutter_app/models/profile/basic_details_cols_structions.dart'; -import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart'; -import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; -import 'package:mohem_flutter_app/widgets/button/default_button.dart'; -import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; + class DynamicFamilyMembersParams { String title; diff --git a/lib/ui/profile/dynamic_screens/dynamic_listview_screen.dart b/lib/ui/profile/dynamic_screens/dynamic_listview_screen.dart index 5ba4109..ed35527 100644 --- a/lib/ui/profile/dynamic_screens/dynamic_listview_screen.dart +++ b/lib/ui/profile/dynamic_screens/dynamic_listview_screen.dart @@ -70,7 +70,7 @@ class _DynamicListViewScreenState extends State { body: getEITTransactionList == null ? const SizedBox() : (getEITTransactionList!.isEmpty - ? LocaleKeys.noDataAvailable.tr().toText16().center + ? Utils.getNoDataWidget(context) : ListView.separated( physics: const BouncingScrollPhysics(), padding: EdgeInsets.all(21), diff --git a/lib/ui/profile/family_members.dart b/lib/ui/profile/family_members.dart index bcc5b32..2dd84ea 100644 --- a/lib/ui/profile/family_members.dart +++ b/lib/ui/profile/family_members.dart @@ -1,24 +1,14 @@ - - - - - import 'package:easy_localization/src/public_ext.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/profile_api_client.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/config/routes.dart'; -import 'package:mohem_flutter_app/dialogs/otp_dialog.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_employee_basic_details.model.dart'; import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart'; -import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart'; -import 'package:mohem_flutter_app/ui/profile/profile.dart'; +import 'package:mohem_flutter_app/ui/screens/profile/profile_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; @@ -30,15 +20,14 @@ class FamilyMembers extends StatefulWidget { } class _FamilyMembersState extends State { - List getEmployeeContactsList = []; int? relationId; + int? flag; @override void initState() { super.initState(); getEmployeeContacts(); - } void getEmployeeContacts() async { @@ -53,7 +42,6 @@ class _FamilyMembersState extends State { } } - Widget build(BuildContext context) { return Scaffold( appBar: AppBarWidget( @@ -61,154 +49,158 @@ class _FamilyMembersState extends State { title: LocaleKeys.profile_familyDetails.tr(), ), backgroundColor: MyColors.backgroundColor, - bottomSheet:footer(), + bottomSheet: footer(), body: Container( width: MediaQuery.of(context).size.width, - child: getEmployeeContactsList.length != 0 - ? SingleChildScrollView( - scrollDirection: Axis.vertical, - child: Column( - children: [ - ListView.builder( - scrollDirection: Axis.vertical, - shrinkWrap: true, - physics: ScrollPhysics(), - itemCount: getEmployeeContactsList.length, - itemBuilder: (context, index) { - return Container( - child: Column( - children: [ - Container( - width: double.infinity, - margin: EdgeInsets.only(top: 20, left: 21, right: 21,), - padding: EdgeInsets.only(left: 14, right: 14,top: 13, ), - height: 110, - decoration: BoxDecoration( - boxShadow: [ - BoxShadow( - color: Colors.grey.withOpacity(0.5), - spreadRadius: 5, - blurRadius: 26, - offset: Offset(0, 3), - ), - ], - color: Colors.white, - borderRadius: BorderRadius.circular(10.0), - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - "${getEmployeeContactsList[index].cONTACTNAME}".toText16(color: MyColors.blackColor), - "${getEmployeeContactsList[index].rELATIONSHIP}".toText11(isBold: true, color: MyColors.textMixColor), - SizedBox(height: 5,), - Divider( - color: MyColors.lightGreyEFColor, - height: 20, - thickness: 1, - indent: 0, - endIndent: 0, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Container( - child: InkWell( - onTap: () { - showUpdateAlertDialog(context); - }, - child: RichText( - text: TextSpan( - children: [ - WidgetSpan( - child: Icon( - Icons.edit, - size: 15, - color: MyColors.grey67Color, - ), - ), - TextSpan( - text: LocaleKeys.update.tr(), - style: TextStyle( - color: MyColors.grey67Color, - fontSize: 12, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - ), - ) + child: getEmployeeContactsList.length != 0 + ? SingleChildScrollView( + scrollDirection: Axis.vertical, + child: Column( + children: [ + ListView.builder( + scrollDirection: Axis.vertical, + shrinkWrap: true, + physics: ScrollPhysics(), + itemCount: getEmployeeContactsList.length, + itemBuilder: (context, index) { + return Container( + child: Column( + children: [ + Container( + width: double.infinity, + margin: EdgeInsets.only( + top: 20, + left: 21, + right: 21, ), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 8), - child: SizedBox( - child: Container( - width: 3, - color: MyColors.lightGreyEFColor, + padding: EdgeInsets.only( + left: 14, + right: 14, + top: 13, + ), + height: 110, + decoration: BoxDecoration( + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.5), + spreadRadius: 5, + blurRadius: 26, + offset: Offset(0, 3), ), - ), + ], + color: Colors.white, + borderRadius: BorderRadius.circular(10.0), ), - Container( - child: InkWell( - onTap: () { - showRemoveAlertDialog(context, getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID!.toInt()); - }, - child: RichText( - text: TextSpan( - children: [ - WidgetSpan( - child: Icon( - Icons.delete, - size: 15, - color: Color(0x99FF0000), + child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + "${getEmployeeContactsList[index].cONTACTNAME}".toText16(color: MyColors.blackColor), + "${getEmployeeContactsList[index].rELATIONSHIP}".toText11(isBold: true, color: MyColors.textMixColor), + SizedBox( + height: 5, + ), + Divider( + color: MyColors.lightGreyEFColor, + height: 20, + thickness: 1, + indent: 0, + endIndent: 0, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Container( + child: InkWell( + onTap: () { + relationId = getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID!.toInt(); + showUpdateAlertDialog(context, relationId!.toInt(), 2, LocaleKeys.update.tr()); + }, + child: RichText( + text: TextSpan( + children: [ + WidgetSpan( + child: Icon( + Icons.edit, + size: 15, + color: MyColors.grey67Color, + ), ), - ), - TextSpan( - text:LocaleKeys.remove.tr(), - style: TextStyle( - color: MyColors.DarkRedColor, - fontSize: 12, - fontWeight: FontWeight.bold, + TextSpan( + text: LocaleKeys.update.tr(), + style: TextStyle( + color: MyColors.grey67Color, + fontSize: 12, + fontWeight: FontWeight.bold, + ), ), - ), - ], + ], + ), + ), + )), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8), + child: SizedBox( + child: Container( + width: 3, + color: MyColors.lightGreyEFColor, + ), ), ), - ) - ), - // ElevatedButton.icon( - // icon: Icon( - // Icons.delete, - // size: 15, - // color: Color(0x99FF0000), - // ), - // style: ElevatedButton.styleFrom( - // shadowColor: Colors.white, - // primary: Colors.white, - // ), - // label: "remove".toText12(color: MyColors.DarkRedColor), - // onPressed: (){}, - // ), - ], - ), - ] - ), - ), + Container( + child: InkWell( + onTap: () { + relationId = getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID!.toInt(); + showRemoveAlertDialog(context, relationId!.toInt()); + }, + child: RichText( + text: TextSpan( + children: [ + WidgetSpan( + child: Icon( + Icons.delete, + size: 15, + color: Color(0x99FF0000), + ), + ), + TextSpan( + text: LocaleKeys.remove.tr(), + style: TextStyle( + color: MyColors.DarkRedColor, + fontSize: 12, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), + )), + // ElevatedButton.icon( + // icon: Icon( + // Icons.delete, + // size: 15, + // color: Color(0x99FF0000), + // ), + // style: ElevatedButton.styleFrom( + // shadowColor: Colors.white, + // primary: Colors.white, + // ), + // label: "remove".toText12(color: MyColors.DarkRedColor), + // onPressed: (){}, + // ), + ], + ), + ]), + ), + ], + )); + }) ], - ) - ); - }) - ], - ), - ):Container(), - // SizedBox(height: 20), - ) - - - ); + ), + ) + : Container(), + // SizedBox(height: 20), + )); } - footer(){ + Widget footer() { return Container( decoration: BoxDecoration( // borderRadius: BorderRadius.circular(10), @@ -217,29 +209,40 @@ class _FamilyMembersState extends State { BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3), ], ), - child: DefaultButton("Add New Family Member", () async { + child: DefaultButton(LocaleKeys.addNewFamilyMember.tr(), () async { + Navigator.pushNamed(context, AppRoutes.addUpdateFamilyMember, arguments: {"relationID": relationId, "flag": 1, "actionType": "ADD"}); // context.setLocale(const Locale("en", "US")); // to change Loacle - Profile(); + ProfileScreen(); }).insideContainer, ); } - showUpdateAlertDialog(BuildContext context) { + void showUpdateAlertDialog(BuildContext context, int relationId, int flag, String actionType) { Widget cancelButton = TextButton( - child: Text(LocaleKeys.cancel.tr(),), - onPressed: () { + child: Text( + LocaleKeys.cancel.tr(), + ), + onPressed: () { Navigator.pop(context); }, ); Widget continueButton = TextButton( - child: Text(LocaleKeys.ok.tr(),), - onPressed: () { - continueDynamicForms(); + child: Text( + LocaleKeys.ok.tr(), + ), + onPressed: () { + Navigator.pushNamed( + context, + AppRoutes.addUpdateFamilyMember, + arguments: {"relationID": relationId, "flag": flag, "actionType": "UPDATE"}, + ); }, ); AlertDialog alert = AlertDialog( - title: Text(LocaleKeys.confirm.tr(),), - content: Text("Are You Sure You Want to Update this Member?"), + title: Text( + LocaleKeys.confirm.tr(), + ), + content: Text(LocaleKeys.updateThisMember.tr()), actions: [ cancelButton, continueButton, @@ -252,23 +255,30 @@ class _FamilyMembersState extends State { }, ); } - showRemoveAlertDialog(BuildContext context,int relationId) { + + void showRemoveAlertDialog(BuildContext context, int relationId) { Widget cancelButton = TextButton( - child: Text(LocaleKeys.cancel.tr(),), - onPressed: () { + child: Text( + LocaleKeys.cancel.tr(), + ), + onPressed: () { Navigator.pop(context); }, ); Widget continueButton = TextButton( - child: Text(LocaleKeys.ok.tr(),), - onPressed: () { - Navigator.pushNamed(context, AppRoutes.deleteFamilyMember); - // continueDynamicForms(); + child: Text( + LocaleKeys.ok.tr(), + ), + onPressed: () { + Navigator.pushNamed(context, AppRoutes.deleteFamilyMember, arguments: relationId); + // continueDynamicForms(); }, ); AlertDialog alert = AlertDialog( - title: Text(LocaleKeys.confirm.tr(),), - content: Text("Are You Sure You Want to Remove this Member?"), + title: Text( + LocaleKeys.confirm.tr(), + ), + content: Text(LocaleKeys.removeThisMember.tr()), actions: [ cancelButton, continueButton, @@ -282,10 +292,7 @@ class _FamilyMembersState extends State { ); } - - void continueDynamicForms() { - Navigator.pushNamed(context, AppRoutes.addDynamicInputProfile, - arguments: DynamicFamilyMembersParams(LocaleKeys.profile_familyDetails.tr(), getEmployeeContactsList: getEmployeeContactsList)); - } - + // void continueDynamicForms() { + // Navigator.pushNamed(context, AppRoutes.addDynamicInputProfile, arguments: DynamicFamilyMembersParams(LocaleKeys.profile_familyDetails.tr(), getEmployeeContactsList: getEmployeeContactsList)); + // } } diff --git a/lib/ui/profile/personal_info.dart b/lib/ui/profile/personal_info.dart index 0ad9e2f..ce35bf1 100644 --- a/lib/ui/profile/personal_info.dart +++ b/lib/ui/profile/personal_info.dart @@ -6,7 +6,6 @@ import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; import 'package:mohem_flutter_app/models/member_information_list_model.dart'; - import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; @@ -98,7 +97,7 @@ class _PesonalInfoState extends State { )); } - footer() { + Widget footer() { return Container( decoration: BoxDecoration( // borderRadius: BorderRadius.circular(10), @@ -107,7 +106,10 @@ class _PesonalInfoState extends State { BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3), ], ), - child: DefaultButton(LocaleKeys.update.tr(), () async {}).insideContainer, + child: DefaultButton( + LocaleKeys.update.tr(), + () async {}, + ).insideContainer, ); } } diff --git a/lib/ui/profile/phone_numbers.dart b/lib/ui/profile/phone_numbers.dart index cba17d5..4b27b19 100644 --- a/lib/ui/profile/phone_numbers.dart +++ b/lib/ui/profile/phone_numbers.dart @@ -3,15 +3,13 @@ import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/profile_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/config/routes.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_employee_address_model.dart'; -import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; import 'package:mohem_flutter_app/models/get_employee_phones_model.dart'; -import 'package:mohem_flutter_app/models/profile/phone_number_types_modek.dart'; -import 'package:mohem_flutter_app/ui/profile/profile.dart'; +import 'package:mohem_flutter_app/models/profile/phone_number_types_model.dart'; +import 'package:mohem_flutter_app/models/profile/submit_phone_transactions.dart'; +import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; @@ -27,6 +25,7 @@ class PhoneNumbers extends StatefulWidget { class _PhoneNumbersState extends State { List getPhoneNumberTypesList = []; + SubmitPhonesTransactionList submitPhoneNumbers = SubmitPhonesTransactionList(); @override void initState() { super.initState(); @@ -42,117 +41,121 @@ class _PhoneNumbersState extends State { Widget build(BuildContext context) { return Scaffold( - appBar: AppBarWidget( - context, - title: LocaleKeys.profile_contactDetails.tr(), - ), - backgroundColor: MyColors.backgroundColor, - bottomSheet: footer(), - body: SingleChildScrollView( - child: Column(children: [ - Container( - width: double.infinity, - margin: EdgeInsets.only(left: 25, right: 25, top: 25), - padding: EdgeInsets.all(20), - // height: 400, - decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(10.0), border: Border.all(color: Color.fromARGB(255, 209, 207, 207))), - child: InkWell( - child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [ - Icon( - Icons.add, - color: Color(0xff259CB8), - ), - Text( - 'Add new row', - style: TextStyle(color: Color(0xff259CB8), fontWeight: FontWeight.bold), - ) - ]), - onTap: () { - addNewRow(); - }, + appBar: AppBarWidget( + context, + title: LocaleKeys.profile_contactDetails.tr(), + ), + backgroundColor: MyColors.backgroundColor, + bottomSheet: footer(), + body: SingleChildScrollView( + child: Column( + children: [ + Container( + width: double.infinity, + margin: EdgeInsets.only(left: 25, right: 25, top: 25), + padding: EdgeInsets.all(20), + // height: 400, + decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(10.0), border: Border.all(color: Color.fromARGB(255, 209, 207, 207))), + child: InkWell( + child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [ + Icon( + Icons.add, + color: Color(0xff259CB8), + ), + Text( + LocaleKeys.addRow.tr(), + style: TextStyle(color: Color(0xff259CB8), fontWeight: FontWeight.bold), + ) + ]), + onTap: () { + addNewRow(); + }, + ), ), - ), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: widget.getEmployeePhonesList - .map((e) => e.aCTION != 'DELETE_ROW' - ? Container( - width: double.infinity, - margin: EdgeInsets.only( - top: 20, - left: 26, - right: 26, - ), - padding: EdgeInsets.only(left: 14, right: 14, top: 15, bottom: 15), - // height: 400, - decoration: BoxDecoration( - boxShadow: [ - BoxShadow( - color: Colors.grey.withOpacity(0.5), - spreadRadius: 5, - blurRadius: 26, - offset: Offset(0, 3), - ), - ], - color: Colors.white, - borderRadius: BorderRadius.circular(10.0), - ), - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - PopupMenuButton( - child: DynamicTextFieldWidget( - "Please Select *", - e.pHONETYPEMEANING ?? "", - isEnable: false, - isPopup: true, - ).paddingOnly(bottom: 12), - itemBuilder: (_) => >[ - for (int i = 0; i < getPhoneNumberTypesList.length; i++) PopupMenuItem(child: Text(getPhoneNumberTypesList![i].mEANING!), value: i), - ], - onSelected: (int index) { - e.pHONETYPEMEANING = getPhoneNumberTypesList[index].mEANING; - e.pHONETYPE = getPhoneNumberTypesList[index].cODE; - setState(() {}); - }), - DynamicTextFieldWidget( - "", - e.pHONENUMBER ?? "", - isReadOnly: false, - onChange: (text) { - e.pHONENUMBER = text; - }, - ).paddingOnly(bottom: 12), - InkWell( - child: Row(mainAxisAlignment: MainAxisAlignment.end, children: [ - Icon( - Icons.delete, - color: Colors.red, - size: 18, - ), - Text( - 'Delete', - style: TextStyle(color: Colors.red, fontWeight: FontWeight.bold), - ) - ]), - onTap: () { - // widget.getEmployeePhonesList.removeWhere((item) => item.pHONEID == e.pHONEID); - setState(() { - deleteRow(e); - }); - }, + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: widget.getEmployeePhonesList + .map((e) => e.aCTION != 'DELETE_ROW' + ? Container( + width: double.infinity, + margin: EdgeInsets.only( + top: 20, + left: 26, + right: 26, ), - SizedBox( - height: 10, + padding: EdgeInsets.only(left: 14, right: 14, top: 15, bottom: 15), + // height: 400, + decoration: BoxDecoration( + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.5), + spreadRadius: 5, + blurRadius: 26, + offset: Offset(0, 3), + ), + ], + color: Colors.white, + borderRadius: BorderRadius.circular(10.0), ), - ])) - : Container()) - .toList()), - SizedBox( - height: 80, - ) - ]))); + child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + PopupMenuButton( + child: DynamicTextFieldWidget( + LocaleKeys.pleaseSelect.tr(), + e.pHONETYPEMEANING ?? "", + isEnable: false, + isPopup: true, + ).paddingOnly(bottom: 12), + itemBuilder: (_) => >[ + for (int i = 0; i < getPhoneNumberTypesList.length; i++) PopupMenuItem(child: Text(getPhoneNumberTypesList![i].mEANING!), value: i), + ], + onSelected: (int index) { + e.pHONETYPEMEANING = getPhoneNumberTypesList[index].mEANING; + e.pHONETYPE = getPhoneNumberTypesList[index].cODE; + setState(() {}); + }), + DynamicTextFieldWidget( + "", + e.pHONENUMBER ?? "", + isReadOnly: false, + onChange: (text) { + e.pHONENUMBER = text; + }, + ).paddingOnly(bottom: 12), + InkWell( + child: Row(mainAxisAlignment: MainAxisAlignment.end, children: [ + Icon( + Icons.delete, + color: Colors.red, + size: 18, + ), + Text( + LocaleKeys.delete.tr(), + style: TextStyle(color: Colors.red, fontWeight: FontWeight.bold), + ) + ]), + onTap: () { + // widget.getEmployeePhonesList.removeWhere((item) => item.pHONEID == e.pHONEID); + setState(() { + deleteRow(e); + }); + }, + ), + SizedBox( + height: 10, + ), + ])) + : Container()) + .toList()), + SizedBox( + height: 80, + ) + ], + ), + ), + ); } - footer() { + Widget footer() { return Container( decoration: BoxDecoration( // borderRadius: BorderRadius.circular(10), @@ -169,8 +172,24 @@ class _PhoneNumbersState extends State { ); } - void updatePhone() { - print(widget.getEmployeePhonesList); + void updatePhone() async { + Utils.showLoading(context); + setUpdateStatus(); + submitPhoneNumbers = await ProfileApiClient().submitPhoneNumbers(widget.getEmployeePhonesList); + + Utils.hideLoading(context); + Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, + arguments: RequestSubmitScreenParams(LocaleKeys.profile_contactDetails.tr(), submitPhoneNumbers.pTRANSACTIONID!, submitPhoneNumbers.pITEMKEY!, 'phone_numbers')); + } + + void setUpdateStatus() { + widget.getEmployeePhonesList.forEach((element) { + if (element.aCTION == null) { + element.aCTION = 'UPDATE_ROW'; + element.dATEFROM = ''; + element.dATETO = ''; + } + }); } void addNewRow() { diff --git a/lib/ui/profile/profile.dart b/lib/ui/profile/profile.dart deleted file mode 100644 index 6cbf953..0000000 --- a/lib/ui/profile/profile.dart +++ /dev/null @@ -1,289 +0,0 @@ -import 'package:easy_localization/src/public_ext.dart'; -import 'package:flutter/material.dart'; -import 'package:mohem_flutter_app/api/profile_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/models/get_employee_basic_details.model.dart'; -import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; - -class Profile extends StatefulWidget { - const Profile({Key? key}) : super(key: key); - - @override - _ProfileState createState() => _ProfileState(); -} - -class _ProfileState extends State { - String? fullName = ""; - String? maritalStatus = ""; - String? birthDate = ""; - String? civilIdentityNumber = ""; - String? emailAddress = ""; - String? employeeNo = ""; - - List getEmployeeBasicDetailsList = []; - - @override - void initState() { - super.initState(); - getEmployeeBasicDetails(); - basicDetails(); - } - - void getEmployeeBasicDetails() async { - try { - Utils.showLoading(context); - getEmployeeBasicDetailsList = await ProfileApiClient().getEmployeeBasicDetails(); - Utils.hideLoading(context); - basicDetails(); - print("getEmployeeBasicDetailsList.length"); - print(getEmployeeBasicDetailsList.length); - setState(() {}); - } catch (ex) { - Utils.hideLoading(context); - Utils.handleException(ex, context, null); - } - } - - basicDetails() { - for (int i = 0; i < getEmployeeBasicDetailsList.length; i++) { - if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'FULL_NAME') { - fullName = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP; - } else if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'MARITAL_STATUS') { - maritalStatus = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP; - } else if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'DATE_OF_BIRTH') { - birthDate = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP; - } else if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'NATIONAL_IDENTIFIER') { - civilIdentityNumber = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP; - } else if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'EMAIL_ADDRESS') { - emailAddress = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP; - } else if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'EMPLOYEE_NUMBER') { - employeeNo = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP; - } - } - } - - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - backgroundColor: MyColors.lightGreenColor, - leading: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - IconButton( - icon: const Icon( - Icons.arrow_back_ios, - color: MyColors.backgroundBlackColor, - ), - onPressed: () => Navigator.pop(context), - ), - ], - ), - ), - backgroundColor: MyColors.lightGreenColor, - body: Stack(children: [ - Align( - alignment: Alignment.topRight, - child: Container( - height: 30, - width: 80, - padding: EdgeInsets.only(left: 10.0, right: 10.0, top: 5, bottom: 5), - decoration: BoxDecoration( - border: Border.all( - color: MyColors.gradiantEndColor, - style: BorderStyle.solid, - ), - color: MyColors.gradiantEndColor, - borderRadius: BorderRadius.circular(100.0)), - child: InkWell( - onTap: () {}, - child: RichText( - text: TextSpan( - children: [ - WidgetSpan( - child: Icon( - Icons.image, - size: 20, - color: Colors.white, - ), - ), - TextSpan( - text: " Edit", - ), - ], - ), - ), - ) - ), - ), - Container( - width: double.infinity, - margin: EdgeInsets.only(top: 48), - height: double.infinity, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.only(topLeft: Radius.circular(30.0), topRight: Radius.circular(30.0)), - ), - child: Column( - children: [ - "${fullName}".toText20(isBold: true, color: MyColors.blackColor), - "${employeeNo}".toText12(isBold: false, color: MyColors.lightGrayColor), - "${emailAddress}".toText12(isBold: false, color: MyColors.black), - SizedBox( - height: 5, - ), - Divider( - color: MyColors.lightGreyE6Color, - height: 20, - thickness: 8, - indent: 0, - endIndent: 0, - ), - - Container( - padding: EdgeInsets.only(left: 10.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - InkWell( - onTap: () { - - }, - child: Row( - children: [ - - SizedBox( - width: 15, - ), - "Personal Information".toText16(isBold: true, color: MyColors.grey3AColor), - ], - ), - ), - SizedBox( - height: 5, - ), - InkWell( - onTap: () { - - }, - child: Row( - children: [ - - SizedBox( - width: 15, - ), - "Basic Details".toText16(isBold: true, color: MyColors.grey3AColor), - ], - ), - ), - SizedBox( - height: 5, - ), - InkWell( - onTap: () { - - }, - child: Row( - children: [ - - SizedBox( - width: 20, - ), - "Contact Details".toText16(isBold: true, color: MyColors.grey3AColor), - ], - ), - ), - SizedBox( - height: 5, - ), - InkWell( - onTap: () { - - }, - child: Row( - children: [ - - SizedBox( - width: 20, - ), - "Family Members".toText16(isBold: true, color: MyColors.grey3AColor), - ], - ), - ), - SizedBox( - height: 5, - ), - ], - ), - ), - ], - ).paddingOnly( top: 35, bottom: 36), - ), - Align( - alignment: Alignment.topCenter, - child: SizedBox( - child: CircleAvatar( - radius: 40.0, - backgroundColor: Colors.white, - child: CircleAvatar( - child: Align( - alignment: Alignment.bottomRight, - // child: CircleAvatar( - // backgroundColor: Colors.white, - // radius: 12.0, - // child: Icon( - // Icons.camera_alt, - // size: 15.0, - // color: Color(0xFF404040), - // ), - // ), - ), - radius: 38.0, - // url:"", - ), - ), - )), - ]) - // Container( - // margin: const EdgeInsets.only(top:50), - // decoration: const BoxDecoration( - // color: Colors.white, - // borderRadius: BorderRadius.only( - // topLeft: Radius.circular(30.0), - // topRight: Radius.circular(30.0)) - // ), - // // color: MyColors.white, - // child: Stack( - // children: [ - // Container( - // height: 30, - // color: MyColors.lightGreenColor, - // margin: const EdgeInsets.only(bottom: 20,), - // child: Row( - // mainAxisAlignment: MainAxisAlignment.center, - // children: [ - // CircleAvatar( - // backgroundColor: Colors.grey.shade800, - // ), - // ], - // ), - // ), - // ListView( - // scrollDirection: Axis.vertical, - // children: [ - // Column( - // children: [ - // // 20.height, - // ], - // ) - // ], - // ), - // ] - // ), - // ), - ); - } -} diff --git a/lib/ui/screens/announcements/announcement_details.dart b/lib/ui/screens/announcements/announcement_details.dart index a2f1f99..3b11cdf 100644 --- a/lib/ui/screens/announcements/announcement_details.dart +++ b/lib/ui/screens/announcements/announcement_details.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_html/flutter_html.dart'; import 'package:mohem_flutter_app/api/pending_transactions_api_client.dart'; @@ -7,6 +8,7 @@ import 'package:mohem_flutter_app/app_state/app_state.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/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/get_announcement_details.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:url_launcher/url_launcher.dart'; @@ -37,7 +39,7 @@ class _AnnouncementDetailsState extends State { backgroundColor: Colors.white, appBar: AppBarWidget( context, - title: "Announcements", + title: LocaleKeys.announcements.tr(), ), body: SingleChildScrollView( child: getAnnouncementDetailsObj != null @@ -92,7 +94,7 @@ class _AnnouncementDetailsState extends State { ); } - getRequestID() async { + void getRequestID() async { if (currentPageNo == 0) { final arguments = (ModalRoute.of(context)?.settings.arguments ?? {}) as Map; currentPageNo = arguments["currentPageNo"]; @@ -105,6 +107,8 @@ class _AnnouncementDetailsState extends State { try { Utils.showLoading(context); jsonResponse = await PendingTransactionsApiClient().getAnnouncements(itgAwarenessID, currentPageNo, itgRowID); + // todo '@haroon' move below post processing code to above method and get exact model which you need, + var jsonDecodedData = jsonDecode(jsonDecode(jsonResponse)['result']['data']); getAnnouncementDetailsObj = GetAnnouncementDetails.fromJson(jsonDecodedData[0]); Utils.hideLoading(context); diff --git a/lib/ui/screens/announcements/announcements.dart b/lib/ui/screens/announcements/announcements.dart index 61ebde4..be3a88c 100644 --- a/lib/ui/screens/announcements/announcements.dart +++ b/lib/ui/screens/announcements/announcements.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/pending_transactions_api_client.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; @@ -8,6 +9,7 @@ import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/get_announcements.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; @@ -51,7 +53,7 @@ class _AnnouncementsState extends State { backgroundColor: Colors.white, appBar: AppBarWidget( context, - title: "Announcements", + title: LocaleKeys.announcements.tr(), ), body: getAnnouncementsObject.isNotEmpty ? Container( @@ -65,7 +67,7 @@ class _AnnouncementsState extends State { margin: const EdgeInsets.fromLTRB(12.0, 0.0, 12.0, 0.0), child: DynamicTextFieldWidget( "Search", - "Search Announcements", + LocaleKeys.searchAnnouncements.tr(), isEnable: true, suffixIconData: Icons.search, isPopup: false, diff --git a/lib/ui/screens/eit/add_eit.dart b/lib/ui/screens/eit/add_eit.dart index 0dbcd1c..629fbd0 100644 --- a/lib/ui/screens/eit/add_eit.dart +++ b/lib/ui/screens/eit/add_eit.dart @@ -1,5 +1,7 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart'; import 'package:mohem_flutter_app/models/dashboard/menus.dart'; import 'package:mohem_flutter_app/provider/eit_provider_model.dart'; @@ -45,10 +47,10 @@ class AddEITScreen extends StatelessWidget { labelColor: Colors.white, tabs: [ Tab( - text: "Missing Swipe", + text: LocaleKeys.missingSwipes.tr(), ), Tab( - text: "Swipe Request", + text: LocaleKeys.swipeRequest.tr(), ), ], ), diff --git a/lib/ui/screens/mowadhafhi/mowadhafhi_home.dart b/lib/ui/screens/mowadhafhi/mowadhafhi_home.dart index 6dd0f0d..edf6b03 100644 --- a/lib/ui/screens/mowadhafhi/mowadhafhi_home.dart +++ b/lib/ui/screens/mowadhafhi/mowadhafhi_home.dart @@ -9,10 +9,9 @@ import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_tickets_list.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; -import '../../../widgets/app_bar_widget.dart'; - class MowadhafhiHome extends StatefulWidget { const MowadhafhiHome({Key? key}) : super(key: key); @@ -32,93 +31,92 @@ class _MowadhafhiHomeState extends State { @override Widget build(BuildContext context) { return Scaffold( - backgroundColor: Colors.white, - appBar: AppBarWidget( - context, - title: "Mowadhafhi Request", - ), - body: Container( - margin: const EdgeInsets.only(top: 10.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Expanded( - child: ListView.separated( - physics: const BouncingScrollPhysics(), - shrinkWrap: true, - itemBuilder: (BuildContext context, int index) { - return InkWell( - onTap: () { - openRequestDetails(getTicketsByEmployeeList[index].ticketId!); - }, - child: Container( - width: double.infinity, - // height: 100.0, - padding: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), - margin: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(10), - boxShadow: [ - BoxShadow( - color: const Color(0xff000000).withOpacity(.05), - blurRadius: 26, - offset: const Offset(0, -3), - ), - ], - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - getTicketsByEmployeeList[index].ticketTypeName!.toText14(color: MyColors.grey57Color), - getTicketsByEmployeeList[index].created!.split(" ")[0].toText12(color: MyColors.grey70Color), - ], - ), - Container( - padding: const EdgeInsets.only(top: 10.0), - child: getTicketsByEmployeeList[index].description!.toText12(color: MyColors.grey57Color), - ), - Container( - padding: const EdgeInsets.only(top: 10.0), - child: Row( + backgroundColor: Colors.white, + appBar: AppBarWidget( + context, + title: LocaleKeys.mowadhafhiRequest.tr(), + ), + body: Container( + margin: const EdgeInsets.only(top: 10.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Expanded( + child: ListView.separated( + physics: const BouncingScrollPhysics(), + shrinkWrap: true, + itemBuilder: (BuildContext context, int index) { + return InkWell( + onTap: () { + openRequestDetails(getTicketsByEmployeeList[index].ticketId!); + }, + child: Container( + width: double.infinity, + // height: 100.0, + padding: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), + margin: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + boxShadow: [ + BoxShadow( + color: const Color(0xff000000).withOpacity(.05), + blurRadius: 26, + offset: const Offset(0, -3), + ), + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - getTicketsByEmployeeList[index].ticketStatusInternalName!.toText14(color: MyColors.gradiantEndColor), - SvgPicture.asset( - "assets/images/arrow_next.svg", - color: MyColors.darkIconColor, - ) + getTicketsByEmployeeList[index].ticketTypeName!.toText14(color: MyColors.grey57Color), + getTicketsByEmployeeList[index].created!.split(" ")[0].toText12(color: MyColors.grey70Color), ], ), - ), - ], + Container( + padding: const EdgeInsets.only(top: 10.0), + child: getTicketsByEmployeeList[index].description!.toText12(color: MyColors.grey57Color), + ), + Container( + padding: const EdgeInsets.only(top: 10.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + getTicketsByEmployeeList[index].ticketStatusInternalName!.toText14(color: MyColors.gradiantEndColor), + SvgPicture.asset( + "assets/images/arrow_next.svg", + color: MyColors.darkIconColor, + ) + ], + ), + ), + ], + ), ), - ), - ); - }, - separatorBuilder: (BuildContext context, int index) => 12.height, - itemCount: getTicketsByEmployeeList.length ?? 0)), - 80.height - ], - ), - ), - bottomSheet: Container( - decoration: const BoxDecoration( - color: MyColors.white, - boxShadow: [ - BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3), - ], + ); + }, + separatorBuilder: (BuildContext context, int index) => 12.height, + itemCount: getTicketsByEmployeeList.length ?? 0)), + 80.height + ], + ), ), - child: DefaultButton(LocaleKeys.createRequest.tr(), () async { - openHRRequest(); - }).insideContainer, - ) - ); + bottomSheet: Container( + decoration: const BoxDecoration( + color: MyColors.white, + boxShadow: [ + BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3), + ], + ), + child: DefaultButton(LocaleKeys.createRequest.tr(), () async { + openHRRequest(); + }).insideContainer, + )); } void openRequestDetails(String itgTicketID) async { diff --git a/lib/ui/screens/mowadhafhi/mowadhafhi_hr_request.dart b/lib/ui/screens/mowadhafhi/mowadhafhi_hr_request.dart index 6ed9cb5..7ac6c43 100644 --- a/lib/ui/screens/mowadhafhi/mowadhafhi_hr_request.dart +++ b/lib/ui/screens/mowadhafhi/mowadhafhi_hr_request.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'dart:io'; +import 'package:easy_localization/easy_localization.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/mowadhafhi/mowadhafhi_api_client.dart'; @@ -9,6 +10,7 @@ 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/mowadhafhi/get_department_sections.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_project_departments.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_projects.dart'; @@ -56,7 +58,7 @@ class _MowadhafhiHRRequestState extends State { backgroundColor: Colors.white, appBar: AppBarWidget( context, - title: "Mowadhafhi Request", + title: LocaleKeys.mowadhafhiRequest.tr(), ), body: SingleChildScrollView( child: getTicketTypesList.isNotEmpty @@ -78,7 +80,7 @@ class _MowadhafhiHRRequestState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Service Type: ".toText16(), + LocaleKeys.serviceType.tr().toText16(), 12.height, Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -95,7 +97,6 @@ class _MowadhafhiHRRequestState extends State { groupValue: selectedServiceType, selectedColor: MyColors.gradiantStartColor), ).onPress(() { - debugPrint(getTicketTypesList[index].typeName!); selectedServiceType = getTicketTypesList[index].ticketTypeId!.toString(); setState(() {}); }); @@ -109,11 +110,11 @@ class _MowadhafhiHRRequestState extends State { ], ), 12.height, - "Department Name: ".toText16(), + LocaleKeys.departmentName.tr().toText16(), 12.height, PopupMenuButton( child: DynamicTextFieldWidget( - "Select Department", + LocaleKeys.selectDepartment.tr(), selectedDepartment?.departmentName ?? "", isEnable: false, isPopup: true, @@ -129,11 +130,11 @@ class _MowadhafhiHRRequestState extends State { setState(() {}); }), 12.height, - "Related Section: ".toText16(), + LocaleKeys.relatedSection.tr().toText16(), 12.height, PopupMenuButton( child: DynamicTextFieldWidget( - "Select Section", + LocaleKeys.selectSection.tr(), selectedSection?.sectionName ?? "", isEnable: false, isPopup: true, @@ -149,11 +150,11 @@ class _MowadhafhiHRRequestState extends State { setState(() {}); }), 12.height, - "Related Topic: ".toText16(), + LocaleKeys.relatedTopic.tr().toText16(), 12.height, PopupMenuButton( child: DynamicTextFieldWidget( - "Select Topic", + LocaleKeys.selectTopic.tr(), selectedTopic?.topicName ?? "", isEnable: false, isPopup: true, @@ -169,11 +170,11 @@ class _MowadhafhiHRRequestState extends State { setState(() {}); }), 12.height, - "Supporting Document: ".toText16(), + LocaleKeys.supportingDocument.tr().toText16(), 12.height, attachmentView("Attachments"), 12.height, - "Description: ".toText16(), + LocaleKeys.description.tr().toText16(), 12.height, DynamicTextFieldWidget( "", @@ -204,7 +205,7 @@ class _MowadhafhiHRRequestState extends State { 12.width, Expanded( child: DefaultButton( - "Submit", + LocaleKeys.submit.tr(), !checkValidation() ? null : () { @@ -252,7 +253,7 @@ class _MowadhafhiHRRequestState extends State { children: [ title.toText16().expanded, 6.width, - SimpleButton("Add", () async { + SimpleButton(LocaleKeys.add.tr(), () async { FilePickerResult? result = await FilePicker.platform.pickFiles(allowMultiple: true); if (result != null) { attachmentFiles = attachmentFiles + result.paths.map((path) => File(path!)).toList(); @@ -314,7 +315,7 @@ class _MowadhafhiHRRequestState extends State { getMowadhafhiProjectsList = await MowadhafhiApiClient().getProjects(); Utils.hideLoading(context); getProjectDepartments(getMowadhafhiProjectsList[0].projectId!); - projectID = getMowadhafhiProjectsList[0].projectId!; + projectID = getMowadhafhiProjectsList[0].projectId; } catch (ex) { Utils.hideLoading(context); Utils.handleException(ex, context, null); @@ -376,7 +377,7 @@ class _MowadhafhiHRRequestState extends State { } int? messageStatus = await MowadhafhiApiClient().submitRequest(selectedDepartment?.projectDepartmentId, description, projectID, selectedSection?.departmentSectionId.toString(), selectedTopic?.sectionTopicId.toString(), int.parse(selectedServiceType), list); - Utils.showToast("Request created successfully"); + Utils.showToast(LocaleKeys.requestCreatedSuccessfully.tr()); Utils.hideLoading(context); Navigator.pop(context); } catch (ex) { diff --git a/lib/ui/screens/mowadhafhi/request_details.dart b/lib/ui/screens/mowadhafhi/request_details.dart index ec7db4b..aa22bdd 100644 --- a/lib/ui/screens/mowadhafhi/request_details.dart +++ b/lib/ui/screens/mowadhafhi/request_details.dart @@ -1,9 +1,11 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/mowadhafhi/mowadhafhi_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/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_details.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_transactions.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; @@ -26,7 +28,7 @@ class _RequestDetailsState extends State { super.initState(); } - getRequestID() { + void getRequestID() { if (itgTicketID == null) { itgTicketID = ModalRoute.of(context)?.settings.arguments as String; debugPrint(itgTicketID); @@ -41,7 +43,7 @@ class _RequestDetailsState extends State { backgroundColor: Colors.white, appBar: AppBarWidget( context, - title: "Mowadhafhi Request", + title: LocaleKeys.mowadhafhiRequest.tr(), ), body: SingleChildScrollView( child: getTicketsByEmployeeList.length != 0 @@ -74,16 +76,16 @@ class _RequestDetailsState extends State { ], ), 8.height, - "Ticket Reference: ".toText12(color: MyColors.grey98Color), + LocaleKeys.ticketReference.tr().toText12(color: MyColors.grey98Color), getTicketsByEmployeeList![0].ticketReferenceNo!.toText14(color: MyColors.grey57Color), 8.height, - "Section: ".toText12(color: MyColors.grey98Color), + LocaleKeys.section.tr().toText12(color: MyColors.grey98Color), getTicketsByEmployeeList![0].sectionName!.toText14(color: MyColors.grey57Color), 8.height, - "Topic: ".toText12(color: MyColors.grey98Color), + LocaleKeys.topic.tr().toText12(color: MyColors.grey98Color), getTicketsByEmployeeList![0].topicName!.toText14(color: MyColors.grey57Color), 8.height, - "Description: ".toText12(color: MyColors.grey98Color), + LocaleKeys.description.tr().toText12(color: MyColors.grey98Color), getTicketsByEmployeeList![0].description!.toText14(color: MyColors.grey57Color), ], ), @@ -125,7 +127,7 @@ class _RequestDetailsState extends State { children: [ Row( children: [ - "Action By: ".toText14(color: MyColors.grey57Color), + LocaleKeys.actionBy.tr().toText14(color: MyColors.grey57Color), getTicketTransactionsList![index].actionBy!.toText14(color: MyColors.grey57Color), ], ), diff --git a/lib/ui/screens/pending_transactions/pending_transactions.dart b/lib/ui/screens/pending_transactions/pending_transactions.dart index e074ad7..997ec0d 100644 --- a/lib/ui/screens/pending_transactions/pending_transactions.dart +++ b/lib/ui/screens/pending_transactions/pending_transactions.dart @@ -42,7 +42,7 @@ class _PendingTransactionsState extends State { backgroundColor: Colors.white, appBar: AppBarWidget( context, - title: "Pending Transactions", + title: LocaleKeys.pendingTransactions.tr(), ), body: SingleChildScrollView( child: Container( @@ -65,7 +65,7 @@ class _PendingTransactionsState extends State { 12.height, PopupMenuButton( child: DynamicTextFieldWidget( - "Please select request type", + LocaleKeys.selectRequestType.tr(), selectedFunction?.fUNCTIONPROMPT ?? "", isEnable: false, isPopup: true, @@ -76,12 +76,12 @@ class _PendingTransactionsState extends State { for (int i = 0; i < getPendingTransactionsFunctions!.length; i++) PopupMenuItem(child: Text(getPendingTransactionsFunctions![i].fUNCTIONPROMPT!), value: i), ], onSelected: (int popupIndex) { - selectedFunction = getPendingTransactionsFunctions![popupIndex]; + selectedFunction = getPendingTransactionsFunctions[popupIndex]; setState(() {}); }), 12.height, DynamicTextFieldWidget( - "Date From: ", + LocaleKeys.dateFrom.tr(), selectedDateFrom.toString().split(" ")[0], suffixIconData: Icons.calendar_today, isEnable: false, @@ -92,7 +92,7 @@ class _PendingTransactionsState extends State { ).paddingOnly(bottom: 12), 12.height, DynamicTextFieldWidget( - "Date To: ", + LocaleKeys.dateTo.tr(), selectedDateTo.toString().split(" ")[0], suffixIconData: Icons.calendar_today, isEnable: false, diff --git a/lib/ui/screens/pending_transactions/pending_transactions_details.dart b/lib/ui/screens/pending_transactions/pending_transactions_details.dart index 931ba50..2c8895a 100644 --- a/lib/ui/screens/pending_transactions/pending_transactions_details.dart +++ b/lib/ui/screens/pending_transactions/pending_transactions_details.dart @@ -1,9 +1,11 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/pending_transactions_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/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/pending_transactions/get_pending_transactions_details.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; @@ -26,7 +28,7 @@ class _PendingTransactionsDetailsState extends State super.initState(); } - getFunctionID() { + void getFunctionID() { if (functionID == "") { final arguments = (ModalRoute.of(context)?.settings.arguments ?? {}) as Map; functionID = arguments["selectedFunctionID"].toString(); @@ -43,7 +45,7 @@ class _PendingTransactionsDetailsState extends State backgroundColor: Colors.white, appBar: AppBarWidget( context, - title: "Pending Transactions", + title: LocaleKeys.pendingTransactions.tr(), ), body: getPendingTransactionsDetails.isNotEmpty ? Container( @@ -105,7 +107,7 @@ class _PendingTransactionsDetailsState extends State padding: const EdgeInsets.only(top: 0.0), child: Row( children: [ - "Request Type: ".toText14(color: MyColors.grey57Color), + LocaleKeys.requestType.tr().toText14(color: MyColors.grey57Color), getPendingTransactionsDetails[index].rEQUESTTYPE!.toText14(color: MyColors.redColor), ], ), diff --git a/lib/ui/screens/profile/profile_screen.dart b/lib/ui/screens/profile/profile_screen.dart index 76f8a20..35c4a57 100644 --- a/lib/ui/screens/profile/profile_screen.dart +++ b/lib/ui/screens/profile/profile_screen.dart @@ -1,17 +1,22 @@ import 'dart:ui'; import 'dart:convert'; +import 'dart:ui'; +import 'package:easy_localization/easy_localization.dart'; + import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:mohem_flutter_app/api/profile_api_client.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; import 'package:mohem_flutter_app/models/member_information_list_model.dart'; import 'package:mohem_flutter_app/ui/screens/profile/widgets/header.dart'; import 'package:mohem_flutter_app/ui/screens/profile/widgets/profile_panel.dart'; import 'package:mohem_flutter_app/widgets/bottom_sheet.dart'; +// todo '@sultan' kindly follow structure of code written. use extension methods for widgets and dont hard code strings, use localizations class ProfileScreen extends StatefulWidget { const ProfileScreen({Key? key}) : super(key: key); @@ -28,6 +33,7 @@ class _ProfileScreenState extends State { void initState() { super.initState(); memberInformationList = AppState().memberInformationList!; + setState(() {}); //getEmployeeBasicDetails(); } @@ -38,58 +44,68 @@ class _ProfileScreenState extends State { backgroundColor: const Color(0xffefefef), body: Stack(children: [ Container( - height: 300, - margin: EdgeInsets.only(top: 50), - decoration: BoxDecoration(image: DecorationImage(image: MemoryImage(Utils.getPostBytes(memberInformationList.eMPLOYEEIMAGE)), fit: BoxFit.cover)), - child: new BackdropFilter( - filter: new ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0), - child: new Container( - decoration: new BoxDecoration(color: Colors.white.withOpacity(0.0)), - ), - )), + height: 300, + margin: EdgeInsets.only(top: 50), + decoration: BoxDecoration(image: DecorationImage(image: MemoryImage(Utils.getPostBytes(memberInformationList.eMPLOYEEIMAGE)), fit: BoxFit.cover)), + child: new BackdropFilter( + filter: new ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0), + child: new Container( + decoration: new BoxDecoration(color: Colors.white.withOpacity(0.0)), + ), + ), + ), SingleChildScrollView( scrollDirection: Axis.vertical, - child: Column(crossAxisAlignment: CrossAxisAlignment.center, children: [ - SizedBox( - height: 80, - ), - Container( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + height: 80, + ), + Container( padding: EdgeInsets.only(left: 15, right: 15), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.arrow_back_ios, - color: Colors.white, - )), + onPressed: () { + Navigator.pop(context); + }, + icon: Icon( + Icons.arrow_back_ios, + color: Colors.white, + ), + ), InkWell( - onTap: () { - startImageSheet(); - }, - child: Container( - padding: EdgeInsets.only(left: 10, right: 10, top: 5, bottom: 5), - decoration: BoxDecoration(borderRadius: BorderRadius.circular(15), color: Colors.black.withOpacity(.3)), - child: Row(children: [ - Icon(Icons.photo, color: Colors.white), - Text( - 'Edit', - style: TextStyle(color: Colors.white, fontSize: 12), - ) - ]))), + onTap: () { + startImageSheet(); + }, + child: Container( + padding: EdgeInsets.only(left: 10, right: 10, top: 5, bottom: 5), + decoration: BoxDecoration(borderRadius: BorderRadius.circular(15), color: Colors.black.withOpacity(.3)), + child: Row( + children: [ + Icon(Icons.photo, color: Colors.white), + Text( + 'Edit', + style: TextStyle(color: Colors.white, fontSize: 12), + ) + ], + ), + ), + ), ], - )), - HeaderPanel(memberInformationList), - ProfilePanle(memberInformationList) - ]), + ), + ), + HeaderPanel(memberInformationList), + ProfilePanle(memberInformationList) + ], + ), ) ])); } - startImageSheet() { + void startImageSheet() { showMyBottomSheet(context, child: Column( children: [ @@ -97,7 +113,7 @@ class _ProfileScreenState extends State { padding: EdgeInsets.only(left: 20, right: 20), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [Text('OK'), Text('CANCEL')], + children: [Text(LocaleKeys.ok.tr()), Text(LocaleKeys.cancel.tr())], )), BottomSheetItem( onTap: () { diff --git a/lib/ui/screens/profile/widgets/header.dart b/lib/ui/screens/profile/widgets/header.dart index ca3d829..abd5ce6 100644 --- a/lib/ui/screens/profile/widgets/header.dart +++ b/lib/ui/screens/profile/widgets/header.dart @@ -4,16 +4,19 @@ import 'package:mohem_flutter_app/models/member_information_list_model.dart'; class HeaderPanel extends StatelessWidget { HeaderPanel(this.memberInformationList); + late MemberInformationListModel memberInformationList; + @override Widget build(BuildContext context) { double _width = MediaQuery.of(context).size.width; return Container( - padding: EdgeInsets.symmetric(horizontal: _width / 10, vertical: 0), - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [], - )); + padding: EdgeInsets.symmetric(horizontal: _width / 10, vertical: 0), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [], + ), + ); } } diff --git a/lib/ui/screens/profile/widgets/profile_info.dart b/lib/ui/screens/profile/widgets/profile_info.dart index 6f30b7a..029e50a 100644 --- a/lib/ui/screens/profile/widgets/profile_info.dart +++ b/lib/ui/screens/profile/widgets/profile_info.dart @@ -3,89 +3,109 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart'; import 'package:mohem_flutter_app/models/member_information_list_model.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:mohem_flutter_app/models/profile_menu.model.dart'; +import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; +import 'package:provider/provider.dart'; -class ProfileInFo extends StatelessWidget { +// todo '@sultan' kindly follow structure of code written. use extension methods for widgets, also format code + +class ProfileInFo extends StatefulWidget { ProfileInFo(this.memberInfo); + MemberInformationListModel memberInfo; + + @override + State createState() => _ProfileInFoState(); +} + +class _ProfileInFoState extends State { + static List menuData = []; String data = '.'; double sliderValue = 75; List menu = [ - ProfileMenu(name: LocaleKeys.profile_personalInformation.tr(), icon: 'personal-info.svg', route: AppRoutes.personalInfo, dynamicUrl: ''), - ProfileMenu( - name: LocaleKeys.profile_basicDetails.tr(), - icon: 'basic-details.svg', - route: AppRoutes.basicDetails, - ), - ProfileMenu(name: LocaleKeys.profile_contactDetails.tr(), icon: 'contact-details.svg', route: AppRoutes.contactDetails, dynamicUrl: ''), - ProfileMenu(name: LocaleKeys.profile_familyDetails.tr(), icon: 'family-members.svg', route: AppRoutes.familyMembers, dynamicUrl: ''), + ProfileMenu(name: LocaleKeys.profile_personalInformation.tr(), icon: 'personal-info.svg', route: AppRoutes.personalInfo, dynamicUrl: '', menuEntries: getMenuEntries('')), + ProfileMenu(name: LocaleKeys.profile_basicDetails.tr(), icon: 'basic-details.svg', route: AppRoutes.basicDetails, menuEntries: getMenuEntries('BASIC_DETAILS')), + ProfileMenu(name: LocaleKeys.profile_contactDetails.tr(), icon: 'contact-details.svg', route: AppRoutes.contactDetails, dynamicUrl: '', menuEntries: getMenuEntries('ADDRESS')), + ProfileMenu(name: LocaleKeys.profile_familyDetails.tr(), icon: 'family-members.svg', route: AppRoutes.familyMembers, dynamicUrl: '', menuEntries: getMenuEntries('CONTACT')), ]; + + @override + void setState(VoidCallback fn) { + super.setState(fn); + } + @override Widget build(BuildContext context) { return Container( - child: Column(crossAxisAlignment: CrossAxisAlignment.center, children: [ - /// card header - customLabel(memberInfo.eMPLOYEENAME.toString(), 22, Colors.black, true), - - customLabel(memberInfo.eMPLOYEENUMBER.toString() + ' | ' + memberInfo.jOBNAME.toString(), 14, Colors.grey, false), - - customLabel(memberInfo.eMPLOYEEEMAILADDRESS.toString(), 13, Colors.black, true), - - Divider(height: 40, thickness: 8, color: const Color(0xffefefef)), - - customLabel(LocaleKeys.completingYear.tr(), 10, Colors.black, true), - - SizedBox(height: 10), - Container( - child: Row(mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Column( - children: [customLabel(LocaleKeys.year.tr(), 14, const Color(0xff808080), true), customLabel(memberInfo.sERVICEYEARS.toString().padLeft(2, '0'), 22, Color(0xff2BB8A6), true)], - ), - Column( - children: [customLabel(LocaleKeys.month.tr(), 14, const Color(0xff808080), true), customLabel(memberInfo.sERVICEMONTHS.toString().padLeft(2, '0'), 22, Color(0xff2BB8A6), true)], - ), - Column( - children: [customLabel(LocaleKeys.day.tr(), 14, const Color(0xff808080), true), customLabel(memberInfo.sERVICEDAYS.toString().padLeft(2, '0'), 22, Color(0xff2BB8A6), true)], - ) - ])), - - Divider(height: 40, thickness: 8, color: const Color(0xffefefef)), - Container( - padding: EdgeInsets.only( - left: 20, - right: 20, + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + /// card header + customLabel(widget.memberInfo.eMPLOYEENAME.toString(), 22, Colors.black, true), + + customLabel(widget.memberInfo.eMPLOYEENUMBER.toString() + ' | ' + widget.memberInfo.jOBNAME.toString(), 14, Colors.grey, false), + + customLabel(widget.memberInfo.eMPLOYEEEMAILADDRESS.toString(), 13, Colors.black, true), + + Divider(height: 40, thickness: 8, color: const Color(0xffefefef)), + + customLabel(LocaleKeys.completingYear.tr(), 10, Colors.black, true), + + SizedBox(height: 10), + Container( + child: Row(mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.center, children: [ + Column( + children: [customLabel(LocaleKeys.year.tr(), 14, const Color(0xff808080), true), customLabel(widget.memberInfo.sERVICEYEARS.toString().padLeft(2, '0'), 22, Color(0xff2BB8A6), true)], + ), + Column( + children: [customLabel(LocaleKeys.month.tr(), 14, const Color(0xff808080), true), customLabel(widget.memberInfo.sERVICEMONTHS.toString().padLeft(2, '0'), 22, Color(0xff2BB8A6), true)], + ), + Column( + children: [customLabel(LocaleKeys.day.tr(), 14, const Color(0xff808080), true), customLabel(widget.memberInfo.sERVICEDAYS.toString().padLeft(2, '0'), 22, Color(0xff2BB8A6), true)], + ) + ])), + + Divider(height: 40, thickness: 8, color: const Color(0xffefefef)), + Container( + padding: EdgeInsets.only( + left: 20, + right: 20, + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + customLabel(LocaleKeys.profile_profileCompletionPer.tr() + ' 75%', 18, Colors.black, true), + const SizedBox(height: 10), + Row( + children: [ + for (var i = 0; i < 4; i++) + if (i < 3) Expanded(child: drawSlider(Color(0xff2BB8A6))) else Expanded(child: drawSlider(const Color(0xffefefef))) + ], + ), + const SizedBox(height: 10), + Text( + LocaleKeys.profile_completeProfile.tr(), + style: TextStyle(color: Color(0xff2BB8A6), fontWeight: FontWeight.bold, decoration: TextDecoration.underline), + ), + ], + ), ), - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - customLabel(LocaleKeys.profile_profileCompletionPer.tr() + ' 75%', 18, Colors.black, true), - const SizedBox(height: 10), - Row( - children: [ - for (var i = 0; i < 4; i++) - if (i < 3) Expanded(child: drawSlider(Color(0xff2BB8A6))) else Expanded(child: drawSlider(const Color(0xffefefef))) - ], - ), - const SizedBox(height: 10), - Text( - LocaleKeys.profile_completeProfile.tr(), - style: TextStyle(color: Color(0xff2BB8A6), fontWeight: FontWeight.bold, decoration: TextDecoration.underline), - ), - ], - )), - /// description - Divider(height: 50, thickness: 8, color: const Color(0xffefefef)), + /// description + Divider(height: 50, thickness: 8, color: const Color(0xffefefef)), - Column( - children: menu.map((i) => rowItem(i, context)).toList(), - ) - ])); + Column( + children: menu.map((i) => rowItem(i, context)).toList(), + ) + ], + ), + ); } Widget drawSlider(color) { @@ -129,3 +149,12 @@ class ProfileInFo extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, children: [Text(label, style: TextStyle(color: color, fontSize: size, fontWeight: isBold ? FontWeight.bold : FontWeight.normal))])); } + +GetMenuEntriesList getMenuEntries(String type) { + List data = _ProfileInFoState.menuData.where((GetMenuEntriesList test) => test.functionName == type).toList(); + if (data.isNotEmpty) { + return data[0]; + } else { + return GetMenuEntriesList(); + } +} diff --git a/lib/ui/screens/profile/widgets/profile_panel.dart b/lib/ui/screens/profile/widgets/profile_panel.dart index fd99abb..1facf52 100644 --- a/lib/ui/screens/profile/widgets/profile_panel.dart +++ b/lib/ui/screens/profile/widgets/profile_panel.dart @@ -6,7 +6,9 @@ import 'package:mohem_flutter_app/ui/screens/profile/widgets/profile_info.dart'; class ProfilePanle extends StatelessWidget { ProfilePanle(this.memberInformationList); + late MemberInformationListModel memberInformationList; + @override Widget build(BuildContext context) { double _width = MediaQuery.of(context).size.width; @@ -19,9 +21,10 @@ class ProfilePanle extends StatelessWidget { margin: EdgeInsets.only(top: 50), padding: EdgeInsets.only(top: 50), decoration: BoxDecoration( - color: Colors.white, - borderRadius: const BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), - boxShadow: [BoxShadow(color: Colors.white60, blurRadius: 10, spreadRadius: 10)]), + color: Colors.white, + borderRadius: const BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), + boxShadow: [BoxShadow(color: Colors.white60, blurRadius: 10, spreadRadius: 10)], + ), child: ProfileInFo(memberInformationList), ), Container(height: 100, alignment: Alignment.center, child: ProfileImage()) diff --git a/lib/ui/work_list/itg_fragments/approval_level_fragment.dart b/lib/ui/work_list/itg_fragments/approval_level_fragment.dart index c09b62e..027d8ca 100644 --- a/lib/ui/work_list/itg_fragments/approval_level_fragment.dart +++ b/lib/ui/work_list/itg_fragments/approval_level_fragment.dart @@ -6,7 +6,6 @@ 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/itg_forms_models/wf_history_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'; diff --git a/lib/ui/work_list/sheets/delegate_sheet.dart b/lib/ui/work_list/sheets/delegate_sheet.dart index 4ce032c..1923c27 100644 --- a/lib/ui/work_list/sheets/delegate_sheet.dart +++ b/lib/ui/work_list/sheets/delegate_sheet.dart @@ -5,8 +5,12 @@ import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/worklist/worklist_api_client.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; -import 'package:mohem_flutter_app/extensions/string_extensions.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/models/generic_response_model.dart'; +import 'package:mohem_flutter_app/models/get_action_history_list_model.dart'; +import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart'; import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart'; import 'package:mohem_flutter_app/ui/work_list/sheets/search_options_sheet.dart'; import 'package:mohem_flutter_app/ui/work_list/sheets/selected_item_sheet.dart'; @@ -14,19 +18,13 @@ import 'package:mohem_flutter_app/widgets/bottom_sheet.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/circular_avatar.dart'; import 'package:mohem_flutter_app/widgets/input_widget.dart'; -import 'package:mohem_flutter_app/widgets/radio/show_radio.dart'; -import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; - -import '../../../models/generic_response_model.dart'; -import '../../../models/get_action_history_list_model.dart'; -import '../../../models/worklist/get_favorite_replacements_model.dart'; class DelegateSheet extends StatefulWidget { int? notificationID; - String title,apiMode; + String title, apiMode; List? actionHistoryList; - DelegateSheet({required this.title,required this.apiMode,this.notificationID, this.actionHistoryList}); + DelegateSheet({required this.title, required this.apiMode, this.notificationID, this.actionHistoryList}); @override State createState() => _DelegateSheetState(); @@ -69,7 +67,7 @@ class _DelegateSheetState extends State { return null; } - fetchChangeFav({required String email, required String employeName, required String image, required String userName, bool isFav = false, bool isNeedToRefresh = false}) async { + void fetchChangeFav({required String email, required String employeName, required String image, required String userName, bool isFav = false, bool isNeedToRefresh = false}) async { Utils.showLoading(context); favLetters = null; selectedFavLetter = null; diff --git a/lib/ui/work_list/sheets/search_options_sheet.dart b/lib/ui/work_list/sheets/search_options_sheet.dart index d773d62..9b794bb 100644 --- a/lib/ui/work_list/sheets/search_options_sheet.dart +++ b/lib/ui/work_list/sheets/search_options_sheet.dart @@ -1,10 +1,9 @@ import 'package:flutter/material.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 '../../../classes/colors.dart'; -import '../../../widgets/radio/show_radio.dart'; +import 'package:mohem_flutter_app/widgets/radio/show_radio.dart'; class SearchOptionsSheet extends StatelessWidget { String selectedType; diff --git a/lib/ui/work_list/sheets/selected_item_sheet.dart b/lib/ui/work_list/sheets/selected_item_sheet.dart index 3c9af9b..aadec34 100644 --- a/lib/ui/work_list/sheets/selected_item_sheet.dart +++ b/lib/ui/work_list/sheets/selected_item_sheet.dart @@ -1,19 +1,15 @@ import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/worklist/worklist_api_client.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; -import 'package:mohem_flutter_app/extensions/string_extensions.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/models/get_action_history_list_model.dart'; +import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart'; +import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/circular_avatar.dart'; import 'package:mohem_flutter_app/widgets/input_widget.dart'; -import 'package:mohem_flutter_app/widgets/radio/show_radio.dart'; -import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; - -import '../../../app_state/app_state.dart'; -import '../../../classes/utils.dart'; -import '../../../models/get_action_history_list_model.dart'; -import '../../../models/worklist/get_favorite_replacements_model.dart'; -import '../../../models/worklist/replacement_list_model.dart'; class SelectedItemSheet extends StatelessWidget { String title, apiMode; @@ -115,13 +111,13 @@ class SelectedItemSheet extends StatelessWidget { Future performNetworkCall(BuildContext context, {String? email, String? userId}) async { Utils.showLoading(context); - try{ + try { await WorkListApiClient().submitComment(comment: comment, email: email, userId: userId, notificationId: notificationID, apiMode: apiMode); Utils.hideLoading(context); Navigator.pop(context); Navigator.pop(context); Navigator.pop(context, "delegate_reload"); - }catch (ex) { + } catch (ex) { Utils.hideLoading(context); Utils.handleException(ex, context, null); } diff --git a/lib/ui/work_list/worklist_detail_screen.dart b/lib/ui/work_list/worklist_detail_screen.dart index 176cb41..d2a0e0b 100644 --- a/lib/ui/work_list/worklist_detail_screen.dart +++ b/lib/ui/work_list/worklist_detail_screen.dart @@ -23,6 +23,10 @@ import 'package:mohem_flutter_app/models/get_stamp_ms_notification_body_list_mod import 'package:mohem_flutter_app/models/get_stamp_ns_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/hr/eit_otification_body_model.dart'; +import 'package:mohem_flutter_app/models/worklist/hr/get_basic_det_ntf_body_list_model.dart'; +import 'package:mohem_flutter_app/models/worklist/hr/get_contact_notification_body_list_model.dart'; +import 'package:mohem_flutter_app/models/worklist/hr/get_phones_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/worklist_response_model.dart'; import 'package:mohem_flutter_app/ui/work_list/sheets/delegate_sheet.dart'; import 'package:mohem_flutter_app/ui/work_list/worklist_fragments/actions_fragment.dart'; @@ -31,15 +35,10 @@ import 'package:mohem_flutter_app/ui/work_list/worklist_fragments/detail_fragmen import 'package:mohem_flutter_app/ui/work_list/worklist_fragments/info_fragments.dart'; import 'package:mohem_flutter_app/ui/work_list/worklist_fragments/request_fragment.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'package:mohem_flutter_app/widgets/bottom_sheet.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/dialogs/accept_reject_input_dialog.dart'; - -import '../../models/worklist/hr/eit_otification_body_model.dart'; -import '../../models/worklist/hr/get_basic_det_ntf_body_list_model.dart'; -import '../../models/worklist/hr/get_contact_notification_body_list_model.dart'; -import '../../models/worklist/hr/get_phones_notification_body_list_model.dart'; -import '../../widgets/bottom_sheet.dart'; -import '../../widgets/dialogs/confirm_dialog.dart'; +import 'package:mohem_flutter_app/widgets/dialogs/confirm_dialog.dart'; class WorkListDetailScreen extends StatefulWidget { WorkListDetailScreen({Key? key}) : super(key: key); @@ -396,8 +395,8 @@ class _WorkListDetailScreenState extends State { showDialog( context: context, builder: (cxt) => ConfirmDialog( - message: "Are you sure want to reject?", - okTitle: "Reject", + message: LocaleKeys.wantToReject.tr(), + okTitle: LocaleKeys.reject.tr(), onTap: () async { Navigator.pop(cxt); Utils.showLoading(context); @@ -486,7 +485,7 @@ class _WorkListDetailScreenState extends State { "P_APPROVER_INDEX": null, "P_COMMENTS": "", "P_FORWARD_TO_USER_NAME": "", - "P_NOTIFICATION_ID": workListData!.nOTIFICATIONID!, + "P_NOTIFICATION_ID": workListData!.nOTIFICATIONID, "RespondAttributeList": [ if (notificationNoteInput != null) {notificationNoteInput!.attributeName: note} ], diff --git a/lib/ui/work_list/worklist_fragments/actions_fragment.dart b/lib/ui/work_list/worklist_fragments/actions_fragment.dart index 056ca1f..db40be1 100644 --- a/lib/ui/work_list/worklist_fragments/actions_fragment.dart +++ b/lib/ui/work_list/worklist_fragments/actions_fragment.dart @@ -8,7 +8,6 @@ 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'; @@ -126,9 +125,3 @@ class ActionsFragment extends StatelessWidget { } } } - -List actionsList = [ - Colors.black, - Colors.red, - Colors.green, -]; diff --git a/lib/ui/work_list/worklist_fragments/info_fragments.dart b/lib/ui/work_list/worklist_fragments/info_fragments.dart index 5156a33..bc47989 100644 --- a/lib/ui/work_list/worklist_fragments/info_fragments.dart +++ b/lib/ui/work_list/worklist_fragments/info_fragments.dart @@ -1,6 +1,5 @@ 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'; @@ -11,14 +10,13 @@ import 'package:mohem_flutter_app/models/get_item_creation_ntf_body_list_model.d import 'package:mohem_flutter_app/models/get_po_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/get_stamp_ms_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/get_stamp_ns_notification_body_list_model.dart'; +import 'package:mohem_flutter_app/models/worklist/hr/eit_otification_body_model.dart'; +import 'package:mohem_flutter_app/models/worklist/hr/get_basic_det_ntf_body_list_model.dart'; +import 'package:mohem_flutter_app/models/worklist/hr/get_contact_notification_body_list_model.dart'; +import 'package:mohem_flutter_app/models/worklist/hr/get_phones_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/worklist_response_model.dart'; import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart'; -import '../../../models/worklist/hr/eit_otification_body_model.dart'; -import '../../../models/worklist/hr/get_basic_det_ntf_body_list_model.dart'; -import '../../../models/worklist/hr/get_contact_notification_body_list_model.dart'; -import '../../../models/worklist/hr/get_phones_notification_body_list_model.dart'; - class InfoFragment extends StatelessWidget { WorkListResponseModel? workListData; List poHeaderList; diff --git a/lib/widgets/Updater.dart b/lib/widgets/Updater.dart index 154173d..82cc172 100644 --- a/lib/widgets/Updater.dart +++ b/lib/widgets/Updater.dart @@ -28,7 +28,7 @@ class Updater extends StatelessWidget{ }); } - pushData(T? data) { + void pushData(T? data) { _history.add(data); sink?.sink.add(data); } diff --git a/lib/widgets/app_logo.dart b/lib/widgets/app_logo.dart index 1c0bc37..3140c29 100644 --- a/lib/widgets/app_logo.dart +++ b/lib/widgets/app_logo.dart @@ -1,19 +1,26 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; class AppLogo extends StatelessWidget { AppLogo({Key? key}) : super(key: key); @override Widget build(BuildContext context) { - // TODO: implement build - return Row(children: [ - SvgPicture.asset( - "assets/mohemm_logo.svg", - height: 100, - width: 100, - alignment: Alignment.centerRight, - ), - ],); + return Row( + children: [ + SvgPicture.asset( + "assets/mohemm_logo.svg", + height: 48, + width: 48, + alignment: Alignment.centerRight, + ), + 8.width, + LocaleKeys.mohemm.tr().toText14() + ], + ); } } diff --git a/lib/widgets/bottom_sheet.dart b/lib/widgets/bottom_sheet.dart index f0bf3f8..d151afc 100644 --- a/lib/widgets/bottom_sheet.dart +++ b/lib/widgets/bottom_sheet.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; -showMyBottomSheet(BuildContext context, {required Widget child}) { +void showMyBottomSheet(BuildContext context, {required Widget child}) { showModalBottomSheet( context: context, isScrollControlled: true, diff --git a/lib/widgets/circular_step_progress_bar.dart b/lib/widgets/circular_step_progress_bar.dart index 75724c8..6789aed 100644 --- a/lib/widgets/circular_step_progress_bar.dart +++ b/lib/widgets/circular_step_progress_bar.dart @@ -502,7 +502,7 @@ class _CircularIndicatorPainter implements CustomPainter { void removeListener(listener) {} @override - get semanticsBuilder => null; + Null get semanticsBuilder => null; @override bool shouldRebuildSemantics(CustomPainter oldDelegate) => false; diff --git a/lib/widgets/dialogs/dialogs.dart b/lib/widgets/dialogs/dialogs.dart new file mode 100644 index 0000000..9a5a822 --- /dev/null +++ b/lib/widgets/dialogs/dialogs.dart @@ -0,0 +1,16 @@ +import 'package:flutter/material.dart'; + +void showMDialog( + context, { + Widget? child, +}) async { + return showDialog( + context: context, + barrierDismissible: true, + builder: (context) { + return Dialog( + child: child, + ); + }, + ); +} diff --git a/lib/widgets/location/Location.dart b/lib/widgets/location/Location.dart index bd39e2e..8456fd2 100644 --- a/lib/widgets/location/Location.dart +++ b/lib/widgets/location/Location.dart @@ -1,23 +1,22 @@ import 'dart:async'; import 'dart:math'; import 'dart:ui'; + import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:geolocator/geolocator.dart'; import 'package:google_directions_api/google_directions_api.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:mohem_flutter_app/classes/app_permissions.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/theme/colors.dart'; // import 'package:geodesy/geodesy.dart' as geodesy; -import '../../classes/app_permissions.dart'; -import '../../theme/colors.dart'; - - //Created By Mr.Zohaib class Location { static _Map map = _Map(); - static havePermission(Function(bool) callback) { + static void havePermission(Function(bool) callback) { Geolocator.checkPermission().then((value) async { if (value == LocationPermission.denied) { value = await Geolocator.requestPermission(); @@ -28,13 +27,13 @@ class Location { }); } - static isEnabled(Function(bool) callback) { + static void isEnabled(Function(bool) callback) { Geolocator.isLocationServiceEnabled().then((value) => callback(value)); } static bool _listeningSettingChange = true; - static listenGPS({bool change = true, Function(bool)? onChange}) async { + static void listenGPS({bool change = true, Function(bool)? onChange}) async { _listeningSettingChange = change; if (change == false) return; @@ -46,8 +45,8 @@ class Location { }); } - static getCurrentLocation(Function(LatLng?) callback) { - done(Position position) { + static void getCurrentLocation(Function(LatLng?) callback) { + void done(Position position) { //AppStorage.sp.saveLocation(position); LatLng? myCurrentLocation = LatLng(position.latitude, position.longitude); @@ -55,8 +54,7 @@ class Location { } AppPermissions.location((granted) { - - if (granted) + if (granted) { Geolocator.getLastKnownPosition(forceAndroidLocationManager: true).then((value) { if (value == null) { Geolocator.getCurrentPosition().then((value) { @@ -66,6 +64,7 @@ class Location { done(value); } }); + } }); } @@ -125,20 +124,20 @@ class _Map { return camera; } - moveCamera(CameraPosition camera, @required Completer mapController, bool animation) { + void moveCamera(CameraPosition camera, @required Completer mapController, bool animation) { mapController.future.then((controller) { animation ? controller.animateCamera(CameraUpdate.newCameraPosition(camera)) : controller.moveCamera(CameraUpdate.newCameraPosition(camera)); }); } - scrollBy({double x = 0, double y = 0, required Completer mapController, bool animation = true}) { + void scrollBy({double x = 0, double y = 0, required Completer mapController, bool animation = true}) { var camera = CameraUpdate.scrollBy(x, y); mapController.future.then((controller) { animation ? controller.animateCamera(camera) : controller.moveCamera(camera); }); } - goToCurrentLocation({Completer? mapController, double? direction = 0.0, bool? animation}) { + void goToCurrentLocation({Completer? mapController, double? direction = 0.0, bool? animation}) { Location.getCurrentLocation((location) { moveTo(location!, zoom: 17, mapController: mapController!, animation: animation, direction: direction!); }); @@ -146,7 +145,7 @@ class _Map { var routes = Map(); - setRoutePolylines(LatLng? source, LatLng? destination, Set polylines, Completer mapController, Function(DirectionsRoute?) completion) { + void setRoutePolylines(LatLng? source, LatLng? destination, Set polylines, Completer mapController, Function(DirectionsRoute?) completion) { if (source == null || destination == null) { completion(null); return; @@ -156,7 +155,7 @@ class _Map { var destin = '${destination.latitude},${destination.longitude}'; var routeId = '$origin->$destination'; - createPolyline(DirectionsRoute results) { + void createPolyline(DirectionsRoute results) { List polylineCoordinates = results.overviewPath!.map((e) => LatLng(e.latitude, e.longitude)).toList(); PolylineId id = PolylineId("route"); Polyline polyline = Polyline( @@ -221,7 +220,7 @@ class _Map { return LatLngBounds(northeast: LatLng(x1!, y1!), southwest: LatLng(x0!, y0!)); } - focusCameraToLatLngBounds({LatLngBounds? bound, Completer? mapController, double? padding}) async { + void focusCameraToLatLngBounds({LatLngBounds? bound, Completer? mapController, double? padding}) async { if (bound == null) return; CameraUpdate camera = CameraUpdate.newLatLngBounds(bound, padding!); @@ -229,7 +228,7 @@ class _Map { controller.animateCamera(camera); } - focusCameraTo2Points({LatLng? point1, LatLng? point2, Completer? mapController, double? padding}) async { + void focusCameraTo2Points({LatLng? point1, LatLng? point2, Completer? mapController, double? padding}) async { var source = point1; var destination = point2; if (source != null && destination != null) { diff --git a/lib/widgets/otp_widget.dart b/lib/widgets/otp_widget.dart index a489e61..e90308d 100644 --- a/lib/widgets/otp_widget.dart +++ b/lib/widgets/otp_widget.dart @@ -108,7 +108,7 @@ class OTPWidgetState extends State with SingleTickerProviderStateMixi } } - _calculateStrList() { + void calculateStrList() { if (strList.length > widget.maxLength) { strList.length = widget.maxLength; } @@ -123,7 +123,7 @@ class OTPWidgetState extends State with SingleTickerProviderStateMixi focusNode = widget.focusNode ?? FocusNode(); _initTextController(); - _calculateStrList(); + calculateStrList(); widget.controller?.addListener(_controllerListener); focusNode?.addListener(_focusListener); } @@ -291,7 +291,7 @@ class OTPWidgetState extends State with SingleTickerProviderStateMixi } Widget _pinBoxRow(BuildContext context) { - _calculateStrList(); + calculateStrList(); List pinCodes = List.generate(widget.maxLength, (int i) { return _buildPinCode(i, context); }); diff --git a/lib/widgets/qr_scanner_dialog.dart b/lib/widgets/qr_scanner_dialog.dart new file mode 100644 index 0000000..6082d4c --- /dev/null +++ b/lib/widgets/qr_scanner_dialog.dart @@ -0,0 +1,78 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:qr_code_scanner/qr_code_scanner.dart'; + +import 'package:mohem_flutter_app/widgets/button/default_button.dart'; + +class QrScannerDialog extends StatefulWidget { + @override + State createState() => _QrScannerDialogState(); +} + +class _QrScannerDialogState extends State { + final GlobalKey qrKey = GlobalKey(debugLabel: 'QR'); + Barcode? result; + QRViewController? controller; + bool isPicked = false; + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Container( + width: double.infinity, + height: double.infinity, + color: Colors.white, + child: Column( + children: [ + Expanded( + flex: 1, + child: QRView( + key: qrKey, + onQRViewCreated: _onQRViewCreated, + ), + ), + // Expanded( + // flex: 1, + // child: Center( + // child: (result != null) + // ? Text( + // 'Barcode Type: ${result!.format} Data: ${result!.code}') + // : Text('Scan a code'), + // ), + // ), + Padding( + padding: const EdgeInsets.all(12.0), + child: DefaultButton( + LocaleKeys.cancel.tr(), + () { + Navigator.pop(context); + }, + ), + ), + ], + ), + ), + ); + } + + void _onQRViewCreated(QRViewController controller) { + this.controller = controller; + + controller.scannedDataStream.listen((scanData) { + setState(() { + result = scanData; + if (!isPicked) { + isPicked = true; + Navigator.pop(context, result!.code); + } + }); + }); + } + + @override + void dispose() { + controller?.dispose(); + super.dispose(); + } +} diff --git a/lib/widgets/shimmer/dashboard_shimmer_widget.dart b/lib/widgets/shimmer/dashboard_shimmer_widget.dart index 5b5bd60..cd5d88f 100644 --- a/lib/widgets/shimmer/dashboard_shimmer_widget.dart +++ b/lib/widgets/shimmer/dashboard_shimmer_widget.dart @@ -174,7 +174,7 @@ class ServicesMenuShimmer extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.end, children: [ Expanded( - child: "Attendance".toText11(isBold: false).toShimmer(), + child: LocaleKeys.attendance.tr().toText11(isBold: false).toShimmer(), ), 6.width, SvgPicture.asset("assets/images/arrow_next.svg").paddingOnly(bottom: 4).toShimmer() diff --git a/pubspec.yaml b/pubspec.yaml index 6601587..8346c5c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -40,7 +40,7 @@ dependencies: easy_localization: ^3.0.0 http: ^0.13.4 permission_handler: ^9.2.0 - flutter_svg: ^0.23.0+1 + flutter_svg: any sizer: ^2.0.15 local_auth: ^1.1.9 fluttertoast: ^8.0.8 @@ -68,6 +68,14 @@ dependencies: open_file: ^3.2.1 wifi_iot: ^0.3.16 flutter_html: ^2.2.1 +# flutter_barcode_scanner: ^2.0.0 + qr_code_scanner: ^1.0.0 + qr_flutter: ^4.0.0 + + + + + url_launcher: ^6.0.15 dev_dependencies: