Merge branch 'master' of https://gitlab.com/mirza.shafique/mohem_flutter_app into development_sultan

merge-requests/1/merge
Sultan Khan 3 years ago
commit 06b14394bd

@ -9,6 +9,13 @@
# packages, and plugins designed to encourage good coding practices. # packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml include: package:flutter_lints/flutter.yaml
analyzer:
errors:
always_use_package_imports: error
camel_case_types: error
always_declare_return_types: error
linter: linter:
# The lint rules applied to this project can be customized in the # The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml` # section below to disable rules from the `package:flutter_lints/flutter.yaml`
@ -25,6 +32,13 @@ linter:
always_specify_types: true always_specify_types: true
always_declare_return_types: true always_declare_return_types: true
always_use_package_imports: true always_use_package_imports: true
avoid_unnecessary_containers: true
unnecessary_this: true
unnecessary_new: true
camel_case_types: true
sort_child_properties_last: true
camel_case_extensions : true
require_trailing_commas: true
avoid_empty_else: true avoid_empty_else: true
avoid_annotating_with_dynamic: true avoid_annotating_with_dynamic: true
# avoid_print: false # Uncomment to disable the `avoid_print` rule # avoid_print: false # Uncomment to disable the `avoid_print` rule

@ -0,0 +1,8 @@
<svg id="user_21_" data-name="user (21)" xmlns="http://www.w3.org/2000/svg" width="110.999" height="110.999" viewBox="0 0 110.999 110.999">
<path id="Path_4696" data-name="Path 4696" d="M272.482,267.883a25.756,25.756,0,0,0,5.549-15.868,26.015,26.015,0,1,0-26.015,26.015,25.756,25.756,0,0,0,15.868-5.549l14.569,14.569a3.252,3.252,0,1,0,4.6-4.6ZM260.818,256.22a3.252,3.252,0,1,1-4.6,4.6l-4.2-4.2-4.2,4.2a3.252,3.252,0,0,1-4.6-4.6l4.2-4.2-4.2-4.2a3.252,3.252,0,0,1,4.6-4.6l4.2,4.2,4.2-4.2a3.252,3.252,0,1,1,4.6,4.6l-4.2,4.2Z" transform="translate(-177.004 -177.004)" fill="#ddd"/>
<circle id="Ellipse_165" data-name="Ellipse 165" cx="3.5" cy="3.5" r="3.5" transform="translate(35.5 19.499)" fill="#ddd"/>
<path id="Path_4697" data-name="Path 4697" d="M197.516,362h0Z" transform="translate(-154.695 -283.52)" fill="#ddd"/>
<path id="Path_4698" data-name="Path 4698" d="M197.516,332h0Z" transform="translate(-154.695 -260.021)" fill="#ddd"/>
<path id="Path_4699" data-name="Path 4699" d="M3.252,111H75.011a3.25,3.25,0,0,0,3.252-3.252v-.329a31.763,31.763,0,0,1-3.252.329,32.393,32.393,0,0,1-23.165-9.756H16.476a3.252,3.252,0,0,1,0-6.5H47.016v0a32.2,32.2,0,0,1-2.865-6.507H16.476a3.252,3.252,0,0,1,0-6.5H42.821c-.454-4.484-.454-2.022,0-6.5H16.476a3.252,3.252,0,1,1,0-6.5H44.152a32.468,32.468,0,0,1,7.694-13.009H26.232a3.25,3.25,0,0,1-3.252-3.252V45.96A13.021,13.021,0,0,1,35.988,32.953H39.24A9.756,9.756,0,1,1,49,23.2a9.767,9.767,0,0,1-9.756,9.756h3.252A13.021,13.021,0,0,1,55.5,45.96v3.252c0,.071-.036.13-.04.2a32.2,32.2,0,0,1,19.552-6.7,31.762,31.762,0,0,1,3.252.329V3.252A3.25,3.25,0,0,0,75.011,0H3.252A3.25,3.25,0,0,0,0,3.252v104.5A3.25,3.25,0,0,0,3.252,111Z" fill="#ddd"/>
<path id="Path_4700" data-name="Path 4700" d="M142.5,182a6.512,6.512,0,0,0-6.5,6.5h19.512a6.512,6.512,0,0,0-6.5-6.5Z" transform="translate(-106.516 -142.543)" fill="#ddd"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -251,6 +251,18 @@
"writeComment": "أكتب تعليقا", "writeComment": "أكتب تعليقا",
"approversList": "قائمة الموافقين", "approversList": "قائمة الموافقين",
"yourRequestHasBeenSubmittedForApprovals": "تم تقديم طلبك للموافقات", "yourRequestHasBeenSubmittedForApprovals": "تم تقديم طلبك للموافقات",
"monthlyPaySlip": "قسيمة الراتب الشهرية",
"particular": "خاص",
"earnings": "أرباح",
"deductions": "الخصومات",
"paymentMethodName": "اسم طريقة الدفع",
"bankName": "اسم البنك",
"branchCode": "رمز الفرع",
"accountNo": "رقم الحساب",
"summaryOfInformation": "ملخص المعلومات",
"totalPayAmount": "المبلغ الإجمالي للدفع",
"paymentInformation": "معلومات الدفع",
"amount": "مقدار",
"profile": { "profile": {
"reset_password": { "reset_password": {
"label": "Reset Password", "label": "Reset Password",
@ -275,14 +287,6 @@
"many": "You clicked {} times!", "many": "You clicked {} times!",
"other": "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": { "gender": {
"male": "Hi man ;) ", "male": "Hi man ;) ",
"female": "Hello girl :)", "female": "Hello girl :)",

@ -252,6 +252,18 @@
"writeComment": "Write a comment", "writeComment": "Write a comment",
"approversList": "Approvers List", "approversList": "Approvers List",
"yourRequestHasBeenSubmittedForApprovals": "Your request has been submitted for approvals", "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",
"profile": { "profile": {
"reset_password": { "reset_password": {
"label": "Reset Password", "label": "Reset Password",
@ -276,14 +288,6 @@
"many": "You clicked {} times!", "many": "You clicked {} times!",
"other": "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": { "gender": {
"male": "Hi man ;) ", "male": "Hi man ;) ",
"female": "Hello girl :)", "female": "Hello girl :)",

@ -7,8 +7,7 @@ import 'package:http/http.dart';
import 'package:http/io_client.dart'; import 'package:http/io_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/exceptions/api_exception.dart'; import 'package:mohem_flutter_app/exceptions/api_exception.dart';
import 'package:mohem_flutter_app/main.dart';
import '../main.dart';
typedef FactoryConstructor<U> = U Function(dynamic); typedef FactoryConstructor<U> = U Function(dynamic);

@ -1,17 +1,13 @@
import 'dart:async'; 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/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/consts.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/get_attendance_tracking_list_model.dart';
import 'package:mohem_flutter_app/models/dashboard/itg_forms_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/generic_response_model.dart';
import 'package:mohem_flutter_app/models/member_login_list_model.dart';
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
import 'api_client.dart';
class DashboardApiClient { class DashboardApiClient {
static final DashboardApiClient _instance = DashboardApiClient._internal(); static final DashboardApiClient _instance = DashboardApiClient._internal();

@ -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/generic_response_model.dart';
import 'package:mohem_flutter_app/models/member_login_list_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 { class EITApiClient {
static final EITApiClient _instance = EITApiClient._internal(); static final EITApiClient _instance = EITApiClient._internal();
@ -24,7 +24,7 @@ class EITApiClient {
Map<String, dynamic> postParams = {'P_FUNCTION_NAME': functionName, "P_MENU_TYPE": "E", "P_PAGE_LIMIT": 50, "P_PAGE_NUM": 1}; Map<String, dynamic> postParams = {'P_FUNCTION_NAME': functionName, "P_MENU_TYPE": "E", "P_PAGE_LIMIT": 50, "P_PAGE_NUM": 1};
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
List<CollectionTransaction>? responseData = GET_EIT_Transactions_Model.fromJson(json['GetEITTransactionList'][0]).collectionTransaction; List<CollectionTransaction>? responseData = GetEitTransactionsModel.fromJson(json['GetEITTransactionList'][0]).collectionTransaction;
return responseData; return responseData;
}, url, postParams); }, url, postParams);
} }

@ -8,7 +8,7 @@ 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/get_mobile_login_info_list_model.dart';
import 'package:mohem_flutter_app/models/member_login_list_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 LoginApiClient { class LoginApiClient {
static final LoginApiClient _instance = LoginApiClient._internal(); static final LoginApiClient _instance = LoginApiClient._internal();

@ -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_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_schedule_shifts_details_list_model.dart';
import 'package:mohem_flutter_app/models/get_time_card_summary_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 { class MonthlyAttendanceApiClient {
static final MonthlyAttendanceApiClient _instance = MonthlyAttendanceApiClient._internal(); static final MonthlyAttendanceApiClient _instance = MonthlyAttendanceApiClient._internal();
@ -17,7 +18,6 @@ class MonthlyAttendanceApiClient {
factory MonthlyAttendanceApiClient() => _instance; factory MonthlyAttendanceApiClient() => _instance;
Future<GetTimeCardSummaryList?> getTimeCardSummary(String month, int year) async { Future<GetTimeCardSummaryList?> getTimeCardSummary(String month, int year) async {
String url = "${ApiConsts.erpRest}GET_TIME_CARD_SUMMARY"; String url = "${ApiConsts.erpRest}GET_TIME_CARD_SUMMARY";
Map<String, dynamic> postParams = { Map<String, dynamic> postParams = {

@ -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<List<GetPayslipList>> getPaySlip() async {
String url = "${ApiConsts.erpRest}GET_PAYSLIP";
Map<String, dynamic> 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<List<GetSummaryOfPaymentList>> getSummaryOfPayment(int pActionContextID) async {
String url = "${ApiConsts.erpRest}GET_SUMMARY_OF_PAYMENT";
Map<String, dynamic> 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<List<GetPaymentInformationList>> getPaymentInformation(int pActionContextID) async {
String url = "${ApiConsts.erpRest}GET_PAYMENT_INFORMATION";
Map<String, dynamic> 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<List<GetDeductionsList>> getDeductions(int pActionContextID) async {
String url = "${ApiConsts.erpRest}GET_DEDUCTIONS";
Map<String, dynamic> 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<List<GetEarningsList>> getEarnings(int pActionContextID) async {
String url = "${ApiConsts.erpRest}GET_EARNINGS";
Map<String, dynamic> 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);
}
}

@ -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_details.dart';
import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_transactions.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_transactions.dart';
import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_types.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_types.dart';
import 'package:mohem_flutter_app/models/mowadhafhi/get_tickets_list.dart';
import '../../models/mowadhafhi/get_tickets_list.dart';
class MowadhafhiApiClient { class MowadhafhiApiClient {
static final MowadhafhiApiClient _instance = MowadhafhiApiClient._internal(); static final MowadhafhiApiClient _instance = MowadhafhiApiClient._internal();
@ -115,7 +114,7 @@ class MowadhafhiApiClient {
String url = "${ApiConsts.cocRest}Mohemm_ITG_CreateTicketMobile"; String url = "${ApiConsts.cocRest}Mohemm_ITG_CreateTicketMobile";
Map<String, dynamic> postParams = { Map<String, dynamic> postParams = {
"EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER, "EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER,
"ItgImageCollList" : attachmentList, "ItgImageCollList": attachmentList,
"channelId": 3, "channelId": 3,
"departmentId": departmentID, "departmentId": departmentID,
"description": description, "description": description,

@ -9,7 +9,7 @@ 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/start_eit_approval_process_model.dart';
import 'package:mohem_flutter_app/models/submit_eit_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/submit_eit_transaction_list_model.dart';
import 'api_client.dart'; import 'package:mohem_flutter_app/api/api_client.dart';
class MyAttendanceApiClient { class MyAttendanceApiClient {
static final MyAttendanceApiClient _instance = MyAttendanceApiClient._internal(); static final MyAttendanceApiClient _instance = MyAttendanceApiClient._internal();

@ -0,0 +1,48 @@
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/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();
PendingTransactionsApiClient._internal();
factory PendingTransactionsApiClient() => _instance;
Future<List<GetPendingTransactionsFunctions>> getPendingReqFunctions() async {
String url = "${ApiConsts.erpRest}GET_PENDING_REQ_FUNCTIONS";
Map<String, dynamic> postParams = {};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getPendingTransactionsFunctions ?? [];
}, url, postParams);
}
Future<List<GetPendingTransactionsDetails>> getPendingTransactionsDetails(String functionID, String dateFrom, String dateTo) async {
String url = "${ApiConsts.erpRest}GET_PENDING_REQ_DETAILS";
Map<String, dynamic> postParams = {"P_FUNCTION_ID": functionID, "P_PAGE_LIMIT": 20, "P_PAGE_NUM": 1, "P_CREATION_DATE_FROM": dateFrom, "P_CREATION_DATE_TO": dateTo};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getPendingTransactionsDetails ?? [];
}, url, postParams);
}
Future<String> getAnnouncements(int itgAwarenessID, int itgPageNo, int itgRowID) async {
String url = "${ApiConsts.cocRest}GetAnnouncementDiscountsConfigData";
Map<String, dynamic> 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);
return responseData.mohemmITGResponseItem ?? "";
}, url, postParams);
}
}

@ -14,9 +14,8 @@ 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/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_address_transaction.dart';
import 'package:mohem_flutter_app/models/profile/submit_phone_transactions.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/models/start_phone_approval_process_model.dart'; import 'package:mohem_flutter_app/models/start_phone_approval_process_model.dart';
import 'api_client.dart'; import 'package:mohem_flutter_app/api/api_client.dart';
class ProfileApiClient { class ProfileApiClient {
static final ProfileApiClient _instance = ProfileApiClient._internal(); static final ProfileApiClient _instance = ProfileApiClient._internal();

@ -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<SurahModel> getSurahs() async {
// String url = "${ApiConsts.tangheemUsers}AlSuar_Get";
// var postParams = {};
// return await ApiClient().postJsonForObject((json) => SurahModel.fromJson(json), url, postParams);
// }
//
// Future<MemberModel> getMembers() async {
// String url = "${ApiConsts.tangheemUsers}Committee_Get";
// var postParams = {};
// return await ApiClient().postJsonForObject((json) => MemberModel.fromJson(json), url, postParams);
// }
//
// Future<ContentInfoModel> getContentInfo(int contentId) async {
// String url = "${ApiConsts.tangheemUsers}ContentInfo_Get";
// var postParams = {"contentTypeId": contentId};
// return await ApiClient().postJsonForObject((json) => ContentInfoModel.fromJson(json), url, postParams);
// }
}

@ -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/itg_forms_models/itg_request_model.dart';
import 'package:mohem_flutter_app/models/member_information_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/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/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/replacement_list_model.dart';
import 'package:mohem_flutter_app/models/worklist_response_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 { class WorkListApiClient {
static final WorkListApiClient _instance = WorkListApiClient._internal(); static final WorkListApiClient _instance = WorkListApiClient._internal();

@ -1,7 +1,7 @@
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
class AppPermissions{ class AppPermissions{
static location(Function(bool) completion) { static void location(Function(bool) completion) {
Permission.location.isGranted.then((isGranted){ Permission.location.isGranted.then((isGranted){
if(!isGranted){ if(!isGranted){
Permission.location.request().then((granted){ Permission.location.request().then((granted){
@ -13,7 +13,7 @@ class AppPermissions{
} }
static checkAll(Function(bool) completion){ static void checkAll(Function(bool) completion){
[ [
Permission.location Permission.location
].request().then((value){ ].request().then((value){

@ -61,7 +61,7 @@ class DateUtil {
static String convertDateToString(DateTime date) { static String convertDateToString(DateTime date) {
const start = "/Date("; const start = "/Date(";
const end = "+0300)"; const end = "+0300)/";
int milliseconds = date.millisecondsSinceEpoch; int milliseconds = date.millisecondsSinceEpoch;
return start + "$milliseconds" + end; return start + "$milliseconds" + end;
@ -133,7 +133,7 @@ class DateUtil {
/// get month by /// get month by
/// [month] convert month number in to month name /// [month] convert month number in to month name
static getMonth(int month) { static String getMonth(int month) {
switch (month) { switch (month) {
case 1: case 1:
return "January"; return "January";
@ -159,12 +159,14 @@ class DateUtil {
return "November"; return "November";
case 12: case 12:
return "December"; return "December";
default:
return "";
} }
} }
/// get month by /// get month by
/// [month] convert month number in to month name in Arabic /// [month] convert month number in to month name in Arabic
static getMonthArabic(int month) { static String getMonthArabic(int month) {
switch (month) { switch (month) {
case 1: case 1:
return "يناير"; return "يناير";
@ -190,10 +192,12 @@ class DateUtil {
return " نوفمبر"; return " نوفمبر";
case 12: case 12:
return "ديسمبر"; return "ديسمبر";
default:
return "";
} }
} }
static getMonthByName(String month) { static int getMonthByName(String month) {
switch (month.toLowerCase()) { switch (month.toLowerCase()) {
case 'january': case 'january':
return 1; return 1;
@ -219,6 +223,8 @@ class DateUtil {
return 11; return 11;
case 'december': case 'december':
return 12; return 12;
default:
return 0;
} }
} }
@ -234,7 +240,7 @@ class DateUtil {
/// get month by /// get month by
/// [weekDay] convert week day in int to week day name /// [weekDay] convert week day in int to week day name
static getWeekDay(int weekDay) { static String getWeekDay(int weekDay) {
switch (weekDay) { switch (weekDay) {
case 1: case 1:
return "Monday"; return "Monday";
@ -250,12 +256,14 @@ class DateUtil {
return "Saturday "; return "Saturday ";
case 7: case 7:
return "Sunday"; return "Sunday";
default:
return "";
} }
} }
/// get month by /// get month by
/// [weekDay] convert week day in int to week day name arabic /// [weekDay] convert week day in int to week day name arabic
static getWeekDayArabic(int weekDay) { static String getWeekDayArabic(int weekDay) {
switch (weekDay) { switch (weekDay) {
case 1: case 1:
return "الاثنين"; return "الاثنين";
@ -271,10 +279,12 @@ class DateUtil {
return "السبت "; return "السبت ";
case 7: case 7:
return "الاحد"; return "الاحد";
default:
return "";
} }
} }
static getWeekDayEnglish(int weekDay) { static String getWeekDayEnglish(int weekDay) {
switch (weekDay) { switch (weekDay) {
case 1: case 1:
return "Monday"; return "Monday";
@ -290,6 +300,8 @@ class DateUtil {
return "Saturday "; return "Saturday ";
case 7: case 7:
return "Sunday"; return "Sunday";
default:
return "";
} }
} }
@ -415,7 +427,7 @@ class DateUtil {
return DateFormat(formattedString).format(dateTime); return DateFormat(formattedString).format(dateTime);
} }
static convertISODateToJsonDate(String isoDate) { static String convertISODateToJsonDate(String isoDate) {
return "/Date(" + DateFormat('mm-dd-yyy').parse(isoDate).millisecondsSinceEpoch.toString() + ")/"; return "/Date(" + DateFormat('mm-dd-yyy').parse(isoDate).millisecondsSinceEpoch.toString() + ")/";
} }

@ -1,16 +1,24 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:mohem_flutter_app/app_state/app_state.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:mohem_flutter_app/config/routes.dart';
// import 'package:fluttertoast/fluttertoast.dart'; // import 'package:fluttertoast/fluttertoast.dart';
import 'package:mohem_flutter_app/exceptions/api_exception.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/dialogs/confirm_dialog.dart';
import 'package:mohem_flutter_app/widgets/loading_dialog.dart'; import 'package:mohem_flutter_app/widgets/loading_dialog.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:sizer/sizer.dart';
class Utils { class Utils {
static bool _isLoadingVisible = false; static bool _isLoadingVisible = false;
@ -118,12 +126,30 @@ class Utils {
); );
} }
static getPostBytes(img) { static Widget getNoDataWidget(BuildContext context) {
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 Uint8List getPostBytes(img) {
try { try {
var b64 = img.replaceFirst('data:image/png;base64,', ''); var b64 = img.replaceFirst('data:image/png;base64,', '');
if (img != null && Utils.isBase64(b64)) return Utils.dataFromBase64String(b64); if (img != null && Utils.isBase64(b64)) return Utils.dataFromBase64String(b64);
} catch (e) {} } catch (e) {}
return null; return Uint8List.fromList([]);
}
static String getBase64FromJpeg(img) {
try {
var b64 = img.replaceFirst('data:image/jpeg;base64,', '');
return b64;
} catch (e) {}
return "";
} }
static bool isBase64(String str) { static bool isBase64(String str) {
@ -134,4 +160,38 @@ class Utils {
static Uint8List dataFromBase64String(String base64String) { static Uint8List dataFromBase64String(String base64String) {
return base64Decode(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,
],
);
}
} }

@ -12,6 +12,7 @@ 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_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/dynamic_screens/dynamic_listview_screen.dart';
import 'package:mohem_flutter_app/ui/my_attendance/my_attendance_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/basic_details.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/contact_details.dart';
import 'package:mohem_flutter_app/ui/profile/delete_familyMember.dart'; import 'package:mohem_flutter_app/ui/profile/delete_familyMember.dart';
@ -19,11 +20,16 @@ import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_addre
import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_basic_details_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/family_members.dart';
import 'package:mohem_flutter_app/ui/profile/personal_info.dart'; import 'package:mohem_flutter_app/ui/profile/personal_info.dart';
import 'package:mohem_flutter_app/ui/screens/announcements/announcement_details.dart';
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/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/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/mowadhafhi_hr_request.dart';
import 'package:mohem_flutter_app/ui/screens/mowadhafhi/request_details.dart'; import 'package:mohem_flutter_app/ui/screens/mowadhafhi/request_details.dart';
import 'package:mohem_flutter_app/ui/screens/pending_transactions/pending_transactions.dart';
import 'package:mohem_flutter_app/ui/screens/pending_transactions/pending_transactions_details.dart';
import 'package:mohem_flutter_app/ui/screens/profile/profile_screen.dart'; import 'package:mohem_flutter_app/ui/screens/profile/profile_screen.dart';
import 'package:mohem_flutter_app/ui/screens/submenu_screen.dart'; import 'package:mohem_flutter_app/ui/screens/submenu_screen.dart';
import 'package:mohem_flutter_app/ui/work_list/item_history_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/item_history_screen.dart';
@ -31,8 +37,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/work_list_screen.dart';
import 'package:mohem_flutter_app/ui/work_list/worklist_detail_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/worklist_detail_screen.dart';
import '../ui/screens/mowadhafhi/mowadhafhi_home.dart';
class AppRoutes { class AppRoutes {
static const String splash = "/splash"; static const String splash = "/splash";
static const String registerSelection = "/registerSelection"; static const String registerSelection = "/registerSelection";
@ -84,6 +88,17 @@ class AppRoutes {
static const String mowadhafhiDetails = "/mowadhafhiDetails"; static const String mowadhafhiDetails = "/mowadhafhiDetails";
static const String mowadhafhiHRRequest = "/mowadhafhiHRRequest"; static const String mowadhafhiHRRequest = "/mowadhafhiHRRequest";
// Pending Transactions
static const String pendingTransactions = "/pendingTransactions";
static const String pendingTransactionsDetails = "/pendingTransactionsDetails";
// Announcements
static const String announcements = "/announcements";
static const String announcementsDetails = "/announcementsDetails";
//Pay slip
static const String monthlyPaySlip = "/monthlyPaySlip";
static final Map<String, WidgetBuilder> routes = { static final Map<String, WidgetBuilder> routes = {
login: (context) => LoginScreen(), login: (context) => LoginScreen(),
verifyLogin: (context) => VerifyLoginScreen(), verifyLogin: (context) => VerifyLoginScreen(),
@ -132,5 +147,14 @@ class AppRoutes {
mowadhafhi: (context) => MowadhafhiHome(), mowadhafhi: (context) => MowadhafhiHome(),
mowadhafhiDetails: (context) => MowadhafhiRequestDetails(), mowadhafhiDetails: (context) => MowadhafhiRequestDetails(),
mowadhafhiHRRequest: (context) => MowadhafhiHRRequest(), mowadhafhiHRRequest: (context) => MowadhafhiHRRequest(),
pendingTransactions: (context) => PendingTransactions(),
pendingTransactionsDetails: (context) => PendingTransactionsDetails(),
announcements: (context) => Announcements(),
announcementsDetails: (context) => AnnouncementDetails(),
//pay slip
monthlyPaySlip: (context) => MonthlyPaySlipScreen(),
}; };
} }

@ -218,12 +218,12 @@ class OtpDialog {
} }
} }
static getSignature() async { // static getSignature() async {
// if (Platform.isAndroid) { // // if (Platform.isAndroid) {
// return await SmsRetriever.getAppSignature(); // // return await SmsRetriever.getAppSignature();
// } else { // // } else {
// return null; // // return null;
// } // // }
} // }
} }

@ -23,11 +23,12 @@ extension EmailValidator on String {
Widget toText11({Color? color, bool isUnderLine = false, bool isBold = false}) => Text( Widget toText11({Color? color, bool isUnderLine = false, bool isBold = false}) => Text(
this, this,
style: TextStyle( style: TextStyle(
fontSize: 11, fontSize: 11,
fontWeight: isBold ? FontWeight.bold : FontWeight.w600, fontWeight: isBold ? FontWeight.bold : FontWeight.w600,
color: color ?? MyColors.darkTextColor, color: color ?? MyColors.darkTextColor,
letterSpacing: -0.33, letterSpacing: -0.33,
decoration: isUnderLine ? TextDecoration.underline : null), decoration: isUnderLine ? TextDecoration.underline : null,
),
); );
Widget toText12({Color? color, bool isUnderLine = false, bool isBold = false, bool isCenter = false, int maxLine = 0}) => Text( 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, textAlign: isCenter ? TextAlign.center : null,
maxLines: (maxLine > 0) ? maxLine : null, maxLines: (maxLine > 0) ? maxLine : null,
style: TextStyle( style: TextStyle(
fontSize: 12, fontSize: 12,
fontWeight: isBold ? FontWeight.bold : FontWeight.w600, fontWeight: isBold ? FontWeight.bold : FontWeight.w600,
color: color ?? MyColors.darkTextColor, color: color ?? MyColors.darkTextColor,
letterSpacing: -0.72, letterSpacing: -0.72,
decoration: isUnderLine ? TextDecoration.underline : null), decoration: isUnderLine ? TextDecoration.underline : null,
),
); );
Widget toText13({Color? color, bool isUnderLine = false}) => Text( 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), 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, this,
maxLines: maxlines, maxLines: maxlines,
style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 16, letterSpacing: -0.64, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), 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))}"; 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) { switch (month) {
case 1: case 1:
return "January"; return "January";
@ -157,6 +159,8 @@ extension EmailValidator on String {
return "November"; return "November";
case 12: case 12:
return "December"; return "December";
default:
return "";
} }
} }
} }

@ -21,8 +21,8 @@ extension WidgetExtensions on Widget {
baseColor: Color(0xffe8eff0), baseColor: Color(0xffe8eff0),
highlightColor: Colors.white, highlightColor: Colors.white,
child: Container( child: Container(
child: this,
color: Colors.white, color: Colors.white,
child: this,
), ),
) )
: Container( : Container(

@ -267,6 +267,18 @@ class CodegenLoader extends AssetLoader{
"writeComment": "أكتب تعليقا", "writeComment": "أكتب تعليقا",
"approversList": "قائمة الموافقين", "approversList": "قائمة الموافقين",
"yourRequestHasBeenSubmittedForApprovals": "تم تقديم طلبك للموافقات", "yourRequestHasBeenSubmittedForApprovals": "تم تقديم طلبك للموافقات",
"monthlyPaySlip": "قسيمة الراتب الشهرية",
"particular": "خاص",
"earnings": "أرباح",
"deductions": "الخصومات",
"paymentMethodName": "اسم طريقة الدفع",
"bankName": "اسم البنك",
"branchCode": "رمز الفرع",
"accountNo": "رقم الحساب",
"summaryOfInformation": "ملخص المعلومات",
"totalPayAmount": "المبلغ الإجمالي للدفع",
"paymentInformation": "معلومات الدفع",
"amount": "مقدار",
"profile": { "profile": {
"reset_password": { "reset_password": {
"label": "Reset Password", "label": "Reset Password",
@ -289,14 +301,6 @@ class CodegenLoader extends AssetLoader{
"many": "You clicked {} times!", "many": "You clicked {} times!",
"other": "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": { "gender": {
"male": "Hi man ;) ", "male": "Hi man ;) ",
"female": "Hello girl :)", "female": "Hello girl :)",
@ -561,6 +565,18 @@ static const Map<String,dynamic> en_US = {
"writeComment": "Write a comment", "writeComment": "Write a comment",
"approversList": "Approvers List", "approversList": "Approvers List",
"yourRequestHasBeenSubmittedForApprovals": "Your request has been submitted for approvals", "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",
"profile": { "profile": {
"reset_password": { "reset_password": {
"label": "Reset Password", "label": "Reset Password",
@ -583,14 +599,6 @@ static const Map<String,dynamic> en_US = {
"many": "You clicked {} times!", "many": "You clicked {} times!",
"other": "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": { "gender": {
"male": "Hi man ;) ", "male": "Hi man ;) ",
"female": "Hello girl :)", "female": "Hello girl :)",

@ -252,6 +252,18 @@ abstract class LocaleKeys {
static const writeComment = 'writeComment'; static const writeComment = 'writeComment';
static const approversList = 'approversList'; static const approversList = 'approversList';
static const yourRequestHasBeenSubmittedForApprovals = 'yourRequestHasBeenSubmittedForApprovals'; 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 profile_reset_password_label = 'profile.reset_password.label'; static const profile_reset_password_label = 'profile.reset_password.label';
static const profile_effectiveDate = 'profile.effectiveDate'; static const profile_effectiveDate = 'profile.effectiveDate';
static const profile_country = 'profile.country'; static const profile_country = 'profile.country';
@ -267,7 +279,6 @@ abstract class LocaleKeys {
static const profile_familyDetails = 'profile.familyDetails'; static const profile_familyDetails = 'profile.familyDetails';
static const profile = 'profile'; static const profile = 'profile';
static const clicked = 'clicked'; static const clicked = 'clicked';
static const amount = 'amount';
static const gender_with_arg = 'gender.with_arg'; static const gender_with_arg = 'gender.with_arg';
static const gender = 'gender'; static const gender = 'gender';
static const reset_locale = 'reset_locale'; static const reset_locale = 'reset_locale';

@ -5,20 +5,16 @@ import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:logger/logger.dart'; import 'package:logger/logger.dart';
import 'package:mohem_flutter_app/app_state/app_state.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/generated/codegen_loader.g.dart';
import 'package:mohem_flutter_app/models/post_params_model.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/dashboard_provider_model.dart';
import 'package:mohem_flutter_app/provider/eit_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/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: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:provider/provider.dart';
import 'package:sizer/sizer.dart'; import 'package:sizer/sizer.dart';
import 'config/routes.dart';
var logger = Logger( var logger = Logger(
// filter: null, // Use the default LogFilter (-> only log in debug mode) // filter: null, // Use the default LogFilter (-> only log in debug mode)
printer: PrettyPrinter(lineLength: 0), // Use the PrettyPrinter to format and print log printer: PrettyPrinter(lineLength: 0), // Use the PrettyPrinter to format and print log
@ -68,22 +64,17 @@ class MyApp extends StatelessWidget {
builder: (context, orientation, deviceType) { builder: (context, orientation, deviceType) {
print(AppState().postParamsObject?.toJson()); print(AppState().postParamsObject?.toJson());
var obj = AppState().postParamsObject; var obj = AppState().postParamsObject;
obj?.languageID = EasyLocalization obj?.languageID = EasyLocalization.of(context)?.locale.languageCode == "ar" ? 1 : 2;
.of(context)
?.locale
.languageCode == "ar" ? 1 : 2;
AppState().setPostParamsModel(obj!); AppState().setPostParamsModel(obj!);
List<LocalizationsDelegate> delegates = context.localizationDelegates; List<LocalizationsDelegate> delegates = context.localizationDelegates;
// delegates.add(GlobalMaterialLocalizations.delegate); // delegates.add(GlobalMaterialLocalizations.delegate);
delegates.add(MonthYearPickerLocalizations.delegate,); delegates.add(
MonthYearPickerLocalizations.delegate,
);
return MaterialApp( return MaterialApp(
theme: AppTheme.getTheme(EasyLocalization theme: AppTheme.getTheme(EasyLocalization.of(context)?.locale.languageCode == "ar"),
.of(context)
?.locale
.languageCode == "ar"),
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
localizationsDelegates localizationsDelegates: delegates,
:delegates,
supportedLocales: context.supportedLocales, supportedLocales: context.supportedLocales,
locale: context.locale, locale: context.locale,
initialRoute: AppRoutes.initialRoute, initialRoute: AppRoutes.initialRoute,

@ -1,9 +1,9 @@
class GET_EIT_Transactions_Model { class GetEitTransactionsModel {
List<CollectionTransaction>? collectionTransaction; List<CollectionTransaction>? collectionTransaction;
GET_EIT_Transactions_Model({this.collectionTransaction}); GetEitTransactionsModel({this.collectionTransaction});
GET_EIT_Transactions_Model.fromJson(Map<String, dynamic> json) { GetEitTransactionsModel.fromJson(Map<String, dynamic> json) {
if (json['Collection_Transaction'] != null) { if (json['Collection_Transaction'] != null) {
collectionTransaction = <CollectionTransaction>[]; collectionTransaction = <CollectionTransaction>[];
json['Collection_Transaction'].forEach((v) { json['Collection_Transaction'].forEach((v) {

@ -1,5 +1,12 @@
import 'package:mohem_flutter_app/models/add_att_success_list_model.dart'; 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/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_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_action_history_list_model.dart';
import 'package:mohem_flutter_app/models/get_approves_list_model.dart'; import 'package:mohem_flutter_app/models/get_approves_list_model.dart';
@ -15,6 +22,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_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_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_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_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_Item_history_list_model.dart';
import 'package:mohem_flutter_app/models/get_po_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/get_po_notification_body_list_model.dart';
@ -23,7 +31,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_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_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/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/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_department_sections.dart';
import 'package:mohem_flutter_app/models/mowadhafhi/get_project_departments.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_project_departments.dart';
import 'package:mohem_flutter_app/models/mowadhafhi/get_projects.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_projects.dart';
@ -34,6 +48,9 @@ import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_types.dart';
import 'package:mohem_flutter_app/models/mowadhafhi/get_tickets_list.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_tickets_list.dart';
import 'package:mohem_flutter_app/models/notification_action_model.dart'; 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/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_cols_structions.dart';
import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.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_address_dff_structure_list.dart';
@ -55,17 +72,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/replacement_list_model.dart';
import 'package:mohem_flutter_app/models/worklist_response_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 { class GenericResponseModel {
String? date; String? date;
int? languageID; int? languageID;
@ -143,12 +149,12 @@ class GenericResponseModel {
GetContactNotificationBodyList? getContactNotificationBodyList; GetContactNotificationBodyList? getContactNotificationBodyList;
List<GetCountriesListModel>? getCountriesList; List<GetCountriesListModel>? getCountriesList;
List<GetDayHoursTypeDetailsList>? getDayHoursTypeDetailsList; List<GetDayHoursTypeDetailsList>? getDayHoursTypeDetailsList;
List<String>? getDeductionsList; List<GetDeductionsList>? getDeductionsList;
GetDefaultValueList? getDefaultValueList; GetDefaultValueList? getDefaultValueList;
List<GetEitCollectionNotificationBodyList>? getEITCollectionNotificationBodyList; List<GetEitCollectionNotificationBodyList>? getEITCollectionNotificationBodyList;
List<GetEITDFFStructureList>? getEITDFFStructureList; List<GetEITDFFStructureList>? getEITDFFStructureList;
List<GetEITTransactionList>? getEITTransactionList; List<GetEITTransactionList>? getEITTransactionList;
List<String>? getEarningsList; List<GetEarningsList>? getEarningsList;
List<GetEmployeeAddressList>? getEmployeeAddressList; List<GetEmployeeAddressList>? getEmployeeAddressList;
List<GetEmployeeBasicDetailsList>? getEmployeeBasicDetailsList; List<GetEmployeeBasicDetailsList>? getEmployeeBasicDetailsList;
List<GetEmployeeContactsList>? getEmployeeContactsList; List<GetEmployeeContactsList>? getEmployeeContactsList;
@ -172,10 +178,11 @@ class GenericResponseModel {
List<String>? getOpenNotificationsNumList; List<String>? getOpenNotificationsNumList;
List<String>? getOpenPeriodDatesList; List<String>? getOpenPeriodDatesList;
List<String>? getOrganizationsSalariesList; List<String>? getOrganizationsSalariesList;
List<String>? getPaymentInformationList; List<GetPaymentInformationList>? getPaymentInformationList;
List<String>? getPayslipList; List<GetPayslipList>? getPayslipList;
List<String>? getPendingReqDetailsList;
List<String>? getPendingReqFunctionsList; // List<String>? getPendingReqDetailsList;
// List<String>? getPendingReqFunctionsList;
List<String>? getPerformanceAppraisalList; List<String>? getPerformanceAppraisalList;
List<GetPhonesNotificationBodyList>? getPhonesNotificationBodyList; List<GetPhonesNotificationBodyList>? getPhonesNotificationBodyList;
List<GetPoItemHistoryList>? getPoItemHistoryList; List<GetPoItemHistoryList>? getPoItemHistoryList;
@ -194,7 +201,7 @@ class GenericResponseModel {
List<String>? getSubordinatesAttdStatusList; List<String>? getSubordinatesAttdStatusList;
List<SubordinatesLeavesList>? getSubordinatesLeavesList; List<SubordinatesLeavesList>? getSubordinatesLeavesList;
List<String>? getSubordinatesLeavesTotalVacationsList; List<String>? getSubordinatesLeavesTotalVacationsList;
List<String>? getSummaryOfPaymentList; List<GetSummaryOfPaymentList>? getSummaryOfPaymentList;
List<String>? getSwipesList; List<String>? getSwipesList;
List<String>? getTermColsStructureList; List<String>? getTermColsStructureList;
List<String>? getTermDffStructureList; List<String>? getTermDffStructureList;
@ -208,6 +215,8 @@ class GenericResponseModel {
List<GetMowadhafhiProjects>? getMowadhafhiProjects; List<GetMowadhafhiProjects>? getMowadhafhiProjects;
List<GetProjectDepartments>? getProjectDepartments; List<GetProjectDepartments>? getProjectDepartments;
List<GetDepartmentSections>? getDepartmentSections; List<GetDepartmentSections>? getDepartmentSections;
List<GetPendingTransactionsFunctions>? getPendingTransactionsFunctions;
List<GetPendingTransactionsDetails>? getPendingTransactionsDetails;
List<String>? getUserItemTypesList; List<String>? getUserItemTypesList;
List<String>? getVacationRulesList; List<String>? getVacationRulesList;
List<String>? getVaccinationOnHandList; List<String>? getVaccinationOnHandList;
@ -435,8 +444,8 @@ class GenericResponseModel {
this.getOrganizationsSalariesList, this.getOrganizationsSalariesList,
this.getPaymentInformationList, this.getPaymentInformationList,
this.getPayslipList, this.getPayslipList,
this.getPendingReqDetailsList, // this.getPendingReqDetailsList,
this.getPendingReqFunctionsList, // this.getPendingReqFunctionsList,
this.getPerformanceAppraisalList, this.getPerformanceAppraisalList,
this.getPhonesNotificationBodyList, this.getPhonesNotificationBodyList,
this.getPoItemHistoryList, this.getPoItemHistoryList,
@ -469,6 +478,8 @@ class GenericResponseModel {
this.getMowadhafhiProjects, this.getMowadhafhiProjects,
this.getProjectDepartments, this.getProjectDepartments,
this.getDepartmentSections, this.getDepartmentSections,
this.getPendingTransactionsFunctions,
this.getPendingTransactionsDetails,
this.getUserItemTypesList, this.getUserItemTypesList,
this.getVacationRulesList, this.getVacationRulesList,
this.getVaccinationOnHandList, this.getVaccinationOnHandList,
@ -736,7 +747,13 @@ class GenericResponseModel {
getDayHoursTypeDetailsList!.add(new GetDayHoursTypeDetailsList.fromJson(v)); getDayHoursTypeDetailsList!.add(new GetDayHoursTypeDetailsList.fromJson(v));
}); });
} }
getDeductionsList = json['GetDeductionsList'];
if (json['GetDeductionsList'] != null) {
getDeductionsList = <GetDeductionsList>[];
json['GetDeductionsList'].forEach((v) {
getDeductionsList!.add(new GetDeductionsList.fromJson(v));
});
}
getDefaultValueList = json['GetDefaultValueList'] != null ? GetDefaultValueList.fromJson(json['GetDefaultValueList']) : null; getDefaultValueList = json['GetDefaultValueList'] != null ? GetDefaultValueList.fromJson(json['GetDefaultValueList']) : null;
getEITCollectionNotificationBodyList = json["GetEITCollectionNotificationBodyList"] == null getEITCollectionNotificationBodyList = json["GetEITCollectionNotificationBodyList"] == null
? null ? null
@ -753,7 +770,13 @@ class GenericResponseModel {
getEITTransactionList!.add(new GetEITTransactionList.fromJson(v)); getEITTransactionList!.add(new GetEITTransactionList.fromJson(v));
}); });
} }
getEarningsList = json['GetEarningsList'];
if (json['GetEarningsList'] != null) {
getEarningsList = <GetEarningsList>[];
json['GetEarningsList'].forEach((v) {
getEarningsList!.add(new GetEarningsList.fromJson(v));
});
}
if (json['GetEmployeeAddressList'] != null) { if (json['GetEmployeeAddressList'] != null) {
getEmployeeAddressList = <GetEmployeeAddressList>[]; getEmployeeAddressList = <GetEmployeeAddressList>[];
json['GetEmployeeAddressList'].forEach((v) { json['GetEmployeeAddressList'].forEach((v) {
@ -822,10 +845,22 @@ class GenericResponseModel {
getOpenNotificationsNumList = json['GetOpenNotificationsNumList']; getOpenNotificationsNumList = json['GetOpenNotificationsNumList'];
getOpenPeriodDatesList = json['GetOpenPeriodDatesList']; getOpenPeriodDatesList = json['GetOpenPeriodDatesList'];
getOrganizationsSalariesList = json['GetOrganizationsSalariesList']; getOrganizationsSalariesList = json['GetOrganizationsSalariesList'];
getPaymentInformationList = json['GetPaymentInformationList'];
getPayslipList = json['GetPayslipList']; if (json['GetPaymentInformationList'] != null) {
getPendingReqDetailsList = json['GetPendingReqDetailsList']; getPaymentInformationList = <GetPaymentInformationList>[];
getPendingReqFunctionsList = json['GetPendingReqFunctionsList']; json['GetPaymentInformationList'].forEach((v) {
getPaymentInformationList!.add(new GetPaymentInformationList.fromJson(v));
});
}
if (json['GetPayslipList'] != null) {
getPayslipList = <GetPayslipList>[];
json['GetPayslipList'].forEach((v) {
getPayslipList!.add(new GetPayslipList.fromJson(v));
});
}
// getPendingReqDetailsList = json['GetPendingReqDetailsList'];
// getPendingReqFunctionsList = json['GetPendingReqFunctionsList'];
getPerformanceAppraisalList = json['GetPerformanceAppraisalList']; getPerformanceAppraisalList = json['GetPerformanceAppraisalList'];
getPhonesNotificationBodyList = getPhonesNotificationBodyList =
json["GetPhonesNotificationBodyList"] == null ? null : List<GetPhonesNotificationBodyList>.from(json["GetPhonesNotificationBodyList"].map((x) => GetPhonesNotificationBodyList.fromJson(x))); json["GetPhonesNotificationBodyList"] == null ? null : List<GetPhonesNotificationBodyList>.from(json["GetPhonesNotificationBodyList"].map((x) => GetPhonesNotificationBodyList.fromJson(x)));
@ -879,7 +914,12 @@ class GenericResponseModel {
} }
getSubordinatesLeavesTotalVacationsList = json['GetSubordinatesLeavesTotalVacationsList']; getSubordinatesLeavesTotalVacationsList = json['GetSubordinatesLeavesTotalVacationsList'];
getSummaryOfPaymentList = json['GetSummaryOfPaymentList']; if (json['GetSummaryOfPaymentList'] != null) {
getSummaryOfPaymentList = <GetSummaryOfPaymentList>[];
json['GetSummaryOfPaymentList'].forEach((v) {
getSummaryOfPaymentList!.add(new GetSummaryOfPaymentList.fromJson(v));
});
}
getSwipesList = json['GetSwipesList']; getSwipesList = json['GetSwipesList'];
getTermColsStructureList = json['GetTermColsStructureList']; getTermColsStructureList = json['GetTermColsStructureList'];
getTermDffStructureList = json['GetTermDffStructureList']; getTermDffStructureList = json['GetTermDffStructureList'];
@ -948,6 +988,20 @@ class GenericResponseModel {
}); });
} }
if (json['GetPendingReqFunctionsList'] != null) {
getPendingTransactionsFunctions = <GetPendingTransactionsFunctions>[];
json['GetPendingReqFunctionsList'].forEach((v) {
getPendingTransactionsFunctions!.add(new GetPendingTransactionsFunctions.fromJson(v));
});
}
if (json['GetPendingReqDetailsList'] != null) {
getPendingTransactionsDetails = <GetPendingTransactionsDetails>[];
json['GetPendingReqDetailsList'].forEach((v) {
getPendingTransactionsDetails!.add(new GetPendingTransactionsDetails.fromJson(v));
});
}
getUserItemTypesList = json['GetUserItemTypesList']; getUserItemTypesList = json['GetUserItemTypesList'];
getVacationRulesList = json['GetVacationRulesList']; getVacationRulesList = json['GetVacationRulesList'];
getVaccinationOnHandList = json['GetVaccinationOnHandList']; getVaccinationOnHandList = json['GetVaccinationOnHandList'];
@ -1236,7 +1290,10 @@ class GenericResponseModel {
if (this.getDayHoursTypeDetailsList != null) { if (this.getDayHoursTypeDetailsList != null) {
data['GetDayHoursTypeDetailsList'] = this.getDayHoursTypeDetailsList!.map((v) => v.toJson()).toList(); 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) { if (this.getDefaultValueList != null) {
data['GetDefaultValueList'] = this.getDefaultValueList!.toJson(); data['GetDefaultValueList'] = this.getDefaultValueList!.toJson();
} }
@ -1247,7 +1304,10 @@ class GenericResponseModel {
if (this.getEITTransactionList != null) { if (this.getEITTransactionList != null) {
data['GetEITTransactionList'] = this.getEITTransactionList!.map((v) => v.toJson()).toList(); 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) { if (this.getEmployeeAddressList != null) {
data['GetEmployeeAddressList'] = this.getEmployeeAddressList!.map((v) => v.toJson()).toList(); data['GetEmployeeAddressList'] = this.getEmployeeAddressList!.map((v) => v.toJson()).toList();
} }
@ -1292,10 +1352,14 @@ class GenericResponseModel {
data['GetOpenNotificationsNumList'] = this.getOpenNotificationsNumList; data['GetOpenNotificationsNumList'] = this.getOpenNotificationsNumList;
data['GetOpenPeriodDatesList'] = this.getOpenPeriodDatesList; data['GetOpenPeriodDatesList'] = this.getOpenPeriodDatesList;
data['GetOrganizationsSalariesList'] = this.getOrganizationsSalariesList; data['GetOrganizationsSalariesList'] = this.getOrganizationsSalariesList;
data['GetPaymentInformationList'] = this.getPaymentInformationList; if (this.getPaymentInformationList != null) {
data['GetPayslipList'] = this.getPayslipList; data['GetPaymentInformationList'] = this.getPaymentInformationList!.map((v) => v.toJson()).toList();
data['GetPendingReqDetailsList'] = this.getPendingReqDetailsList; }
data['GetPendingReqFunctionsList'] = this.getPendingReqFunctionsList; 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; data['GetPerformanceAppraisalList'] = this.getPerformanceAppraisalList;
data['GetPhonesNotificationBodyList'] = this.getPhonesNotificationBodyList; data['GetPhonesNotificationBodyList'] = this.getPhonesNotificationBodyList;
if (this.getPoItemHistoryList != null) { if (this.getPoItemHistoryList != null) {
@ -1336,7 +1400,9 @@ class GenericResponseModel {
} }
data['GetSubordinatesLeavesTotalVacationsList'] = this.getSubordinatesLeavesTotalVacationsList; 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['GetSwipesList'] = this.getSwipesList;
data['GetTermColsStructureList'] = this.getTermColsStructureList; data['GetTermColsStructureList'] = this.getTermColsStructureList;
data['GetTermDffStructureList'] = this.getTermDffStructureList; data['GetTermDffStructureList'] = this.getTermDffStructureList;

@ -1,4 +1,3 @@
class GetAbsenceCollectionNotificationBodyList { class GetAbsenceCollectionNotificationBodyList {
List<CollectionNotificationAbsence>? collectionNotification; List<CollectionNotificationAbsence>? collectionNotification;
@ -16,8 +15,7 @@ class GetAbsenceCollectionNotificationBodyList {
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.collectionNotification != null) { if (this.collectionNotification != null) {
data['Collection_Notification'] = data['Collection_Notification'] = this.collectionNotification!.map((v) => v.toJson()).toList();
this.collectionNotification!.map((v) => v.toJson()).toList();
} }
return data; return data;
} }
@ -42,20 +40,20 @@ class CollectionNotificationAbsence {
CollectionNotificationAbsence( CollectionNotificationAbsence(
{this.aCTION, {this.aCTION,
this.aPPLICATIONCOLUMNNAME, this.aPPLICATIONCOLUMNNAME,
this.dATATYPE, this.dATATYPE,
this.dATEVALUE, this.dATEVALUE,
this.dESCFLEXCONTEXTCODE, this.dESCFLEXCONTEXTCODE,
this.dESCFLEXNAME, this.dESCFLEXNAME,
this.dISPLAYFLAG, this.dISPLAYFLAG,
this.nUMBERVALUE, this.nUMBERVALUE,
this.pREVSEGMENTVALUEDSP, this.pREVSEGMENTVALUEDSP,
this.sEGMENTNAME, this.sEGMENTNAME,
this.sEGMENTPROMPT, this.sEGMENTPROMPT,
this.sEGMENTSEQNUM, this.sEGMENTSEQNUM,
this.sEGMENTVALUEDSP, this.sEGMENTVALUEDSP,
this.tRANSACTIONNUMBER, this.tRANSACTIONNUMBER,
this.vARCHAR2VALUE}); this.vARCHAR2VALUE});
CollectionNotificationAbsence.fromJson(Map<String, dynamic> json) { CollectionNotificationAbsence.fromJson(Map<String, dynamic> json) {
aCTION = json['ACTION']; aCTION = json['ACTION'];
@ -94,4 +92,4 @@ class CollectionNotificationAbsence {
data['VARCHAR2_VALUE'] = this.vARCHAR2VALUE; data['VARCHAR2_VALUE'] = this.vARCHAR2VALUE;
return data; return data;
} }
} }

@ -0,0 +1,72 @@
class GetAnnouncementDetails {
String? titleEN;
String? titleAR;
String? emailBodyEN;
String? emailBodyAR;
String? bodyEN;
String? bodyAR;
String? bannerImage;
String? rowID;
String? awarenessName;
String? created;
String? publishedDesc;
String? published;
String? twoLanguageTemplateDesc;
String? wFStatus;
String? totalItems;
GetAnnouncementDetails(
{this.titleEN,
this.titleAR,
this.emailBodyEN,
this.emailBodyAR,
this.bodyEN,
this.bodyAR,
this.bannerImage,
this.rowID,
this.awarenessName,
this.created,
this.publishedDesc,
this.published,
this.twoLanguageTemplateDesc,
this.wFStatus,
this.totalItems});
GetAnnouncementDetails.fromJson(Map<String, dynamic> json) {
titleEN = json['Title_EN'];
titleAR = json['Title_AR'];
emailBodyEN = json['EmailBody_EN'];
emailBodyAR = json['EmailBody_AR'];
bodyEN = json['Body_EN'];
bodyAR = json['Body_AR'];
bannerImage = json['Banner_Image'];
rowID = json['rowID'];
awarenessName = json['awarenessName'];
created = json['created'];
publishedDesc = json['PublishedDesc'];
published = json['Published'];
twoLanguageTemplateDesc = json['TwoLanguageTemplateDesc'];
wFStatus = json['WFStatus'];
totalItems = json['TotalItems'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['Title_EN'] = this.titleEN;
data['Title_AR'] = this.titleAR;
data['EmailBody_EN'] = this.emailBodyEN;
data['EmailBody_AR'] = this.emailBodyAR;
data['Body_EN'] = this.bodyEN;
data['Body_AR'] = this.bodyAR;
data['Banner_Image'] = this.bannerImage;
data['rowID'] = this.rowID;
data['awarenessName'] = this.awarenessName;
data['created'] = this.created;
data['PublishedDesc'] = this.publishedDesc;
data['Published'] = this.published;
data['TwoLanguageTemplateDesc'] = this.twoLanguageTemplateDesc;
data['WFStatus'] = this.wFStatus;
data['TotalItems'] = this.totalItems;
return data;
}
}

@ -0,0 +1,72 @@
class GetAnnouncementsObject {
String? titleEN;
String? titleAR;
String? bannerImage;
String? rowID;
String? awarenessName;
String? created;
String? publishedDesc;
String? published;
String? twoLanguageTemplateDesc;
String? wFStatus;
String? totalItems;
String? emailBodyEN;
String? emailBodyAR;
String? bodyEN;
String? bodyAR;
GetAnnouncementsObject(
{this.titleEN,
this.titleAR,
this.bannerImage,
this.rowID,
this.awarenessName,
this.created,
this.publishedDesc,
this.published,
this.twoLanguageTemplateDesc,
this.wFStatus,
this.totalItems,
this.emailBodyEN,
this.emailBodyAR,
this.bodyEN,
this.bodyAR});
GetAnnouncementsObject.fromJson(Map<String, dynamic> json) {
titleEN = json['Title_EN'];
titleAR = json['Title_AR'];
bannerImage = json['Banner_Image'];
rowID = json['rowID'];
awarenessName = json['awarenessName'];
created = json['created'];
publishedDesc = json['PublishedDesc'];
published = json['Published'];
twoLanguageTemplateDesc = json['TwoLanguageTemplateDesc'];
wFStatus = json['WFStatus'];
totalItems = json['TotalItems'];
emailBodyEN = json['EmailBody_EN'];
emailBodyAR = json['EmailBody_AR'];
bodyEN = json['Body_EN'];
bodyAR = json['Body_AR'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['Title_EN'] = this.titleEN;
data['Title_AR'] = this.titleAR;
data['Banner_Image'] = this.bannerImage;
data['rowID'] = this.rowID;
data['awarenessName'] = this.awarenessName;
data['created'] = this.created;
data['PublishedDesc'] = this.publishedDesc;
data['Published'] = this.published;
data['TwoLanguageTemplateDesc'] = this.twoLanguageTemplateDesc;
data['WFStatus'] = this.wFStatus;
data['TotalItems'] = this.totalItems;
data['EmailBody_EN'] = this.emailBodyEN;
data['EmailBody_AR'] = this.emailBodyAR;
data['Body_EN'] = this.bodyEN;
data['Body_AR'] = this.bodyAR;
return data;
}
}

@ -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<String, dynamic> 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<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
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;
}
}

@ -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<String, dynamic> 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<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
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;
}
}

@ -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<String, dynamic> 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<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
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;
}
}

@ -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<String, dynamic> json) {
aCCOUNTNUMBER = json['ACCOUNT_NUMBER'];
aMOUNT = json['AMOUNT'];
bANKNAME = json['BANK_NAME'];
bRANCHNAME = json['BRANCH_NAME'];
pAYMENTMETHODNAME = json['PAYMENT_METHOD_NAME'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
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;
}
}

@ -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<String, dynamic> 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<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
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;
}
}

@ -0,0 +1,56 @@
class GetPendingTransactionsDetails {
String? cREATIONDATE;
int? fROMROWNUM;
String? iTEMKEY;
int? nOOFROWS;
String? rEQUESTTYPE;
int? rOWNUM;
int? tOROWNUM;
String? tRANSACTIONCREATEDFOR;
int? tRANSACTIONID;
String? tRANSACTIONINITIATOR;
String? uSERFUNCTIONNAME;
GetPendingTransactionsDetails(
{this.cREATIONDATE,
this.fROMROWNUM,
this.iTEMKEY,
this.nOOFROWS,
this.rEQUESTTYPE,
this.rOWNUM,
this.tOROWNUM,
this.tRANSACTIONCREATEDFOR,
this.tRANSACTIONID,
this.tRANSACTIONINITIATOR,
this.uSERFUNCTIONNAME});
GetPendingTransactionsDetails.fromJson(Map<String, dynamic> json) {
cREATIONDATE = json['CREATION_DATE'];
fROMROWNUM = json['FROM_ROW_NUM'];
iTEMKEY = json['ITEM_KEY'];
nOOFROWS = json['NO_OF_ROWS'];
rEQUESTTYPE = json['REQUEST_TYPE'];
rOWNUM = json['ROW_NUM'];
tOROWNUM = json['TO_ROW_NUM'];
tRANSACTIONCREATEDFOR = json['TRANSACTION_CREATED_FOR'];
tRANSACTIONID = json['TRANSACTION_ID'];
tRANSACTIONINITIATOR = json['TRANSACTION_INITIATOR'];
uSERFUNCTIONNAME = json['USER_FUNCTION_NAME'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['CREATION_DATE'] = this.cREATIONDATE;
data['FROM_ROW_NUM'] = this.fROMROWNUM;
data['ITEM_KEY'] = this.iTEMKEY;
data['NO_OF_ROWS'] = this.nOOFROWS;
data['REQUEST_TYPE'] = this.rEQUESTTYPE;
data['ROW_NUM'] = this.rOWNUM;
data['TO_ROW_NUM'] = this.tOROWNUM;
data['TRANSACTION_CREATED_FOR'] = this.tRANSACTIONCREATEDFOR;
data['TRANSACTION_ID'] = this.tRANSACTIONID;
data['TRANSACTION_INITIATOR'] = this.tRANSACTIONINITIATOR;
data['USER_FUNCTION_NAME'] = this.uSERFUNCTIONNAME;
return data;
}
}

@ -0,0 +1,22 @@
class GetPendingTransactionsFunctions {
int? fUNCTIONID;
String? fUNCTIONNAME;
String? fUNCTIONPROMPT;
GetPendingTransactionsFunctions(
{this.fUNCTIONID, this.fUNCTIONNAME, this.fUNCTIONPROMPT});
GetPendingTransactionsFunctions.fromJson(Map<String, dynamic> json) {
fUNCTIONID = json['FUNCTION_ID'];
fUNCTIONNAME = json['FUNCTION_NAME'];
fUNCTIONPROMPT = json['FUNCTION_PROMPT'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['FUNCTION_ID'] = this.fUNCTIONID;
data['FUNCTION_NAME'] = this.fUNCTIONNAME;
data['FUNCTION_PROMPT'] = this.fUNCTIONPROMPT;
return data;
}
}

@ -11,7 +11,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/menu_entries.dart';
import 'package:mohem_flutter_app/models/dashboard/menus.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/models/generic_response_model.dart';
import 'package:mohem_flutter_app/widgets/Updater.dart';
/// Mix-in [DiagnosticableTreeMixin] to have access to [debugFillProperties] for the devtool /// Mix-in [DiagnosticableTreeMixin] to have access to [debugFillProperties] for the devtool
// ignore: prefer_mixin // ignore: prefer_mixin
@ -71,7 +70,7 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
return ((hour * 60 * 60) + (mints * 60) + seconds); return ((hour * 60 * 60) + (mints * 60) + seconds);
} }
update(context) { void update(context) {
fetchAttendanceTracking(context); fetchAttendanceTracking(context);
// isAttendanceTrackingLoading = !isAttendanceTrackingLoading; // isAttendanceTrackingLoading = !isAttendanceTrackingLoading;
// isWorkListLoading = !isWorkListLoading; // isWorkListLoading = !isWorkListLoading;
@ -137,7 +136,7 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
} }
//List Menu API's & Methods //List Menu API's & Methods
fetchListMenu() async { void fetchListMenu() async {
try { try {
GenericResponseModel? genericResponseModel = await DashboardApiClient().getListMenu(); GenericResponseModel? genericResponseModel = await DashboardApiClient().getListMenu();
Map<String, String> map = {}; Map<String, String> map = {};
@ -156,7 +155,7 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
} }
//Menu Entries API's & Methods //Menu Entries API's & Methods
fetchMenuEntries() async { void fetchMenuEntries() async {
try { try {
GenericResponseModel? genericResponseModel = await DashboardApiClient().getGetMenuEntries(); GenericResponseModel? genericResponseModel = await DashboardApiClient().getGetMenuEntries();
getMenuEntriesList = genericResponseModel!.getMenuEntriesList; getMenuEntriesList = genericResponseModel!.getMenuEntriesList;

@ -3,7 +3,7 @@ import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/theme/colors.dart'; import 'package:mohem_flutter_app/theme/colors.dart';
class AppTheme { class AppTheme {
static getTheme(isArabic) => ThemeData( static ThemeData getTheme(isArabic) => ThemeData(
fontFamily: isArabic ? 'Cairo' : 'Poppins', fontFamily: isArabic ? 'Cairo' : 'Poppins',
primarySwatch: Colors.red, primarySwatch: Colors.red,
visualDensity: VisualDensity.adaptivePlatformDensity, visualDensity: VisualDensity.adaptivePlatformDensity,

@ -1,27 +1,23 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:easy_localization/src/public_ext.dart'; import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/painting.dart'; import 'package:flutter/painting.dart';
import 'package:flutter/scheduler.dart'; import 'package:intl/intl.dart';
import 'package:mohem_flutter_app/api/monthlyAttendance_api_client.dart'; import 'package:mohem_flutter_app/api/monthlyAttendance_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/extensions/int_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/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_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_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_schedule_shifts_details_list_model.dart';
import 'package:mohem_flutter_app/models/get_time_card_summary_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: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: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 { class MonthlyAttendance extends StatefulWidget {
MonthlyAttendance({Key? key}) : super(key: key); MonthlyAttendance({Key? key}) : super(key: key);
@ -32,6 +28,8 @@ class MonthlyAttendance extends StatefulWidget {
} }
} }
// todo '@fatima' use extension methods for widgets
class _MonthlyAttendanceState extends State<MonthlyAttendance> { class _MonthlyAttendanceState extends State<MonthlyAttendance> {
bool isPresent = false; bool isPresent = false;
bool isAbsent = false; bool isAbsent = false;
@ -69,7 +67,6 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
} }
} }
Future getScheduleShiftsDetails(index, pRTPID) async { Future getScheduleShiftsDetails(index, pRTPID) async {
try { try {
Utils.showLoading(context); Utils.showLoading(context);
@ -430,7 +427,7 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
); );
} }
calendarTapped(CalendarTapDetails details) async { void calendarTapped(CalendarTapDetails details) async {
dynamic index = details.date?.day; dynamic index = details.date?.day;
if (index != null) { if (index != null) {
index = index - 1; index = index - 1;
@ -458,8 +455,8 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
maxChildSize: 0.9, maxChildSize: 0.9,
expand: false, expand: false,
builder: (_, controller) { builder: (_, controller) {
dynamic dmyString = getScheduleShiftsDetailsList!.sCHEDULEDATE; dynamic dmyString = getScheduleShiftsDetailsList!.sCHEDULEDATE;
DateTime dateTime1 = DateFormat("MM/dd/yyyy hh:mm:ss a").parse(dmyString); DateTime dateTime1 = DateFormat("MM/dd/yyyy hh:mm:ss a").parse(dmyString);
return Column( return Column(
children: [ children: [
Container( Container(
@ -485,11 +482,11 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Container(child: Container(
"${DateFormat("MMMM-dd-yyyy").format(dateTime1).replaceAll('-', " ")}".toText24(isBold: true, color: Colors.white), child: "${DateFormat("MMMM-dd-yyyy").format(dateTime1).replaceAll('-', " ")}".toText24(isBold: true, color: Colors.white),
).paddingOnly(top: 26, left: 21, right: 21), ).paddingOnly(top: 26, left: 21, right: 21),
Container( 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( Center(
child: CircularStepProgressBar( child: CircularStepProgressBar(
@ -540,8 +537,8 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
color: MyColors.grey67Color, color: MyColors.grey67Color,
), ),
8.height, 8.height,
"${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}" !="" "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}" != ""
? "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}".toText22(color: Colors.black, isBold: true) ? "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}".toText22(color: Colors.black, isBold: true)
: "__".toText22(color: Colors.black, isBold: true), : "__".toText22(color: Colors.black, isBold: true),
], ],
), ),
@ -555,7 +552,7 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
), ),
8.height, 8.height,
"${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}" != "" "${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}" != ""
? "${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}".toText22(color: Colors.black, isBold: true) ? "${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}".toText22(color: Colors.black, isBold: true)
: "__".toText22(color: Colors.black, isBold: true), : "__".toText22(color: Colors.black, isBold: true),
], ],
), ),
@ -579,9 +576,9 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
color: MyColors.grey67Color, color: MyColors.grey67Color,
), ),
8.height, 8.height,
"${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}" !="" "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}" != ""
? "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}".toText22(color: MyColors.greenColor, isBold: true) ? "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}".toText22(color: MyColors.greenColor, isBold: true)
:"__".toText22(color: MyColors.greenColor, isBold: true), : "__".toText22(color: MyColors.greenColor, isBold: true),
], ],
), ),
), ),
@ -593,9 +590,9 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
color: MyColors.grey67Color, color: MyColors.grey67Color,
), ),
8.height, 8.height,
"${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}"!= "" "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}" != ""
? "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}".toText22(color: MyColors.greenColor, isBold: true) ? "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}".toText22(color: MyColors.greenColor, isBold: true)
:"__".toText22(color: MyColors.greenColor, isBold: true), : "__".toText22(color: MyColors.greenColor, isBold: true),
], ],
), ),
], ],
@ -693,7 +690,7 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
return meetings; return meetings;
} }
static getMonth(int month) { static String getMonth(int month) {
switch (month) { switch (month) {
case 1: case 1:
return "January"; return "January";
@ -719,36 +716,40 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
return "November"; return "November";
case 12: case 12:
return "December"; return "December";
default:
return "";
} }
} }
static getMonthAr(int month){ static String getMonthAr(int month) {
switch (month) { switch (month) {
case 1: case 1:
return 'يناير'; return 'يناير';
case 2: case 2:
return ' فبراير'; return ' فبراير';
case 3: case 3:
return 'مارس'; return 'مارس';
case 4: case 4:
return 'أبريل'; return 'أبريل';
case 5: case 5:
return 'مايو'; return 'مايو';
case 6: case 6:
return 'يونيو'; return 'يونيو';
case 7: case 7:
return 'يوليو'; return 'يوليو';
case 8: case 8:
return 'أغسطس'; return 'أغسطس';
case 9: case 9:
return 'سبتمبر'; return 'سبتمبر';
case 10: case 10:
return ' اكتوبر'; return ' اكتوبر';
case 11: case 11:
return ' نوفمبر'; return ' نوفمبر';
case 12: case 12:
return 'ديسمبر'; return 'ديسمبر';
} default:
return "";
}
} }
} }

@ -50,275 +50,342 @@ class _DashboardScreenState extends State<DashboardScreen> {
List<String> namesD = ["Nostalgia Perfume Perfume", "Al Nafoura", "AlJadi", "Nostalgia Perfume"]; List<String> namesD = ["Nostalgia Perfume Perfume", "Al Nafoura", "AlJadi", "Nostalgia Perfume"];
final GlobalKey<ScaffoldState> _key = GlobalKey(); // final GlobalKey<ScaffoldState> _key = GlobalKey(); //
return Scaffold( return Scaffold(
key: _scaffoldState, key: _scaffoldState,
body: Column( body: Column(
children: [ children: [
Row( Row(
children: [ children: [
Builder(builder: (context) { Builder(builder: (context) {
return Row( return Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
CircularAvatar( CircularAvatar(
width: 34, width: 34,
height: 34, height: 34,
url: "https://cdn4.iconfinder.com/data/icons/professions-2-2/151/89-512.png", 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();
});
}),
Expanded(
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
//AppLogo(),
8.width,
LocaleKeys.mohemm.tr().toText14()
],
),
),
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),
), ),
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()
],
),
), ),
SizedBox( ).onPress(() async {
width: 36, await Navigator.pushNamed(context, AppRoutes.announcements);
height: 36,
child: Stack( })
alignment: Alignment.centerLeft, ],
).paddingOnly(left: 21, right: 21, top: 48, bottom: 7),
Expanded(
child: SingleChildScrollView(
child: Column(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
SvgPicture.asset("assets/images/announcements.svg"), LocaleKeys.goodMorning.tr().toText14(color: MyColors.grey77Color),
Positioned( "Mahmoud Shrouf".toText24(isBold: true),
right: 0, 16.height,
top: 0, Row(
child: Container( children: [
padding: const EdgeInsets.only(left: 5, right: 5), Expanded(
decoration: BoxDecoration(color: MyColors.redColor, borderRadius: BorderRadius.circular(17)), child: AspectRatio(
child: "3".toText12(color: Colors.white), aspectRatio: 159 / 159,
), child: Consumer<DashboardProviderModel>(
) builder: (context, model, child) {
], return (model.isAttendanceTrackingLoading
), ? GetAttendanceTrackingShimmer()
).onPress(() { : Container(
data.update(context); decoration: BoxDecoration(
}) borderRadius: BorderRadius.circular(15),
], gradient: const LinearGradient(transform: GradientRotation(.46), begin: Alignment.topRight, end: Alignment.bottomLeft, colors: [
).paddingOnly(left: 21, right: 21, top: 48, bottom: 7), MyColors.gradiantEndColor,
Expanded( MyColors.gradiantStartColor,
child: SingleChildScrollView( ]),
child: Column( ),
children: [ child: Stack(
Column( alignment: Alignment.center,
crossAxisAlignment: CrossAxisAlignment.start, children: [
children: [ if (model.isTimeRemainingInSeconds == 0) SvgPicture.asset("assets/images/thumb.svg"),
LocaleKeys.goodMorning.tr().toText14(color: MyColors.grey77Color), Column(
"Mahmoud Shrouf".toText24(isBold: true), crossAxisAlignment: CrossAxisAlignment.start,
16.height, children: [
Row( Expanded(
children: [ child: Column(
Expanded( mainAxisSize: MainAxisSize.min,
child: AspectRatio( crossAxisAlignment: CrossAxisAlignment.start,
aspectRatio: 159 / 159,
child: Consumer<DashboardProviderModel>(
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<Color>(Colors.white),
backgroundColor: const Color(0xff196D73),
),
),
],
),
],
).paddingOnly(top: 12, right: 15, left: 12),
),
Row(
children: [ children: [
Expanded( LocaleKeys.markAttendance.tr().toText14(color: Colors.white, isBold: true),
child: Column( if (model.isTimeRemainingInSeconds == 0) "01-02-2022".toText12(color: Colors.white),
if (model.isTimeRemainingInSeconds != 0)
Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
LocaleKeys.checkIn.tr().toText12(color: Colors.white), 9.height,
(model.attendanceTracking!.pSwipeIn == null ? "--:--" : model.attendanceTracking!.pSwipeIn) CountdownTimer(
.toString() endTime: model.endTime,
.toText14(color: Colors.white, isBold: true), onEnd: null,
4.height, 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<Color>(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"),
),
], ],
), ).paddingOnly(top: 12, right: 15, left: 12),
], ),
), Row(
], children: [
), Expanded(
).onPress(() { child: Column(
Navigator.pushNamed(context, AppRoutes.todayAttendance); mainAxisSize: MainAxisSize.min,
})) crossAxisAlignment: CrossAxisAlignment.start,
.animatedSwither(); 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( 9.width,
child: MenusWidget(), 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),
), ),
child: Column( ],
mainAxisSize: MainAxisSize.min, ).paddingOnly(left: 21, right: 21, top: 7),
children: [ ServicesWidget(),
Row( 8.height,
crossAxisAlignment: CrossAxisAlignment.center, Container(
children: [ width: double.infinity,
Expanded( padding: EdgeInsets.only(top: 31),
child: Column( decoration: BoxDecoration(
crossAxisAlignment: CrossAxisAlignment.start, color: Colors.white,
mainAxisSize: MainAxisSize.min, borderRadius: BorderRadius.only(topRight: Radius.circular(50), topLeft: Radius.circular(50)),
children: [ border: Border.all(color: MyColors.lightGreyEDColor, width: 1),
LocaleKeys.offers.tr().toText12(), ),
Row( child: Column(
children: [ mainAxisSize: MainAxisSize.min,
LocaleKeys.discounts.tr().toText24(isBold: true), children: [
6.width, Row(
Container( crossAxisAlignment: CrossAxisAlignment.center,
padding: const EdgeInsets.only(left: 8, right: 8), children: [
decoration: BoxDecoration( Expanded(
color: MyColors.yellowColor, child: Column(
borderRadius: BorderRadius.circular(10), crossAxisAlignment: CrossAxisAlignment.start,
), mainAxisSize: MainAxisSize.min,
child: LocaleKeys.newString.tr().toText10(isBold: true)), children: [
], LocaleKeys.offers.tr().toText12(),
), Row(
], children: [
), LocaleKeys.discounts.tr().toText24(isBold: true),
), 6.width,
LocaleKeys.viewAllOffers.tr().toText12(isUnderLine: true), Container(
], padding: const EdgeInsets.only(left: 8, right: 8),
).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( decoration: BoxDecoration(
borderRadius: const BorderRadius.all( color: MyColors.yellowColor,
Radius.circular(100), borderRadius: BorderRadius.circular(10),
),
border: Border.all(color: MyColors.lightGreyEDColor, width: 1),
), ),
child: ClipRRect( child: LocaleKeys.newString.tr().toText10(isBold: true)),
borderRadius: const BorderRadius.all( ],
Radius.circular(50), ),
), ],
child: Image.network( ),
"https://play-lh.googleusercontent.com/NPo88ojmhah4HDiposucJmfQIop4z4xc8kqJK9ITO9o-yCab2zxIp7PPB_XPj2iUojo", ),
fit: BoxFit.cover, 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, child: ClipRRect(
Expanded( borderRadius: const BorderRadius.all(
child: namesD[6 % (index + 1)].toText12(isCenter: true, maxLine: 2), Radius.circular(50),
),
child: Image.network(
"https://play-lh.googleusercontent.com/NPo88ojmhah4HDiposucJmfQIop4z4xc8kqJK9ITO9o-yCab2zxIp7PPB_XPj2iUojo",
fit: BoxFit.cover,
),
), ),
], ),
), 4.height,
); Expanded(
}, child: namesD[6 % (index + 1)].toText12(isCenter: true, maxLine: 2),
separatorBuilder: (cxt, index) => 8.width, ),
itemCount: 6), ],
), ),
], );
), },
) separatorBuilder: (cxt, index) => 8.width,
], itemCount: 6),
), ),
],
),
)
],
),
),
)
],
),
drawer: SafeArea(
child: AppDrawer(),
),
bottomNavigationBar: BottomNavigationBar(
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Padding(
padding: const EdgeInsets.all(4.0),
child: SvgPicture.asset(
"assets/icons/home.svg",
width: 20,
height: 20,
), ),
) ),
], label: 'Home',
),
BottomNavigationBarItem(
icon: Padding(
padding: const EdgeInsets.all(4.0),
child: SvgPicture.asset(
"assets/icons/create_req.svg",
width: 20,
height: 20,
),
),
label: 'Create Request',
),
BottomNavigationBarItem(
icon: Padding(
padding: const EdgeInsets.all(4.0),
child: SvgPicture.asset(
"assets/icons/work_list.svg",
width: 20,
height: 20,
),
),
label: 'Work List',
),
BottomNavigationBarItem(
icon: Padding(
padding: const EdgeInsets.all(4.0),
child: SvgPicture.asset(
"assets/icons/item_for_sale.svg",
width: 20,
height: 20,
),
),
label: 'Items for Sale',
),
],
currentIndex: 0,
selectedLabelStyle: TextStyle(
fontSize: 8,
color: Color(0xff989898),
fontWeight: FontWeight.w600,
),
unselectedLabelStyle: TextStyle(
fontSize: 8,
color: Color(0xff989898),
fontWeight: FontWeight.w600,
), ),
drawer: SafeArea(child: AppDrawer())); type: BottomNavigationBarType.fixed,
selectedItemColor: Colors.black,
backgroundColor: Color(0xffF8F8F8),
onTap: (v) {},
),
);
} }
} }

@ -13,15 +13,14 @@ import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_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/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/generic_response_model.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/circular_step_progress_bar.dart';
import 'package:mohem_flutter_app/widgets/location/Location.dart';
import 'package:mohem_flutter_app/widgets/nfc/nfc_reader_sheet.dart'; import 'package:mohem_flutter_app/widgets/nfc/nfc_reader_sheet.dart';
import 'package:nfc_manager/nfc_manager.dart'; import 'package:nfc_manager/nfc_manager.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:wifi_iot/wifi_iot.dart'; import 'package:wifi_iot/wifi_iot.dart';
import '../../provider/dashboard_provider_model.dart';
import '../../widgets/location/Location.dart';
class TodayAttendanceScreen extends StatefulWidget { class TodayAttendanceScreen extends StatefulWidget {
TodayAttendanceScreen({Key? key}) : super(key: key); TodayAttendanceScreen({Key? key}) : super(key: key);

@ -12,39 +12,58 @@ class _AppDrawerState extends State<AppDrawer> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
color: Colors.white, color: Colors.white,
child: Drawer( child: Drawer(
child: Column(children: <Widget>[ child: Column(
const SizedBox( children: <Widget>[
height: 200, const SizedBox(
), height: 200,
Expanded( ),
child: ListView(padding: const EdgeInsets.all(21), physics: const BouncingScrollPhysics(), children: [ Expanded(
const Divider(), child: ListView(
InkWell( padding: const EdgeInsets.all(21),
child: const DrawerItem( physics: const BouncingScrollPhysics(),
'My Profile', children: [
icon: Icons.person, const Divider(),
color: Colors.grey, InkWell(
), child: const DrawerItem(
onTap: () { 'My Profile',
drawerNavigator(context, AppRoutes.profile); icon: Icons.person,
}), color: Colors.grey,
const Divider(), ),
InkWell( onTap: () {
child: const DrawerItem( drawerNavigator(context, AppRoutes.profile);
'Mowadhafhi', }),
icon: Icons.person, const Divider(),
color: Colors.grey, InkWell(
), child: const DrawerItem(
onTap: () { 'Mowadhafhi',
drawerNavigator(context, AppRoutes.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);
})
],
),
)
],
),
),
);
} }
drawerNavigator(context, routeName) { void drawerNavigator(context, routeName) {
Navigator.of(context).pushNamed(routeName); Navigator.of(context).pushNamed(routeName);
} }
} }

@ -1,7 +1,6 @@
import 'package:easy_localization/src/public_ext.dart'; import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.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/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_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/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/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/dashboard/menu_entries.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/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:mohem_flutter_app/widgets/shimmer/dashboard_shimmer_widget.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -109,17 +109,19 @@ class ServicesWidget extends StatelessWidget {
void handleOnPress(context, GetMenuEntriesList menuEntry) { void handleOnPress(context, GetMenuEntriesList menuEntry) {
var pro = Provider.of<DashboardProviderModel>(context, listen: false); var pro = Provider.of<DashboardProviderModel>(context, listen: false);
List<GetMenuEntriesList>? menuList = pro.getMenuEntriesList?.where((element) => element.parentMenuName == menuEntry.menuName && element.menuEntryType == "FUNCTION").toList(); List<GetMenuEntriesList> menuList = pro.getMenuEntriesList?.where((element) => element.parentMenuName == menuEntry.menuName && element.menuEntryType == "FUNCTION").toList() ?? [];
menuEntry.icon = ""; menuEntry.icon = "";
print(menuEntry.toJson()); print(menuEntry.toJson());
Navigator.pushNamed(context, AppRoutes.myAttendance, arguments: menuList ?? []); if (menuList.isEmpty) {
return; if (menuEntry.requestType == "EIT") {
Navigator.pushNamed(context, AppRoutes.dynamicScreen, arguments: DynamicListViewParams(menuEntry.prompt!, menuEntry.functionName!));
if (menuEntry.menuName == "HMG_OTL_SS" || menuEntry.menuName == "HMG_PT_OTL_SS") { } else if (menuEntry.requestType == "PAYSLIP") {
Navigator.pushNamed(context, AppRoutes.myAttendance); Navigator.pushNamed(context, AppRoutes.monthlyPaySlip);
}
} else { } else {
Utils.showToast("In Progress"); Navigator.pushNamed(context, AppRoutes.myAttendance, arguments: menuList);
} }
return;
} }
String firstWord(String value) { String firstWord(String value) {

@ -120,29 +120,32 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
} }
void getDefaultValues(GetEITDFFStructureList structureList) async { void getDefaultValues(GetEITDFFStructureList structureList) async {
if ((structureList.cHILDSEGMENTSDVSplited?.length ?? 0) < 1) {
return;
}
try { try {
Utils.showLoading(context); Utils.showLoading(context);
for (int i = 0; i < (structureList.cHILDSEGMENTSDVSplited?.length ?? 0); i++) { for (int i = 0; i < (structureList.cHILDSEGMENTSDVSplited?.length ?? 0); i++) {
String segmentId = structureList.cHILDSEGMENTSDVSplited![i]; String segmentId = structureList.cHILDSEGMENTSDVSplited![i];
GetEITDFFStructureList? reqObj = getEitDffStructureList!.firstWhere((element) => element.sEGMENTNAME == segmentId); print("segmentId:${segmentId}");
List<PARENTSEGMENTSDVSplited> parentRequired = reqObj.pARENTSEGMENTSDVSplited ?? []; print("segmentName:${structureList.sEGMENTNAME}");
GetEITDFFStructureList? parent = getEitDffStructureList!.firstWhere((element) => element.sEGMENTNAME == segmentId);
List<PARENTSEGMENTSDVSplited> parentRequired = parent.pARENTSEGMENTSDVSplited ?? [];
List<GetEITDFFStructureList> filteredList = List<GetEITDFFStructureList> filteredList =
getEitDffStructureList!.where((outerElement) => parentRequired.any((element) => outerElement.sEGMENTNAME == element.name && element.isRequired == "REQUIRED")).toList(); getEitDffStructureList!.where((outerElement) => parentRequired.any((element) => outerElement.sEGMENTNAME == element.name && element.isRequired == "REQUIRED")).toList();
List<Map<String, dynamic>> values = filteredList List<Map<String, dynamic>> values = filteredList
.map((e) => GetSetValuesRequestModel( .map((e) => GetSetValuesRequestModel(
sEGMENTNAME: e.sEGMENTNAME, vALUECOLUMNNAME: e.eSERVICESDV!.pVALUECOLUMNNAME, dESCRIPTION: "", iDCOLUMNNAME: e.eSERVICESDV!.pIDCOLUMNNAME, fLEXVALUESETNAME: e.fLEXVALUESETNAME) sEGMENTNAME: e.sEGMENTNAME, vALUECOLUMNNAME: e.eSERVICESDV!.pVALUECOLUMNNAME, dESCRIPTION: "", iDCOLUMNNAME: e.eSERVICESDV!.pIDCOLUMNNAME, fLEXVALUESETNAME: e.fLEXVALUESETNAME)
.toJson()) .toJson())
.toList(); .toList();
print("values:${values}");
ESERVICESDV defaultValue = await MyAttendanceApiClient().getDefaultValue(segmentId, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, values); ESERVICESDV defaultValue = await MyAttendanceApiClient().getDefaultValue(segmentId, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, values);
int index = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == segmentId); int index = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == segmentId);
getEitDffStructureList![index].eSERVICESDV = defaultValue; getEitDffStructureList![index].eSERVICESDV = defaultValue;
} }
Utils.hideLoading(context); Utils.hideLoading(context);
setState(() {}); setState(() {});
} catch (ex) { } catch (ex) {
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, null); Utils.handleException(ex, context, null);
@ -171,7 +174,7 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
(getEitDffStructureList == null (getEitDffStructureList == null
? const SizedBox() ? const SizedBox()
: (getEitDffStructureList!.isEmpty : (getEitDffStructureList!.isEmpty
? LocaleKeys.noDataAvailable.tr().toText16().center ? Utils.getNoDataWidget(context)
: ListView.separated( : ListView.separated(
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.all(21), padding: const EdgeInsets.all(21),
@ -205,9 +208,7 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
isReadOnly: model.rEADONLY == "Y", isReadOnly: model.rEADONLY == "Y",
onChange: (text) { onChange: (text) {
model.fieldAnswer = text; model.fieldAnswer = text;
if (model.eSERVICESDV == null) { model.eSERVICESDV ??= ESERVICESDV();
model.eSERVICESDV = ESERVICESDV();
}
model.eSERVICESDV!.pIDCOLUMNNAME = text; model.eSERVICESDV!.pIDCOLUMNNAME = text;
}, },
).paddingOnly(bottom: 12); ).paddingOnly(bottom: 12);
@ -219,19 +220,18 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
isInputTypeNum: true, isInputTypeNum: true,
onChange: (text) { onChange: (text) {
model.fieldAnswer = text; model.fieldAnswer = text;
if (model.eSERVICESDV == null) { model.eSERVICESDV ??= ESERVICESDV();
model.eSERVICESDV = ESERVICESDV();
}
model.eSERVICESDV!.pIDCOLUMNNAME = text; model.eSERVICESDV!.pIDCOLUMNNAME = text;
}, },
).paddingOnly(bottom: 12); ).paddingOnly(bottom: 12);
} else if (model.fORMATTYPE == "X") { } else if (model.fORMATTYPE == "X") {
String displayText = model.eSERVICESDV?.pIDCOLUMNNAME ?? (getEitDffStructureList![index].fieldAnswer ?? ""); String displayText = model.eSERVICESDV?.pIDCOLUMNNAME ?? (getEitDffStructureList![index].fieldAnswer ?? "");
if (getEitDffStructureList![index].isDefaultTypeIsCDPS) { if (getEitDffStructureList![index].isDefaultTypeIsCDPS) {
if (displayText.contains(" 00:00:00")) { if (displayText.contains(" 00:00:00")) {
displayText = displayText.replaceAll(" 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)); displayText = DateFormat('yyyy-MM-dd').format(DateFormat("yyyy/MM/dd").parse(displayText));
} }
} }
@ -267,9 +267,12 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
} }
getEitDffStructureList![index].eSERVICESDV = eservicesdv; getEitDffStructureList![index].eSERVICESDV = eservicesdv;
setState(() {}); setState(() {});
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) { if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) {
calGetValueSetValues(model); calGetValueSetValues(model);
} }
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) {
getDefaultValues(model);
}
}, },
).paddingOnly(bottom: 12); ).paddingOnly(bottom: 12);
} else if (model.fORMATTYPE == "Y") { } else if (model.fORMATTYPE == "Y") {
@ -294,7 +297,12 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
if (tempDate.contains("00:00:00")) { if (tempDate.contains("00:00:00")) {
tempDate = tempDate.replaceAll("00:00:00", '').trim(); 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 { } else {
selectedDate = DateTime.parse(getEitDffStructureList![index].eSERVICESDV!.pVALUECOLUMNNAME!); selectedDate = DateTime.parse(getEitDffStructureList![index].eSERVICESDV!.pVALUECOLUMNNAME!);
} }
@ -319,10 +327,11 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
getEitDffStructureList![index].eSERVICESDV = eservicesdv; getEitDffStructureList![index].eSERVICESDV = eservicesdv;
setState(() {}); setState(() {});
if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) {
calGetValueSetValues(model);
}
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) { if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) {
if (getEitDffStructureList![index].isDefaultTypeIsCDPS) { getDefaultValues(model);
calGetValueSetValues(model);
} else {}
} }
}, },
).paddingOnly(bottom: 12); ).paddingOnly(bottom: 12);
@ -348,6 +357,9 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
pVALUECOLUMNNAME: model.eSERVICESVS![popipIndex].vALUECOLUMNNAME); pVALUECOLUMNNAME: model.eSERVICESVS![popipIndex].vALUECOLUMNNAME);
getEitDffStructureList![index].eSERVICESDV = eservicesdv; getEitDffStructureList![index].eSERVICESDV = eservicesdv;
setState(() {}); setState(() {});
if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) {
calGetValueSetValues(model);
}
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) { if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) {
getDefaultValues(model); getDefaultValues(model);
} }
@ -378,6 +390,9 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
pVALUECOLUMNNAME: model.eSERVICESVS![popipIndex].vALUECOLUMNNAME); pVALUECOLUMNNAME: model.eSERVICESVS![popipIndex].vALUECOLUMNNAME);
getEitDffStructureList![index].eSERVICESDV = eservicesdv; getEitDffStructureList![index].eSERVICESDV = eservicesdv;
setState(() {}); setState(() {});
if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) {
calGetValueSetValues(model);
}
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) { if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) {
getDefaultValues(model); getDefaultValues(model);
} }
@ -425,9 +440,12 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
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 ? DateFormat('yyyy-MM-dd hh:mm:ss').format(date) : DateFormat('yyyy-MM-ddThh:mm:ss.s').format(date));
getEitDffStructureList![index].eSERVICESDV = eservicesdv; getEitDffStructureList![index].eSERVICESDV = eservicesdv;
setState(() {}); setState(() {});
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) { if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) {
calGetValueSetValues(model); calGetValueSetValues(model);
} }
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) {
getDefaultValues(model);
}
}, },
).paddingOnly(bottom: 12); ).paddingOnly(bottom: 12);
} else if (model.fORMATTYPE == "I") { } else if (model.fORMATTYPE == "I") {
@ -452,9 +470,12 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
ESERVICESDV eservicesdv = ESERVICESDV(pIDCOLUMNNAME: time, pRETURNMSG: "null", pRETURNSTATUS: getEitDffStructureList![index].dEFAULTVALUE, pVALUECOLUMNNAME: time); ESERVICESDV eservicesdv = ESERVICESDV(pIDCOLUMNNAME: time, pRETURNMSG: "null", pRETURNSTATUS: getEitDffStructureList![index].dEFAULTVALUE, pVALUECOLUMNNAME: time);
getEitDffStructureList![index].eSERVICESDV = eservicesdv; getEitDffStructureList![index].eSERVICESDV = eservicesdv;
setState(() {}); setState(() {});
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) { if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) {
calGetValueSetValues(model); calGetValueSetValues(model);
} }
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) {
getDefaultValues(model);
}
}, },
).paddingOnly(bottom: 12); ).paddingOnly(bottom: 12);
} }

@ -1,13 +1,10 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/my_attendance_api_client.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/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_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/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/models/get_eit_transaction_list_model.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart'; import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart';
@ -47,6 +44,8 @@ class _DynamicListViewScreenState extends State<DynamicListViewScreen> {
getEITTransactionList?.forEach((element) { getEITTransactionList?.forEach((element) {
element.collectionTransaction = element.collectionTransaction?.where((elemen) => elemen.dISPLAYFLAG == "Y").toList() ?? []; element.collectionTransaction = element.collectionTransaction?.where((elemen) => elemen.dISPLAYFLAG == "Y").toList() ?? [];
}); });
getEITTransactionList = getEITTransactionList?.where((element) => element.collectionTransaction?.isNotEmpty ?? false).toList() ?? [];
Utils.hideLoading(context); Utils.hideLoading(context);
setState(() {}); setState(() {});
} catch (ex) { } catch (ex) {
@ -69,14 +68,11 @@ class _DynamicListViewScreenState extends State<DynamicListViewScreen> {
return Scaffold( return Scaffold(
backgroundColor: Colors.white, backgroundColor: Colors.white,
appBar: AppBarWidget( appBar: AppBarWidget(context, title: dynamicParams!.title),
context,
title: dynamicParams!.title,
),
body: getEITTransactionList == null body: getEITTransactionList == null
? const SizedBox() ? const SizedBox()
: (getEITTransactionList!.isEmpty : (getEITTransactionList!.isEmpty
? LocaleKeys.noDataAvailable.tr().toText16().center ? Utils.getNoDataWidget(context)
: ListView.separated( : ListView.separated(
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.all(21), padding: const EdgeInsets.all(21),

@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:mohem_flutter_app/classes/colors.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/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_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/string_extensions.dart';
@ -29,7 +30,7 @@ class MyAttendanceScreen extends StatelessWidget {
width: double.infinity, width: double.infinity,
height: double.infinity, height: double.infinity,
child: list.isEmpty child: list.isEmpty
? LocaleKeys.noDataAvailable.tr().toText16().center ? Utils.getNoDataWidget(context)
: Column( : Column(
children: [ children: [
//commenting this because missing wipe coming as duplicate in the screen //commenting this because missing wipe coming as duplicate in the screen

@ -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<MonthlyPaySlipScreen> {
List<GetPayslipList> paySlipList = [];
List<GetSummaryOfPaymentList> summaryOfPaymentList = [];
List<GetPaymentInformationList> paymentInformationList = [];
List<GetDeductionsList> deductionList = [];
List<GetEarningsList> 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 = [];
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 = [];
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 = [];
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(),
],
);
}
}

@ -41,8 +41,6 @@ class _BasicDetailsState extends State<BasicDetails> {
getEmployeeBasicDetailsList = await ProfileApiClient().getEmployeeBasicDetails(); getEmployeeBasicDetailsList = await ProfileApiClient().getEmployeeBasicDetails();
Utils.hideLoading(context); Utils.hideLoading(context);
basicDetails(); basicDetails();
print("getEmployeeBasicDetailsList.length");
print(getEmployeeBasicDetailsList.length);
setState(() {}); setState(() {});
} catch (ex) { } catch (ex) {
Utils.hideLoading(context); Utils.hideLoading(context);
@ -50,7 +48,7 @@ class _BasicDetailsState extends State<BasicDetails> {
} }
} }
basicDetails() { void basicDetails() {
for (int i = 0; i < getEmployeeBasicDetailsList.length; i++) { for (int i = 0; i < getEmployeeBasicDetailsList.length; i++) {
if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'FULL_NAME') { if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'FULL_NAME') {
fullName = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP; fullName = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP;
@ -119,7 +117,7 @@ class _BasicDetailsState extends State<BasicDetails> {
)); ));
} }
footer() { Widget footer() {
return Container( return Container(
decoration: BoxDecoration( decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(10), // borderRadius: BorderRadius.circular(10),
@ -134,7 +132,7 @@ class _BasicDetailsState extends State<BasicDetails> {
); );
} }
showAlertDialog(BuildContext context) { void showAlertDialog(BuildContext context) {
Widget cancelButton = TextButton( Widget cancelButton = TextButton(
child: Text("Cancel"), child: Text("Cancel"),
onPressed: () { onPressed: () {

@ -4,9 +4,7 @@ import 'package:mohem_flutter_app/api/profile_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.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/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/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/get_employee_address_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_basic_details.model.dart';
@ -176,7 +174,7 @@ class _ContactDetailsState extends State<ContactDetails> {
]))); ])));
} }
footer() { Widget footer() {
return Container( return Container(
decoration: BoxDecoration( decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(10), // borderRadius: BorderRadius.circular(10),

@ -1,20 +1,6 @@
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.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/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_basic_details_screen.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.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 { class DeleteFamilyMember extends StatefulWidget {
const DeleteFamilyMember({Key? key}) : super(key: key); const DeleteFamilyMember({Key? key}) : super(key: key);
@ -38,7 +24,7 @@ class _DeleteFamilyMemberState extends State<DeleteFamilyMember> {
)); ));
} }
footer() { Widget footer() {
return Row( return Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [

@ -128,7 +128,7 @@ class _DynamicInputScreenState extends State<DynamicInputScreenProfile> {
(getBasicDetDffStructureList == null && getBasicDetColsStructureList == null (getBasicDetDffStructureList == null && getBasicDetColsStructureList == null
? const SizedBox() ? const SizedBox()
: (getBasicDetDffStructureList!.isEmpty && getBasicDetColsStructureList!.isEmpty : (getBasicDetDffStructureList!.isEmpty && getBasicDetColsStructureList!.isEmpty
? LocaleKeys.noDataAvailable.tr().toText16().center ? Utils.getNoDataWidget(context)
: ListView( : ListView(
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.all(21), padding: const EdgeInsets.all(21),

@ -70,7 +70,7 @@ class _DynamicListViewScreenState extends State<DynamicListViewScreen> {
body: getEITTransactionList == null body: getEITTransactionList == null
? const SizedBox() ? const SizedBox()
: (getEITTransactionList!.isEmpty : (getEITTransactionList!.isEmpty
? LocaleKeys.noDataAvailable.tr().toText16().center ? Utils.getNoDataWidget(context)
: ListView.separated( : ListView.separated(
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
padding: EdgeInsets.all(21), padding: EdgeInsets.all(21),

@ -4,15 +4,10 @@ import 'package:mohem_flutter_app/api/profile_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.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/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/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/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_familyMembers_screen.dart';
import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart';
import 'package:mohem_flutter_app/ui/screens/profile/profile_screen.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/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart';
@ -28,6 +23,7 @@ class _FamilyMembersState extends State<FamilyMembers> {
List<GetEmployeeContactsList> getEmployeeContactsList = []; List<GetEmployeeContactsList> getEmployeeContactsList = [];
int? relationId; int? relationId;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -202,7 +198,7 @@ class _FamilyMembersState extends State<FamilyMembers> {
)); ));
} }
footer() { Widget footer() {
return Container( return Container(
decoration: BoxDecoration( decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(10), // borderRadius: BorderRadius.circular(10),
@ -218,7 +214,7 @@ class _FamilyMembersState extends State<FamilyMembers> {
); );
} }
showUpdateAlertDialog(BuildContext context) { void showUpdateAlertDialog(BuildContext context) {
Widget cancelButton = TextButton( Widget cancelButton = TextButton(
child: Text( child: Text(
LocaleKeys.cancel.tr(), LocaleKeys.cancel.tr(),
@ -253,7 +249,7 @@ class _FamilyMembersState extends State<FamilyMembers> {
); );
} }
showRemoveAlertDialog(BuildContext context, int relationId) { void showRemoveAlertDialog(BuildContext context, int relationId) {
Widget cancelButton = TextButton( Widget cancelButton = TextButton(
child: Text( child: Text(
LocaleKeys.cancel.tr(), LocaleKeys.cancel.tr(),

@ -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/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_basic_details.model.dart';
import 'package:mohem_flutter_app/models/member_information_list_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/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart';
@ -98,7 +97,7 @@ class _PesonalInfoState extends State<PesonalInfo> {
)); ));
} }
footer() { Widget footer() {
return Container( return Container(
decoration: BoxDecoration( decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(10), // borderRadius: BorderRadius.circular(10),

@ -1,17 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:easy_localization/src/public_ext.dart'; import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/profile_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/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.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/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.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/get_employee_phones_model.dart';
import 'package:mohem_flutter_app/models/profile/phone_number_types_model.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/models/profile/submit_phone_transactions.dart';
@ -47,117 +42,121 @@ class _PhoneNumbersState extends State<PhoneNumbers> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBarWidget( appBar: AppBarWidget(
context, context,
title: LocaleKeys.profile_contactDetails.tr(), title: LocaleKeys.profile_contactDetails.tr(),
), ),
backgroundColor: MyColors.backgroundColor, backgroundColor: MyColors.backgroundColor,
bottomSheet: footer(), bottomSheet: footer(),
body: SingleChildScrollView( body: SingleChildScrollView(
child: Column(children: [ child: Column(
Container( children: [
width: double.infinity, Container(
margin: EdgeInsets.only(left: 25, right: 25, top: 25), width: double.infinity,
padding: EdgeInsets.all(20), margin: EdgeInsets.only(left: 25, right: 25, top: 25),
// height: 400, padding: EdgeInsets.all(20),
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(10.0), border: Border.all(color: Color.fromARGB(255, 209, 207, 207))), // height: 400,
child: InkWell( decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(10.0), border: Border.all(color: Color.fromARGB(255, 209, 207, 207))),
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [ child: InkWell(
Icon( child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
Icons.add, Icon(
color: Color(0xff259CB8), Icons.add,
), color: Color(0xff259CB8),
Text( ),
'Add new row', Text(
style: TextStyle(color: Color(0xff259CB8), fontWeight: FontWeight.bold), 'Add new row',
) style: TextStyle(color: Color(0xff259CB8), fontWeight: FontWeight.bold),
]), )
onTap: () { ]),
addNewRow(); onTap: () {
}, addNewRow();
},
),
), ),
), Column(
Column( crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: widget.getEmployeePhonesList
children: widget.getEmployeePhonesList .map((e) => e.aCTION != 'DELETE_ROW'
.map((e) => e.aCTION != 'DELETE_ROW' ? Container(
? Container( width: double.infinity,
width: double.infinity, margin: EdgeInsets.only(
margin: EdgeInsets.only( top: 20,
top: 20, left: 26,
left: 26, right: 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: (_) => <PopupMenuItem<int>>[
for (int i = 0; i < getPhoneNumberTypesList.length; i++) PopupMenuItem<int>(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);
});
},
), ),
SizedBox( padding: EdgeInsets.only(left: 14, right: 14, top: 15, bottom: 15),
height: 10, // 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: [
: Container()) PopupMenuButton(
.toList()), child: DynamicTextFieldWidget(
SizedBox( "Please Select *",
height: 80, e.pHONETYPEMEANING ?? "",
) isEnable: false,
]))); isPopup: true,
).paddingOnly(bottom: 12),
itemBuilder: (_) => <PopupMenuItem<int>>[
for (int i = 0; i < getPhoneNumberTypesList.length; i++) PopupMenuItem<int>(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);
});
},
),
SizedBox(
height: 10,
),
]))
: Container())
.toList()),
SizedBox(
height: 80,
)
],
),
),
);
} }
footer() { Widget footer() {
return Container( return Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: MyColors.white, color: MyColors.white,

@ -0,0 +1,106 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:mohem_flutter_app/api/pending_transactions_api_client.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/models/get_announcement_details.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
class AnnouncementDetails extends StatefulWidget {
const AnnouncementDetails({Key? key}) : super(key: key);
@override
_AnnouncementDetailsState createState() => _AnnouncementDetailsState();
}
class _AnnouncementDetailsState extends State<AnnouncementDetails> {
String jsonResponse = "";
int currentPageNo = 0;
int rowID = 0;
GetAnnouncementDetails? getAnnouncementDetailsObj;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
getRequestID();
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBarWidget(
context,
title: "Announcements",
),
body: SingleChildScrollView(
child: Container(
width: double.infinity,
padding: const EdgeInsets.all(10.0),
margin: const EdgeInsets.all(12.0),
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,
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(
width: double.infinity,
height: 150.0,
child: ClipRRect(
borderRadius: BorderRadius.circular(10),
child: Image.memory(
base64Decode(Utils.getBase64FromJpeg(getAnnouncementDetailsObj?.bannerImage)),
fit: BoxFit.cover,
),
),
),
Container(
margin: const EdgeInsets.only(top: 12.0),
child: Html(
data: getAnnouncementDetailsObj?.bodyEN,
),
),
],
),
),
),
);
}
void getRequestID() {
if (currentPageNo == 0) {
final arguments = (ModalRoute.of(context)?.settings.arguments ?? <String, dynamic>{}) as Map;
currentPageNo = arguments["currentPageNo"];
rowID = arguments["rowID"];
getAnnouncementDetails(0, rowID);
}
}
void getAnnouncementDetails(int itgAwarenessID, int itgRowID) async {
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);
setState(() {});
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
}

@ -0,0 +1,168 @@
import 'dart:convert';
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';
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/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';
class Announcements extends StatefulWidget {
const Announcements({Key? key}) : super(key: key);
@override
_AnnouncementsState createState() => _AnnouncementsState();
}
class _AnnouncementsState extends State<Announcements> {
String jsonResponse = "";
int currentPageNo = 1;
int currentOpenIndex = -1;
List<GetAnnouncementsObject> getAnnouncementsObject = [];
List<GetAnnouncementsObject> _foundAnnouncements = [];
TextEditingController searchController = TextEditingController();
@override
void initState() {
getAnnouncements(0, 0);
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBarWidget(
context,
title: "Announcements",
),
body: getAnnouncementsObject.isNotEmpty
? Container(
margin: const EdgeInsets.only(top: 10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
12.height,
Container(
margin: const EdgeInsets.fromLTRB(12.0, 0.0, 12.0, 0.0),
child: DynamicTextFieldWidget(
"Search",
"Search Announcements",
isEnable: true,
suffixIconData: Icons.search,
isPopup: false,
lines: 1,
isInputTypeNum: false,
isReadOnly: false,
onChange: (String value) {
_runFilter(value);
},
),
),
12.height,
Expanded(
child: ListView.separated(
physics: const BouncingScrollPhysics(),
shrinkWrap: true,
itemBuilder: (BuildContext context, int index) {
return InkWell(
onTap: () {
openAnnouncementsDetails(int.parse(_foundAnnouncements[index].rowID!));
},
child: Container(
width: double.infinity,
padding: const EdgeInsets.all(10.0),
margin: const EdgeInsets.only(left: 12, right: 12, top: 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: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(
width: 80.0,
height: 80.0,
child: ClipRRect(
borderRadius: BorderRadius.circular(10),
child: Image.memory(
base64Decode(Utils.getBase64FromJpeg(_foundAnnouncements[index].bannerImage)),
fit: BoxFit.cover,
),
),
),
12.width,
SizedBox(
height: 80.0,
width: 200.0,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppState().isArabic(context) ? _foundAnnouncements[index].titleAR!.toText13() : getAnnouncementsObject[index].titleEN!.toText13(),
8.height,
_foundAnnouncements[index].created!.toText10(color: MyColors.grey98Color)
],
),
),
],
),
),
);
},
separatorBuilder: (BuildContext context, int index) => 1.height,
itemCount: _foundAnnouncements.length ?? 0))
],
),
)
: Utils.getNoDataWidget(context),
);
}
void _runFilter(String enteredKeyword) {
List<GetAnnouncementsObject> results = [];
if (enteredKeyword.isEmpty) {
results = getAnnouncementsObject;
} else {
results = getAnnouncementsObject.where((user) => user.titleEN!.toLowerCase().contains(enteredKeyword.toLowerCase())).toList();
}
setState(() {
_foundAnnouncements = results;
});
}
void getAnnouncements(int itgAwarenessID, int itgRowID) async {
try {
Utils.showLoading(context);
jsonResponse = await PendingTransactionsApiClient().getAnnouncements(itgAwarenessID, currentPageNo, itgRowID);
var jsonDecodedData = jsonDecode(jsonDecode(jsonResponse)['result']['data']);
for (int i = 0; i < jsonDecodedData.length; i++) {
getAnnouncementsObject.add(GetAnnouncementsObject.fromJson(jsonDecodedData[i]));
}
_foundAnnouncements = getAnnouncementsObject;
Utils.hideLoading(context);
setState(() {});
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
void openAnnouncementsDetails(int rowID) async {
await Navigator.pushNamed(context, AppRoutes.announcementsDetails, arguments: {"currentPageNo": currentPageNo, "rowID": rowID});
}
}

@ -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/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.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/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 'package:mohem_flutter_app/widgets/button/default_button.dart';
import '../../../widgets/app_bar_widget.dart';
class MowadhafhiHome extends StatefulWidget { class MowadhafhiHome extends StatefulWidget {
const MowadhafhiHome({Key? key}) : super(key: key); const MowadhafhiHome({Key? key}) : super(key: key);
@ -32,93 +31,92 @@ class _MowadhafhiHomeState extends State<MowadhafhiHome> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
backgroundColor: Colors.white, backgroundColor: Colors.white,
appBar: AppBarWidget( appBar: AppBarWidget(
context, context,
title: "Mowadhafhi Request", title: "Mowadhafhi Request",
), ),
body: Container( body: Container(
margin: const EdgeInsets.only(top: 10.0), margin: const EdgeInsets.only(top: 10.0),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Expanded( Expanded(
child: ListView.separated( child: ListView.separated(
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
shrinkWrap: true, shrinkWrap: true,
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
return InkWell( return InkWell(
onTap: () { onTap: () {
openRequestDetails(getTicketsByEmployeeList[index].ticketId!); openRequestDetails(getTicketsByEmployeeList[index].ticketId!);
}, },
child: Container( child: Container(
width: double.infinity, width: double.infinity,
// height: 100.0, // height: 100.0,
padding: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), padding: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10),
margin: 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( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
boxShadow: [ boxShadow: [
BoxShadow( BoxShadow(
color: const Color(0xff000000).withOpacity(.05), color: const Color(0xff000000).withOpacity(.05),
blurRadius: 26, blurRadius: 26,
offset: const Offset(0, -3), offset: const Offset(0, -3),
), ),
], ],
), ),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row( Row(
crossAxisAlignment: CrossAxisAlignment.start, 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(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
getTicketsByEmployeeList[index].ticketStatusInternalName!.toText14(color: MyColors.gradiantEndColor), getTicketsByEmployeeList[index].ticketTypeName!.toText14(color: MyColors.grey57Color),
SvgPicture.asset( getTicketsByEmployeeList[index].created!.split(" ")[0].toText12(color: MyColors.grey70Color),
"assets/images/arrow_next.svg",
color: MyColors.darkIconColor,
)
], ],
), ),
), 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,
separatorBuilder: (BuildContext context, int index) => 12.height, itemCount: getTicketsByEmployeeList.length ?? 0)),
itemCount: getTicketsByEmployeeList.length ?? 0)), 80.height
80.height ],
], ),
),
),
bottomSheet: Container(
decoration: const BoxDecoration(
color: MyColors.white,
boxShadow: [
BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3),
],
), ),
child: DefaultButton(LocaleKeys.createRequest.tr(), () async { bottomSheet: Container(
openHRRequest(); decoration: const BoxDecoration(
}).insideContainer, color: MyColors.white,
) boxShadow: [
); BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3),
],
),
child: DefaultButton(LocaleKeys.createRequest.tr(), () async {
openHRRequest();
}).insideContainer,
));
} }
void openRequestDetails(String itgTicketID) async { void openRequestDetails(String itgTicketID) async {

@ -26,7 +26,7 @@ class _RequestDetailsState extends State<MowadhafhiRequestDetails> {
super.initState(); super.initState();
} }
getRequestID() { void getRequestID() {
if (itgTicketID == null) { if (itgTicketID == null) {
itgTicketID = ModalRoute.of(context)?.settings.arguments as String; itgTicketID = ModalRoute.of(context)?.settings.arguments as String;
debugPrint(itgTicketID); debugPrint(itgTicketID);

@ -0,0 +1,182 @@
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/pending_transactions_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/date_uitl.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/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/pending_transactions/get_req_functions.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 PendingTransactions extends StatefulWidget {
const PendingTransactions({Key? key}) : super(key: key);
@override
_PendingTransactionsState createState() => _PendingTransactionsState();
}
class _PendingTransactionsState extends State<PendingTransactions> {
List<GetPendingTransactionsFunctions> getPendingTransactionsFunctions = [];
GetPendingTransactionsFunctions? selectedFunction;
DateTime selectedDateFrom = DateTime.now();
DateTime selectedDateTo = DateTime.now();
@override
void initState() {
getRequestTypes();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBarWidget(
context,
title: "Pending Transactions",
),
body: SingleChildScrollView(
child: Container(
width: double.infinity,
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(
children: [
12.height,
PopupMenuButton(
child: DynamicTextFieldWidget(
"Please select request type",
selectedFunction?.fUNCTIONPROMPT ?? "",
isEnable: false,
isPopup: true,
isInputTypeNum: true,
isReadOnly: false,
).paddingOnly(bottom: 12),
itemBuilder: (_) => <PopupMenuItem<int>>[
for (int i = 0; i < getPendingTransactionsFunctions!.length; i++) PopupMenuItem<int>(child: Text(getPendingTransactionsFunctions![i].fUNCTIONPROMPT!), value: i),
],
onSelected: (int popupIndex) {
selectedFunction = getPendingTransactionsFunctions![popupIndex];
setState(() {});
}),
12.height,
DynamicTextFieldWidget(
"Date From: ",
selectedDateFrom.toString().split(" ")[0],
suffixIconData: Icons.calendar_today,
isEnable: false,
onTap: () async {
selectedDateFrom = await _selectDate(context, DateTime.now());
setState(() {});
},
).paddingOnly(bottom: 12),
12.height,
DynamicTextFieldWidget(
"Date To: ",
selectedDateTo.toString().split(" ")[0],
suffixIconData: Icons.calendar_today,
isEnable: false,
onTap: () async {
selectedDateTo = await _selectDate(context, DateTime.now());
setState(() {});
},
).paddingOnly(bottom: 12),
],
),
),
),
bottomSheet: Container(
decoration: const BoxDecoration(
color: MyColors.white,
boxShadow: [
BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3),
],
),
child: DefaultButton(
LocaleKeys.submit.tr(),
selectedFunction == null
? null
: () async {
openRequestDetails();
})
.insideContainer,
));
}
Future<DateTime> _selectDate(BuildContext context, DateTime selectedDate) 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;
}
void getRequestTypes() async {
try {
Utils.showLoading(context);
getPendingTransactionsFunctions = await PendingTransactionsApiClient().getPendingReqFunctions();
Utils.hideLoading(context);
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
void openRequestDetails() async {
await Navigator.pushNamed(context, AppRoutes.pendingTransactionsDetails,
arguments: {"selectedFunctionID": selectedFunction?.fUNCTIONID, "dateFrom": DateUtil.convertDateToString(selectedDateFrom), "dateTo": DateUtil.convertDateToString(selectedDateTo)});
}
void getPendingReqDetails() async {
try {
Utils.showLoading(context);
getPendingTransactionsFunctions = await PendingTransactionsApiClient().getPendingReqFunctions();
Utils.hideLoading(context);
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
}

@ -0,0 +1,137 @@
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/models/pending_transactions/get_pending_transactions_details.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
class PendingTransactionsDetails extends StatefulWidget {
const PendingTransactionsDetails({Key? key}) : super(key: key);
@override
_PendingTransactionsDetailsState createState() => _PendingTransactionsDetailsState();
}
class _PendingTransactionsDetailsState extends State<PendingTransactionsDetails> {
String functionID = "";
String dateFrom = "";
String dateTo = "";
List<GetPendingTransactionsDetails> getPendingTransactionsDetails = [];
@override
void initState() {
super.initState();
}
void getFunctionID() {
if (functionID == "") {
final arguments = (ModalRoute.of(context)?.settings.arguments ?? <String, dynamic>{}) as Map;
functionID = arguments["selectedFunctionID"].toString();
dateFrom = arguments["dateFrom"];
dateTo = arguments["dateTo"];
getTicketTransactions();
}
}
@override
Widget build(BuildContext context) {
getFunctionID();
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBarWidget(
context,
title: "Pending Transactions",
),
body: getPendingTransactionsDetails.isNotEmpty
? 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 Container(
width: double.infinity,
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: [
Row(
children: [
"Created For ".toText14(color: MyColors.grey57Color),
getPendingTransactionsDetails[index].tRANSACTIONCREATEDFOR!.toText14(color: MyColors.grey57Color),
],
),
Column(
children: [
getPendingTransactionsDetails[index].cREATIONDATE!.split(" ")[0].toText12(color: MyColors.grey70Color),
getPendingTransactionsDetails[index].cREATIONDATE!.split(" ")[1].toText12(color: MyColors.grey70Color),
],
),
],
),
Container(
child: Row(
children: [
"Request Name: ".toText14(color: MyColors.grey57Color),
getPendingTransactionsDetails[index].uSERFUNCTIONNAME!.toText12(color: MyColors.grey57Color),
],
),
),
Container(
padding: const EdgeInsets.only(top: 0.0),
child: Row(
children: [
"Request Type: ".toText14(color: MyColors.grey57Color),
getPendingTransactionsDetails[index].rEQUESTTYPE!.toText14(color: MyColors.redColor),
],
),
),
],
),
);
},
separatorBuilder: (BuildContext context, int index) => 12.height,
itemCount: getPendingTransactionsDetails.length ?? 0))
],
),
)
: Utils.getNoDataWidget(context),
);
}
void getTicketTransactions() async {
try {
Utils.showLoading(context);
getPendingTransactionsDetails = await PendingTransactionsApiClient().getPendingTransactionsDetails(functionID, dateFrom, dateTo);
Utils.hideLoading(context);
setState(() {});
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
}

@ -1,5 +1,6 @@
import 'dart:ui';
import 'dart:convert'; import 'dart:convert';
import 'dart:ui';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
@ -12,6 +13,7 @@ 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/ui/screens/profile/widgets/profile_panel.dart';
import 'package:mohem_flutter_app/widgets/bottom_sheet.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 { class ProfileScreen extends StatefulWidget {
const ProfileScreen({Key? key}) : super(key: key); const ProfileScreen({Key? key}) : super(key: key);
@ -92,7 +94,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
])); ]));
} }
startImageSheet() { void startImageSheet() {
showMyBottomSheet(context, showMyBottomSheet(context,
child: Column( child: Column(
children: [ children: [

@ -9,6 +9,8 @@ import 'package:mohem_flutter_app/models/profile_menu.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_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/dynamic_screens/dynamic_listview_screen.dart';
// todo '@sultan' kindly follow structure of code written. use extension methods for widgets, also format code
class ProfileInFo extends StatelessWidget { class ProfileInFo extends StatelessWidget {
ProfileInFo(this.memberInfo); ProfileInFo(this.memberInfo);
MemberInformationListModel memberInfo; MemberInformationListModel memberInfo;

@ -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/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.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/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/ui/work_list/sheets/request_more_info_sheet.dart';
import 'package:mohem_flutter_app/widgets/bottom_sheet.dart'; import 'package:mohem_flutter_app/widgets/bottom_sheet.dart';
import 'package:mohem_flutter_app/widgets/circular_avatar.dart'; import 'package:mohem_flutter_app/widgets/circular_avatar.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/api/worklist/worklist_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.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/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/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/search_options_sheet.dart';
import 'package:mohem_flutter_app/ui/work_list/sheets/selected_item_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/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/circular_avatar.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/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 { class DelegateSheet extends StatefulWidget {
int? notificationID; int? notificationID;
String title,apiMode; String title, apiMode;
List<GetActionHistoryList>? actionHistoryList; List<GetActionHistoryList>? actionHistoryList;
DelegateSheet({required this.title,required this.apiMode,this.notificationID, this.actionHistoryList}); DelegateSheet({required this.title, required this.apiMode, this.notificationID, this.actionHistoryList});
@override @override
State<DelegateSheet> createState() => _DelegateSheetState(); State<DelegateSheet> createState() => _DelegateSheetState();
@ -69,7 +67,7 @@ class _DelegateSheetState extends State<DelegateSheet> {
return null; 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); Utils.showLoading(context);
favLetters = null; favLetters = null;
selectedFavLetter = null; selectedFavLetter = null;

@ -1,10 +1,9 @@
import 'package:flutter/material.dart'; 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/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_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/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/widgets/radio/show_radio.dart';
import '../../../classes/colors.dart';
import '../../../widgets/radio/show_radio.dart';
class SearchOptionsSheet extends StatelessWidget { class SearchOptionsSheet extends StatelessWidget {
String selectedType; String selectedType;

@ -1,19 +1,15 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/worklist/worklist_api_client.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/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/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/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/circular_avatar.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/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 { class SelectedItemSheet extends StatelessWidget {
String title, apiMode; String title, apiMode;
@ -115,13 +111,13 @@ class SelectedItemSheet extends StatelessWidget {
Future<void> performNetworkCall(BuildContext context, {String? email, String? userId}) async { Future<void> performNetworkCall(BuildContext context, {String? email, String? userId}) async {
Utils.showLoading(context); Utils.showLoading(context);
try{ try {
await WorkListApiClient().submitComment(comment: comment, email: email, userId: userId, notificationId: notificationID, apiMode: apiMode); await WorkListApiClient().submitComment(comment: comment, email: email, userId: userId, notificationId: notificationID, apiMode: apiMode);
Utils.hideLoading(context); Utils.hideLoading(context);
Navigator.pop(context); Navigator.pop(context);
Navigator.pop(context); Navigator.pop(context);
Navigator.pop(context, "delegate_reload"); Navigator.pop(context, "delegate_reload");
}catch (ex) { } catch (ex) {
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, null); Utils.handleException(ex, context, null);
} }

@ -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/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/member_information_list_model.dart';
import 'package:mohem_flutter_app/models/notification_get_respond_attributes_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/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/sheets/delegate_sheet.dart';
import 'package:mohem_flutter_app/ui/work_list/worklist_fragments/actions_fragment.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/info_fragments.dart';
import 'package:mohem_flutter_app/ui/work_list/worklist_fragments/request_fragment.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/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/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/dialogs/accept_reject_input_dialog.dart'; import 'package:mohem_flutter_app/widgets/dialogs/accept_reject_input_dialog.dart';
import 'package:mohem_flutter_app/widgets/dialogs/confirm_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';
class WorkListDetailScreen extends StatefulWidget { class WorkListDetailScreen extends StatefulWidget {
WorkListDetailScreen({Key? key}) : super(key: key); WorkListDetailScreen({Key? key}) : super(key: key);

@ -1,6 +1,5 @@
import 'package:easy_localization/src/public_ext.dart'; import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.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/classes/date_uitl.dart';
import 'package:mohem_flutter_app/extensions/int_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/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_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_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_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/models/worklist_response_model.dart';
import 'package:mohem_flutter_app/widgets/item_detail_view_widget.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 { class InfoFragment extends StatelessWidget {
WorkListResponseModel? workListData; WorkListResponseModel? workListData;
List<POHeader> poHeaderList; List<POHeader> poHeaderList;

@ -28,7 +28,7 @@ class Updater<T> extends StatelessWidget{
}); });
} }
pushData(T? data) { void pushData(T? data) {
_history.add(data); _history.add(data);
sink?.sink.add(data); sink?.sink.add(data);
} }

@ -1,7 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart';
showMyBottomSheet(BuildContext context, {required Widget child}) { void showMyBottomSheet(BuildContext context, {required Widget child}) {
showModalBottomSheet<void>( showModalBottomSheet<void>(
context: context, context: context,
isScrollControlled: true, isScrollControlled: true,

@ -502,7 +502,7 @@ class _CircularIndicatorPainter implements CustomPainter {
void removeListener(listener) {} void removeListener(listener) {}
@override @override
get semanticsBuilder => null; Null get semanticsBuilder => null;
@override @override
bool shouldRebuildSemantics(CustomPainter oldDelegate) => false; bool shouldRebuildSemantics(CustomPainter oldDelegate) => false;

@ -1,23 +1,22 @@
import 'dart:async'; import 'dart:async';
import 'dart:math'; import 'dart:math';
import 'dart:ui'; import 'dart:ui';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:geolocator/geolocator.dart'; import 'package:geolocator/geolocator.dart';
import 'package:google_directions_api/google_directions_api.dart'; import 'package:google_directions_api/google_directions_api.dart';
import 'package:google_maps_flutter/google_maps_flutter.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/classes/utils.dart';
import 'package:mohem_flutter_app/theme/colors.dart';
// import 'package:geodesy/geodesy.dart' as geodesy; // import 'package:geodesy/geodesy.dart' as geodesy;
import '../../classes/app_permissions.dart';
import '../../theme/colors.dart';
//Created By Mr.Zohaib //Created By Mr.Zohaib
class Location { class Location {
static _Map map = _Map(); static _Map map = _Map();
static havePermission(Function(bool) callback) { static void havePermission(Function(bool) callback) {
Geolocator.checkPermission().then((value) async { Geolocator.checkPermission().then((value) async {
if (value == LocationPermission.denied) { if (value == LocationPermission.denied) {
value = await Geolocator.requestPermission(); 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)); Geolocator.isLocationServiceEnabled().then((value) => callback(value));
} }
static bool _listeningSettingChange = true; 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; _listeningSettingChange = change;
if (change == false) return; if (change == false) return;
@ -46,8 +45,8 @@ class Location {
}); });
} }
static getCurrentLocation(Function(LatLng?) callback) { static void getCurrentLocation(Function(LatLng?) callback) {
done(Position position) { void done(Position position) {
//AppStorage.sp.saveLocation(position); //AppStorage.sp.saveLocation(position);
LatLng? myCurrentLocation = LatLng(position.latitude, position.longitude); LatLng? myCurrentLocation = LatLng(position.latitude, position.longitude);
@ -55,8 +54,7 @@ class Location {
} }
AppPermissions.location((granted) { AppPermissions.location((granted) {
if (granted) {
if (granted)
Geolocator.getLastKnownPosition(forceAndroidLocationManager: true).then((value) { Geolocator.getLastKnownPosition(forceAndroidLocationManager: true).then((value) {
if (value == null) { if (value == null) {
Geolocator.getCurrentPosition().then((value) { Geolocator.getCurrentPosition().then((value) {
@ -66,6 +64,7 @@ class Location {
done(value); done(value);
} }
}); });
}
}); });
} }
@ -125,20 +124,20 @@ class _Map {
return camera; return camera;
} }
moveCamera(CameraPosition camera, @required Completer<GoogleMapController> mapController, bool animation) { void moveCamera(CameraPosition camera, @required Completer<GoogleMapController> mapController, bool animation) {
mapController.future.then((controller) { mapController.future.then((controller) {
animation ? controller.animateCamera(CameraUpdate.newCameraPosition(camera)) : controller.moveCamera(CameraUpdate.newCameraPosition(camera)); animation ? controller.animateCamera(CameraUpdate.newCameraPosition(camera)) : controller.moveCamera(CameraUpdate.newCameraPosition(camera));
}); });
} }
scrollBy({double x = 0, double y = 0, required Completer<GoogleMapController> mapController, bool animation = true}) { void scrollBy({double x = 0, double y = 0, required Completer<GoogleMapController> mapController, bool animation = true}) {
var camera = CameraUpdate.scrollBy(x, y); var camera = CameraUpdate.scrollBy(x, y);
mapController.future.then((controller) { mapController.future.then((controller) {
animation ? controller.animateCamera(camera) : controller.moveCamera(camera); animation ? controller.animateCamera(camera) : controller.moveCamera(camera);
}); });
} }
goToCurrentLocation({Completer<GoogleMapController>? mapController, double? direction = 0.0, bool? animation}) { void goToCurrentLocation({Completer<GoogleMapController>? mapController, double? direction = 0.0, bool? animation}) {
Location.getCurrentLocation((location) { Location.getCurrentLocation((location) {
moveTo(location!, zoom: 17, mapController: mapController!, animation: animation, direction: direction!); moveTo(location!, zoom: 17, mapController: mapController!, animation: animation, direction: direction!);
}); });
@ -146,7 +145,7 @@ class _Map {
var routes = Map<String, DirectionsRoute>(); var routes = Map<String, DirectionsRoute>();
setRoutePolylines(LatLng? source, LatLng? destination, Set<Polyline> polylines, Completer<GoogleMapController> mapController, Function(DirectionsRoute?) completion) { void setRoutePolylines(LatLng? source, LatLng? destination, Set<Polyline> polylines, Completer<GoogleMapController> mapController, Function(DirectionsRoute?) completion) {
if (source == null || destination == null) { if (source == null || destination == null) {
completion(null); completion(null);
return; return;
@ -156,7 +155,7 @@ class _Map {
var destin = '${destination.latitude},${destination.longitude}'; var destin = '${destination.latitude},${destination.longitude}';
var routeId = '$origin->$destination'; var routeId = '$origin->$destination';
createPolyline(DirectionsRoute results) { void createPolyline(DirectionsRoute results) {
List<LatLng> polylineCoordinates = results.overviewPath!.map((e) => LatLng(e.latitude, e.longitude)).toList(); List<LatLng> polylineCoordinates = results.overviewPath!.map((e) => LatLng(e.latitude, e.longitude)).toList();
PolylineId id = PolylineId("route"); PolylineId id = PolylineId("route");
Polyline polyline = Polyline( Polyline polyline = Polyline(
@ -221,7 +220,7 @@ class _Map {
return LatLngBounds(northeast: LatLng(x1!, y1!), southwest: LatLng(x0!, y0!)); return LatLngBounds(northeast: LatLng(x1!, y1!), southwest: LatLng(x0!, y0!));
} }
focusCameraToLatLngBounds({LatLngBounds? bound, Completer<GoogleMapController>? mapController, double? padding}) async { void focusCameraToLatLngBounds({LatLngBounds? bound, Completer<GoogleMapController>? mapController, double? padding}) async {
if (bound == null) return; if (bound == null) return;
CameraUpdate camera = CameraUpdate.newLatLngBounds(bound, padding!); CameraUpdate camera = CameraUpdate.newLatLngBounds(bound, padding!);
@ -229,7 +228,7 @@ class _Map {
controller.animateCamera(camera); controller.animateCamera(camera);
} }
focusCameraTo2Points({LatLng? point1, LatLng? point2, Completer<GoogleMapController>? mapController, double? padding}) async { void focusCameraTo2Points({LatLng? point1, LatLng? point2, Completer<GoogleMapController>? mapController, double? padding}) async {
var source = point1; var source = point1;
var destination = point2; var destination = point2;
if (source != null && destination != null) { if (source != null && destination != null) {

@ -108,7 +108,7 @@ class OTPWidgetState extends State<OTPWidget> with SingleTickerProviderStateMixi
} }
} }
_calculateStrList() { void calculateStrList() {
if (strList.length > widget.maxLength) { if (strList.length > widget.maxLength) {
strList.length = widget.maxLength; strList.length = widget.maxLength;
} }
@ -123,7 +123,7 @@ class OTPWidgetState extends State<OTPWidget> with SingleTickerProviderStateMixi
focusNode = widget.focusNode ?? FocusNode(); focusNode = widget.focusNode ?? FocusNode();
_initTextController(); _initTextController();
_calculateStrList(); calculateStrList();
widget.controller?.addListener(_controllerListener); widget.controller?.addListener(_controllerListener);
focusNode?.addListener(_focusListener); focusNode?.addListener(_focusListener);
} }
@ -291,7 +291,7 @@ class OTPWidgetState extends State<OTPWidget> with SingleTickerProviderStateMixi
} }
Widget _pinBoxRow(BuildContext context) { Widget _pinBoxRow(BuildContext context) {
_calculateStrList(); calculateStrList();
List<Widget> pinCodes = List.generate(widget.maxLength, (int i) { List<Widget> pinCodes = List.generate(widget.maxLength, (int i) {
return _buildPinCode(i, context); return _buildPinCode(i, context);
}); });

@ -40,7 +40,7 @@ dependencies:
easy_localization: ^3.0.0 easy_localization: ^3.0.0
http: ^0.13.4 http: ^0.13.4
permission_handler: ^9.2.0 permission_handler: ^9.2.0
flutter_svg: ^1.0.0 flutter_svg: ^0.23.0+1
sizer: ^2.0.15 sizer: ^2.0.15
local_auth: ^1.1.9 local_auth: ^1.1.9
fluttertoast: ^8.0.8 fluttertoast: ^8.0.8
@ -67,6 +67,7 @@ dependencies:
month_picker_dialog: ^0.4.0 month_picker_dialog: ^0.4.0
open_file: ^3.2.1 open_file: ^3.2.1
wifi_iot: ^0.3.16 wifi_iot: ^0.3.16
flutter_html: ^2.2.1
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:

Loading…
Cancel
Save