From d75f9a9cc345f97ac29bcc8867e385abe2ec526b Mon Sep 17 00:00:00 2001 From: FaizHashmi Date: Thu, 22 Oct 2026 17:29:57 +0300 Subject: [PATCH 1/2] icons --- assets/icons/mazaya_arrow_right.svg | 5 +++++ assets/icons/mazaya_arrow_up_right.svg | 5 +++++ assets/icons/mazaya_chevron_down.svg | 5 +++++ assets/icons/mazaya_chevron_left.svg | 5 +++++ assets/icons/mazaya_compass.svg | 10 ++++++++++ assets/icons/mazaya_heart.svg | 5 +++++ assets/icons/mazaya_heart_outline.svg | 5 +++++ assets/icons/mazaya_map_pin.svg | 5 +++++ assets/icons/mazaya_search.svg | 5 +++++ assets/icons/mazaya_user_round.svg | 5 +++++ 10 files changed, 55 insertions(+) create mode 100644 assets/icons/mazaya_arrow_right.svg create mode 100644 assets/icons/mazaya_arrow_up_right.svg create mode 100644 assets/icons/mazaya_chevron_down.svg create mode 100644 assets/icons/mazaya_chevron_left.svg create mode 100644 assets/icons/mazaya_compass.svg create mode 100644 assets/icons/mazaya_heart.svg create mode 100644 assets/icons/mazaya_heart_outline.svg create mode 100644 assets/icons/mazaya_map_pin.svg create mode 100644 assets/icons/mazaya_search.svg create mode 100644 assets/icons/mazaya_user_round.svg diff --git a/assets/icons/mazaya_arrow_right.svg b/assets/icons/mazaya_arrow_right.svg new file mode 100644 index 00000000..626286f4 --- /dev/null +++ b/assets/icons/mazaya_arrow_right.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/mazaya_arrow_up_right.svg b/assets/icons/mazaya_arrow_up_right.svg new file mode 100644 index 00000000..d19638ce --- /dev/null +++ b/assets/icons/mazaya_arrow_up_right.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/mazaya_chevron_down.svg b/assets/icons/mazaya_chevron_down.svg new file mode 100644 index 00000000..229787c1 --- /dev/null +++ b/assets/icons/mazaya_chevron_down.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/mazaya_chevron_left.svg b/assets/icons/mazaya_chevron_left.svg new file mode 100644 index 00000000..43a844e1 --- /dev/null +++ b/assets/icons/mazaya_chevron_left.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/mazaya_compass.svg b/assets/icons/mazaya_compass.svg new file mode 100644 index 00000000..804a26bf --- /dev/null +++ b/assets/icons/mazaya_compass.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/assets/icons/mazaya_heart.svg b/assets/icons/mazaya_heart.svg new file mode 100644 index 00000000..d8d9d218 --- /dev/null +++ b/assets/icons/mazaya_heart.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/mazaya_heart_outline.svg b/assets/icons/mazaya_heart_outline.svg new file mode 100644 index 00000000..3d2bd2df --- /dev/null +++ b/assets/icons/mazaya_heart_outline.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/mazaya_map_pin.svg b/assets/icons/mazaya_map_pin.svg new file mode 100644 index 00000000..87e573f7 --- /dev/null +++ b/assets/icons/mazaya_map_pin.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/mazaya_search.svg b/assets/icons/mazaya_search.svg new file mode 100644 index 00000000..65b5a58c --- /dev/null +++ b/assets/icons/mazaya_search.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/mazaya_user_round.svg b/assets/icons/mazaya_user_round.svg new file mode 100644 index 00000000..a8619b46 --- /dev/null +++ b/assets/icons/mazaya_user_round.svg @@ -0,0 +1,5 @@ + + + + + From 6ba06065b3ba297ab793f767571d370135e586a9 Mon Sep 17 00:00:00 2001 From: FaizHashmi Date: Sun, 25 Oct 2026 15:17:17 +0300 Subject: [PATCH 2/2] Fav Tab Changes and SearchBar Fix --- assets/langs/ar-SA.json | 1 + assets/langs/en-US.json | 1 + lib/api/offers_and_discounts_api_client.dart | 383 +- lib/generated/codegen_loader.g.dart | 3584 +++++++++-------- lib/generated/locale_keys.g.dart | 92 +- lib/ui/mazaya/mazaya_discover_screen.dart | 81 +- lib/ui/mazaya/retailers_list_screen.dart | 21 +- lib/ui/mazaya/saved_retailers_screen.dart | 4 + lib/ui/mazaya/widgets/mazaya_bottom_nav.dart | 63 +- .../profile/mazaya_access_result_screen.dart | 11 +- lib/widgets/app_bar_widget.dart | 24 +- 11 files changed, 2375 insertions(+), 1890 deletions(-) diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index 973a5b04..cbb7f31b 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -831,6 +831,7 @@ "locationServicesRequiredForNearestOffers": "فعّل خدمات الموقع لعرض العروض القريبة منك", "locationPermissionRequiredForNearestOffers": "اسمح للتطبيق بالوصول إلى موقعك لعرض العروض القريبة منك", "mazayaDeals": "عروض مزايا", + "helloName": "مرحباً، {}", "findABrandOrSomething": "ابحث عن علامة تجارية أو شيء بسيط", "exploreYourBenefits": "استكشف مزاياك", "theMazayaEdit": "اختيارات مزايا", diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index 5a4bc2c0..fd4e1ad9 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -832,6 +832,7 @@ "locationServicesRequiredForNearestOffers": "You need to enable location services to show nearest offers", "locationPermissionRequiredForNearestOffers": "You need to give location permission to show nearest offers", "mazayaDeals": "Mazaya Deals", + "helloName": "Hello, {}", "findABrandOrSomething": "Find a brand or a little something", "exploreYourBenefits": "Explore your benefits", "theMazayaEdit": "The Mazaya Edit", diff --git a/lib/api/offers_and_discounts_api_client.dart b/lib/api/offers_and_discounts_api_client.dart index e85b04bb..a5284a38 100644 --- a/lib/api/offers_and_discounts_api_client.dart +++ b/lib/api/offers_and_discounts_api_client.dart @@ -15,7 +15,8 @@ import 'package:mohem_flutter_app/models/offers_and_discounts/wala_plus_retailer import 'package:mohem_flutter_app/widgets/location/Location.dart' as location; class OffersAndDiscountsApiClient { - static final OffersAndDiscountsApiClient _instance = OffersAndDiscountsApiClient._internal(); + static final OffersAndDiscountsApiClient _instance = + OffersAndDiscountsApiClient._internal(); static List? cachedCategories; OffersAndDiscountsApiClient._internal(); @@ -26,7 +27,12 @@ class OffersAndDiscountsApiClient { List getSaleCategoriesList = []; String url = "${ApiConsts.cocRest}Mohemm_ITG_GetCategories"; - Map postParams = {"EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER, "ItgPageSize": 100, "ItgPageNo": 1, "ItgIsActive": true}; + Map postParams = { + "EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER, + "ItgPageSize": 100, + "ItgPageNo": 1, + "ItgIsActive": true, + }; postParams.addAll(AppState().postParamsJson); return await ApiClient().postJsonForObject( @@ -53,11 +59,19 @@ class OffersAndDiscountsApiClient { ); } - Future> getOffersList(int categoryID, int pageSize) async { + Future> getOffersList( + int categoryID, + int pageSize, + ) async { List getSaleCategoriesList = []; String url = "${ApiConsts.cocRest}GetOfferDiscountsConfigData"; - Map postParams = {"EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER, "ItgPageSize": pageSize, "ItgPageNo": 1, "ItgCategoryID": categoryID}; + Map postParams = { + "EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER, + "ItgPageSize": pageSize, + "ItgPageNo": 1, + "ItgCategoryID": categoryID, + }; postParams.addAll(AppState().postParamsJson); return await ApiClient().postJsonForObject( @@ -81,7 +95,10 @@ class OffersAndDiscountsApiClient { String _resolveUserName() { String? pUserName = AppState().getUserName; if (pUserName == null || pUserName.isEmpty) { - pUserName = AppState().postParamsObject?.userName ?? AppState().postParamsObject?.pUserName ?? AppState().memberInformationList?.eMPLOYEENUMBER; + pUserName = + AppState().postParamsObject?.userName ?? + AppState().postParamsObject?.pUserName ?? + AppState().memberInformationList?.eMPLOYEENUMBER; } return pUserName ?? ""; } @@ -97,12 +114,15 @@ class OffersAndDiscountsApiClient { if (!enabledCompleter.isCompleted) enabledCompleter.complete(isEnabled); }); bool isEnabled = await enabledCompleter.future; - debugPrint("_getCurrentPositionSilently: location service isEnabled=$isEnabled"); + debugPrint( + "_getCurrentPositionSilently: location service isEnabled=$isEnabled", + ); if (!isEnabled) return null; Completer permissionCompleter = Completer(); location.Location.havePermission((bool hasPermission) { - if (!permissionCompleter.isCompleted) permissionCompleter.complete(hasPermission); + if (!permissionCompleter.isCompleted) + permissionCompleter.complete(hasPermission); }); bool hasPermission = await permissionCompleter.future; debugPrint("_getCurrentPositionSilently: havePermission=$hasPermission"); @@ -111,11 +131,16 @@ class OffersAndDiscountsApiClient { Completer positionCompleter = Completer(); location.Location.getCurrentLocation( (Position position, bool isMocked) { - debugPrint("_getCurrentPositionSilently: got position lat=${position.latitude}, lng=${position.longitude}, isMocked=$isMocked"); - if (!positionCompleter.isCompleted) positionCompleter.complete(position); + debugPrint( + "_getCurrentPositionSilently: got position lat=${position.latitude}, lng=${position.longitude}, isMocked=$isMocked", + ); + if (!positionCompleter.isCompleted) + positionCompleter.complete(position); }, () { - debugPrint("_getCurrentPositionSilently: getCurrentLocation error callback fired"); + debugPrint( + "_getCurrentPositionSilently: getCurrentLocation error callback fired", + ); if (!positionCompleter.isCompleted) positionCompleter.complete(null); }, context, @@ -134,6 +159,19 @@ class OffersAndDiscountsApiClient { if (overrideMobile != null && overrideMobile.trim().isNotEmpty) { return overrideMobile.trim(); } + + // postParamsObject.mobileNumber/memberInformationList/memberLoginList are only ever set by + // the employee login flow and never cleared on logout - for a dependent session, the only + // legitimate source is the sponsor's mobile captured at dependent login (walaplusDepInfoModel), + // same reasoning as _resolveUserReference above. + if (ApiConsts.isDependetLogin) { + String? depMobile = AppState().walaplusDepInfoModel?.pEmpMobileNumber; + if (depMobile != null && depMobile.trim().isNotEmpty) { + return depMobile.trim(); + } + return ""; + } + String? mobile = AppState().postParamsObject?.mobileNumber; if (mobile != null && mobile.trim().isNotEmpty) { return mobile.trim(); @@ -161,7 +199,9 @@ class OffersAndDiscountsApiClient { Map base = {}; base.addAll(AppState().postParamsJson); if (ApiConsts.isDependetLogin) { - String? token = AppState().postParamsObject?.tokenID ?? AppState().authenticationTokenID; + String? token = + AppState().postParamsObject?.tokenID ?? + AppState().authenticationTokenID; if (token != null && token.isNotEmpty) { base["TokenID"] = token; } @@ -185,7 +225,11 @@ class OffersAndDiscountsApiClient { // Pass parentId to fetch the subcategories under a given main category (WP_ParentId) - // omit it (the default) to fetch the top-level main categories, same as before. - Future> getWalaPlusCategories({BuildContext? context, String? mobileNumber, String? parentId}) async { + Future> getWalaPlusCategories({ + BuildContext? context, + String? mobileNumber, + String? parentId, + }) async { String url = ApiConsts.walaPlusCategories; String pUserName = _resolveUserName(); String pMobileNumber = _resolveMobileNumber(overrideMobile: mobileNumber); @@ -209,7 +253,11 @@ class OffersAndDiscountsApiClient { (response) { List categories = []; if (response != null) { - dynamic cats = response['WalaPlus_Categories'] ?? response['walaPlus_Categories'] ?? response['WalaPlusCategories'] ?? response['result']; + dynamic cats = + response['WalaPlus_Categories'] ?? + response['walaPlus_Categories'] ?? + response['WalaPlusCategories'] ?? + response['result']; if (cats is String) { try { cats = json.decode(cats); @@ -222,7 +270,9 @@ class OffersAndDiscountsApiClient { if (v is Map) { categories.add(WalaPlusCategoryModel.fromJson(v)); } else if (v is Map) { - categories.add(WalaPlusCategoryModel.fromJson(Map.from(v))); + categories.add( + WalaPlusCategoryModel.fromJson(Map.from(v)), + ); } }); } @@ -279,7 +329,10 @@ class OffersAndDiscountsApiClient { String pUserName = _resolveUserName(); String pMobileNumber = _resolveMobileNumber(overrideMobile: mobileNumber); String pDepNationalId = _resolveDepNationalId(); - String effectiveCatId = (categoryId == "all" || categoryId == "0" || categoryId == null) ? "" : categoryId; + String effectiveCatId = + (categoryId == "all" || categoryId == "0" || categoryId == null) + ? "" + : categoryId; Map postParams = _getBaseWalaPlusParams(); postParams["UserName"] = pUserName; @@ -315,7 +368,8 @@ class OffersAndDiscountsApiClient { try { Position? position = await _getCurrentPositionSilently(context); if (position != null) { - postParams["WP_Geo_Location"] = "${position.latitude},${position.longitude}"; + postParams["WP_Geo_Location"] = + "${position.latitude},${position.longitude}"; } } catch (e) { debugPrint("getWalaPlusRetailers: unable to get current location: $e"); @@ -333,7 +387,12 @@ class OffersAndDiscountsApiClient { return await ApiClient().postJsonForObject( (response) { if (response != null) { - dynamic val = response['WalaPlus_Retailers'] ?? response['walaPlus_Retailers'] ?? response['WalaPlusRetailers'] ?? response['WP_Retailers'] ?? response['result']; + dynamic val = + response['WalaPlus_Retailers'] ?? + response['walaPlus_Retailers'] ?? + response['WalaPlusRetailers'] ?? + response['WP_Retailers'] ?? + response['result']; if (val is String) { try { val = json.decode(val); @@ -344,17 +403,26 @@ class OffersAndDiscountsApiClient { if (val is Map) { return WalaPlusRetailersResponse.fromJson(val); } else if (val is Map) { - return WalaPlusRetailersResponse.fromJson(Map.from(val)); + return WalaPlusRetailersResponse.fromJson( + Map.from(val), + ); } else if (val is List) { List retailers = []; for (var v in val) { if (v is Map) { retailers.add(WalaPlusRetailerModel.fromJson(v)); } else if (v is Map) { - retailers.add(WalaPlusRetailerModel.fromJson(Map.from(v))); + retailers.add( + WalaPlusRetailerModel.fromJson(Map.from(v)), + ); } } - return WalaPlusRetailersResponse(retailers: retailers, page: 1, pagesCount: 1, perPage: retailers.length); + return WalaPlusRetailersResponse( + retailers: retailers, + page: 1, + pagesCount: 1, + perPage: retailers.length, + ); } } return null; @@ -364,12 +432,19 @@ class OffersAndDiscountsApiClient { ); } - Future getWalaPlusRetailerById({required String retailerId, BuildContext? context, String? mobileNumber, String? userReference}) async { + Future getWalaPlusRetailerById({ + required String retailerId, + BuildContext? context, + String? mobileNumber, + String? userReference, + }) async { String url = ApiConsts.walaPlusRetailersByID; String pUserName = _resolveUserName(); String pMobileNumber = _resolveMobileNumber(overrideMobile: mobileNumber); String pDepNationalId = _resolveDepNationalId(); - String pUserReference = _resolveUserReference(overrideUserReference: userReference); + String pUserReference = _resolveUserReference( + overrideUserReference: userReference, + ); Map postParams = _getBaseWalaPlusParams(); postParams["WP_RetailerID"] = retailerId; @@ -390,10 +465,13 @@ class OffersAndDiscountsApiClient { log("context position: $position"); if (position != null) { - postParams["WP_Geo_Location"] = "${position.latitude},${position.longitude}"; + postParams["WP_Geo_Location"] = + "${position.latitude},${position.longitude}"; } } catch (e) { - debugPrint("getWalaPlusRetailerById: unable to get current location: $e"); + debugPrint( + "getWalaPlusRetailerById: unable to get current location: $e", + ); } } @@ -406,18 +484,29 @@ class OffersAndDiscountsApiClient { postParams["WP_User_Reference"] = null; } - debugPrint("getWalaPlusRetailerById: calling $url with params: $postParams"); + debugPrint( + "getWalaPlusRetailerById: calling $url with params: $postParams", + ); return await ApiClient().postJsonForObject( (response) { if (response != null) { - debugPrint("getWalaPlusRetailerById response keys: ${response is Map ? response.keys.toList() : 'non-map'}"); - dynamic val = response['WalaPlus_RetailersByID'] ?? response['walaPlus_RetailersByID'] ?? response['WalaPlusRetailersByID'] ?? response['WP_RetailersByID'] ?? response['result']; + debugPrint( + "getWalaPlusRetailerById response keys: ${response is Map ? response.keys.toList() : 'non-map'}", + ); + dynamic val = + response['WalaPlus_RetailersByID'] ?? + response['walaPlus_RetailersByID'] ?? + response['WalaPlusRetailersByID'] ?? + response['WP_RetailersByID'] ?? + response['result']; if (val is String) { try { val = json.decode(val); } catch (e) { - debugPrint("Error decoding WalaPlus_RetailersByID JSON string: $e"); + debugPrint( + "Error decoding WalaPlus_RetailersByID JSON string: $e", + ); } } WalaPlusRetailerModel? model; @@ -426,47 +515,106 @@ class OffersAndDiscountsApiClient { if (item is Map) { model = WalaPlusRetailerModel.fromJson(item); } else if (item is Map) { - model = WalaPlusRetailerModel.fromJson(Map.from(item)); + model = WalaPlusRetailerModel.fromJson( + Map.from(item), + ); } } else if (val is Map) { - Map map = (val is Map) ? val : Map.from(val); + Map map = + (val is Map) + ? val + : Map.from(val); if (map.containsKey('retailer')) { var byIdResponse = WalaPlusRetailersByIDResponse.fromJson(map); - model = byIdResponse.primaryRetailer ?? WalaPlusRetailerModel.fromJson(map); + model = + byIdResponse.primaryRetailer ?? + WalaPlusRetailerModel.fromJson(map); } else { model = WalaPlusRetailerModel.fromJson(map); } if (model?.isFavorite == null) { if (map.containsKey('isfavorite')) { - model?.isFavorite = map['isfavorite'] == true || map['isfavorite'] == 1 || map['isfavorite'] == 'true' || map['isfavorite'] == '1'; + model?.isFavorite = + map['isfavorite'] == true || + map['isfavorite'] == 1 || + map['isfavorite'] == 'true' || + map['isfavorite'] == '1'; } else if (map.containsKey('is_favorite')) { - model?.isFavorite = map['is_favorite'] == true || map['is_favorite'] == 1 || map['is_favorite'] == 'true' || map['is_favorite'] == '1'; + model?.isFavorite = + map['is_favorite'] == true || + map['is_favorite'] == 1 || + map['is_favorite'] == 'true' || + map['is_favorite'] == '1'; } } - if ((model?.offers == null || model!.offers!.isEmpty) && (map.containsKey('offers') || map.containsKey('Offers'))) { - model?.offers = WalaPlusRetailerModel.parseOffersList(map['offers'] ?? map['Offers']); + if ((model?.offers == null || model!.offers!.isEmpty) && + (map.containsKey('offers') || map.containsKey('Offers'))) { + model?.offers = WalaPlusRetailerModel.parseOffersList( + map['offers'] ?? map['Offers'], + ); } if ((model?.locations == null || model!.locations!.isEmpty) && - (map.containsKey('locations') || map.containsKey('Locations') || map.containsKey('location') || map.containsKey('Location'))) { - model?.locations = WalaPlusRetailerModel.parseLocationsList(map['locations'] ?? map['Locations'] ?? map['location'] ?? map['Location']); + (map.containsKey('locations') || + map.containsKey('Locations') || + map.containsKey('location') || + map.containsKey('Location'))) { + model?.locations = WalaPlusRetailerModel.parseLocationsList( + map['locations'] ?? + map['Locations'] ?? + map['location'] ?? + map['Location'], + ); } - if ((model?.website == null || model!.website!.isEmpty || model!.website == "null")) { - String? web = (map['website'] ?? map['merchant_website'] ?? map['website_url'] ?? map['url'] ?? map['merchant_url'])?.toString(); + if ((model?.website == null || + model!.website!.isEmpty || + model!.website == "null")) { + String? web = + (map['website'] ?? + map['merchant_website'] ?? + map['website_url'] ?? + map['url'] ?? + map['merchant_url']) + ?.toString(); if (web != null && web.trim().isNotEmpty && web != "null") { model?.website = web.trim(); } } - if ((model?.categories == null || model!.categories!.isEmpty) && (map.containsKey('categories') || map.containsKey('Categories') || map.containsKey('category') || map.containsKey('Category'))) { - dynamic catData = map['categories'] ?? map['Categories'] ?? map['category'] ?? map['Category']; + if ((model?.categories == null || model!.categories!.isEmpty) && + (map.containsKey('categories') || + map.containsKey('Categories') || + map.containsKey('category') || + map.containsKey('Category'))) { + dynamic catData = + map['categories'] ?? + map['Categories'] ?? + map['category'] ?? + map['Category']; if (catData is List) { - model?.categories = catData.map((c) => c is Map ? WalaPlusCategoryModel.fromJson(Map.from(c)) : WalaPlusCategoryModel(name: c.toString())).toList(); + model?.categories = + catData + .map( + (c) => + c is Map + ? WalaPlusCategoryModel.fromJson( + Map.from(c), + ) + : WalaPlusCategoryModel(name: c.toString()), + ) + .toList(); } else if (catData is Map) { - model?.categories = [WalaPlusCategoryModel.fromJson(Map.from(catData))]; + model?.categories = [ + WalaPlusCategoryModel.fromJson( + Map.from(catData), + ), + ]; } else if (catData is String && catData.trim().isNotEmpty) { - model?.categories = [WalaPlusCategoryModel(name: catData.trim())]; + model?.categories = [ + WalaPlusCategoryModel(name: catData.trim()), + ]; } } - } else if (response is Map && response.containsKey('name')) { + } else if (response is Map && + response.containsKey('name')) { model = WalaPlusRetailerModel.fromJson(response); } @@ -474,36 +622,90 @@ class OffersAndDiscountsApiClient { if (response is Map) { if (model.isFavorite == null) { if (response.containsKey('isfavorite')) { - model.isFavorite = response['isfavorite'] == true || response['isfavorite'] == 1 || response['isfavorite'] == 'true' || response['isfavorite'] == '1'; + model.isFavorite = + response['isfavorite'] == true || + response['isfavorite'] == 1 || + response['isfavorite'] == 'true' || + response['isfavorite'] == '1'; } else if (response.containsKey('is_favorite')) { - model.isFavorite = response['is_favorite'] == true || response['is_favorite'] == 1 || response['is_favorite'] == 'true' || response['is_favorite'] == '1'; + model.isFavorite = + response['is_favorite'] == true || + response['is_favorite'] == 1 || + response['is_favorite'] == 'true' || + response['is_favorite'] == '1'; } } - if (model.website == null || model.website!.isEmpty || model.website == "null") { - String? web = (response['website'] ?? response['merchant_website'] ?? response['website_url'] ?? response['url'] ?? response['merchant_url'])?.toString(); + if (model.website == null || + model.website!.isEmpty || + model.website == "null") { + String? web = + (response['website'] ?? + response['merchant_website'] ?? + response['website_url'] ?? + response['url'] ?? + response['merchant_url']) + ?.toString(); if (web != null && web.trim().isNotEmpty && web != "null") { model.website = web.trim(); } } - if ((model.offers == null || model.offers!.isEmpty) && (response.containsKey('offers') || response.containsKey('Offers'))) { - model.offers = WalaPlusRetailerModel.parseOffersList(response['offers'] ?? response['Offers']); + if ((model.offers == null || model.offers!.isEmpty) && + (response.containsKey('offers') || + response.containsKey('Offers'))) { + model.offers = WalaPlusRetailerModel.parseOffersList( + response['offers'] ?? response['Offers'], + ); } if ((model.locations == null || model.locations!.isEmpty) && - (response.containsKey('locations') || response.containsKey('Locations') || response.containsKey('location') || response.containsKey('Location'))) { - model.locations = WalaPlusRetailerModel.parseLocationsList(response['locations'] ?? response['Locations'] ?? response['location'] ?? response['Location']); + (response.containsKey('locations') || + response.containsKey('Locations') || + response.containsKey('location') || + response.containsKey('Location'))) { + model.locations = WalaPlusRetailerModel.parseLocationsList( + response['locations'] ?? + response['Locations'] ?? + response['location'] ?? + response['Location'], + ); } - if ((model.categories == null || model.categories!.isEmpty) && (response.containsKey('categories') || response.containsKey('Categories') || response.containsKey('category') || response.containsKey('Category'))) { - dynamic catData = response['categories'] ?? response['Categories'] ?? response['category'] ?? response['Category']; + if ((model.categories == null || model.categories!.isEmpty) && + (response.containsKey('categories') || + response.containsKey('Categories') || + response.containsKey('category') || + response.containsKey('Category'))) { + dynamic catData = + response['categories'] ?? + response['Categories'] ?? + response['category'] ?? + response['Category']; if (catData is List) { - model.categories = catData.map((c) => c is Map ? WalaPlusCategoryModel.fromJson(Map.from(c)) : WalaPlusCategoryModel(name: c.toString())).toList(); + model.categories = + catData + .map( + (c) => + c is Map + ? WalaPlusCategoryModel.fromJson( + Map.from(c), + ) + : WalaPlusCategoryModel(name: c.toString()), + ) + .toList(); } else if (catData is Map) { - model.categories = [WalaPlusCategoryModel.fromJson(Map.from(catData))]; + model.categories = [ + WalaPlusCategoryModel.fromJson( + Map.from(catData), + ), + ]; } else if (catData is String && catData.trim().isNotEmpty) { - model.categories = [WalaPlusCategoryModel(name: catData.trim())]; + model.categories = [ + WalaPlusCategoryModel(name: catData.trim()), + ]; } } } - debugPrint("getWalaPlusRetailerById: parsed retailer '${model.name}', isFavorite: ${model.isFavorite}, offers: ${model.offers?.length ?? 0}, locations: ${model.locations?.length ?? 0}"); + debugPrint( + "getWalaPlusRetailerById: parsed retailer '${model.name}', isFavorite: ${model.isFavorite}, offers: ${model.offers?.length ?? 0}, locations: ${model.locations?.length ?? 0}", + ); return model; } } @@ -519,9 +721,24 @@ class OffersAndDiscountsApiClient { } String _resolveUserReference({String? overrideUserReference}) { - if (overrideUserReference != null && overrideUserReference.trim().isNotEmpty) { + if (overrideUserReference != null && + overrideUserReference.trim().isNotEmpty) { return overrideUserReference.trim(); } + + // AppState().memberInformationList is never cleared on logout, so after logging out of an + // employee session and logging back in as a dependent (without a full app restart) it can + // still be sitting there from the previous session. Checking the CURRENT session type first + // - rather than just whichever field happens to be non-empty - prevents a dependent session + // from ever resolving to the previous employee's number. + if (ApiConsts.isDependetLogin) { + String? depRef = AppState().getUserName; + if (depRef != null && depRef.trim().isNotEmpty) { + return depRef.trim(); + } + return ""; + } + String? ref = AppState().memberInformationList?.eMPLOYEENUMBER?.toString(); if (ref != null && ref.trim().isNotEmpty) { return ref.trim(); @@ -533,15 +750,25 @@ class OffersAndDiscountsApiClient { return ""; } - Future?> redeemWalaPlusOffer({required String offerId, String? offerType, String? userReference, BuildContext? context}) async { + Future?> redeemWalaPlusOffer({ + required String offerId, + String? offerType, + String? userReference, + BuildContext? context, + }) async { String url = ApiConsts.walaPlusOfferRedeem; String pUserName = _resolveUserName(); - String pUserReference = _resolveUserReference(overrideUserReference: userReference); + String pUserReference = _resolveUserReference( + overrideUserReference: userReference, + ); Map postParams = _getBaseWalaPlusParams(); postParams["WP_User_Reference"] = pUserReference; postParams["WP_Offer_Id"] = offerId; - postParams["WP_Offer_Type"] = (offerType != null && offerType.trim().isNotEmpty) ? offerType.trim() : "promo"; + postParams["WP_Offer_Type"] = + (offerType != null && offerType.trim().isNotEmpty) + ? offerType.trim() + : "promo"; postParams["UserName"] = pUserName; postParams["P_USER_NAME"] = pUserName; @@ -563,7 +790,11 @@ class OffersAndDiscountsApiClient { (response) { if (response != null) { debugPrint("redeemWalaPlusOffer response: $response"); - dynamic val = response['WalaPlus_OfferRedeem'] ?? response['walaPlus_OfferRedeem'] ?? response['WalaPlusOfferRedeem'] ?? response['result']; + dynamic val = + response['WalaPlus_OfferRedeem'] ?? + response['walaPlus_OfferRedeem'] ?? + response['WalaPlusOfferRedeem'] ?? + response['result']; if (val is String) { try { val = json.decode(val); @@ -584,11 +815,19 @@ class OffersAndDiscountsApiClient { ); } - Future addWalaPlusFavorite({Object? retailerId, List? retailerIds, BuildContext? context, String? mobileNumber, String? userReference}) async { + Future addWalaPlusFavorite({ + Object? retailerId, + List? retailerIds, + BuildContext? context, + String? mobileNumber, + String? userReference, + }) async { String url = ApiConsts.walaPlusFavoritesAdd; String pUserName = _resolveUserName(); String pMobileNumber = _resolveMobileNumber(overrideMobile: mobileNumber); - String pUserReference = _resolveUserReference(overrideUserReference: userReference); + String pUserReference = _resolveUserReference( + overrideUserReference: userReference, + ); List ids = []; if (retailerIds != null && retailerIds.isNotEmpty) { @@ -643,11 +882,19 @@ class OffersAndDiscountsApiClient { ); } - Future removeWalaPlusFavorite({Object? retailerId, List? retailerIds, BuildContext? context, String? mobileNumber, String? userReference}) async { + Future removeWalaPlusFavorite({ + Object? retailerId, + List? retailerIds, + BuildContext? context, + String? mobileNumber, + String? userReference, + }) async { String url = ApiConsts.walaPlusFavoritesRemove; String pUserName = _resolveUserName(); String pMobileNumber = _resolveMobileNumber(overrideMobile: mobileNumber); - String pUserReference = _resolveUserReference(overrideUserReference: userReference); + String pUserReference = _resolveUserReference( + overrideUserReference: userReference, + ); List ids = []; if (retailerIds != null && retailerIds.isNotEmpty) { diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index 42fba962..23a087c2 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -6,7 +6,7 @@ import 'dart:ui'; import 'package:easy_localization/easy_localization.dart' show AssetLoader; -class CodegenLoader extends AssetLoader{ +class CodegenLoader extends AssetLoader { const CodegenLoader(); @override @@ -14,1753 +14,1843 @@ class CodegenLoader extends AssetLoader{ return Future.value(mapLocales[locale.toString()]); } - static const Map _ar_SA = { - "mohemm": "MoheM", - "english": "English", - "arabic": "عربي", - "login": "تسجيل الدخول", - "pleaseEnterLoginDetails": "الرجاء إدخال التفاصيل أدناه لتسجيل الدخول", - "userId": "معرّف المستخدم", - "username": "اسم المستخدم", - "userName": "اسم المستخدم", - "userSearch": "البحث عن مستخدم", - "password": "كلمة المرور", - "welcomeBack": "مرحبا بعودتك", - "wouldYouLikeToLoginWithCurrentUsername": "هل ترغب في تسجيل الدخول باسم المستخدم الحالي؟", - "lastLoginDetails": "تفاصيل تسجيل الدخول الأخير:", - "verificationType": "نوع التحقق:", - "pleaseVerify": "يرجى التحقق", - "pleaseVerifyForBio": "الرجاء التحقق من تسجيل الدخول باستخدام أحد هذه الخيارات", - "verifyThroughFace": "التحقق بالتعرف على الوجه", - "verifyThroughFingerprint": "التحقق ببصمة الإصبع", - "verifyThroughSMS": "التحقق عبر رسالة نصية", - "verifyThroughWhatsapp": "التحقق عبر واتساب", - "useAnotherAccount": "استخدم حسابا آخر", - "pleaseEnterTheVerificationCodeSentTo": "الرجاء إدخال رمز التحقق المرسل إلى ", - "theVerificationCodeWillExpireIn": "ستنتهي صلاحية رمز التحقق في ", - "goodMorning": "صباح الخير", - "markAttendance": "تسجيل الحضور", - "timeLeftToday": "الوقت المتبقي اليوم", - "checkIn": "تسجيل الحضور", - "workList": "قائمة العمل", - "leaveBalance": "رصيد الإجازات", - "missingSwipes": "البصمات المفقودة", - "ticketBalance": "رصيد التذاكر", - "other": "آخر", - "services": "خدمات", - "viewAllServices": "عرض جميع الخدمات", - "monthlyAttendance": "الحضور الشهري", - "vacationRule": "قواعد الإجازات", - "vacationType": "نوع الإجازة", - "startDateT": "تاريخ البدء", - "endDateT": "تاريخ الانتهاء", - "workFromHome": "العمل من المنزل", - "ticketRequest": "طلب تذكرة", - "viewAllOffers": "مشاهدة جميع العروض", - "offers": "العروض و", - "discounts": "الخصومات", - "newString": "جديد", - "setTheNewPassword": "قم بتعيين كلمة المرور الجديدة", - "typeYourNewPasswordBelow": "اكتب كلمة المرور الجديدة أدناه", - "typeYourNewActiveDirectoryPasswordBelow": "اكتب كلمة مرور الدليل النشط الجديدة أدناه", - "confirmPassword": "تأكيد كلمة المرور", - "update": "تحديث", - "title": "عنوان", - "home": "الرئيسية", - "mySalary": "راتبي", - "createRequest": "إنشاء طلب", - "forgotPassword": "هل نسيت كلمة المرور؟", - "employeeId": "الرقم الوظيفي", - "loginCodeWillSentToMobileNumber": "الرجاء إدخال رقم الموظف الخاص بك ، وسيتم إرسال رمز تسجيل الدخول إلى رقم هاتفك المسجل", - "changePassword": "تغيير كلمة المرور", - "ok": "موافق", - "confirm": "تأكيد", - "passwordChangedSuccessfully": "تم تغيير كلمة المرور بنجاح", - "itemsForSale": "سلع للبيع", - "attendanceDetails": "تفاصيل الحضور", - "order": "الطلبات", - "earlyOut": "الانصراف المبكر", - "shortage": "ساعات غير مغطاة", - "excess": "ساعات العمل الإضافية", - "lateIn": "التأخر عن الحضور", - "approvedCheckOut": "وقت الانصراف المعتمد", - "approvedCheckIn": "وقت الحضور المعتمد", - "actualCheckOut": "وقت الانصراف الفعلي", - "actualCheckIn": "وقت الحضور الفعلي", - "present": "حضور", - "pres": "حضور", - "shiftTime": "وقت المناوبة", - "absent": "غياب", - "attendance": "الحضور", - "scheduleDays": "أيام العمل", - "offDays": "أيام الراحة", - "nonAnalyzed": "لم يتم التحليل", - "shortageHour": "ساعات غير مغطاة", - "stats": "الإحصاءات", - "completed": "مكتمل", - "msg": "مرحبًا {} في عالم {}", - "msg_named": "{} مكتوبة بلغة {lang}", - "clickMe": "اضغط هنا", - "doNotUseRecentPassword": "لا تستخدم كلمة مرور سبق استخدامها مؤخرًا", - "atLeastOneLowercase": "حرف صغير واحد على الأقل", - "atLeastOneUppercase": "حرف كبير واحد على الأقل", - "atLeastOneNumeric": "رقم واحد على الأقل", - "minimum8Characters": "8 أحرف على الأقل", - "doNotAddRepeatingLetters": "لا تقم بإضافة أحرف متكررة", - "itShouldContainSpecialCharacter": "يجب أن تحتوي كلمة المرور على رمز خاص", - "confirmPasswordMustMatch": "يجب أن تتطابق كلمتا المرور", - "sms": "رسالة قصيرة", - "fingerPrint": "بصمة", - "face": "التعرف على الوجه", - "whatsapp": "واتس اب", - "reject": "رفض", - "approve": "موافقة", - "cancel": "إلغاء", - "generate": "إنشاء", - "requestedItems": "العناصر المطلوبة", - "request": "طلب", - "myRequest": "طلباتي", - "actions": "الإجراءات", - "delegate": "تفويض", - "request_info": "طلب معلومات إضافية", - "attachments": "المرفقات", - "info": "معلومات", - "employeeNumber": "رقم الموظف", - "assignmentNumber": "رقم التكليف", - "employeeName": "اسم الموظف", - "scheduleDate": "تاريخ الجدول", - "shiftType": "نوع المناوبة", - "shift": " المناوبة", - "breakText": "استراحة", - "actualSwipeStart": "وقت تسجيل الحضور", - "actualSwipeEnd": "وقت تسجيل المغادرة", - "approvedSwipeStart": "وقت الحضور المعتمد", - "approvedSwipeStartReason": "سبب تعديل وقت الحضور المعتمد", - "approvedSwipeEnd": "وقت الانصراف المعتمد", - "approvedSwipeEndReason": "سبب تعديل وقت الانصراف المعتمد", - "from": "من", - "to": "إلى", - "sent": "تم الإرسال", - "closed": "مغلق", - "id": "المعرّف", - "responder": "المستجيب", - "jobTitle": "المسمى الوظيفي", - "grade": "الدرجة الوظيفية", - "jobCategory": "تصنيف الوظيفة", - "category": "فئة", - "employeeEmailAddress": "عنوان البريد الإلكتروني للموظف", - "payrollBranch": "فرع الرواتب", - "yourChangeHasBeenSavedSuccessfully": "تم حفظ التغيير الخاص بك بنجاح", - "code": "الرمز", - "unit": "وحدة", - "quantity": "كمية", - "dateRequired": "التاريخ المطلوب", - "lineStatus": "حالة البند", - "statusDate": "تاريخ الحالة", - "transactionType": "نوع المعاملة", - "operatingUnit": "الوحدة التشغيلية", - "organizationCode": "رمز المنشأة", - "organization": "المنشأة", - "fromSubInventory": "من المخزون الفرعي", - "fromLocator": "من موقع التخزين", - "toSubInventory": "إلى المخزون الفرعي", - "toLocator": "إلى موقع التخزين", - "shipToLocator": "موقع التخزين المستلم", - "itemHistory": "سجل الصنف", - "mfg": "الشركة المصنّعة", - "lineType": "نوع البند", - "price": "السعر", - "lineAmount": "قيمة البند", - "lineDiscount": "خصم البند (%)", - "needByDate": "تاريخ الحاجة", - "promisedDate": "تاريخ التسليم المتعهد به", - "deliverToLocation": "تسليم إلى الموقع", - "requisitionNumber": "رقم الطلب", - "requester": "مقدم الطلب", - "quotationAnalysis": "تحليل عروض الأسعار", - "subject": "موضوعات", - "description": "وصف", - "pleaseEnterDescription": "الرجاء إدخال الوصف", - "supplier": "المورد", - "site": "موقع", - "buyer": "مشتر", - "preparer": "معد", - "creationDate": "تاريخ الإنشاء", - "shipToLocation": "الشحن الى الموقع", - "quotationNumber": "رقم عرض السعر", - "quotationDate": "تاريخ عرض السعر", - "paymentTerms": "شروط الدفع", - "currency": "عملة", - "grossAmount": "إجمالي المبلغ", - "discountAmount": "مبلغ الخصم", - "customDuty": "الرسوم الجمركية", - "shipHandle": "رسوم الشحن والمناولة", - "otherCharges": "رسوم أخرى", - "totalPOAmountWithVAT": "إجمالي مبلغ الشراء مع ضريبة القيمة المضافة", - "totalPOAmountInWords": "إجمالي قيمة أمر الشراء كتابةً", - "requestNumber": "رقم الطلب", - "uom": "وحدة القياس", - "operatingCode": "كود التشغيل", - "poNumber": "رقم أمر الشراء", - "revision": "مراجعة", - "quantityOrdered": "الكمية المطلوبة", - "quantityReceived": "الكمية المستلمة", - "bonusQuantity": "الكمية المجانية", - "purchasePrice": "سعر الشراء", - "discountPer": "خصم ٪", - "balanceQuantity": "الكمية المتبقية", - "netPrice": "السعر الصافي", - "closureStatus": "حالة الإغلاق", - "quotationNetPrice": "صافي سعر عرض السعر", - "quotationUOM": "وحدة القياس في عرض السعر", - "quotationQty": "الكمية في عرض السعر", - "itemCode": "رمز الصنف", - "vendorName": "اسم البائع", - "quotationMFGPartNumber": "رقم قطعة الشركة المصنّعة في عرض السعر", - "quotationDeliveryDate": "تاريخ تسليم عرض الأسعار", - "quotationBonusQuantity": "الكمية المجانية في عرض السعر", - "quotationLineTotal": "إجمالي بند عرض السعر", - "rfqUOM": "وحدة القياس لطلب عرض السعر", - "rfqQty": "الكمية المطلوبة لعرض السعر", - "rfqNumber": "رقم طلب عرض السعر", - "human": "الموارد", - "resources": "البشرية", - "details": "تفاصيل", - "noDataAvailable": "لا تتوافر بيانات", - "productName": "اسم المنتج", - "productDescription": "وصف المنتج", - "unitPrice": "سعر الوحدة", - "manufacturerName": "اسم المصنع", - "manufacturerPartName": "اسم قطعة الشركة المصنّعة", - "supplierName": "اسم المورد", - "supplierContact": "بيانات التواصل مع المورد", - "chargeToPatient": "يُحمّل على حساب المريض", - "justification": "التبرير", - "itemDescription": "وصف السلعة", - "groupCode": "كود المجموعة", - "primaryUOM": "وحدة القياس الأساسية", - "subgroupDescription": "وصف المجموعة الفرعية", - "subgroupCode": "رمز المجموعة الفرعية", - "groupDescription": "وصف المجموعة", - "templateName": "اسم القالب", - "itemCreationStatus": "حالة إنشاء الصنف", - "standardizationApprovalStatus": "حالة اعتماد التوحيد القياسي", - "standardizationApprovalRejectionReason": "سبب رفض اعتماد التوحيد القياسي", - "analyzedBy": "تحليل بواسطة", - "approvedDate": "تاريخ الموافقة", - "itemType": "نوع العنصر", - "relatedTo": "متعلق ب", - "requestDate": "تاريخ الطلب", - "analyzedDate": "تاريخ التحليل", - "urgent": "العاجلة", - "requestDetails": "تفاصيل الطلب", - "approvalLevel": "مستوى الموافقة", - "requesterDetails": "تفاصيل مقدم الطلب", - "myAttendance": "حضوري", - "workOnBreak": "التعويض عن العمل أثناء الاستراحة", - "next": "التالي", - "apply": "تقديم الطلب", - "mobile": "الجوال", - "completingYear": "نقدّر لك إتمام مدة خدمة", - "year": "سنة", - "month": "شهر", - "day": "يوم", - "address": "العنوان", - "phoneNumber": "رقم الجوال", - "businessGroup": "مجموعة العمل", - "Payroll": "الرواتب", - "civilIdentityNumber": "رقم الهويه", - "dateOfBirth": "تاريخ الميلاد", - "maritalStatus ": "الحالة الاجتماعية", - "fullName": "الاسم الكامل", - "remove": "حذف", - "submit": "إرسال", - "submitAsAnonymous": "إرسال دون الإفصاح عن الهوية", - "areYouSureYouWantToSubmit": "هل أنت متأكد من إرسال الطلب؟", - "comments": "تعليقات", - "writeComment": "أكتب تعليقا", - "approversList": "قائمة المعتمدين", - "yourRequestHasBeenSubmittedForApprovals": "تم إرسال طلبك للاعتماد", - "monthlyPaySlip": "قسيمة الراتب الشهرية", - "particular": "البيان", - "earnings": "المستحقات", - "deductions": "الاستقطاعات", - "paymentMethodName": "اسم طريقة الدفع", - "bankName": "اسم البنك", - "branchCode": "رمز الفرع", - "accountNo": "رقم الحساب", - "summaryOfInformation": "ملخص المعلومات", - "totalPayAmount": "المبلغ الإجمالي للدفع", - "paymentInformation": "معلومات الدفع", - "performance": "تقييم الأداء", - "performanceEvaluation": "تقييم الأداء في", - "performanceEvaluationIn": "تقييم أدائك في", - "valuationIn": "تقييم الأداء في", - "amount": "المبلغ", - "correctCurrentDatails": "تصحيح البيانات الحالية أو استكمالها", - "selectType": " حدد نوع التغيير الذي تريد القيام به", - "enterNewInfo": " أدخل معلومات جديدة بسبب تغيير حقيقي في التفاصيل الحالية (على سبيل المثال بسبب تغيير في الحالة الاجتماعية", - "endDate": "تاريخ الانتهاء", - "removeThisMember": "هل أنت متأكد من إزالة هذا الفرد؟", - "wantUpdateThisMember ": "هل أنت متأكد من تحديث بيانات هذا الفرد؟", - "addNewFamilyMember": "اضافة عضو جديد", - "addRow": "اضافة صف جديد", - "pleaseSelect": "الرجاء اختيار", - "delete": "حذف", - "edit": "تعديل", - "add": "اضافه", - "myProfile": "ملفي الشخصي", - "mowadhafhi": "موظفي", - "searchAnnouncements": "البحث في الإعلانات", - "announcements": "اعلانات", - "swipeRequest": "طلب تصحيح البصمة", - "serviceType": "نوع الخدمه", - "departmentName": "اسم القسم", - "selectDepartment": "اختر القسم", - "relatedSection": "قسم ذو صله", - "selectSection": "اختيار القسم", - "relatedTopic": "عنوان ذو صله", - "selectTopic": "اختر العنوان", - "supportingDocument": "ارفاق مستند", - "mowadhafhiRequest": "طلب موظفي", - "ticketReference": "الرقم المرجعي للتذكرة", - "section": "القسم", - "topic": "العنوان", - "actionBy": "الإجراء بواسطة", - "pending": "قيد الانتظار", - "pendingTransactions": "المعاملات قيد الانتظار", - "selectRequestType": "الرجاء اختيار نوع الطلب", - "dateFrom": "من تاريخ", - "dateTo": "الى تاريخ", - "requestName": "اسم الطلب", - "createdFor": "تم الإنشاء لصالح", - "requestCreatedSuccessfully": "تم انشاء الطلب بنجاح", - "search": "بحث", - "filterEnterPrDetailsHere": "ادخل تفاصيل طلب الشراء هنا", - "filterEnterPoDetailsHere": "ادخل تفاصيل أمر الشراء هنا", - "wantToReject": "هل أنت متأكد من رفض الطلب؟", - "requestType": "نوع الطلب", - "employeeDigitalID": "الهوية الرقمية للموظف", - "businessCard": "بطاقة العمل", - "viewBusinessCard": "عرض بطاقة العمل", - "logout": "تسجيل خروج", - "checkOut": "تسجيل الانصراف", - "regular": "اعتيادي", - "mark": "تسجيل", - "selectMethodOfAttendance": "اختر طريقة تسجيل الحضور", - "comeNearHMGWifi": "يرجى الاقتراب من شبكة Wi-Fi الخاصة بالمجموعة", - "deliverNotificationToMeRegardless": "تسليم الإخطارات إلي بغض النظر عن أي قواعد عامة", - "close": "أغلق", - "respond": "رد", - "vacationRuleAdded": "تمت إضافة قاعدة الإجازة", - "selectTypeT": "اختر صنف", - "notification": "تنبيه", - "selectNotification": "حدد إعلام", - "ifAllSelectedYouWillSkip": "* إذا تم تحديد الكل ، فستنتقل إلى الخطوة 3", - "applyForVacationRule": "طلب تطبيق قواعد الإجازات", - "step1": "الخطوة 1", - "step2": "الخطوة 2", - "step3": "الخطوه 3", - "message": "رسالة", - "writeAMessage": "اكتب رسالة", - "notificationReassign": "إعادة توجيه الإشعار", - "selectEmployee": "حدد الموظف", - "searchEmployeeForReplacement": "ابحث عن موظف بديل", - "searchForEmployee": "ابحث عن موظف", - "pleaseSpecifyEndTime": "الرجاء تحديد وقت الانتهاء", - "pleaseSelectNotificationReassign": "يرجى تحديد إعادة تعيين الإخطار", - "pleaseSelectEmployeeForReplacement": "الرجاء تحديد موظف للاستبدال", - "pleaseSelectAction": "الرجاء تحديد الإجراء", - "pleaseSelectDate": "الرجاء تحديد التاريخ", - "todayAttendance": "حضور اليوم", - "viewAttendance": "عرض الحضور", - "teamMembers": "أعضاء الفريق", - "profileDetails": "الملف الشخصي", - "noResultsFound": "لم يتم العثور على نتائج", - "searchBy": "بحث بواسطة", - "myTeamMembers": "أعضاء فريقي", - "save": "حفظ", - "TurnNotificationsFor": "تفعيل الاشعارات", - "worklistSettings": "اعدادات الاشعارات", - "absenceType": "نوع الغياب", - "absenceCategory": "تصنيف الغياب", - "days": "أيام", - "hours": "ساعات", - "approvalStatus": "حالة الموافقة", - "absenceStatus": "حالة الغياب", - "subordinateLeave": "إجازات الموظفين التابعين", - "numberDays": "عدد الأيام", - "poweredBy": "بدعم من", - "cloudSolutions": "الحلول السحابية", - "selectTemplate": "حدد قالب", - "myPostedAds": "إعلاناتي المنشورة", - "browseCategories": "تصفح الفئات", - "searchItems": "عناصر البحث", - "offerAndDiscounts": "العروض والخصومات", - "offerValid": "العرض ساري", - "offerExpired": "انتهى العرض", - "whatAreYouOffering": "ما الذي تعرضه؟", - "selectCategory": "اختر الفئة", - "inProgress": "قيد التنفيذ", - "locked": "مقفل", - "addDetails": "أضف التفاصيل", - "reviewAndSell": "المراجعة والنشر للبيع", - "itemTitle": "عنوان البند", - "itemCondition": "حالة السلعة", - "used": "مستعمل", - "region": "منطقة", - "selectRegion": "اختر المنطقة", - "itemPrice": "سعر السلعة", - "itemPhotos": "صور السلعة", - "itemInfo": "معلومات العنصر", - "uploadAttachment": "تحميل المرفق", - "selectFromGalleryOrOpenCamera": "اختر صورة من المعرض أو التقط صورة بالكاميرا", - "openCamera": "فتح\nالكاميرا", - "uploadFromGallery": "تحميل من\nملفات الجهاز", - "name": "الأسم", - "email": "ايميل", - "noHistoryAvailable": "لايوجد سجل بيانات سابقة ", - "purchaseRequisition": "طلب شراء", - "moveOrder": "طلب تغيير", - "humanResource": "الموارد البشرية", - "purchaseOrder": "أمر شراء", - "ITGForms": "ITG نماذج", - "itemCreation": "إنشاء صنف", - "stamp": "ختم", - "addFavoriteList": "هل تريد اضافة {name} لقائمة المفضله", - "feedbackUserExperience": "هذا للحصول على تعليقات حول تجربة المستخدم", - "rateUI": "كيف تقيّم واجهة التطبيق؟", - "rateUI2": "ما مدى رضاك عن هذا التطبيق؟", - "submitSurvey": "ارسال الاستبيان", - "typeHere": "اكتب هنا", - "infoDetail": "تفاصيل المعلومات", - "amount_detail": "تفاصيل المبلغ", - "currentBalance": "الرصيد الحالي", - "currentLeaveBalance": "رصيد الإجازات الحالي", - "calculatedDays": "الأيام المحتسبة", - "totalDays": "مجموع الأيام", - "usedBalance": "المستخدم", - "infants": "رضيع", - "child": "طفل", - "adult": "بالغ", - "updateMember": "هل انت متأكد تريد تحديث بيانات هذا العضو؟", - "fieldIsEmpty": "'{data}' الحقل فارغ. الرجاء التحديد", - "pleaseEnterComments": "الرجاء إدخال التعليقات", - "skip": "يتخطى", - "typeCurrentPasswordBelow": "اكتب كلمة المرور الحاليه", - "currentPassword": "كلمة المرور الحاليه", - "concurrentReports": "التقارير المتزامنه", - "EnterNewAddressMoved": "أدخل عنوان جديد إذا كنت قد انتقلت", - "CorrectAddress": "تصحيح أو تعديل هذا العنوان", - "SelectChangeWantToMake": " حدد نوع التغيير الذي تريد القيام به.", - "profile": { - "reset_password": { - "label": "إعادة تعيين كلمة المرور", - "username": "اسم المستخدم", - "password": "كلمة المرور" - }, - "profileCompletionPer": "استكمال الملف الشخصي", - "completeProfile": "استكمال الملف الشخصي", - "personalInformation": "معلومات شخصية", - "basicDetails": "تفاصيل أساسية", + static const Map _ar_SA = { + "mohemm": "MoheM", + "english": "English", + "arabic": "عربي", + "login": "تسجيل الدخول", + "pleaseEnterLoginDetails": "الرجاء إدخال التفاصيل أدناه لتسجيل الدخول", + "userId": "معرّف المستخدم", + "username": "اسم المستخدم", + "userName": "اسم المستخدم", + "userSearch": "البحث عن مستخدم", + "password": "كلمة المرور", + "welcomeBack": "مرحبا بعودتك", + "wouldYouLikeToLoginWithCurrentUsername": + "هل ترغب في تسجيل الدخول باسم المستخدم الحالي؟", + "lastLoginDetails": "تفاصيل تسجيل الدخول الأخير:", + "verificationType": "نوع التحقق:", + "pleaseVerify": "يرجى التحقق", + "pleaseVerifyForBio": + "الرجاء التحقق من تسجيل الدخول باستخدام أحد هذه الخيارات", + "verifyThroughFace": "التحقق بالتعرف على الوجه", + "verifyThroughFingerprint": "التحقق ببصمة الإصبع", + "verifyThroughSMS": "التحقق عبر رسالة نصية", + "verifyThroughWhatsapp": "التحقق عبر واتساب", + "useAnotherAccount": "استخدم حسابا آخر", + "pleaseEnterTheVerificationCodeSentTo": + "الرجاء إدخال رمز التحقق المرسل إلى ", + "theVerificationCodeWillExpireIn": "ستنتهي صلاحية رمز التحقق في ", + "goodMorning": "صباح الخير", + "markAttendance": "تسجيل الحضور", + "timeLeftToday": "الوقت المتبقي اليوم", + "checkIn": "تسجيل الحضور", + "workList": "قائمة العمل", + "leaveBalance": "رصيد الإجازات", + "missingSwipes": "البصمات المفقودة", + "ticketBalance": "رصيد التذاكر", + "other": "آخر", + "services": "خدمات", + "viewAllServices": "عرض جميع الخدمات", + "monthlyAttendance": "الحضور الشهري", + "vacationRule": "قواعد الإجازات", + "vacationType": "نوع الإجازة", + "startDateT": "تاريخ البدء", + "endDateT": "تاريخ الانتهاء", + "workFromHome": "العمل من المنزل", + "ticketRequest": "طلب تذكرة", + "viewAllOffers": "مشاهدة جميع العروض", + "offers": "العروض و", + "discounts": "الخصومات", + "newString": "جديد", + "setTheNewPassword": "قم بتعيين كلمة المرور الجديدة", + "typeYourNewPasswordBelow": "اكتب كلمة المرور الجديدة أدناه", + "typeYourNewActiveDirectoryPasswordBelow": + "اكتب كلمة مرور الدليل النشط الجديدة أدناه", + "confirmPassword": "تأكيد كلمة المرور", + "update": "تحديث", + "title": "عنوان", + "home": "الرئيسية", + "mySalary": "راتبي", + "createRequest": "إنشاء طلب", + "forgotPassword": "هل نسيت كلمة المرور؟", + "employeeId": "الرقم الوظيفي", + "loginCodeWillSentToMobileNumber": + "الرجاء إدخال رقم الموظف الخاص بك ، وسيتم إرسال رمز تسجيل الدخول إلى رقم هاتفك المسجل", + "changePassword": "تغيير كلمة المرور", + "ok": "موافق", + "confirm": "تأكيد", + "passwordChangedSuccessfully": "تم تغيير كلمة المرور بنجاح", + "itemsForSale": "سلع للبيع", + "attendanceDetails": "تفاصيل الحضور", + "order": "الطلبات", + "earlyOut": "الانصراف المبكر", + "shortage": "ساعات غير مغطاة", + "excess": "ساعات العمل الإضافية", + "lateIn": "التأخر عن الحضور", + "approvedCheckOut": "وقت الانصراف المعتمد", + "approvedCheckIn": "وقت الحضور المعتمد", + "actualCheckOut": "وقت الانصراف الفعلي", + "actualCheckIn": "وقت الحضور الفعلي", + "present": "حضور", + "pres": "حضور", + "shiftTime": "وقت المناوبة", + "absent": "غياب", + "attendance": "الحضور", + "scheduleDays": "أيام العمل", + "offDays": "أيام الراحة", + "nonAnalyzed": "لم يتم التحليل", + "shortageHour": "ساعات غير مغطاة", + "stats": "الإحصاءات", + "completed": "مكتمل", + "msg": "مرحبًا {} في عالم {}", + "msg_named": "{} مكتوبة بلغة {lang}", + "clickMe": "اضغط هنا", + "doNotUseRecentPassword": "لا تستخدم كلمة مرور سبق استخدامها مؤخرًا", + "atLeastOneLowercase": "حرف صغير واحد على الأقل", + "atLeastOneUppercase": "حرف كبير واحد على الأقل", + "atLeastOneNumeric": "رقم واحد على الأقل", + "minimum8Characters": "8 أحرف على الأقل", + "doNotAddRepeatingLetters": "لا تقم بإضافة أحرف متكررة", + "itShouldContainSpecialCharacter": "يجب أن تحتوي كلمة المرور على رمز خاص", + "confirmPasswordMustMatch": "يجب أن تتطابق كلمتا المرور", + "sms": "رسالة قصيرة", + "fingerPrint": "بصمة", + "face": "التعرف على الوجه", + "whatsapp": "واتس اب", + "reject": "رفض", + "approve": "موافقة", + "cancel": "إلغاء", + "generate": "إنشاء", + "requestedItems": "العناصر المطلوبة", + "request": "طلب", + "myRequest": "طلباتي", + "actions": "الإجراءات", + "delegate": "تفويض", + "request_info": "طلب معلومات إضافية", + "attachments": "المرفقات", + "info": "معلومات", + "employeeNumber": "رقم الموظف", + "assignmentNumber": "رقم التكليف", + "employeeName": "اسم الموظف", + "scheduleDate": "تاريخ الجدول", + "shiftType": "نوع المناوبة", + "shift": " المناوبة", + "breakText": "استراحة", + "actualSwipeStart": "وقت تسجيل الحضور", + "actualSwipeEnd": "وقت تسجيل المغادرة", + "approvedSwipeStart": "وقت الحضور المعتمد", + "approvedSwipeStartReason": "سبب تعديل وقت الحضور المعتمد", + "approvedSwipeEnd": "وقت الانصراف المعتمد", + "approvedSwipeEndReason": "سبب تعديل وقت الانصراف المعتمد", + "from": "من", + "to": "إلى", + "sent": "تم الإرسال", + "closed": "مغلق", + "id": "المعرّف", + "responder": "المستجيب", + "jobTitle": "المسمى الوظيفي", + "grade": "الدرجة الوظيفية", + "jobCategory": "تصنيف الوظيفة", + "category": "فئة", + "employeeEmailAddress": "عنوان البريد الإلكتروني للموظف", + "payrollBranch": "فرع الرواتب", + "yourChangeHasBeenSavedSuccessfully": "تم حفظ التغيير الخاص بك بنجاح", + "code": "الرمز", + "unit": "وحدة", + "quantity": "كمية", + "dateRequired": "التاريخ المطلوب", + "lineStatus": "حالة البند", + "statusDate": "تاريخ الحالة", + "transactionType": "نوع المعاملة", + "operatingUnit": "الوحدة التشغيلية", + "organizationCode": "رمز المنشأة", + "organization": "المنشأة", + "fromSubInventory": "من المخزون الفرعي", + "fromLocator": "من موقع التخزين", + "toSubInventory": "إلى المخزون الفرعي", + "toLocator": "إلى موقع التخزين", + "shipToLocator": "موقع التخزين المستلم", + "itemHistory": "سجل الصنف", + "mfg": "الشركة المصنّعة", + "lineType": "نوع البند", + "price": "السعر", + "lineAmount": "قيمة البند", + "lineDiscount": "خصم البند (%)", + "needByDate": "تاريخ الحاجة", + "promisedDate": "تاريخ التسليم المتعهد به", + "deliverToLocation": "تسليم إلى الموقع", + "requisitionNumber": "رقم الطلب", + "requester": "مقدم الطلب", + "quotationAnalysis": "تحليل عروض الأسعار", + "subject": "موضوعات", + "description": "وصف", + "pleaseEnterDescription": "الرجاء إدخال الوصف", + "supplier": "المورد", + "site": "موقع", + "buyer": "مشتر", + "preparer": "معد", + "creationDate": "تاريخ الإنشاء", + "shipToLocation": "الشحن الى الموقع", + "quotationNumber": "رقم عرض السعر", + "quotationDate": "تاريخ عرض السعر", + "paymentTerms": "شروط الدفع", + "currency": "عملة", + "grossAmount": "إجمالي المبلغ", + "discountAmount": "مبلغ الخصم", + "customDuty": "الرسوم الجمركية", + "shipHandle": "رسوم الشحن والمناولة", + "otherCharges": "رسوم أخرى", + "totalPOAmountWithVAT": "إجمالي مبلغ الشراء مع ضريبة القيمة المضافة", + "totalPOAmountInWords": "إجمالي قيمة أمر الشراء كتابةً", + "requestNumber": "رقم الطلب", + "uom": "وحدة القياس", + "operatingCode": "كود التشغيل", + "poNumber": "رقم أمر الشراء", + "revision": "مراجعة", + "quantityOrdered": "الكمية المطلوبة", + "quantityReceived": "الكمية المستلمة", + "bonusQuantity": "الكمية المجانية", + "purchasePrice": "سعر الشراء", + "discountPer": "خصم ٪", + "balanceQuantity": "الكمية المتبقية", + "netPrice": "السعر الصافي", + "closureStatus": "حالة الإغلاق", + "quotationNetPrice": "صافي سعر عرض السعر", + "quotationUOM": "وحدة القياس في عرض السعر", + "quotationQty": "الكمية في عرض السعر", + "itemCode": "رمز الصنف", + "vendorName": "اسم البائع", + "quotationMFGPartNumber": "رقم قطعة الشركة المصنّعة في عرض السعر", + "quotationDeliveryDate": "تاريخ تسليم عرض الأسعار", + "quotationBonusQuantity": "الكمية المجانية في عرض السعر", + "quotationLineTotal": "إجمالي بند عرض السعر", + "rfqUOM": "وحدة القياس لطلب عرض السعر", + "rfqQty": "الكمية المطلوبة لعرض السعر", + "rfqNumber": "رقم طلب عرض السعر", + "human": "الموارد", + "resources": "البشرية", + "details": "تفاصيل", + "noDataAvailable": "لا تتوافر بيانات", + "productName": "اسم المنتج", + "productDescription": "وصف المنتج", + "unitPrice": "سعر الوحدة", + "manufacturerName": "اسم المصنع", + "manufacturerPartName": "اسم قطعة الشركة المصنّعة", + "supplierName": "اسم المورد", + "supplierContact": "بيانات التواصل مع المورد", + "chargeToPatient": "يُحمّل على حساب المريض", + "justification": "التبرير", + "itemDescription": "وصف السلعة", + "groupCode": "كود المجموعة", + "primaryUOM": "وحدة القياس الأساسية", + "subgroupDescription": "وصف المجموعة الفرعية", + "subgroupCode": "رمز المجموعة الفرعية", + "groupDescription": "وصف المجموعة", + "templateName": "اسم القالب", + "itemCreationStatus": "حالة إنشاء الصنف", + "standardizationApprovalStatus": "حالة اعتماد التوحيد القياسي", + "standardizationApprovalRejectionReason": "سبب رفض اعتماد التوحيد القياسي", + "analyzedBy": "تحليل بواسطة", + "approvedDate": "تاريخ الموافقة", + "itemType": "نوع العنصر", + "relatedTo": "متعلق ب", + "requestDate": "تاريخ الطلب", + "analyzedDate": "تاريخ التحليل", + "urgent": "العاجلة", + "requestDetails": "تفاصيل الطلب", + "approvalLevel": "مستوى الموافقة", + "requesterDetails": "تفاصيل مقدم الطلب", + "myAttendance": "حضوري", + "workOnBreak": "التعويض عن العمل أثناء الاستراحة", + "next": "التالي", + "apply": "تقديم الطلب", + "mobile": "الجوال", + "completingYear": "نقدّر لك إتمام مدة خدمة", + "year": "سنة", + "month": "شهر", + "day": "يوم", "address": "العنوان", - "contactDetails": "بيانات التواصل", - "familyDetails": "تفاصيل عائلية", - "effectiveDate": "تاريخ سريان التغيير", - "country": "دولة" - }, - "clicked": { - "zero": "You clicked {} times!", - "one": "You clicked {} time!", - "two": "You clicked {} times!", - "few": "You clicked {} times!", - "many": "You clicked {} times!", - "other": "You clicked {} times!" - }, - "gender": { - "male": "Hi man ;) ", - "female": "Hello girl :)", - "with_arg": { - "male": "Hi man ;) {}", - "female": "Hello girl :) {}" - } - }, - "reset_locale": "إعادة ضبط اللغة", - "chat": "دردشة", - "mychats": "دردشاتي", - "advancedSearch": "بحث متقدم", - "openNot": "الإشعارات المفتوحة", - "fyi": "إشعارات للاطلاع", - "toDo": "إشعارات تتطلب إجراء", - "all": "جميع الإشعارات", - "meNot": "الإشعارات الصادرة مني", - "view": "عرض", - "fromUserName": "من", - "sentDate": "تاريخ الإرسال", - "itemTypeDisplayName": "اسم العرض", - "none": "بدون", - "createNewChat": "إنشاء محادثة جديدة", - "brainMarathon": "ماراثون الدماغ", - "contestTopicAbout": "سيكون موضوع المسابقة حول:", - "gameDate": "تاريخ اللعبة:", - "gameTime": "وقت اللعب:", - "joinMarathon": "انضم إلى ماراثون", - "joinDemoMarathon": "انضم إلى الماراثون التجريبي", - "demo": "تجريبي", - "minutes": "الدقائق", - "seconds": "ثواني", - "note": "ملحوظة:", - "demoMarathonNoteP1": "يمكنك لعب ماراثون العرض لتتعلم كيف يعمل. يمكنك الانضمام إلى ماراثون", - "demoMarathonNoteP2": "خمس دقائق", - "demoMarathonNoteP3": "قبل الوقت الفعلي.", - "sponsoredBy": "برعاية:", - "question": "سؤال", - "marathoners": "المشاركون في الماراثون", - "marathoner": "مشارك في الماراثون", - "prize": "جائزة:", - "winnerSelection": "اختيار الفائز", - "qualifiers": "تصفيات", - "qualifier": "المؤهل", - "getReadyForContest": "استعد للمسابقة القادمة:", - "winnerSelectedRandomly": "سيتم اختيار الفائز عشوائيًا من بين المتأهلين.", - "fingersCrossed": "نتمنى لك التوفيق!", - "congrats": "مبروك !!!", - "allQuestionsCorrect": "لقد أجبت على جميع الأسئلة بشكل صحيح.", - "otp": "OTP", - "verification": "تَحَقّق", - "resend": "إعادة إرسال", - "codeExpire": "انتهت صلاحية رمز التحقق", - "typeheretoreply": "اكتب هنا للرد", - "favorite": "مفضلتي", - "searchfromchat": "البحث من الدردشة", - "yourAnswerCorrect": "إجابتك صحيحة", - "youMissedTheQuestion": "نفد منك الوقت. أنت خارج اللعبة. لكن يمكنك الاستمرار وكمشاهد.", - "wrongAnswer": "إجابتك غير صحيحة. أنت خارج اللعبة. لكن يمكنك الاستمرار وكمشاهد.", - "oops": "أوه!!!", - "winner": "الفائز", - "youWantToLeaveMarathon": "هل أنت متأكد أنك تريد العودة؟ سوف تخرج من المسابقة.", - "ourSponsor": "راعينا:", - "startingIn": "يبدأ في", - "youAreOutOfContest": "أنت خارج المسابقة.", - "winners": "الفائزون", - "expireAfter": "تنتهي بعد", - "oneWeek": "أسبوع واحد", - "twoWeek": "أسبوعان", - "noUpcoming": "لا توجد مسابقات قادمة", - "fakeLocation": "تم رصد محاولة استخدام موقع جغرافي غير حقيقي. يُعد ذلك مخالفة، وقد تم إشعار إدارة الموارد البشرية.", - "noWinner": "لم يفز أحد اليوم.", - "myTeam": "فريقي", - "youCanPlayDemo": "لكن يمكنك لعب العرض", - "group": "مجموعة", - "searchGroup": "البحث عن مجموعة", - "connectHmgWifi": "قم بتوصيل HMG WIFI", - "connectedHmgWifi": "متصل بشبكة HMG Wi-Fi", - "itgForms": "نماذج (ITG)", - "resetAdPassword": "إعادة تعيين كلمة مرور AD", - "myDocuments": "مستنداتي", - "requiredDocuments": "المستندات المطلوبة", - "optionalDocuments": "المستندات الاختيارية", - "allDocuments": "كافة المستندات", - "expiredDocuments": "المستندات منتهية الصلاحية", - "missingDocuments": "مستندات مفقودة", - "uploadedDocuments": "المستندات التي تم تحميلها", - "addAtLeastOneAttachment": "الرجاء إضافة مرفق واحد على الأقل.", - "pleaseClickButtonToJoinMarathon": "الرجاء الضغط على الزر أدناه للانضمام إلى الماراثون", - "youCannotJoinTheMarathon": "لا يمكنك الانضمام إلى الماراثون لأنك تجاوزت الحد الزمني", - "open": "فتح", - "paymentRequest": "طلب الدفع", - "paymentDetails": "تفاصيل الدفع", - "requestNo": "رقم الطلب", - "requesterEmpNum": "رقم الموظف الذي قدم الطلب", - "requesterEmpName": "اسم الموظف مقدم الطلب", - "prepareEmpName": "اسم الموظف المُعدّ للطلب", - "requesterPositionName": "اسم الوظيفة لمقدم الطلب", - "preparePositionName": "المسمى الوظيفي لمُعدّ الطلب", - "requesterPayrollName": "اسم مقدم الطلب", - "payingORGName": "اسم الجهة الدافعة", - "requestAmount": "مبلغ الطلب", - "typeofPayment": "نوع الدفع", - "beneficiaryDetails": "تفاصيل المستفيد", - "beneficiaryName": "اسم المستفيد", - "idIqama": "رقم الهوية الوطنية أو الإقامة", - "beneficiaryBankName": "بنك المستفيد", - "sadadNumber": "رقم سداد", - "beneficiaryIBAN": "رقم IBAN للمستفيد", - "purchaseOrders": "أوامر الشراء", - "approvalDate": "تاريخ الموافقة", - "pOAmount": "مبلغ الطلب", - "versionStatus": "حالة الإصدار", - "supplierNo": "رقم المورد", - "general": "عام", - "requesterOperatingUnit": "وحدة تشغيل مقدم الطلب", - "prepareEmpNum": "الرقم الوظيفي لمُعدّ الطلب", - "supplierInfo": "معلومات المورد", - "supplierAcNo": "رقم حساب المورد", - "supplierAcName": "اسم حساب المورد", - "supplierIBAN": "رقم IBAN للمورد", - "supplierCRNo": "رقم السجل التجاري", - "suppliedAcNo": "رقم الحساب المقدم", - "patientRefundInvoice": "فاتورة استرداد مبلغ للمريض", - "patientNumber": "رقم المريض", - "patientName": "اسم المريض", - "invoiceDate": "تاريخ الفاتورة", - "refundInvoice": "فاتورة الاسترداد", - "hospitalClinic": "المستشفى / العيادة", - "graphicalAnalysis": "التحليل البياني", - "itemHistoryAnalysis": "تحليل سجل الصنف", - "pOno": "رقم أمر الشراء", - "oprUnit": "وحدة التشغيل", - "qtyOrdered": "الكمية المطلوبة", - "qtyReceived": "الكمية المستلمة", - "bonusQty": "الكمية المجانية", - "balQty": "الكمية المتبقية", - "videoCall": "مكالمة فيديو", - "addUsers": "إضافة مستخدمين إلى المجموعة", - "admin": "مشرف", - "areYouSureWantTodelete": "هل أنت متأكد أنك تريد الحذف؟", - "confirmGrantMazayaAccess": "هل أنت متأكد أنك تريد منح صلاحية مزايا لـ \"{}\"؟", - "confirmRevokeMazayaAccess": "هل أنت متأكد أنك تريد إلغاء صلاحية مزايا لـ \"{}\"؟", - "yes": "نعم", - "no": "لا", - "mazayaInviteInstructions": "يرجى تحميل تطبيق مهمم من الرابط أعلاه واستخدام بيانات الاعتماد التالية لتسجيل الدخول", - "cameraPermissionRequiredToScan": "يرجى منح صلاحية الكاميرا لمسح رمز الاستجابة السريعة", - "cameraPermissionPermanentlyDenied": "يرجى تفعيل صلاحية الكاميرا من إعدادات التطبيق > الصلاحيات", - "openSettings": "فتح الإعدادات", - "nationalIdOrIqamaFallback": "رقم الهوية الوطنية أو رقم الإقامة الخاص بك", - "Attendance": "الحضور", - "audioCall": "مكالمة صوتية", - "editGroups": "تعديل المجموعة", - "enterGroupName": "يرجى إدخال اسم المجموعة الصحيح", - "enterGroupNamePlease": "يرجى إدخال اسم المجموعة", - "groupMembers": "أعضاء المجموعة", - "groupName": "اسم المجموعة", - "groupNameshouldbe": "يجب أن يتكون اسم المجموعة من 10 أحرف على الأقل", - "manage": "إدارة", - "manageGroup": "إدارة المجموعة", - "members": "الأعضاء", - "searchByUserName": "البحث بواسطة اسم المستخدم", - "shareScreen": "مشاركة الشاشة", - "start": "بدء", - "about": "عن", - "explore": "استكشاف", - "mazaya": "مزايا", - "benefits": "المزايا", - "mazayaDesc": "اكتشف الخصومات والعروض الخاصة المتاحة للموظفين", - "viewallofferMazaya": "عرض جميع عروض مزايا", - "buyerName": "اسم المشتري", - "buyerNumber": "رقم المشتري", - "highestBidder": "أعلى مزايد", - "remarks": "ملاحظات", - "faHeader": "بيانات رأس طلب الأصول الثابتة", - "bookTypeCode": "رمز نوع الدفتر", - "categoryCode": "رمز الفئة", - "categoryGroup": "مجموعة الفئات", - "faLINES": "تفاصيل الأصول", - "assetNumber": "رقم الأصل", - "assetDescription": "وصف الأصل", - "barCodeNumber": "رقم الباركود", - "datePlaceInService": "تاريخ وضعه في الخدمة", - "serialNumber": "الرقم التسلسلي", - "disposedDate": "تاريخ الاستبعاد", - "netBookValue": "القيمة الدفترية الصافية", - "purchasedPrice": "سعر الشراء", - "usefulLife": "العمر الإنتاجي", - "yearsUsed": "سنوات الاستخدام", - "faRequest": "طلب استبعاد أصل ثابت", - "showMore": "عرض المزيد", - "ticketDetails": "تفاصيل التذكرة", - "currentTicketBalance": "رصيد التذكرة الحالي", - "ticketHistory": "سجل التذاكر", - "proceedBooking": "المتابعة إلى الحجز", - "courses": "الدورات التدريبية", - "course": "دورة", - "status": "الحالة", - "deadline": "الموعد النهائي", - "overdue": "متأخر", - "noCoursesAvailable": "لا توجد دورات متاحة", - "pullToRefresh": "اسحب للتحديث", - "courseUrlNotAvailable": "رابط الدورة غير متوفر", - "buyerDetails": "تفاصيل المشتري", - "etqanOVR": "الإبلاغ عن واقعة", - "etqanRequest": "طلبات الإبلاغ عن الوقائع", - "selectProject": "حدد المشروع", - "project": "مشروع", - "keen": "KEEN", - "reportIncident": "الإبلاغ عن الحادث", - "myIncidents": "حوادثي", - "incidentDetails": "تفاصيل الحادث", - "ticketNumber": "رقم التذكرة", - "ticketId": "معرف التذكرة", - "pleaseSelectProject": "الرجاء اختيار مشروع", - "viewAttachment": "عرض المرفق", - "parkingQr": "رمز QR لمواقف السيارات", - "startNow": "ابدأ الآن", - "destination_type": "نوع الوجهة", - "source_organization_name": "اسم الجهة المرسلة", - "destination_organization_name": "اسم الجهة المستقبلة", - "costCenter": "مركز التكلفة", - "priceSAR": "السعر (ريال سعودي)", - "amountSAR": "المبلغ (ريال سعودي)", - "amuLastThreeMonths": "AMU (آخر 3 أشهر)", - "mazayaTitle": "مزايا", - "mazayaAccessGranted": "تم منح صلاحية الوصول إلى مزايا", - "mazayaAccessGrantedDesc": "أصبح لدى {} حق وصول نشط الآن. شارك رابط التنزيل أدناه ليتمكن من تثبيت تطبيق مهم وإكمال الإعداد.", - "accessIsNowActive": "تم تفعيل صلاحية الوصول", - "accessIsNowActiveDesc": "يمكن لـ {} استخدام الرابط المرفق لتنزيل تطبيق مزايا ومتابعة الإعداد على جهازه.", - "dependentAccessActive": "صلاحية التابع مفعّلة", - "shareableAppDownloadLink": "رابط تنزيل التطبيق للمشاركة", - "shareableAppDownloadLinkDesc": "أرسل هذا الرابط إلى {} ليتمكن من تنزيل تطبيق مزايا ومتابعة الإعداد.", - "downloadLink": "رابط التنزيل", - "shareDownloadLink": "مشاركة رابط التنزيل", - "copyLink": "نسخ الرابط", - "done": "تم", - "linkCopied": "تم نسخ الرابط بنجاح", - "mazayaAccessRevoked": "تم إلغاء صلاحية الوصول إلى مزايا", - "mazayaAccessRevokedDesc": "تم إلغاء صلاحية وصول التابع إلى مزايا. لم يعد بإمكانه استخدام العروض أو تسجيل الدخول بالبصمة.", - "contactYourSponsor": "تواصل مع الموظف المسؤول عن التابع", - "contactYourSponsorDesc": "اطلب من الموظف المسؤول عن التابع إعادة تفعيل صلاحية الوصول إلى مزايا من صفحة بيانات التابعين.", - "dependentAccessBlocked": "تم تعطيل صلاحية التابع", - "returnToSignIn": "العودة إلى تسجيل الدخول", - "allowMazayaAccess": "السماح باستخدام مزايا", - "revokeMazayaAccess": "إلغاء صلاحية استخدام مزايا", - "active": "نشط", - "noAccess": "لا توجد صلاحية وصول", - "offerDetails": "تفاصيل العرض", - "offerIdNotAvailable": "رقم العرض غير متوفر", - "unableToRedeemOffer": "تعذر الحصول على رابط العرض، يرجى المحاولة لاحقاً", - "errorRedeemingOffer": "حدث خطأ أثناء استخدام العرض", - "useOffer": "استخدام العرض", - "online": "عبر الإنترنت", - "inStore": "في المتجر", - "ksa": "المملكة", - "riyadh": "الرياض", - "noInstructionsAvailable": "لا توجد طريقة استخدام محددة.", - "contactInfo": "معلومات التواصل", - "allCategories": "الكل", - "noOffersAvailable": "لا توجد عروض متاحة", - "addDependents": "إضافة تابعين", - "myDependents": "التابعون", - "offDiscount": "خصم بقيمة {}", - "usageLabel": "الاستخدام: ", - "areYouSureWantToLogOut": "هل أنت متأكد من تسجيل الخروج؟", - "searchDependents": "البحث في التابعين", - "searchFamilyMembers": "البحث في أفراد العائلة", - "addAnotherUser": "إضافة مستخدم آخر", - "joinMazaya": "انضم إلى مزايا", - "joinMazayaSubtitle": "استفد من العروض والخصومات الحصرية للموظفين في المطاعم والتسوق وغيرها.", - "continueAsEmployee": "المتابعة كموظف", - "continueAsEmployeeSubtitle": "سجّل الدخول باستخدام بيانات حسابك الوظيفي.", - "pleaseEnterNationalId": "الرجاء إدخال رقم الهوية الوطنية", - "pleaseSelectDob": "الرجاء تحديد تاريخ الميلاد", - "unableToRetrieveDependentInfo": "تعذر الحصول على معلومات التابع", - "failedToSendOtp": "فشل إرسال رمز التحقق", - "verificationCodeResent": "تم إعادة إرسال رمز التحقق", - "nationalId": "رقم الهوية الوطنية", - "addDependent": "إضافة تابع", - "stepVerify": "التحقق", - "stepBasic": "البيانات الأساسية", - "stepAdditional": "بيانات إضافية", - "findYourDependent": "البحث عن أحد التابعين", - "findYourDependentDesc": "أدخل التفاصيل تماماً كما تظهر في الهوية الوطنية. سنقوم باسترداد السجل بأمان من مركز المعلومات الوطني (NHIC).", - "enter10DigitNationalId": "أدخل رقم الهوية المكون من 10 أرقام", - "nationalIdMustBe10Digits": "يجب أن يتكون رقم الهوية من 10 أرقام", - "dateFormatPlaceholder": "يوم / شهر / سنة", - "searchUser": "بحث عن المستخدم", - "dependentNotFoundNhic": "لم يتم العثور على سجل لهذا التابع في مركز المعلومات الوطني", - "basicInfo": "المعلومات الأساسية", - "basicInfoDesc": "بيانات الهوية المطلوبة المستردة من مركز المعلومات الوطني.", - "additionalInfo": "معلومات إضافية", - "additionalInfoDesc": "إضافة أو مراجعة بيانات الكفالة والأهلية.", - "select": "اختر", - "enterFieldPlaceholder": "أدخل {}", - "requiredField": "الحقل المطلوب", - "pleaseFillField": "الرجاء إدخال {}", - "reviewAndSubmit": "المراجعة والإرسال", - "reviewAndSubmitDesc": "يرجى مراجعة تفاصيل التابع بعناية قبل تأكيد الإرسال.", - "arabicName": "الاسم بالعربية", - "relationship": "صلة القرابة", - "sponsor": "الموظف المسؤول عن التابع", - "dependentSponsorDetail": "بيانات الموظف المسؤول عن التابع", - "insuranceEligibility": "أهلية التأمين", - "relationshipStartDate": "تاريخ بدء العلاقة", - "dependentAddedSuccessfully": "تم إرسال الطلب بنجاح", - "genderMale": "ذكر", - "genderFemale": "أنثى", - "religionIslam": "الإسلام", - "back": "السابق", - "submitRequest": "إرسال الطلب", - "enterDependentDetailsToContinue": "أدخل تفاصيل التابع للمتابعة.", - "enterBasicDetailsDesc": "يرجى إدخال البيانات الأساسية للتابع.", - "locations": "الفروع والمواقع", - "availableOffers": "العروض المتاحة", - "selectOfferToRedeem": "اختر العرض الذي ترغب في استخدامه", - "viewOnMap": "عرض على الخريطة", - "showAllLocations": "عرض جميع الفروع ({})", - "searchBranches": "البحث عن الفروع أو المدن...", - "allCities": "الكل", - "allCitiesOption": "جميع المدن", - "noBranchesFound": "لم يتم العثور على فروع مطابقة", - "browseAllBranches": "تصفح جميع الفروع ({}) في مختلف المدن", - "branchesCount": "{} فرع", - "kmAway": "على بعد {} كم", - "dependentDetails": "تفاصيل التابع", - "keyDetails": "البيانات الأساسية", - "verified": "تم التحقق", - "idEnding": "رقم الهوية المنتهي بـ {}", - "servicesAndActions": "الخدمات والإجراءات", - "startDependentFlowsDesc": "بدء إجراءات التابع وإدارة الوصول من مكان واحد.", - "mazayaAccess": "الوصول إلى مزايا", - "accessOff": "معطل", - "allowDependentMazayaOffersDesc": "السماح لـ {} باستخدام عروض مزايا بعد التحقق من هويته.", - "loginMethod": "طريقة تسجيل الدخول", - "nationalIdAndDob": "الهوية الوطنية وتاريخ الميلاد", - "sponsorOtp": "رمز التحقق المرسل إلى الموظف المسؤول عن التابع", - "revokingPreventsAccessDesc": "إلغاء الوصول يمنع التابع من استخدام المزايا حتى تعيد السماح به مرة أخرى.", - "locationPermissionRequiredForAttendance": "يجب منح إذن الموقع لتسجيل الحضور", - "locationServicesRequiredForAttendance": "يجب تفعيل خدمة الموقع لتسجيل الحضور", - "pleaseProvideLocationPermission": "الرجاء منح إذن الموقع", - "microphoneAccessRequired": "يحتاج التطبيق إلى إذن الوصول إلى الميكروفون لتسجيل الصوت.", - "shareAccessGuide": "مشاركة دليل الوصول", - "nationalIdOrIqamaNumber": "رقم الهوية الوطنية أو الإقامة", - "multipleCities": "مدن متعددة", - "filters": "الفلاتر", - "availability": "التوفر", - "chooseOneOrBoth": "اختر أحد الخيارين أو كليهما", - "sortBy": "الترتيب حسب", - "recommended": "الموصى بها", - "nearest": "الأقرب", - "highestDiscount": "الأعلى خصمًا", - "newest": "الأحدث", - "distance": "المسافة", - "fromYourCurrentLocation": "من موقعك الحالي", - "any": "الكل", - "minimumDiscount": "أقل نسبة خصم", - "reset": "إعادة تعيين", - "applyFilters": "تطبيق الفلاتر", - "distanceKm": "{} كم", - "discountPercentPlus": "{}%+", - "visitMerchantWebsite": "زيارة موقع التاجر", - "favoriteAddedSuccess": "تمت إضافة التاجر إلى المفضلة بنجاح", - "favoriteRemovedSuccess": "تمت إزالة التاجر من المفضلة بنجاح", - "favoriteError": "تعذّر تحديث المفضلة. يُرجى المحاولة مرة أخرى.", - "merchantWebsiteNotAvailable": "الموقع الإلكتروني للتاجر غير متاح", - "locationServicesRequiredForNearestOffers": "فعّل خدمات الموقع لعرض العروض القريبة منك", - "locationPermissionRequiredForNearestOffers": "اسمح للتطبيق بالوصول إلى موقعك لعرض العروض القريبة منك", - "mazayaDeals": "عروض مزايا", - "findABrandOrSomething": "ابحث عن علامة تجارية أو شيء بسيط", - "exploreYourBenefits": "استكشف مزاياك", - "theMazayaEdit": "اختيارات مزايا", - "exclusivelyYours": "حصرياً لك", - "aLittleExtraJustForMazayaMembers": "مزايا إضافية، خاصة بأعضاء مزايا.", - "seeAll": "عرض الكل", - "latestOnMazaya": "أحدث ما في مزايا", - "goodFoodGreatCompanyEvenBetterPerks": "طعام رائع. رفقة ممتعة. مزايا أفضل.", - "travelEssentials": "أساسيات السفر", - "fromEverydayCareToYourNextAdventure": "من العناية اليومية إلى مغامرتك القادمة.", - "homeAndKitchen": "المنزل والمطبخ", - "curatedPicksForYourHomeAndKitchen": "اختيارات مميزة لمنزلك ومطبخك.", - "discover": "اكتشف", - "saved": "المحفوظات", - "myFamily": "عائلتي", - "educationAndTraining": "التعليم والتدريب", - "foodsAndDrinks": "الأطعمة والمشروبات", - "travelAndEntertainment": "السفر والترفيه", - "beautyAndFitness": "الجمال واللياقة", - "healthcare": "الرعاية الصحية", - "favoriteMerchant": "العروض المفضلة", - "favoriteOffers": "العروض المفضلة", - "goodToKnow": "معلومات مهمة", - "goodToKnowDesc": "احتفظ بعضوية مزايا في متناول يدك. تحقق من توفر التاجر والأنشطة المؤهلة والشروط الكاملة قبل الحجز.", - "termsAndConditions": "الشروط والأحكام", - "haveAQuestionAboutOffer": "هل لديك سؤال حول هذا العرض؟", - "getHelp": "الحصول على المساعدة", - "redeemOffer": "استرداد العرض", - "merchantContact": "بيانات التواصل مع التاجر", - "website": "الموقع الإلكتروني", - "phone": "الهاتف", - "viewAll": "عرض الكل", - "moreCitiesCount": "+ {} مدن أخرى", - "findAnEscapeOrAnExperience": "ابحث عن تجربة أو عطلة", - "allOffers": "جميع العروض", - "sampleAvailability": "حسب التوفر", - "offersCount": "{} عروض", - "mazayaExclusive": "حصري لمزايا", - "youAreAllCaughtUp": "لقد شاهدت كل العروض. المزيد قريباً.", - "selectCity": "اختر المدينة", -}; -static const Map _en_US = { - "mohemm": "Mohemm", - "english": "English", - "arabic": "عربي", - "login": "Login", - "pleaseEnterLoginDetails": "Please enter the detail below to login", - "username": "Username", - "password": "Password", - "welcomeBack": "Welcome back", - "wouldYouLikeToLoginWithCurrentUsername": "Would you like to login with current Username?", - "lastLoginDetails": "Last Login Details:", - "verificationType": "Verification Type:", - "pleaseVerify": "Please Verify", - "pleaseVerifyForBio": "Please verify login with one of the following options", - "verifyThroughFace": "Verify Through Face", - "verifyThroughFingerprint": "Verify Through Fingerprint", - "verifyThroughSMS": "Verify Through SMS", - "verifyThroughWhatsapp": "Verify Through Whatsapp", - "useAnotherAccount": "Use Another Account", - "pleaseEnterTheVerificationCodeSentTo": "Please enter the verification code sent to ", - "theVerificationCodeWillExpireIn": "The verification code will expire in ", - "goodMorning": "Good Morning", - "markAttendance": "Mark Attendance", - "timeLeftToday": "Time Left Today", - "checkIn": "Check In", - "workList": "Work List", - "leaveBalance": "Leave Balance", - "missingSwipes": "Missing Swipes", - "ticketBalance": "Ticket Balance", - "other": "Other", - "services": "Services", - "viewAllServices": "View All Services", - "monthlyAttendance": "Monthly Attendance", - "vacationRule": "Vacation Rule", - "vacationType": "Vacation Type", - "startDateT": "Start Date", - "endDateT": "End Date", - "workFromHome": "Work From Home", - "ticketRequest": "Ticket Request", - "viewAllOffers": "View All Offers", - "offers": "Offers & ", - "discounts": "Discounts", - "newString": "New", - "setTheNewPassword": "Set the new password", - "typeYourNewPasswordBelow": "Type your new password below", - "typeYourNewActiveDirectoryPasswordBelow": "Type new active directory password below", - "confirmPassword": "Confirm Password", - "update": "Update", - "title": "Title", - "home": "Home", - "mySalary": "My Salary", - "createRequest": "Create Request", - "forgotPassword": "Forgot Password", - "employeeId": "Employee ID", - "loginCodeWillSentToMobileNumber": "Please Enter your Employee ID, A login code will be sent to your mobile number", - "changePassword": "Change Password", - "ok": "OK", - "confirm": "Confirm", - "passwordChangedSuccessfully": "Password changed successfully", - "itemsForSale": "Items for Sale", - "attendanceDetails": "Attendance Details", - "order": "order", - "earlyOut": "Early Out", - "shortage": "Shortage", - "excess": "Excess", - "lateIn": "Late In", - "approvedCheckOut": "Approved Check Out", - "approvedCheckIn": "Approved Check In", - "actualCheckOut": "Actual Check Out", - "actualCheckIn": "Actual Check In", - "present": "PRESENT", - "pres": "present", - "shiftTime": "Shift Time", - "absent": "ABSENT", - "attendance": "Attendance", - "scheduleDays": "Schedule\nDays", - "offDays": "Off\nDays", - "nonAnalyzed": "Non\nAnalyzed", - "shortageHour": "Shortage\nHour", - "stats": "Stats", - "completed": "Completed", - "doNotUseRecentPassword": "Do not use recent password", - "atLeastOneLowercase": "At least one lowercase", - "atLeastOneUppercase": "At least one uppercase", - "atLeastOneNumeric": "At least one numeric", - "minimum8Characters": "Minimum 8 characters", - "doNotAddRepeatingLetters": "Do not add repeating letters", - "itShouldContainSpecialCharacter": "It should not contain special characters", - "confirmPasswordMustMatch": "Confirm password must match", - "sms": "SMS", - "fingerPrint": "Fingerprint", - "face": "Face", - "whatsapp": "Whatsapp", - "reject": "Reject", - "approve": "Approve", - "generate": "Generate", - "cancel": "Cancel", - "requestedItems": "Requested Items", - "request": "Request", - "myRequest": "My Request", - "actions": "Actions", - "delegate": "Delegate", - "request_info": "Request Info", - "attachments": "Attachments", - "info": "Info.", - "employeeNumber": "Employee Number", - "assignmentNumber": "Assignment Number", - "employeeName": "Employee Name", - "scheduleDate": "Schedule Date", - "shiftType": "Shift Type", - "shift": "Shift", - "breakText": "Break", - "actualSwipeStart": "Actual Swipe Start", - "actualSwipeEnd": "Actual Swipe End", - "approvedSwipeStart": "Approved Swipe Start", - "approvedSwipeStartReason": "Approved Swipe Start Reason", - "approvedSwipeEnd": "Approved Swipe End", - "approvedSwipeEndReason": "Approved Swipe End Reason", - "from": "From", - "to": "To", - "sent": "Sent", - "closed": "Closed", - "id": "ID", - "responder": "Responder", - "jobTitle": "Job Title", - "grade": "Grade", - "jobCategory": "Job Category", - "category": "Category", - "employeeEmailAddress": "Employee Email Address", - "payrollBranch": "Payroll Branch", - "yourChangeHasBeenSavedSuccessfully": "Your change has been saved successfully", - "code": "Code", - "unit": "Unit", - "quantity": "Quantity", - "dateRequired": "Date Required", - "lineStatus": "Line Status", - "statusDate": "Status Date", - "transactionType": "Transaction Type", - "operatingUnit": "Operating Unit", - "organizationCode": "Organization Code", - "organization": "Organization", - "fromSubInventory": "From Sub Inventory", - "fromLocator": "From Locator", - "toSubInventory": "To Sub Inventory", - "toLocator": "To Locator", - "shipToLocator": "Ship To Locator", - "itemHistory": "Item History", - "mfg": "MFG", - "lineType": "Line Type", - "price": "Price", - "lineAmount": "Line Amount", - "lineDiscount": "Line Discount %", - "needByDate": "Need By Date", - "promisedDate": "Promised Date", - "deliverToLocation": "Deliver To Location", - "requisitionNumber": "Requisition Number", - "requester": "Requester", - "subject": "Subject", - "quotationAnalysis": "Quotation Analysis", - "description": "Description", - "pleaseEnterDescription": "Please enter description", - "supplier": "Supplier", - "site": "Site", - "buyer": "Buyer", - "preparer": "Preparer", - "creationDate": "Creation Date", - "shipToLocation": "Ship To Location", - "quotationNumber": "Quotation Number", - "quotationDate": "Quotation Date", - "paymentTerms": "Payment Terms", - "currency": "Currency", - "grossAmount": "Gross Amount", - "discountAmount": "Discount Amount", - "customDuty": "Custom Duty", - "shipHandle": "Ship Handle", - "otherCharges": "Other Charges", - "totalPOAmountWithVAT": "Total PO Amount With VAT", - "totalPOAmountInWords": "Total PO Amount In Words", - "requestNumber": "Request Number", - "uom": "UOM", - "operatingCode": "Operating Code", - "poNumber": "PO Number", - "revision": "Revision", - "quantityOrdered": "Quantity Ordered", - "quantityReceived": "Quantity Received", - "bonusQuantity": "Bonus Quantity", - "purchasePrice": "Purchase Price", - "discountPer": "Discount %", - "balanceQuantity": "Balance Quantity", - "netPrice": "Net Price", - "closureStatus": "Closure Status", - "quotationNetPrice": "Quotation Net Price", - "quotationUOM": "Quotation UOM", - "quotationQty": "Quotation Qty", - "itemCode": "item Code", - "vendorName": "Vendor Name", - "quotationMFGPartNumber": "Quotation MFG Part Number", - "quotationDeliveryDate": "Quotation Delivery Date", - "quotationBonusQuantity": "Quotation Bonus Quantity", - "quotationLineTotal": "Quotation Line Total", - "rfqUOM": "RFQ UOM", - "rfqQty": "RFQ Qty", - "rfqNumber": "RFQ Number", - "msg": "Hello {} in the {} world ", - "msg_named": "{} are written in the {lang} language", - "clickMe": "Click me", - "human": "Human", - "resources": "Resources", - "details": "Details", - "noDataAvailable": "No Data Available", - "productName": "Product Name", - "productDescription": "Product Description", - "unitPrice": "Unit Price", - "manufacturerName": "Manufacturer Name", - "manufacturerPartName": "Manufacturer Part Name", - "supplierName": "Supplier Name", - "supplierContact": "Supplier Contact", - "chargeToPatient": "Charge To Patient", - "justification": "Justification", - "itemDescription": "Item Description", - "groupCode": "Group Code", - "primaryUOM": "Primary UOM", - "subgroupDescription": "Subgroup Description", - "subgroupCode": "Subgroup Code", - "groupDescription": "Group Description", - "templateName": "Template Name", - "itemCreationStatus": "Item Creation Status", - "standardizationApprovalStatus": "Standardization Approval Status", - "standardizationApprovalRejectionReason": "Standardization Approval Rejection Reason", - "analyzedBy": "Analyzed By", - "approvedDate": "Approved Date", - "itemType": "Item Type", - "relatedTo": "Related To", - "requestDate": "Request Date", - "analyzedDate": "Analyzed Date", - "urgent": "Urgent", - "requestDetails": "Request Details", - "approvalLevel": "Approval Level", - "requesterDetails": "Requester Details", - "myAttendance": "My Attendance", - "workOnBreak": "Work On Break", - "next": "Next", - "apply": "Apply", - "mobile": "Mobile", - "year": "Year", - "month": "Month", - "day": "Day", - "completingYear": "We appreciate you for completing the service of", - "address": "Address", - "phoneNumber": "Phone Number", - "businessGroup": "Business", - "Payroll": "Payroll", - "civilIdentityNumber": "Civil Identity Number", - "dateOfBirth": "Date of Birth", - "maritalStatus ": "Marital Status ", - "fullName": "Full Name", - "remove": "Remove", - "Attendance": "Attendance", - "submit": "Submit", - "submitAsAnonymous": "Submit as Anonymous", - "areYouSureYouWantToSubmit": "Are you sure you want to submit?", - "comments": "Comments", - "writeComment": "Write a comment", - "approversList": "Approvers List", - "yourRequestHasBeenSubmittedForApprovals": "Your request has been submitted for approvals", - "monthlyPaySlip": "Monthly Pay Slip", - "particular": "Particular", - "earnings": "Earnings", - "deductions": "Deductions", - "paymentMethodName": "Payment Method Name", - "bankName": "Bank Name", - "branchCode": "Branch Code", - "accountNo": "Account No", - "summaryOfInformation": "Summary of Information", - "totalPayAmount": "Total Pay Amount", - "paymentInformation": "Payment Information", - "amount": "Amount", - "correctCurrentDatails": "correct or complete the current details", - "selectType": "Select the type of change you want to make", - "enterNewInfo": "Enter new Information because of a real change to the current details (e.g because of a change in marital status)", - "endDate": "*End Date", - "removeThisMember": "Are You Sure You Want to Remove this Member?", - "wantUpdateThisMember": "Are You Sure You Want to Update this Member?", - "addNewFamilyMember": "Add New Family Member", - "addRow": "Add new row", - "pleaseSelect": "Please Select *", - "delete": "delete", - "add": "Add", - "edit": "Edit", - "myProfile": "My Profile", - "mowadhafhi": "Mowadhafi", - "searchAnnouncements": "Search Announcements", - "announcements": "Announcements", - "swipeRequest": "Swipe Request", - "serviceType": "Service Type", - "departmentName": "Department Name", - "selectDepartment": "Select Department", - "relatedSection": "Related Section", - "selectSection": "Select Section", - "relatedTopic": "Related Topic", - "selectTopic": "Select Topic", - "supportingDocument": "Supporting Document", - "mowadhafhiRequest": "Mowadhafi Request", - "ticketReference": "Ticket Reference", - "section": "Section", - "topic": "Topic", - "actionBy": "Action By", - "pending": "Pending", - "pendingTransactions": "Pending Transactions", - "selectRequestType": "Please select request type", - "dateFrom": "Date From", - "dateTo": "Date To", - "requestName": "Request Name", - "createdFor": "Created For", - "requestType": "Request Type", - "requestCreatedSuccessfully": "Request created successfully", - "search": "Search", - "filterEnterPrDetailsHere": "Enter PR Details here", - "filterEnterPoDetailsHere": "Enter PO Details here", - "wantToReject": "Are you sure want to reject?", - "employeeDigitalID": "Employee Digital ID", - "businessCard": "Business Card", - "checkOut": "Check Out", - "regular": "Regular", - "mark": "Mark", - "performance": "Performance Evaluation", - "performanceEvaluationIn": "Your performance Evaluation in", - "valuationIn": "Performance Evaluation in", - "viewBusinessCard": "View Business Card", - "performanceEvaluation": "Performance Evaluation", - "logout": "Logout", - "selectMethodOfAttendance": "Select the method to mark the attendance", - "comeNearHMGWifi": "Please come near to HMG wifi", - "deliverNotificationToMeRegardless": "Deliver notifications to me regardless of any general rules", - "close": "Close", - "respond": "Respond", - "vacationRuleAdded": "Vacation rule added", - "selectTypeT": "Select Type", - "notification": "Notification", - "selectNotification": "Select Notification", - "ifAllSelectedYouWillSkip": "*If All is selected, you will skip to step 3", - "applyForVacationRule": "Apply for Vacation Rule", - "step1": "Step 1", - "step2": "Step 2", - "step3": "Step 3", - "message": "Message", - "writeAMessage": "Write a message", - "notificationReassign": "Notification Reassign", - "selectEmployee": "Select Employee", - "searchEmployeeForReplacement": "Search employee for replacement", - "searchForEmployee": "Search for Employee", - "pleaseSpecifyEndTime": "Please specify End Time", - "pleaseSelectNotificationReassign": "Please select notification reassign", - "pleaseSelectEmployeeForReplacement": "Please select employee for replacement", - "pleaseSelectAction": "Please select action", - "pleaseSelectDate": "Please select date", - "todayAttendance": "Today's Attendance", - "viewAttendance": "View Attendance", - "teamMembers": "Team Members", - "profileDetails": "Profile Details", - "noResultsFound": "No Results Found", - "searchBy": "Search by", - "myTeamMembers": "My Team Members", - "save": "Save", - "TurnNotificationsFor": "Turn on notifications for", - "worklistSettings": "Worklist Settings", - "absenceType": "Absence Type", - "absenceCategory": "Absence Category", - "days": "Days", - "hours": "Hours", - "approvalStatus": "Approval Status", - "absenceStatus": "Absence Status", - "poweredBy": "Powered By", - "cloudSolutions": "Cloud Solutions", - "subordinateLeave": "Subordinate Leave", - "numberDays": "Number of days", - "selectTemplate": "Select Template", - "myPostedAds": "My posted ads", - "browseCategories": "Browse Categories", - "searchItems": "Search Items", - "offerAndDiscounts": "Offer & Discounts", - "offerValid": "Offer Valid", - "offerExpired": "Offer Expired", - "whatAreYouOffering": "What are you offering?", - "selectCategory": "Select Category", - "inProgress": "InProgress", - "locked": "Locked", - "addDetails": "Add Details", - "reviewAndSell": "Review & Sell", - "itemTitle": "Item Title", - "itemCondition": "Item Condition", - "used": "Used", - "region": "Region", - "selectRegion": "Select Region", - "itemPrice": "Item Price", - "itemPhotos": "Item Photos", - "itemInfo": "Item Info", - "uploadAttachment": "Upload Attachment", - "selectFromGalleryOrOpenCamera": "Select from gallery or open camera", - "openCamera": "Open\nCamera", - "uploadFromGallery": "Upload from\nGallery", - "name": "Name", - "email": "Email", - "noHistoryAvailable": "No History Available", - "purchaseRequisition": "Purchase Requisition", - "moveOrder": "Move Order", - "humanResource": "Human Resource", - "purchaseOrder": "Purchase Order", - "ITGForms": "ITG Forms", - "itemCreation": "Item Creation", - "stamp": "Stamp", - "addFavoriteList": "Do you want to add {name} in your favorite list", - "feedbackUserExperience": "This is to get the feedback about the user experience", - "rateUI": "How would you like to rate", - "rateUI2": "How do you satisfied with this application", - "submitSurvey": "Submit Survey", - "typeHere": "Type here", - "infoDetail": "Info Detail", - "amount_detail": "Amount Detail", - "currentBalance": "Current Balance", - "currentLeaveBalance": "Current Leave Balance", - "calculatedDays": "Calculated Days", - "totalDays": "Total Days", - "usedBalance": "Used", - "infants": "Infants", - "child": "Child", - "adult": "Adult", - "updateMember": "Are You Sure You Want to Update this Member?", - "fieldIsEmpty": "'{data}' Field is empty. Please select", - "pleaseEnterComments": "Please enter comments", - "skip": "Skip", - "typeCurrentPasswordBelow": "Type Your Current password below", - "currentPassword": "Current password", - "concurrentReports": "Concurrent Reports", - "EnterNewAddressMoved": "Enter a new address if you have moved", - "CorrectAddress": "Correct or amend this address", - "SelectChangeWantToMake": "Select the type of change you want to make", - "profile": { - "reset_password": { - "label": "Reset Password", - "username": "Username", - "password": "password" + "phoneNumber": "رقم الجوال", + "businessGroup": "مجموعة العمل", + "Payroll": "الرواتب", + "civilIdentityNumber": "رقم الهويه", + "dateOfBirth": "تاريخ الميلاد", + "maritalStatus ": "الحالة الاجتماعية", + "fullName": "الاسم الكامل", + "remove": "حذف", + "submit": "إرسال", + "submitAsAnonymous": "إرسال دون الإفصاح عن الهوية", + "areYouSureYouWantToSubmit": "هل أنت متأكد من إرسال الطلب؟", + "comments": "تعليقات", + "writeComment": "أكتب تعليقا", + "approversList": "قائمة المعتمدين", + "yourRequestHasBeenSubmittedForApprovals": "تم إرسال طلبك للاعتماد", + "monthlyPaySlip": "قسيمة الراتب الشهرية", + "particular": "البيان", + "earnings": "المستحقات", + "deductions": "الاستقطاعات", + "paymentMethodName": "اسم طريقة الدفع", + "bankName": "اسم البنك", + "branchCode": "رمز الفرع", + "accountNo": "رقم الحساب", + "summaryOfInformation": "ملخص المعلومات", + "totalPayAmount": "المبلغ الإجمالي للدفع", + "paymentInformation": "معلومات الدفع", + "performance": "تقييم الأداء", + "performanceEvaluation": "تقييم الأداء في", + "performanceEvaluationIn": "تقييم أدائك في", + "valuationIn": "تقييم الأداء في", + "amount": "المبلغ", + "correctCurrentDatails": "تصحيح البيانات الحالية أو استكمالها", + "selectType": " حدد نوع التغيير الذي تريد القيام به", + "enterNewInfo": + " أدخل معلومات جديدة بسبب تغيير حقيقي في التفاصيل الحالية (على سبيل المثال بسبب تغيير في الحالة الاجتماعية", + "endDate": "تاريخ الانتهاء", + "removeThisMember": "هل أنت متأكد من إزالة هذا الفرد؟", + "wantUpdateThisMember ": "هل أنت متأكد من تحديث بيانات هذا الفرد؟", + "addNewFamilyMember": "اضافة عضو جديد", + "addRow": "اضافة صف جديد", + "pleaseSelect": "الرجاء اختيار", + "delete": "حذف", + "edit": "تعديل", + "add": "اضافه", + "myProfile": "ملفي الشخصي", + "mowadhafhi": "موظفي", + "searchAnnouncements": "البحث في الإعلانات", + "announcements": "اعلانات", + "swipeRequest": "طلب تصحيح البصمة", + "serviceType": "نوع الخدمه", + "departmentName": "اسم القسم", + "selectDepartment": "اختر القسم", + "relatedSection": "قسم ذو صله", + "selectSection": "اختيار القسم", + "relatedTopic": "عنوان ذو صله", + "selectTopic": "اختر العنوان", + "supportingDocument": "ارفاق مستند", + "mowadhafhiRequest": "طلب موظفي", + "ticketReference": "الرقم المرجعي للتذكرة", + "section": "القسم", + "topic": "العنوان", + "actionBy": "الإجراء بواسطة", + "pending": "قيد الانتظار", + "pendingTransactions": "المعاملات قيد الانتظار", + "selectRequestType": "الرجاء اختيار نوع الطلب", + "dateFrom": "من تاريخ", + "dateTo": "الى تاريخ", + "requestName": "اسم الطلب", + "createdFor": "تم الإنشاء لصالح", + "requestCreatedSuccessfully": "تم انشاء الطلب بنجاح", + "search": "بحث", + "filterEnterPrDetailsHere": "ادخل تفاصيل طلب الشراء هنا", + "filterEnterPoDetailsHere": "ادخل تفاصيل أمر الشراء هنا", + "wantToReject": "هل أنت متأكد من رفض الطلب؟", + "requestType": "نوع الطلب", + "employeeDigitalID": "الهوية الرقمية للموظف", + "businessCard": "بطاقة العمل", + "viewBusinessCard": "عرض بطاقة العمل", + "logout": "تسجيل خروج", + "checkOut": "تسجيل الانصراف", + "regular": "اعتيادي", + "mark": "تسجيل", + "selectMethodOfAttendance": "اختر طريقة تسجيل الحضور", + "comeNearHMGWifi": "يرجى الاقتراب من شبكة Wi-Fi الخاصة بالمجموعة", + "deliverNotificationToMeRegardless": + "تسليم الإخطارات إلي بغض النظر عن أي قواعد عامة", + "close": "أغلق", + "respond": "رد", + "vacationRuleAdded": "تمت إضافة قاعدة الإجازة", + "selectTypeT": "اختر صنف", + "notification": "تنبيه", + "selectNotification": "حدد إعلام", + "ifAllSelectedYouWillSkip": "* إذا تم تحديد الكل ، فستنتقل إلى الخطوة 3", + "applyForVacationRule": "طلب تطبيق قواعد الإجازات", + "step1": "الخطوة 1", + "step2": "الخطوة 2", + "step3": "الخطوه 3", + "message": "رسالة", + "writeAMessage": "اكتب رسالة", + "notificationReassign": "إعادة توجيه الإشعار", + "selectEmployee": "حدد الموظف", + "searchEmployeeForReplacement": "ابحث عن موظف بديل", + "searchForEmployee": "ابحث عن موظف", + "pleaseSpecifyEndTime": "الرجاء تحديد وقت الانتهاء", + "pleaseSelectNotificationReassign": "يرجى تحديد إعادة تعيين الإخطار", + "pleaseSelectEmployeeForReplacement": "الرجاء تحديد موظف للاستبدال", + "pleaseSelectAction": "الرجاء تحديد الإجراء", + "pleaseSelectDate": "الرجاء تحديد التاريخ", + "todayAttendance": "حضور اليوم", + "viewAttendance": "عرض الحضور", + "teamMembers": "أعضاء الفريق", + "profileDetails": "الملف الشخصي", + "noResultsFound": "لم يتم العثور على نتائج", + "searchBy": "بحث بواسطة", + "myTeamMembers": "أعضاء فريقي", + "save": "حفظ", + "TurnNotificationsFor": "تفعيل الاشعارات", + "worklistSettings": "اعدادات الاشعارات", + "absenceType": "نوع الغياب", + "absenceCategory": "تصنيف الغياب", + "days": "أيام", + "hours": "ساعات", + "approvalStatus": "حالة الموافقة", + "absenceStatus": "حالة الغياب", + "subordinateLeave": "إجازات الموظفين التابعين", + "numberDays": "عدد الأيام", + "poweredBy": "بدعم من", + "cloudSolutions": "الحلول السحابية", + "selectTemplate": "حدد قالب", + "myPostedAds": "إعلاناتي المنشورة", + "browseCategories": "تصفح الفئات", + "searchItems": "عناصر البحث", + "offerAndDiscounts": "العروض والخصومات", + "offerValid": "العرض ساري", + "offerExpired": "انتهى العرض", + "whatAreYouOffering": "ما الذي تعرضه؟", + "selectCategory": "اختر الفئة", + "inProgress": "قيد التنفيذ", + "locked": "مقفل", + "addDetails": "أضف التفاصيل", + "reviewAndSell": "المراجعة والنشر للبيع", + "itemTitle": "عنوان البند", + "itemCondition": "حالة السلعة", + "used": "مستعمل", + "region": "منطقة", + "selectRegion": "اختر المنطقة", + "itemPrice": "سعر السلعة", + "itemPhotos": "صور السلعة", + "itemInfo": "معلومات العنصر", + "uploadAttachment": "تحميل المرفق", + "selectFromGalleryOrOpenCamera": + "اختر صورة من المعرض أو التقط صورة بالكاميرا", + "openCamera": "فتح\nالكاميرا", + "uploadFromGallery": "تحميل من\nملفات الجهاز", + "name": "الأسم", + "email": "ايميل", + "noHistoryAvailable": "لايوجد سجل بيانات سابقة ", + "purchaseRequisition": "طلب شراء", + "moveOrder": "طلب تغيير", + "humanResource": "الموارد البشرية", + "purchaseOrder": "أمر شراء", + "ITGForms": "ITG نماذج", + "itemCreation": "إنشاء صنف", + "stamp": "ختم", + "addFavoriteList": "هل تريد اضافة {name} لقائمة المفضله", + "feedbackUserExperience": "هذا للحصول على تعليقات حول تجربة المستخدم", + "rateUI": "كيف تقيّم واجهة التطبيق؟", + "rateUI2": "ما مدى رضاك عن هذا التطبيق؟", + "submitSurvey": "ارسال الاستبيان", + "typeHere": "اكتب هنا", + "infoDetail": "تفاصيل المعلومات", + "amount_detail": "تفاصيل المبلغ", + "currentBalance": "الرصيد الحالي", + "currentLeaveBalance": "رصيد الإجازات الحالي", + "calculatedDays": "الأيام المحتسبة", + "totalDays": "مجموع الأيام", + "usedBalance": "المستخدم", + "infants": "رضيع", + "child": "طفل", + "adult": "بالغ", + "updateMember": "هل انت متأكد تريد تحديث بيانات هذا العضو؟", + "fieldIsEmpty": "'{data}' الحقل فارغ. الرجاء التحديد", + "pleaseEnterComments": "الرجاء إدخال التعليقات", + "skip": "يتخطى", + "typeCurrentPasswordBelow": "اكتب كلمة المرور الحاليه", + "currentPassword": "كلمة المرور الحاليه", + "concurrentReports": "التقارير المتزامنه", + "EnterNewAddressMoved": "أدخل عنوان جديد إذا كنت قد انتقلت", + "CorrectAddress": "تصحيح أو تعديل هذا العنوان", + "SelectChangeWantToMake": " حدد نوع التغيير الذي تريد القيام به.", + "profile": { + "reset_password": { + "label": "إعادة تعيين كلمة المرور", + "username": "اسم المستخدم", + "password": "كلمة المرور", + }, + "profileCompletionPer": "استكمال الملف الشخصي", + "completeProfile": "استكمال الملف الشخصي", + "personalInformation": "معلومات شخصية", + "basicDetails": "تفاصيل أساسية", + "address": "العنوان", + "contactDetails": "بيانات التواصل", + "familyDetails": "تفاصيل عائلية", + "effectiveDate": "تاريخ سريان التغيير", + "country": "دولة", + }, + "clicked": { + "zero": "You clicked {} times!", + "one": "You clicked {} time!", + "two": "You clicked {} times!", + "few": "You clicked {} times!", + "many": "You clicked {} times!", + "other": "You clicked {} times!", + }, + "gender": { + "male": "Hi man ;) ", + "female": "Hello girl :)", + "with_arg": {"male": "Hi man ;) {}", "female": "Hello girl :) {}"}, }, - "profileCompletionPer": "Profile Completion", - "completeProfile": "Complete Profile", - "personalInformation": "Personal Information", - "basicDetails": "Basic Details", + "reset_locale": "إعادة ضبط اللغة", + "chat": "دردشة", + "mychats": "دردشاتي", + "advancedSearch": "بحث متقدم", + "openNot": "الإشعارات المفتوحة", + "fyi": "إشعارات للاطلاع", + "toDo": "إشعارات تتطلب إجراء", + "all": "جميع الإشعارات", + "meNot": "الإشعارات الصادرة مني", + "view": "عرض", + "fromUserName": "من", + "sentDate": "تاريخ الإرسال", + "itemTypeDisplayName": "اسم العرض", + "none": "بدون", + "createNewChat": "إنشاء محادثة جديدة", + "brainMarathon": "ماراثون الدماغ", + "contestTopicAbout": "سيكون موضوع المسابقة حول:", + "gameDate": "تاريخ اللعبة:", + "gameTime": "وقت اللعب:", + "joinMarathon": "انضم إلى ماراثون", + "joinDemoMarathon": "انضم إلى الماراثون التجريبي", + "demo": "تجريبي", + "minutes": "الدقائق", + "seconds": "ثواني", + "note": "ملحوظة:", + "demoMarathonNoteP1": + "يمكنك لعب ماراثون العرض لتتعلم كيف يعمل. يمكنك الانضمام إلى ماراثون", + "demoMarathonNoteP2": "خمس دقائق", + "demoMarathonNoteP3": "قبل الوقت الفعلي.", + "sponsoredBy": "برعاية:", + "question": "سؤال", + "marathoners": "المشاركون في الماراثون", + "marathoner": "مشارك في الماراثون", + "prize": "جائزة:", + "winnerSelection": "اختيار الفائز", + "qualifiers": "تصفيات", + "qualifier": "المؤهل", + "getReadyForContest": "استعد للمسابقة القادمة:", + "winnerSelectedRandomly": "سيتم اختيار الفائز عشوائيًا من بين المتأهلين.", + "fingersCrossed": "نتمنى لك التوفيق!", + "congrats": "مبروك !!!", + "allQuestionsCorrect": "لقد أجبت على جميع الأسئلة بشكل صحيح.", + "otp": "OTP", + "verification": "تَحَقّق", + "resend": "إعادة إرسال", + "codeExpire": "انتهت صلاحية رمز التحقق", + "typeheretoreply": "اكتب هنا للرد", + "favorite": "مفضلتي", + "searchfromchat": "البحث من الدردشة", + "yourAnswerCorrect": "إجابتك صحيحة", + "youMissedTheQuestion": + "نفد منك الوقت. أنت خارج اللعبة. لكن يمكنك الاستمرار وكمشاهد.", + "wrongAnswer": + "إجابتك غير صحيحة. أنت خارج اللعبة. لكن يمكنك الاستمرار وكمشاهد.", + "oops": "أوه!!!", + "winner": "الفائز", + "youWantToLeaveMarathon": + "هل أنت متأكد أنك تريد العودة؟ سوف تخرج من المسابقة.", + "ourSponsor": "راعينا:", + "startingIn": "يبدأ في", + "youAreOutOfContest": "أنت خارج المسابقة.", + "winners": "الفائزون", + "expireAfter": "تنتهي بعد", + "oneWeek": "أسبوع واحد", + "twoWeek": "أسبوعان", + "noUpcoming": "لا توجد مسابقات قادمة", + "fakeLocation": + "تم رصد محاولة استخدام موقع جغرافي غير حقيقي. يُعد ذلك مخالفة، وقد تم إشعار إدارة الموارد البشرية.", + "noWinner": "لم يفز أحد اليوم.", + "myTeam": "فريقي", + "youCanPlayDemo": "لكن يمكنك لعب العرض", + "group": "مجموعة", + "searchGroup": "البحث عن مجموعة", + "connectHmgWifi": "قم بتوصيل HMG WIFI", + "connectedHmgWifi": "متصل بشبكة HMG Wi-Fi", + "itgForms": "نماذج (ITG)", + "resetAdPassword": "إعادة تعيين كلمة مرور AD", + "myDocuments": "مستنداتي", + "requiredDocuments": "المستندات المطلوبة", + "optionalDocuments": "المستندات الاختيارية", + "allDocuments": "كافة المستندات", + "expiredDocuments": "المستندات منتهية الصلاحية", + "missingDocuments": "مستندات مفقودة", + "uploadedDocuments": "المستندات التي تم تحميلها", + "addAtLeastOneAttachment": "الرجاء إضافة مرفق واحد على الأقل.", + "pleaseClickButtonToJoinMarathon": + "الرجاء الضغط على الزر أدناه للانضمام إلى الماراثون", + "youCannotJoinTheMarathon": + "لا يمكنك الانضمام إلى الماراثون لأنك تجاوزت الحد الزمني", + "open": "فتح", + "paymentRequest": "طلب الدفع", + "paymentDetails": "تفاصيل الدفع", + "requestNo": "رقم الطلب", + "requesterEmpNum": "رقم الموظف الذي قدم الطلب", + "requesterEmpName": "اسم الموظف مقدم الطلب", + "prepareEmpName": "اسم الموظف المُعدّ للطلب", + "requesterPositionName": "اسم الوظيفة لمقدم الطلب", + "preparePositionName": "المسمى الوظيفي لمُعدّ الطلب", + "requesterPayrollName": "اسم مقدم الطلب", + "payingORGName": "اسم الجهة الدافعة", + "requestAmount": "مبلغ الطلب", + "typeofPayment": "نوع الدفع", + "beneficiaryDetails": "تفاصيل المستفيد", + "beneficiaryName": "اسم المستفيد", + "idIqama": "رقم الهوية الوطنية أو الإقامة", + "beneficiaryBankName": "بنك المستفيد", + "sadadNumber": "رقم سداد", + "beneficiaryIBAN": "رقم IBAN للمستفيد", + "purchaseOrders": "أوامر الشراء", + "approvalDate": "تاريخ الموافقة", + "pOAmount": "مبلغ الطلب", + "versionStatus": "حالة الإصدار", + "supplierNo": "رقم المورد", + "general": "عام", + "requesterOperatingUnit": "وحدة تشغيل مقدم الطلب", + "prepareEmpNum": "الرقم الوظيفي لمُعدّ الطلب", + "supplierInfo": "معلومات المورد", + "supplierAcNo": "رقم حساب المورد", + "supplierAcName": "اسم حساب المورد", + "supplierIBAN": "رقم IBAN للمورد", + "supplierCRNo": "رقم السجل التجاري", + "suppliedAcNo": "رقم الحساب المقدم", + "patientRefundInvoice": "فاتورة استرداد مبلغ للمريض", + "patientNumber": "رقم المريض", + "patientName": "اسم المريض", + "invoiceDate": "تاريخ الفاتورة", + "refundInvoice": "فاتورة الاسترداد", + "hospitalClinic": "المستشفى / العيادة", + "graphicalAnalysis": "التحليل البياني", + "itemHistoryAnalysis": "تحليل سجل الصنف", + "pOno": "رقم أمر الشراء", + "oprUnit": "وحدة التشغيل", + "qtyOrdered": "الكمية المطلوبة", + "qtyReceived": "الكمية المستلمة", + "bonusQty": "الكمية المجانية", + "balQty": "الكمية المتبقية", + "videoCall": "مكالمة فيديو", + "addUsers": "إضافة مستخدمين إلى المجموعة", + "admin": "مشرف", + "areYouSureWantTodelete": "هل أنت متأكد أنك تريد الحذف؟", + "confirmGrantMazayaAccess": + "هل أنت متأكد أنك تريد منح صلاحية مزايا لـ \"{}\"؟", + "confirmRevokeMazayaAccess": + "هل أنت متأكد أنك تريد إلغاء صلاحية مزايا لـ \"{}\"؟", + "yes": "نعم", + "no": "لا", + "mazayaInviteInstructions": + "يرجى تحميل تطبيق مهمم من الرابط أعلاه واستخدام بيانات الاعتماد التالية لتسجيل الدخول", + "cameraPermissionRequiredToScan": + "يرجى منح صلاحية الكاميرا لمسح رمز الاستجابة السريعة", + "cameraPermissionPermanentlyDenied": + "يرجى تفعيل صلاحية الكاميرا من إعدادات التطبيق > الصلاحيات", + "openSettings": "فتح الإعدادات", + "nationalIdOrIqamaFallback": "رقم الهوية الوطنية أو رقم الإقامة الخاص بك", + "Attendance": "الحضور", + "audioCall": "مكالمة صوتية", + "editGroups": "تعديل المجموعة", + "enterGroupName": "يرجى إدخال اسم المجموعة الصحيح", + "enterGroupNamePlease": "يرجى إدخال اسم المجموعة", + "groupMembers": "أعضاء المجموعة", + "groupName": "اسم المجموعة", + "groupNameshouldbe": "يجب أن يتكون اسم المجموعة من 10 أحرف على الأقل", + "manage": "إدارة", + "manageGroup": "إدارة المجموعة", + "members": "الأعضاء", + "searchByUserName": "البحث بواسطة اسم المستخدم", + "shareScreen": "مشاركة الشاشة", + "start": "بدء", + "about": "عن", + "explore": "استكشاف", + "mazaya": "مزايا", + "benefits": "المزايا", + "mazayaDesc": "اكتشف الخصومات والعروض الخاصة المتاحة للموظفين", + "viewallofferMazaya": "عرض جميع عروض مزايا", + "buyerName": "اسم المشتري", + "buyerNumber": "رقم المشتري", + "highestBidder": "أعلى مزايد", + "remarks": "ملاحظات", + "faHeader": "بيانات رأس طلب الأصول الثابتة", + "bookTypeCode": "رمز نوع الدفتر", + "categoryCode": "رمز الفئة", + "categoryGroup": "مجموعة الفئات", + "faLINES": "تفاصيل الأصول", + "assetNumber": "رقم الأصل", + "assetDescription": "وصف الأصل", + "barCodeNumber": "رقم الباركود", + "datePlaceInService": "تاريخ وضعه في الخدمة", + "serialNumber": "الرقم التسلسلي", + "disposedDate": "تاريخ الاستبعاد", + "netBookValue": "القيمة الدفترية الصافية", + "purchasedPrice": "سعر الشراء", + "usefulLife": "العمر الإنتاجي", + "yearsUsed": "سنوات الاستخدام", + "faRequest": "طلب استبعاد أصل ثابت", + "showMore": "عرض المزيد", + "ticketDetails": "تفاصيل التذكرة", + "currentTicketBalance": "رصيد التذكرة الحالي", + "ticketHistory": "سجل التذاكر", + "proceedBooking": "المتابعة إلى الحجز", + "courses": "الدورات التدريبية", + "course": "دورة", + "status": "الحالة", + "deadline": "الموعد النهائي", + "overdue": "متأخر", + "noCoursesAvailable": "لا توجد دورات متاحة", + "pullToRefresh": "اسحب للتحديث", + "courseUrlNotAvailable": "رابط الدورة غير متوفر", + "buyerDetails": "تفاصيل المشتري", + "etqanOVR": "الإبلاغ عن واقعة", + "etqanRequest": "طلبات الإبلاغ عن الوقائع", + "selectProject": "حدد المشروع", + "project": "مشروع", + "keen": "KEEN", + "reportIncident": "الإبلاغ عن الحادث", + "myIncidents": "حوادثي", + "incidentDetails": "تفاصيل الحادث", + "ticketNumber": "رقم التذكرة", + "ticketId": "معرف التذكرة", + "pleaseSelectProject": "الرجاء اختيار مشروع", + "viewAttachment": "عرض المرفق", + "parkingQr": "رمز QR لمواقف السيارات", + "startNow": "ابدأ الآن", + "destination_type": "نوع الوجهة", + "source_organization_name": "اسم الجهة المرسلة", + "destination_organization_name": "اسم الجهة المستقبلة", + "costCenter": "مركز التكلفة", + "priceSAR": "السعر (ريال سعودي)", + "amountSAR": "المبلغ (ريال سعودي)", + "amuLastThreeMonths": "AMU (آخر 3 أشهر)", + "mazayaTitle": "مزايا", + "mazayaAccessGranted": "تم منح صلاحية الوصول إلى مزايا", + "mazayaAccessGrantedDesc": + "أصبح لدى {} حق وصول نشط الآن. شارك رابط التنزيل أدناه ليتمكن من تثبيت تطبيق مهم وإكمال الإعداد.", + "accessIsNowActive": "تم تفعيل صلاحية الوصول", + "accessIsNowActiveDesc": + "يمكن لـ {} استخدام الرابط المرفق لتنزيل تطبيق مزايا ومتابعة الإعداد على جهازه.", + "dependentAccessActive": "صلاحية التابع مفعّلة", + "shareableAppDownloadLink": "رابط تنزيل التطبيق للمشاركة", + "shareableAppDownloadLinkDesc": + "أرسل هذا الرابط إلى {} ليتمكن من تنزيل تطبيق مزايا ومتابعة الإعداد.", + "downloadLink": "رابط التنزيل", + "shareDownloadLink": "مشاركة رابط التنزيل", + "copyLink": "نسخ الرابط", + "done": "تم", + "linkCopied": "تم نسخ الرابط بنجاح", + "mazayaAccessRevoked": "تم إلغاء صلاحية الوصول إلى مزايا", + "mazayaAccessRevokedDesc": + "تم إلغاء صلاحية وصول التابع إلى مزايا. لم يعد بإمكانه استخدام العروض أو تسجيل الدخول بالبصمة.", + "contactYourSponsor": "تواصل مع الموظف المسؤول عن التابع", + "contactYourSponsorDesc": + "اطلب من الموظف المسؤول عن التابع إعادة تفعيل صلاحية الوصول إلى مزايا من صفحة بيانات التابعين.", + "dependentAccessBlocked": "تم تعطيل صلاحية التابع", + "returnToSignIn": "العودة إلى تسجيل الدخول", + "allowMazayaAccess": "السماح باستخدام مزايا", + "revokeMazayaAccess": "إلغاء صلاحية استخدام مزايا", + "active": "نشط", + "noAccess": "لا توجد صلاحية وصول", + "offerDetails": "تفاصيل العرض", + "offerIdNotAvailable": "رقم العرض غير متوفر", + "unableToRedeemOffer": "تعذر الحصول على رابط العرض، يرجى المحاولة لاحقاً", + "errorRedeemingOffer": "حدث خطأ أثناء استخدام العرض", + "useOffer": "استخدام العرض", + "online": "عبر الإنترنت", + "inStore": "في المتجر", + "ksa": "المملكة", + "riyadh": "الرياض", + "noInstructionsAvailable": "لا توجد طريقة استخدام محددة.", + "contactInfo": "معلومات التواصل", + "allCategories": "الكل", + "noOffersAvailable": "لا توجد عروض متاحة", + "addDependents": "إضافة تابعين", + "myDependents": "التابعون", + "offDiscount": "خصم بقيمة {}", + "usageLabel": "الاستخدام: ", + "areYouSureWantToLogOut": "هل أنت متأكد من تسجيل الخروج؟", + "searchDependents": "البحث في التابعين", + "searchFamilyMembers": "البحث في أفراد العائلة", + "addAnotherUser": "إضافة مستخدم آخر", + "joinMazaya": "انضم إلى مزايا", + "joinMazayaSubtitle": + "استفد من العروض والخصومات الحصرية للموظفين في المطاعم والتسوق وغيرها.", + "continueAsEmployee": "المتابعة كموظف", + "continueAsEmployeeSubtitle": "سجّل الدخول باستخدام بيانات حسابك الوظيفي.", + "pleaseEnterNationalId": "الرجاء إدخال رقم الهوية الوطنية", + "pleaseSelectDob": "الرجاء تحديد تاريخ الميلاد", + "unableToRetrieveDependentInfo": "تعذر الحصول على معلومات التابع", + "failedToSendOtp": "فشل إرسال رمز التحقق", + "verificationCodeResent": "تم إعادة إرسال رمز التحقق", + "nationalId": "رقم الهوية الوطنية", + "addDependent": "إضافة تابع", + "stepVerify": "التحقق", + "stepBasic": "البيانات الأساسية", + "stepAdditional": "بيانات إضافية", + "findYourDependent": "البحث عن أحد التابعين", + "findYourDependentDesc": + "أدخل التفاصيل تماماً كما تظهر في الهوية الوطنية. سنقوم باسترداد السجل بأمان من مركز المعلومات الوطني (NHIC).", + "enter10DigitNationalId": "أدخل رقم الهوية المكون من 10 أرقام", + "nationalIdMustBe10Digits": "يجب أن يتكون رقم الهوية من 10 أرقام", + "dateFormatPlaceholder": "يوم / شهر / سنة", + "searchUser": "بحث عن المستخدم", + "dependentNotFoundNhic": + "لم يتم العثور على سجل لهذا التابع في مركز المعلومات الوطني", + "basicInfo": "المعلومات الأساسية", + "basicInfoDesc": + "بيانات الهوية المطلوبة المستردة من مركز المعلومات الوطني.", + "additionalInfo": "معلومات إضافية", + "additionalInfoDesc": "إضافة أو مراجعة بيانات الكفالة والأهلية.", + "select": "اختر", + "enterFieldPlaceholder": "أدخل {}", + "requiredField": "الحقل المطلوب", + "pleaseFillField": "الرجاء إدخال {}", + "reviewAndSubmit": "المراجعة والإرسال", + "reviewAndSubmitDesc": + "يرجى مراجعة تفاصيل التابع بعناية قبل تأكيد الإرسال.", + "arabicName": "الاسم بالعربية", + "relationship": "صلة القرابة", + "sponsor": "الموظف المسؤول عن التابع", + "dependentSponsorDetail": "بيانات الموظف المسؤول عن التابع", + "insuranceEligibility": "أهلية التأمين", + "relationshipStartDate": "تاريخ بدء العلاقة", + "dependentAddedSuccessfully": "تم إرسال الطلب بنجاح", + "genderMale": "ذكر", + "genderFemale": "أنثى", + "religionIslam": "الإسلام", + "back": "السابق", + "submitRequest": "إرسال الطلب", + "enterDependentDetailsToContinue": "أدخل تفاصيل التابع للمتابعة.", + "enterBasicDetailsDesc": "يرجى إدخال البيانات الأساسية للتابع.", + "locations": "الفروع والمواقع", + "availableOffers": "العروض المتاحة", + "selectOfferToRedeem": "اختر العرض الذي ترغب في استخدامه", + "viewOnMap": "عرض على الخريطة", + "showAllLocations": "عرض جميع الفروع ({})", + "searchBranches": "البحث عن الفروع أو المدن...", + "allCities": "الكل", + "allCitiesOption": "جميع المدن", + "noBranchesFound": "لم يتم العثور على فروع مطابقة", + "browseAllBranches": "تصفح جميع الفروع ({}) في مختلف المدن", + "branchesCount": "{} فرع", + "kmAway": "على بعد {} كم", + "dependentDetails": "تفاصيل التابع", + "keyDetails": "البيانات الأساسية", + "verified": "تم التحقق", + "idEnding": "رقم الهوية المنتهي بـ {}", + "servicesAndActions": "الخدمات والإجراءات", + "startDependentFlowsDesc": "بدء إجراءات التابع وإدارة الوصول من مكان واحد.", + "mazayaAccess": "الوصول إلى مزايا", + "accessOff": "معطل", + "allowDependentMazayaOffersDesc": + "السماح لـ {} باستخدام عروض مزايا بعد التحقق من هويته.", + "loginMethod": "طريقة تسجيل الدخول", + "nationalIdAndDob": "الهوية الوطنية وتاريخ الميلاد", + "sponsorOtp": "رمز التحقق المرسل إلى الموظف المسؤول عن التابع", + "revokingPreventsAccessDesc": + "إلغاء الوصول يمنع التابع من استخدام المزايا حتى تعيد السماح به مرة أخرى.", + "locationPermissionRequiredForAttendance": + "يجب منح إذن الموقع لتسجيل الحضور", + "locationServicesRequiredForAttendance": + "يجب تفعيل خدمة الموقع لتسجيل الحضور", + "pleaseProvideLocationPermission": "الرجاء منح إذن الموقع", + "microphoneAccessRequired": + "يحتاج التطبيق إلى إذن الوصول إلى الميكروفون لتسجيل الصوت.", + "shareAccessGuide": "مشاركة دليل الوصول", + "nationalIdOrIqamaNumber": "رقم الهوية الوطنية أو الإقامة", + "multipleCities": "مدن متعددة", + "filters": "الفلاتر", + "availability": "التوفر", + "chooseOneOrBoth": "اختر أحد الخيارين أو كليهما", + "sortBy": "الترتيب حسب", + "recommended": "الموصى بها", + "nearest": "الأقرب", + "highestDiscount": "الأعلى خصمًا", + "newest": "الأحدث", + "distance": "المسافة", + "fromYourCurrentLocation": "من موقعك الحالي", + "any": "الكل", + "minimumDiscount": "أقل نسبة خصم", + "reset": "إعادة تعيين", + "applyFilters": "تطبيق الفلاتر", + "distanceKm": "{} كم", + "discountPercentPlus": "{}%+", + "visitMerchantWebsite": "زيارة موقع التاجر", + "favoriteAddedSuccess": "تمت إضافة التاجر إلى المفضلة بنجاح", + "favoriteRemovedSuccess": "تمت إزالة التاجر من المفضلة بنجاح", + "favoriteError": "تعذّر تحديث المفضلة. يُرجى المحاولة مرة أخرى.", + "merchantWebsiteNotAvailable": "الموقع الإلكتروني للتاجر غير متاح", + "locationServicesRequiredForNearestOffers": + "فعّل خدمات الموقع لعرض العروض القريبة منك", + "locationPermissionRequiredForNearestOffers": + "اسمح للتطبيق بالوصول إلى موقعك لعرض العروض القريبة منك", + "mazayaDeals": "عروض مزايا", + "helloName": "مرحباً، {}", + "findABrandOrSomething": "ابحث عن علامة تجارية أو شيء بسيط", + "exploreYourBenefits": "استكشف مزاياك", + "theMazayaEdit": "اختيارات مزايا", + "exclusivelyYours": "حصرياً لك", + "aLittleExtraJustForMazayaMembers": "مزايا إضافية، خاصة بأعضاء مزايا.", + "seeAll": "عرض الكل", + "latestOnMazaya": "أحدث ما في مزايا", + "goodFoodGreatCompanyEvenBetterPerks": "طعام رائع. رفقة ممتعة. مزايا أفضل.", + "travelEssentials": "أساسيات السفر", + "fromEverydayCareToYourNextAdventure": + "من العناية اليومية إلى مغامرتك القادمة.", + "homeAndKitchen": "المنزل والمطبخ", + "curatedPicksForYourHomeAndKitchen": "اختيارات مميزة لمنزلك ومطبخك.", + "discover": "اكتشف", + "saved": "المحفوظات", + "myFamily": "عائلتي", + "educationAndTraining": "التعليم والتدريب", + "foodsAndDrinks": "الأطعمة والمشروبات", + "travelAndEntertainment": "السفر والترفيه", + "beautyAndFitness": "الجمال واللياقة", + "healthcare": "الرعاية الصحية", + "favoriteMerchant": "العروض المفضلة", + "favoriteOffers": "العروض المفضلة", + "goodToKnow": "معلومات مهمة", + "goodToKnowDesc": + "احتفظ بعضوية مزايا في متناول يدك. تحقق من توفر التاجر والأنشطة المؤهلة والشروط الكاملة قبل الحجز.", + "termsAndConditions": "الشروط والأحكام", + "haveAQuestionAboutOffer": "هل لديك سؤال حول هذا العرض؟", + "getHelp": "الحصول على المساعدة", + "redeemOffer": "استرداد العرض", + "merchantContact": "بيانات التواصل مع التاجر", + "website": "الموقع الإلكتروني", + "phone": "الهاتف", + "viewAll": "عرض الكل", + "moreCitiesCount": "+ {} مدن أخرى", + "findAnEscapeOrAnExperience": "ابحث عن تجربة أو عطلة", + "allOffers": "جميع العروض", + "sampleAvailability": "حسب التوفر", + "offersCount": "{} عروض", + "mazayaExclusive": "حصري لمزايا", + "youAreAllCaughtUp": "لقد شاهدت كل العروض. المزيد قريباً.", + "selectCity": "اختر المدينة", + }; + static const Map _en_US = { + "mohemm": "Mohemm", + "english": "English", + "arabic": "عربي", + "login": "Login", + "pleaseEnterLoginDetails": "Please enter the detail below to login", + "username": "Username", + "password": "Password", + "welcomeBack": "Welcome back", + "wouldYouLikeToLoginWithCurrentUsername": + "Would you like to login with current Username?", + "lastLoginDetails": "Last Login Details:", + "verificationType": "Verification Type:", + "pleaseVerify": "Please Verify", + "pleaseVerifyForBio": + "Please verify login with one of the following options", + "verifyThroughFace": "Verify Through Face", + "verifyThroughFingerprint": "Verify Through Fingerprint", + "verifyThroughSMS": "Verify Through SMS", + "verifyThroughWhatsapp": "Verify Through Whatsapp", + "useAnotherAccount": "Use Another Account", + "pleaseEnterTheVerificationCodeSentTo": + "Please enter the verification code sent to ", + "theVerificationCodeWillExpireIn": "The verification code will expire in ", + "goodMorning": "Good Morning", + "markAttendance": "Mark Attendance", + "timeLeftToday": "Time Left Today", + "checkIn": "Check In", + "workList": "Work List", + "leaveBalance": "Leave Balance", + "missingSwipes": "Missing Swipes", + "ticketBalance": "Ticket Balance", + "other": "Other", + "services": "Services", + "viewAllServices": "View All Services", + "monthlyAttendance": "Monthly Attendance", + "vacationRule": "Vacation Rule", + "vacationType": "Vacation Type", + "startDateT": "Start Date", + "endDateT": "End Date", + "workFromHome": "Work From Home", + "ticketRequest": "Ticket Request", + "viewAllOffers": "View All Offers", + "offers": "Offers & ", + "discounts": "Discounts", + "newString": "New", + "setTheNewPassword": "Set the new password", + "typeYourNewPasswordBelow": "Type your new password below", + "typeYourNewActiveDirectoryPasswordBelow": + "Type new active directory password below", + "confirmPassword": "Confirm Password", + "update": "Update", + "title": "Title", + "home": "Home", + "mySalary": "My Salary", + "createRequest": "Create Request", + "forgotPassword": "Forgot Password", + "employeeId": "Employee ID", + "loginCodeWillSentToMobileNumber": + "Please Enter your Employee ID, A login code will be sent to your mobile number", + "changePassword": "Change Password", + "ok": "OK", + "confirm": "Confirm", + "passwordChangedSuccessfully": "Password changed successfully", + "itemsForSale": "Items for Sale", + "attendanceDetails": "Attendance Details", + "order": "order", + "earlyOut": "Early Out", + "shortage": "Shortage", + "excess": "Excess", + "lateIn": "Late In", + "approvedCheckOut": "Approved Check Out", + "approvedCheckIn": "Approved Check In", + "actualCheckOut": "Actual Check Out", + "actualCheckIn": "Actual Check In", + "present": "PRESENT", + "pres": "present", + "shiftTime": "Shift Time", + "absent": "ABSENT", + "attendance": "Attendance", + "scheduleDays": "Schedule\nDays", + "offDays": "Off\nDays", + "nonAnalyzed": "Non\nAnalyzed", + "shortageHour": "Shortage\nHour", + "stats": "Stats", + "completed": "Completed", + "doNotUseRecentPassword": "Do not use recent password", + "atLeastOneLowercase": "At least one lowercase", + "atLeastOneUppercase": "At least one uppercase", + "atLeastOneNumeric": "At least one numeric", + "minimum8Characters": "Minimum 8 characters", + "doNotAddRepeatingLetters": "Do not add repeating letters", + "itShouldContainSpecialCharacter": + "It should not contain special characters", + "confirmPasswordMustMatch": "Confirm password must match", + "sms": "SMS", + "fingerPrint": "Fingerprint", + "face": "Face", + "whatsapp": "Whatsapp", + "reject": "Reject", + "approve": "Approve", + "generate": "Generate", + "cancel": "Cancel", + "requestedItems": "Requested Items", + "request": "Request", + "myRequest": "My Request", + "actions": "Actions", + "delegate": "Delegate", + "request_info": "Request Info", + "attachments": "Attachments", + "info": "Info.", + "employeeNumber": "Employee Number", + "assignmentNumber": "Assignment Number", + "employeeName": "Employee Name", + "scheduleDate": "Schedule Date", + "shiftType": "Shift Type", + "shift": "Shift", + "breakText": "Break", + "actualSwipeStart": "Actual Swipe Start", + "actualSwipeEnd": "Actual Swipe End", + "approvedSwipeStart": "Approved Swipe Start", + "approvedSwipeStartReason": "Approved Swipe Start Reason", + "approvedSwipeEnd": "Approved Swipe End", + "approvedSwipeEndReason": "Approved Swipe End Reason", + "from": "From", + "to": "To", + "sent": "Sent", + "closed": "Closed", + "id": "ID", + "responder": "Responder", + "jobTitle": "Job Title", + "grade": "Grade", + "jobCategory": "Job Category", + "category": "Category", + "employeeEmailAddress": "Employee Email Address", + "payrollBranch": "Payroll Branch", + "yourChangeHasBeenSavedSuccessfully": + "Your change has been saved successfully", + "code": "Code", + "unit": "Unit", + "quantity": "Quantity", + "dateRequired": "Date Required", + "lineStatus": "Line Status", + "statusDate": "Status Date", + "transactionType": "Transaction Type", + "operatingUnit": "Operating Unit", + "organizationCode": "Organization Code", + "organization": "Organization", + "fromSubInventory": "From Sub Inventory", + "fromLocator": "From Locator", + "toSubInventory": "To Sub Inventory", + "toLocator": "To Locator", + "shipToLocator": "Ship To Locator", + "itemHistory": "Item History", + "mfg": "MFG", + "lineType": "Line Type", + "price": "Price", + "lineAmount": "Line Amount", + "lineDiscount": "Line Discount %", + "needByDate": "Need By Date", + "promisedDate": "Promised Date", + "deliverToLocation": "Deliver To Location", + "requisitionNumber": "Requisition Number", + "requester": "Requester", + "subject": "Subject", + "quotationAnalysis": "Quotation Analysis", + "description": "Description", + "pleaseEnterDescription": "Please enter description", + "supplier": "Supplier", + "site": "Site", + "buyer": "Buyer", + "preparer": "Preparer", + "creationDate": "Creation Date", + "shipToLocation": "Ship To Location", + "quotationNumber": "Quotation Number", + "quotationDate": "Quotation Date", + "paymentTerms": "Payment Terms", + "currency": "Currency", + "grossAmount": "Gross Amount", + "discountAmount": "Discount Amount", + "customDuty": "Custom Duty", + "shipHandle": "Ship Handle", + "otherCharges": "Other Charges", + "totalPOAmountWithVAT": "Total PO Amount With VAT", + "totalPOAmountInWords": "Total PO Amount In Words", + "requestNumber": "Request Number", + "uom": "UOM", + "operatingCode": "Operating Code", + "poNumber": "PO Number", + "revision": "Revision", + "quantityOrdered": "Quantity Ordered", + "quantityReceived": "Quantity Received", + "bonusQuantity": "Bonus Quantity", + "purchasePrice": "Purchase Price", + "discountPer": "Discount %", + "balanceQuantity": "Balance Quantity", + "netPrice": "Net Price", + "closureStatus": "Closure Status", + "quotationNetPrice": "Quotation Net Price", + "quotationUOM": "Quotation UOM", + "quotationQty": "Quotation Qty", + "itemCode": "item Code", + "vendorName": "Vendor Name", + "quotationMFGPartNumber": "Quotation MFG Part Number", + "quotationDeliveryDate": "Quotation Delivery Date", + "quotationBonusQuantity": "Quotation Bonus Quantity", + "quotationLineTotal": "Quotation Line Total", + "rfqUOM": "RFQ UOM", + "rfqQty": "RFQ Qty", + "rfqNumber": "RFQ Number", + "msg": "Hello {} in the {} world ", + "msg_named": "{} are written in the {lang} language", + "clickMe": "Click me", + "human": "Human", + "resources": "Resources", + "details": "Details", + "noDataAvailable": "No Data Available", + "productName": "Product Name", + "productDescription": "Product Description", + "unitPrice": "Unit Price", + "manufacturerName": "Manufacturer Name", + "manufacturerPartName": "Manufacturer Part Name", + "supplierName": "Supplier Name", + "supplierContact": "Supplier Contact", + "chargeToPatient": "Charge To Patient", + "justification": "Justification", + "itemDescription": "Item Description", + "groupCode": "Group Code", + "primaryUOM": "Primary UOM", + "subgroupDescription": "Subgroup Description", + "subgroupCode": "Subgroup Code", + "groupDescription": "Group Description", + "templateName": "Template Name", + "itemCreationStatus": "Item Creation Status", + "standardizationApprovalStatus": "Standardization Approval Status", + "standardizationApprovalRejectionReason": + "Standardization Approval Rejection Reason", + "analyzedBy": "Analyzed By", + "approvedDate": "Approved Date", + "itemType": "Item Type", + "relatedTo": "Related To", + "requestDate": "Request Date", + "analyzedDate": "Analyzed Date", + "urgent": "Urgent", + "requestDetails": "Request Details", + "approvalLevel": "Approval Level", + "requesterDetails": "Requester Details", + "myAttendance": "My Attendance", + "workOnBreak": "Work On Break", + "next": "Next", + "apply": "Apply", + "mobile": "Mobile", + "year": "Year", + "month": "Month", + "day": "Day", + "completingYear": "We appreciate you for completing the service of", "address": "Address", - "contactDetails": "Contact Details", - "familyDetails": "Family Members", - "effectiveDate": "Effective Date", - "country": "Country" - }, - "clicked": { - "zero": "You clicked {} times!", - "one": "You clicked {} time!", - "two": "You clicked {} times!", - "few": "You clicked {} times!", - "many": "You clicked {} times!", - "other": "You clicked {} times!" - }, - "gender": { - "male": "Hi man ;) ", - "female": "Hello girl :)", - "with_arg": { - "male": "Hi man ;) {}", - "female": "Hello girl :) {}" - } - }, - "reset_locale": "Reset Language", - "chat": "Chat", - "mychats": "My Chats", - "createNewChat": "Create New Chat", - "brainMarathon": "Brain Marathon", - "contestTopicAbout": "Contest Topic will be about:", - "gameDate": "Game Date:", - "gameTime": "Game Time:", - "joinMarathon": "Join Marathon", - "joinDemoMarathon": "Join Demo Marathon", - "demo": "Demo", - "minutes": "Minutes", - "seconds": "Seconds", - "note": "Note:", - "demoMarathonNoteP1": "You can play the demo Marathon to learn how it works. You can join the Marathon", - "demoMarathonNoteP2": "5 Minutes", - "demoMarathonNoteP3": "before the actual time.", - "sponsoredBy": "Sponsored By:", - "question": "Question", - "marathoners": "Marathoners", - "marathoner": "Marathoner", - "prize": "Prize:", - "advancedSearch": "Advanced Search", - "openNot": "Open Notifications", - "fyi": "FYI Notifications", - "toDo": "To Do Notifications", - "all": "All Notifications", - "meNot": "Notifications from Me", - "view": "View", - "fromUserName": "From User Name", - "sentDate": "Sent Date", - "itemTypeDisplayName": "Item Type Display Name", - "none": "None", - "winnerSelection": "Winner Selection", - "qualifiers": "Qualifiers", - "qualifier": "Qualifier", - "getReadyForContest": "Get Ready for the coming contest:", - "winnerSelectedRandomly": "The winner will be selected randomly among the qualifiers.", - "fingersCrossed": "Fingers Crossed!!!", - "congrats": "Congratulations!!!", - "otp": "OTP", - "verification": "Verification", - "resend": "Resend", - "codeExpire": "The verification code has been expired", - "allQuestionsCorrect": "You have answered all questions correct", - "typeheretoreply": "Type here to reply", - "favorite": "My Favorites", - "searchfromchat": "Search from chat", - "yourAnswerCorrect": "Your answer is correct", - "youMissedTheQuestion": "You ran out of time. You are out of the game. But you can continue as a viewer.", - "wrongAnswer": "Your answer is Incorrect. You are out of the game. But you can continue as a viewer.", - "oops": "Ooopsss!!!!", - "winner": "WINNER", - "youWantToLeaveMarathon": "Are you sure you want to go back? You will be out of the contest.", - "ourSponsor": "Our Sponsor:", - "startingIn": "Starting in", - "youAreOutOfContest": "You are out of the contest.", - "winners": "WINNERS!!!", - "expireAfter": "Expires After", - "oneWeek": "1 Week", - "twoWeek": "2 Week", - "noUpcoming": "There is no upcoming", - "fakeLocation": "We traced out that you try to use a fake location! This is considered a violation, and HR has been notified.", - "noWinner": "Sad! No one won today.", - "myTeam": "My Team", - "youCanPlayDemo": "But you can play demo", - "group": "Groups", - "searchGroup": "Search Group", - "connectHmgWifi": "Connect HMG WIFI", - "connectedHmgWifi": "Connected HMG WIFI", - "itgForms": "ITG Forms", - "resetAdPassword": "Reset AD Password", - "myDocuments": "My Documents", - "requiredDocuments": "Required Documents", - "optionalDocuments": "Optional Documents", - "allDocuments": "All\nDocuments", - "expiredDocuments": "Expired\nDocuments", - "missingDocuments": "Missing\nDocuments", - "uploadedDocuments": "Uploaded\nDocuments", - "manage": "Manage", - "members": "Members", - "areYouSureWantTodelete": "Are you sure want to delete?", - "confirmGrantMazayaAccess": "Are you sure you want to grant Mazaya access to \"{}\"?", - "confirmRevokeMazayaAccess": "Are you sure you want to revoke Mazaya access to \"{}\"?", - "yes": "Yes", - "no": "No", - "mazayaInviteInstructions": "Please download the MoheM app from the above link and use the following credentials to login", - "cameraPermissionRequiredToScan": "Please grant camera permission to scan the QR code", - "cameraPermissionPermanentlyDenied": "Please allow camera permission from the app settings > Permissions", - "openSettings": "Open Settings", - "nationalIdOrIqamaFallback": "Your National ID or Iqama Number", - "groupMembers": "Group Members", - "manageGroup": "Manage Group", - "admin": "Admin", - "addUsers": "Add users to the group", - "editGroups": "Edit Group", - "groupNameshouldbe": "Group name should be minimum 10 character long", - "enterGroupName": "Please enter valid group Name", - "groupName": "Group Name", - "enterGroupNamePlease": "Please enter group name", - "audioCall": "Audio Call", - "videoCall": "Video Call", - "shareScreen": "Share Screen", - "searchByUserName": "Search By Username", - "userSearch": "User Search", - "userName": "User Name", - "userId": "UserID", - "open": "open", - "addAtLeastOneAttachment": "Please add at least one attachment.", - "pleaseClickButtonToJoinMarathon": "Press the button below to join the Marathon.", - "youCannotJoinTheMarathon": "You cannot join the Marathon because you have exceeded the time limit.", - "requesterOperatingUnit": "Requester Operating Unit", - "paymentRequest": "Pay Request", - "paymentDetails": "Payment Details", - "requestNo": "Request No", - "requesterEmpNum": "Requester Employee Num", - "requesterEmpName": "Requester Employee Name", - "prepareEmpName": "Prepare Employee Name", - "requesterPositionName": "Requester Position Name", - "preparePositionName": "Prepare Position Name", - "requesterPayrollName": "Requester Payroll Name", - "payingORGName": "Paying Organization Name", - "requestAmount": "Request Amount", - "typeofPayment": "Type of Payment", - "beneficiaryDetails": "Beneficiary Details", - "beneficiaryName": "Beneficiary Name", - "idIqama": "Saudi ID / Iqama", - "beneficiaryBankName": "Beneficiary Bank Name", - "sadadNumber": "Sadad Number", - "beneficiaryIBAN": "Beneficiary IBAN", - "purchaseOrders": "Purchase Orders", - "approvalDate": "Approval Date", - "pOAmount": "PO Amount", - "versionStatus": "Version Status", - "supplierNo": "Supplier No", - "general": "General", - "prepareEmpNum": "Prepare Employee Num", - "supplierInfo": "Supplier Information", - "supplierAcNo": "Supplier Account No", - "supplierAcName": "Supplier Account Name", - "supplierIBAN": "Supplier IBAN", - "supplierCRNo": "CR Number", - "suppliedAcNo": "Supplied Account No.", - "patientRefundInvoice": "Patient Refund Invoice", - "patientNumber": "Patient Number", - "patientName": "Patient Name", - "invoiceDate": "Invoice Date", - "refundInvoice": "Refund Invoice", - "hospitalClinic": "Hospital Clinic", - "graphicalAnalysis": "Graphical Analysis", - "itemHistoryAnalysis": "Item History Analysis", - "pOno": "P.O #", - "oprUnit": "Opr. Unit", - "qtyOrdered": "Qty. Ordered", - "qtyReceived": "Qty. Received", - "bonusQty": "Bonus Qty.", - "balQty": "Bal. Qty.", - "start": "Start", - "about": "About", - "explore": "Explore", - "mazaya": "MAZAYA", - "benefits": "Benefits", - "mazayaDesc": "Discover special Discounts and offers available to Employees", - "viewallofferMazaya": "View All Offers", - "buyerName": "Buyer Name", - "buyerNumber": "Buyer Number", - "highestBidder": "Highest Bidder", - "remarks": "Remarks", - "faHeader": "FA Header Details", - "bookTypeCode": "Book Type Code", - "categoryCode": "Category Code", - "categoryGroup": "Category Group", - "faLINES": "Asset Details", - "assetNumber": "Asset Number", - "assetDescription": "Asset Description", - "barCodeNumber": "BarCode Number", - "datePlaceInService": "Date place In Service", - "serialNumber": "Serial Number", - "disposedDate": "Disposed Date", - "netBookValue": "Net Book Value", - "purchasedPrice": "Purchased Price", - "usefulLife": "Useful Life", - "yearsUsed": "Years Used", - "faRequest": "FA Disposal Request", - "showMore": "Show More", - "ticketDetails": "Ticket Details", - "currentTicketBalance": "Current Ticket Balance", - "ticketHistory": "Ticket History", - "proceedBooking": "Proceed For Booking", - "courses": "Courses", - "course": "Course", - "status": "Status", - "deadline": "Deadline", - "overdue": "Overdue", - "noCoursesAvailable": "No Courses Available", - "pullToRefresh": "Pull to refresh", - "courseUrlNotAvailable": "Course URL not available", - "buyerDetails": "Buyer Details", - "etqanOVR": "Report An Incident", - "etqanRequest": "Incident Requests", - "selectProject": "Select Project", - "project": "Project", - "keen": "Keen", - "reportIncident": "Report Incident", - "myIncidents": "My Incidents", - "incidentDetails": "Incident Details", - "ticketNumber": "Ticket Number", - "ticketId": "Ticket ID", - "pleaseSelectProject": "Please select a project", - "viewAttachment": "View Attachment", - "parkingQr": "Parking QR", - "startNow": "Start Now", - "destination_type": "Destination Type", - "source_organization_name": "Source Organization Name", - "destination_organization_name": "Destination Organization Name", - "costCenter": "Cost Center", - "priceSAR": "Price (SAR)", - "amountSAR": "Amount (SAR)", - "amuLastThreeMonths": "AMU (Last 3 months)", - "mazayaTitle": "Mazaya", - "mazayaAccessGranted": "Mazaya access granted", - "mazayaAccessGrantedDesc": "{} now has active access. Share the download link below so they can install the Mohem app and complete setup.", - "accessIsNowActive": "Access is now active", - "accessIsNowActiveDesc": "{} can use the provided link to download the Mazaya app and continue setup on their device.", - "dependentAccessActive": "Dependent access active", - "shareableAppDownloadLink": "Shareable app-download link", - "shareableAppDownloadLinkDesc": "Send this link to {} so they can download the Mazaya app and continue setup.", - "downloadLink": "Download link", - "shareDownloadLink": "Share Download Link", - "copyLink": "Copy Link", - "done": "Done", - "linkCopied": "Link copied to clipboard", - "mazayaAccessRevoked": "Mazaya Access", - "mazayaAccessRevokedDesc": "You are not authorized to access the Mazaya Program.", - "contactYourSponsor": "Contact your sponsor", - "contactYourSponsorDesc": "Ask your sponsor to allow Mazaya access again from Dependent Details. Only the sponsor can restore access.", - "dependentAccessBlocked": "Dependent access blocked", - "returnToSignIn": "Return to Sign In", - "allowMazayaAccess": "Allow Mazaya Access", - "revokeMazayaAccess": "Revoke Mazaya Access", - "active": "Active", - "noAccess": "No access", - "offerDetails": "Offer Details", - "offerIdNotAvailable": "Offer ID not available", - "unableToRedeemOffer": "Unable to redeem offer, please try again later", - "errorRedeemingOffer": "An error occurred while redeeming offer", - "useOffer": "Use Offer", - "online": "Online", - "inStore": "In Store", - "ksa": "KSA", - "riyadh": "Riyadh", - "noInstructionsAvailable": "No instructions available.", - "contactInfo": "Contact Information", - "allCategories": "All", - "noOffersAvailable": "No offers available", - "addDependents": "Add Dependents", - "myDependents": "My Dependents", - "offDiscount": "{} Off", - "usageLabel": "Usage: ", - "areYouSureWantToLogOut": "Are you sure you want to log out?", - "searchDependents": "Search dependents", - "searchFamilyMembers": "Search family members", - "addAnotherUser": "Add another user", - "joinMazaya": "Join Mazaya", - "joinMazayaSubtitle": "Get the best offers and exclusive deals across dining, shopping, and lifestyle rewards.", - "continueAsEmployee": "Continue as an employee", - "continueAsEmployeeSubtitle": "Sign in with your employee username and password.", - "pleaseEnterNationalId": "Please enter National ID", - "pleaseSelectDob": "Please select Date of Birth", - "unableToRetrieveDependentInfo": "Unable to retrieve dependent information", - "failedToSendOtp": "Failed to send verification code", - "verificationCodeResent": "Verification code resent", - "nationalId": "National ID", - "addDependent": "Add Dependent", - "stepVerify": "Verify", - "stepBasic": "Basic", - "stepAdditional": "Additional", - "findYourDependent": "Find your dependent", - "findYourDependentDesc": "Enter the details exactly as they appear on the National ID. We'll securely retrieve the record from NHIC.", - "enter10DigitNationalId": "Enter 10-digit National ID", - "nationalIdMustBe10Digits": "National ID must be 10 digits", - "dateFormatPlaceholder": "DD / MM / YYYY", - "searchUser": "Search User", - "dependentNotFoundNhic": "Sorry, error while getting dependent info from NHIC", - "basicInfo": "Basic Info", - "basicInfoDesc": "Required identity details fetched from NHIC.", - "additionalInfo": "Additional Info", - "additionalInfoDesc": "Add or review sponsorship and eligibility details.", - "select": "Select", - "enterFieldPlaceholder": "Enter {}", - "requiredField": "Required field", - "pleaseFillField": "Please fill {}", - "reviewAndSubmit": "Review & Submit", - "reviewAndSubmitDesc": "Please review the dependent details carefully before submitting.", - "arabicName": "Arabic Name", - "relationship": "Relationship", - "sponsor": "Sponsor", - "dependentSponsorDetail": "Dependent Sponsor Detail", - "insuranceEligibility": "Insurance Eligibility", - "relationshipStartDate": "Start Date", - "dependentAddedSuccessfully": "Dependent added successfully", - "genderMale": "Male", - "genderFemale": "Female", - "religionIslam": "Islam", - "back": "Back", - "submitRequest": "Submit", - "enterDependentDetailsToContinue": "Enter the dependent details to continue.", - "enterBasicDetailsDesc": "Please enter the dependent's basic identity details.", - "locations": "Locations", - "availableOffers": "Available Offers", - "selectOfferToRedeem": "Select an offer to use", - "viewOnMap": "View on map", - "showAllLocations": "Show all {} locations", - "searchBranches": "Search branches or cities...", - "allCities": "All", - "allCitiesOption": "All Cities", - "noBranchesFound": "No branches found", - "browseAllBranches": "Browse all {} branches across cities", - "branchesCount": "{} Branches", - "kmAway": "{} KM Away", - "dependentDetails": "Dependent Details", - "keyDetails": "Key details", - "verified": "Verified", - "idEnding": "ID ending {}", - "servicesAndActions": "Services & actions", - "startDependentFlowsDesc": "Start dependent flows and manage access from one place.", - "mazayaAccess": "Mazaya access", - "accessOff": "Off", - "allowDependentMazayaOffersDesc": "Allow {} to use Mazaya offers with her verified identity.", - "loginMethod": "Login method", - "nationalIdAndDob": "National ID & Date of Birth", - "sponsorOtp": "Sponsor OTP", - "revokingPreventsAccessDesc": "Revoking prevents all future dependent access until you allow it again.", - "locationPermissionRequiredForAttendance": "You need to give location permission to mark attendance", - "locationServicesRequiredForAttendance": "You need to enable location services to mark attendance", - "pleaseProvideLocationPermission": "Please provide location permission", - "microphoneAccessRequired": "The app needs microphone access to be able to record audio.", - "shareAccessGuide": "Share Access Guide", - "nationalIdOrIqamaNumber": "National ID or Iqama Number", - "multipleCities": "Multi-city", - "filters": "Filters", - "availability": "Availability", - "chooseOneOrBoth": "Choose one or both", - "sortBy": "Sort by", - "recommended": "Recommended", - "nearest": "Nearest", - "highestDiscount": "Highest discount", - "newest": "Newest", - "distance": "Distance", - "fromYourCurrentLocation": "From your current location", - "any": "Any", - "minimumDiscount": "Minimum discount", - "reset": "Reset", - "applyFilters": "Apply filters", - "distanceKm": "{} km", - "discountPercentPlus": "{}%+", - "visitMerchantWebsite": "Visit Merchant Website", - "merchantWebsiteNotAvailable": "Merchant website not available", - "locationServicesRequiredForNearestOffers": "You need to enable location services to show nearest offers", - "locationPermissionRequiredForNearestOffers": "You need to give location permission to show nearest offers", - "mazayaDeals": "Mazaya Deals", - "findABrandOrSomething": "Find a brand or a little something", - "exploreYourBenefits": "Explore your benefits", - "theMazayaEdit": "The Mazaya Edit", - "exclusivelyYours": "Exclusively yours", - "aLittleExtraJustForMazayaMembers": "A little extra, just for Mazaya members.", - "seeAll": "See all", - "latestOnMazaya": "Latest on Mazaya", - "goodFoodGreatCompanyEvenBetterPerks": "Good food. Great company. Even better perks.", - "travelEssentials": "Travel Essentials", - "fromEverydayCareToYourNextAdventure": "From everyday care to your next adventure.", - "homeAndKitchen": "Home & Kitchen", - "curatedPicksForYourHomeAndKitchen": "Curated picks for your home and kitchen.", - "discover": "Discover", - "saved": "Saved", - "myFamily": "My Family", - "educationAndTraining": "Education & Training", - "foodsAndDrinks": "Foods & Drinks", - "travelAndEntertainment": "Travel & Entertainment", - "beautyAndFitness": "Beauty & Fitness", - "healthcare": "Healthcare", - "favoriteAddedSuccess": "Added to favorites successfully", - "favoriteRemovedSuccess": "Removed from favorites successfully", - "favoriteError": "An error occurred while updating favorites", - "favoriteMerchant": "Favorite Offers", - "favoriteOffers": "Favorite Offers", - "goodToKnow": "Good to know", - "goodToKnowDesc": "Keep your Mazaya membership handy. Check the merchant's availability, eligible activities and full terms before you book.", - "termsAndConditions": "Terms & conditions", - "haveAQuestionAboutOffer": "Have a question about this offer?", - "getHelp": "Get help", - "redeemOffer": "Redeem offer", - "merchantContact": "Merchant contact", - "website": "Website", - "phone": "Phone", - "viewAll": "View all", - "moreCitiesCount": "+ {} more cities", - "findAnEscapeOrAnExperience": "Find an escape or an experience", - "allOffers": "All offers", - "sampleAvailability": "sample availability", - "offersCount": "{} offers", - "mazayaExclusive": "MAZAYA EXCLUSIVE", - "youAreAllCaughtUp": "You're all caught up. More little extras soon.", - "selectCity": "Select City", -}; -static const Map> mapLocales = {"ar_SA": _ar_SA, "en_US": _en_US}; + "phoneNumber": "Phone Number", + "businessGroup": "Business", + "Payroll": "Payroll", + "civilIdentityNumber": "Civil Identity Number", + "dateOfBirth": "Date of Birth", + "maritalStatus ": "Marital Status ", + "fullName": "Full Name", + "remove": "Remove", + "Attendance": "Attendance", + "submit": "Submit", + "submitAsAnonymous": "Submit as Anonymous", + "areYouSureYouWantToSubmit": "Are you sure you want to submit?", + "comments": "Comments", + "writeComment": "Write a comment", + "approversList": "Approvers List", + "yourRequestHasBeenSubmittedForApprovals": + "Your request has been submitted for approvals", + "monthlyPaySlip": "Monthly Pay Slip", + "particular": "Particular", + "earnings": "Earnings", + "deductions": "Deductions", + "paymentMethodName": "Payment Method Name", + "bankName": "Bank Name", + "branchCode": "Branch Code", + "accountNo": "Account No", + "summaryOfInformation": "Summary of Information", + "totalPayAmount": "Total Pay Amount", + "paymentInformation": "Payment Information", + "amount": "Amount", + "correctCurrentDatails": "correct or complete the current details", + "selectType": "Select the type of change you want to make", + "enterNewInfo": + "Enter new Information because of a real change to the current details (e.g because of a change in marital status)", + "endDate": "*End Date", + "removeThisMember": "Are You Sure You Want to Remove this Member?", + "wantUpdateThisMember": "Are You Sure You Want to Update this Member?", + "addNewFamilyMember": "Add New Family Member", + "addRow": "Add new row", + "pleaseSelect": "Please Select *", + "delete": "delete", + "add": "Add", + "edit": "Edit", + "myProfile": "My Profile", + "mowadhafhi": "Mowadhafi", + "searchAnnouncements": "Search Announcements", + "announcements": "Announcements", + "swipeRequest": "Swipe Request", + "serviceType": "Service Type", + "departmentName": "Department Name", + "selectDepartment": "Select Department", + "relatedSection": "Related Section", + "selectSection": "Select Section", + "relatedTopic": "Related Topic", + "selectTopic": "Select Topic", + "supportingDocument": "Supporting Document", + "mowadhafhiRequest": "Mowadhafi Request", + "ticketReference": "Ticket Reference", + "section": "Section", + "topic": "Topic", + "actionBy": "Action By", + "pending": "Pending", + "pendingTransactions": "Pending Transactions", + "selectRequestType": "Please select request type", + "dateFrom": "Date From", + "dateTo": "Date To", + "requestName": "Request Name", + "createdFor": "Created For", + "requestType": "Request Type", + "requestCreatedSuccessfully": "Request created successfully", + "search": "Search", + "filterEnterPrDetailsHere": "Enter PR Details here", + "filterEnterPoDetailsHere": "Enter PO Details here", + "wantToReject": "Are you sure want to reject?", + "employeeDigitalID": "Employee Digital ID", + "businessCard": "Business Card", + "checkOut": "Check Out", + "regular": "Regular", + "mark": "Mark", + "performance": "Performance Evaluation", + "performanceEvaluationIn": "Your performance Evaluation in", + "valuationIn": "Performance Evaluation in", + "viewBusinessCard": "View Business Card", + "performanceEvaluation": "Performance Evaluation", + "logout": "Logout", + "selectMethodOfAttendance": "Select the method to mark the attendance", + "comeNearHMGWifi": "Please come near to HMG wifi", + "deliverNotificationToMeRegardless": + "Deliver notifications to me regardless of any general rules", + "close": "Close", + "respond": "Respond", + "vacationRuleAdded": "Vacation rule added", + "selectTypeT": "Select Type", + "notification": "Notification", + "selectNotification": "Select Notification", + "ifAllSelectedYouWillSkip": "*If All is selected, you will skip to step 3", + "applyForVacationRule": "Apply for Vacation Rule", + "step1": "Step 1", + "step2": "Step 2", + "step3": "Step 3", + "message": "Message", + "writeAMessage": "Write a message", + "notificationReassign": "Notification Reassign", + "selectEmployee": "Select Employee", + "searchEmployeeForReplacement": "Search employee for replacement", + "searchForEmployee": "Search for Employee", + "pleaseSpecifyEndTime": "Please specify End Time", + "pleaseSelectNotificationReassign": "Please select notification reassign", + "pleaseSelectEmployeeForReplacement": + "Please select employee for replacement", + "pleaseSelectAction": "Please select action", + "pleaseSelectDate": "Please select date", + "todayAttendance": "Today's Attendance", + "viewAttendance": "View Attendance", + "teamMembers": "Team Members", + "profileDetails": "Profile Details", + "noResultsFound": "No Results Found", + "searchBy": "Search by", + "myTeamMembers": "My Team Members", + "save": "Save", + "TurnNotificationsFor": "Turn on notifications for", + "worklistSettings": "Worklist Settings", + "absenceType": "Absence Type", + "absenceCategory": "Absence Category", + "days": "Days", + "hours": "Hours", + "approvalStatus": "Approval Status", + "absenceStatus": "Absence Status", + "poweredBy": "Powered By", + "cloudSolutions": "Cloud Solutions", + "subordinateLeave": "Subordinate Leave", + "numberDays": "Number of days", + "selectTemplate": "Select Template", + "myPostedAds": "My posted ads", + "browseCategories": "Browse Categories", + "searchItems": "Search Items", + "offerAndDiscounts": "Offer & Discounts", + "offerValid": "Offer Valid", + "offerExpired": "Offer Expired", + "whatAreYouOffering": "What are you offering?", + "selectCategory": "Select Category", + "inProgress": "InProgress", + "locked": "Locked", + "addDetails": "Add Details", + "reviewAndSell": "Review & Sell", + "itemTitle": "Item Title", + "itemCondition": "Item Condition", + "used": "Used", + "region": "Region", + "selectRegion": "Select Region", + "itemPrice": "Item Price", + "itemPhotos": "Item Photos", + "itemInfo": "Item Info", + "uploadAttachment": "Upload Attachment", + "selectFromGalleryOrOpenCamera": "Select from gallery or open camera", + "openCamera": "Open\nCamera", + "uploadFromGallery": "Upload from\nGallery", + "name": "Name", + "email": "Email", + "noHistoryAvailable": "No History Available", + "purchaseRequisition": "Purchase Requisition", + "moveOrder": "Move Order", + "humanResource": "Human Resource", + "purchaseOrder": "Purchase Order", + "ITGForms": "ITG Forms", + "itemCreation": "Item Creation", + "stamp": "Stamp", + "addFavoriteList": "Do you want to add {name} in your favorite list", + "feedbackUserExperience": + "This is to get the feedback about the user experience", + "rateUI": "How would you like to rate", + "rateUI2": "How do you satisfied with this application", + "submitSurvey": "Submit Survey", + "typeHere": "Type here", + "infoDetail": "Info Detail", + "amount_detail": "Amount Detail", + "currentBalance": "Current Balance", + "currentLeaveBalance": "Current Leave Balance", + "calculatedDays": "Calculated Days", + "totalDays": "Total Days", + "usedBalance": "Used", + "infants": "Infants", + "child": "Child", + "adult": "Adult", + "updateMember": "Are You Sure You Want to Update this Member?", + "fieldIsEmpty": "'{data}' Field is empty. Please select", + "pleaseEnterComments": "Please enter comments", + "skip": "Skip", + "typeCurrentPasswordBelow": "Type Your Current password below", + "currentPassword": "Current password", + "concurrentReports": "Concurrent Reports", + "EnterNewAddressMoved": "Enter a new address if you have moved", + "CorrectAddress": "Correct or amend this address", + "SelectChangeWantToMake": "Select the type of change you want to make", + "profile": { + "reset_password": { + "label": "Reset Password", + "username": "Username", + "password": "password", + }, + "profileCompletionPer": "Profile Completion", + "completeProfile": "Complete Profile", + "personalInformation": "Personal Information", + "basicDetails": "Basic Details", + "address": "Address", + "contactDetails": "Contact Details", + "familyDetails": "Family Members", + "effectiveDate": "Effective Date", + "country": "Country", + }, + "clicked": { + "zero": "You clicked {} times!", + "one": "You clicked {} time!", + "two": "You clicked {} times!", + "few": "You clicked {} times!", + "many": "You clicked {} times!", + "other": "You clicked {} times!", + }, + "gender": { + "male": "Hi man ;) ", + "female": "Hello girl :)", + "with_arg": {"male": "Hi man ;) {}", "female": "Hello girl :) {}"}, + }, + "reset_locale": "Reset Language", + "chat": "Chat", + "mychats": "My Chats", + "createNewChat": "Create New Chat", + "brainMarathon": "Brain Marathon", + "contestTopicAbout": "Contest Topic will be about:", + "gameDate": "Game Date:", + "gameTime": "Game Time:", + "joinMarathon": "Join Marathon", + "joinDemoMarathon": "Join Demo Marathon", + "demo": "Demo", + "minutes": "Minutes", + "seconds": "Seconds", + "note": "Note:", + "demoMarathonNoteP1": + "You can play the demo Marathon to learn how it works. You can join the Marathon", + "demoMarathonNoteP2": "5 Minutes", + "demoMarathonNoteP3": "before the actual time.", + "sponsoredBy": "Sponsored By:", + "question": "Question", + "marathoners": "Marathoners", + "marathoner": "Marathoner", + "prize": "Prize:", + "advancedSearch": "Advanced Search", + "openNot": "Open Notifications", + "fyi": "FYI Notifications", + "toDo": "To Do Notifications", + "all": "All Notifications", + "meNot": "Notifications from Me", + "view": "View", + "fromUserName": "From User Name", + "sentDate": "Sent Date", + "itemTypeDisplayName": "Item Type Display Name", + "none": "None", + "winnerSelection": "Winner Selection", + "qualifiers": "Qualifiers", + "qualifier": "Qualifier", + "getReadyForContest": "Get Ready for the coming contest:", + "winnerSelectedRandomly": + "The winner will be selected randomly among the qualifiers.", + "fingersCrossed": "Fingers Crossed!!!", + "congrats": "Congratulations!!!", + "otp": "OTP", + "verification": "Verification", + "resend": "Resend", + "codeExpire": "The verification code has been expired", + "allQuestionsCorrect": "You have answered all questions correct", + "typeheretoreply": "Type here to reply", + "favorite": "My Favorites", + "searchfromchat": "Search from chat", + "yourAnswerCorrect": "Your answer is correct", + "youMissedTheQuestion": + "You ran out of time. You are out of the game. But you can continue as a viewer.", + "wrongAnswer": + "Your answer is Incorrect. You are out of the game. But you can continue as a viewer.", + "oops": "Ooopsss!!!!", + "winner": "WINNER", + "youWantToLeaveMarathon": + "Are you sure you want to go back? You will be out of the contest.", + "ourSponsor": "Our Sponsor:", + "startingIn": "Starting in", + "youAreOutOfContest": "You are out of the contest.", + "winners": "WINNERS!!!", + "expireAfter": "Expires After", + "oneWeek": "1 Week", + "twoWeek": "2 Week", + "noUpcoming": "There is no upcoming", + "fakeLocation": + "We traced out that you try to use a fake location! This is considered a violation, and HR has been notified.", + "noWinner": "Sad! No one won today.", + "myTeam": "My Team", + "youCanPlayDemo": "But you can play demo", + "group": "Groups", + "searchGroup": "Search Group", + "connectHmgWifi": "Connect HMG WIFI", + "connectedHmgWifi": "Connected HMG WIFI", + "itgForms": "ITG Forms", + "resetAdPassword": "Reset AD Password", + "myDocuments": "My Documents", + "requiredDocuments": "Required Documents", + "optionalDocuments": "Optional Documents", + "allDocuments": "All\nDocuments", + "expiredDocuments": "Expired\nDocuments", + "missingDocuments": "Missing\nDocuments", + "uploadedDocuments": "Uploaded\nDocuments", + "manage": "Manage", + "members": "Members", + "areYouSureWantTodelete": "Are you sure want to delete?", + "confirmGrantMazayaAccess": + "Are you sure you want to grant Mazaya access to \"{}\"?", + "confirmRevokeMazayaAccess": + "Are you sure you want to revoke Mazaya access to \"{}\"?", + "yes": "Yes", + "no": "No", + "mazayaInviteInstructions": + "Please download the MoheM app from the above link and use the following credentials to login", + "cameraPermissionRequiredToScan": + "Please grant camera permission to scan the QR code", + "cameraPermissionPermanentlyDenied": + "Please allow camera permission from the app settings > Permissions", + "openSettings": "Open Settings", + "nationalIdOrIqamaFallback": "Your National ID or Iqama Number", + "groupMembers": "Group Members", + "manageGroup": "Manage Group", + "admin": "Admin", + "addUsers": "Add users to the group", + "editGroups": "Edit Group", + "groupNameshouldbe": "Group name should be minimum 10 character long", + "enterGroupName": "Please enter valid group Name", + "groupName": "Group Name", + "enterGroupNamePlease": "Please enter group name", + "audioCall": "Audio Call", + "videoCall": "Video Call", + "shareScreen": "Share Screen", + "searchByUserName": "Search By Username", + "userSearch": "User Search", + "userName": "User Name", + "userId": "UserID", + "open": "open", + "addAtLeastOneAttachment": "Please add at least one attachment.", + "pleaseClickButtonToJoinMarathon": + "Press the button below to join the Marathon.", + "youCannotJoinTheMarathon": + "You cannot join the Marathon because you have exceeded the time limit.", + "requesterOperatingUnit": "Requester Operating Unit", + "paymentRequest": "Pay Request", + "paymentDetails": "Payment Details", + "requestNo": "Request No", + "requesterEmpNum": "Requester Employee Num", + "requesterEmpName": "Requester Employee Name", + "prepareEmpName": "Prepare Employee Name", + "requesterPositionName": "Requester Position Name", + "preparePositionName": "Prepare Position Name", + "requesterPayrollName": "Requester Payroll Name", + "payingORGName": "Paying Organization Name", + "requestAmount": "Request Amount", + "typeofPayment": "Type of Payment", + "beneficiaryDetails": "Beneficiary Details", + "beneficiaryName": "Beneficiary Name", + "idIqama": "Saudi ID / Iqama", + "beneficiaryBankName": "Beneficiary Bank Name", + "sadadNumber": "Sadad Number", + "beneficiaryIBAN": "Beneficiary IBAN", + "purchaseOrders": "Purchase Orders", + "approvalDate": "Approval Date", + "pOAmount": "PO Amount", + "versionStatus": "Version Status", + "supplierNo": "Supplier No", + "general": "General", + "prepareEmpNum": "Prepare Employee Num", + "supplierInfo": "Supplier Information", + "supplierAcNo": "Supplier Account No", + "supplierAcName": "Supplier Account Name", + "supplierIBAN": "Supplier IBAN", + "supplierCRNo": "CR Number", + "suppliedAcNo": "Supplied Account No.", + "patientRefundInvoice": "Patient Refund Invoice", + "patientNumber": "Patient Number", + "patientName": "Patient Name", + "invoiceDate": "Invoice Date", + "refundInvoice": "Refund Invoice", + "hospitalClinic": "Hospital Clinic", + "graphicalAnalysis": "Graphical Analysis", + "itemHistoryAnalysis": "Item History Analysis", + "pOno": "P.O #", + "oprUnit": "Opr. Unit", + "qtyOrdered": "Qty. Ordered", + "qtyReceived": "Qty. Received", + "bonusQty": "Bonus Qty.", + "balQty": "Bal. Qty.", + "start": "Start", + "about": "About", + "explore": "Explore", + "mazaya": "MAZAYA", + "benefits": "Benefits", + "mazayaDesc": + "Discover special Discounts and offers available to Employees", + "viewallofferMazaya": "View All Offers", + "buyerName": "Buyer Name", + "buyerNumber": "Buyer Number", + "highestBidder": "Highest Bidder", + "remarks": "Remarks", + "faHeader": "FA Header Details", + "bookTypeCode": "Book Type Code", + "categoryCode": "Category Code", + "categoryGroup": "Category Group", + "faLINES": "Asset Details", + "assetNumber": "Asset Number", + "assetDescription": "Asset Description", + "barCodeNumber": "BarCode Number", + "datePlaceInService": "Date place In Service", + "serialNumber": "Serial Number", + "disposedDate": "Disposed Date", + "netBookValue": "Net Book Value", + "purchasedPrice": "Purchased Price", + "usefulLife": "Useful Life", + "yearsUsed": "Years Used", + "faRequest": "FA Disposal Request", + "showMore": "Show More", + "ticketDetails": "Ticket Details", + "currentTicketBalance": "Current Ticket Balance", + "ticketHistory": "Ticket History", + "proceedBooking": "Proceed For Booking", + "courses": "Courses", + "course": "Course", + "status": "Status", + "deadline": "Deadline", + "overdue": "Overdue", + "noCoursesAvailable": "No Courses Available", + "pullToRefresh": "Pull to refresh", + "courseUrlNotAvailable": "Course URL not available", + "buyerDetails": "Buyer Details", + "etqanOVR": "Report An Incident", + "etqanRequest": "Incident Requests", + "selectProject": "Select Project", + "project": "Project", + "keen": "Keen", + "reportIncident": "Report Incident", + "myIncidents": "My Incidents", + "incidentDetails": "Incident Details", + "ticketNumber": "Ticket Number", + "ticketId": "Ticket ID", + "pleaseSelectProject": "Please select a project", + "viewAttachment": "View Attachment", + "parkingQr": "Parking QR", + "startNow": "Start Now", + "destination_type": "Destination Type", + "source_organization_name": "Source Organization Name", + "destination_organization_name": "Destination Organization Name", + "costCenter": "Cost Center", + "priceSAR": "Price (SAR)", + "amountSAR": "Amount (SAR)", + "amuLastThreeMonths": "AMU (Last 3 months)", + "mazayaTitle": "Mazaya", + "mazayaAccessGranted": "Mazaya access granted", + "mazayaAccessGrantedDesc": + "{} now has active access. Share the download link below so they can install the Mohem app and complete setup.", + "accessIsNowActive": "Access is now active", + "accessIsNowActiveDesc": + "{} can use the provided link to download the Mazaya app and continue setup on their device.", + "dependentAccessActive": "Dependent access active", + "shareableAppDownloadLink": "Shareable app-download link", + "shareableAppDownloadLinkDesc": + "Send this link to {} so they can download the Mazaya app and continue setup.", + "downloadLink": "Download link", + "shareDownloadLink": "Share Download Link", + "copyLink": "Copy Link", + "done": "Done", + "linkCopied": "Link copied to clipboard", + "mazayaAccessRevoked": "Mazaya Access", + "mazayaAccessRevokedDesc": + "You are not authorized to access the Mazaya Program.", + "contactYourSponsor": "Contact your sponsor", + "contactYourSponsorDesc": + "Ask your sponsor to allow Mazaya access again from Dependent Details. Only the sponsor can restore access.", + "dependentAccessBlocked": "Dependent access blocked", + "returnToSignIn": "Return to Sign In", + "allowMazayaAccess": "Allow Mazaya Access", + "revokeMazayaAccess": "Revoke Mazaya Access", + "active": "Active", + "noAccess": "No access", + "offerDetails": "Offer Details", + "offerIdNotAvailable": "Offer ID not available", + "unableToRedeemOffer": "Unable to redeem offer, please try again later", + "errorRedeemingOffer": "An error occurred while redeeming offer", + "useOffer": "Use Offer", + "online": "Online", + "inStore": "In Store", + "ksa": "KSA", + "riyadh": "Riyadh", + "noInstructionsAvailable": "No instructions available.", + "contactInfo": "Contact Information", + "allCategories": "All", + "noOffersAvailable": "No offers available", + "addDependents": "Add Dependents", + "myDependents": "My Dependents", + "offDiscount": "{} Off", + "usageLabel": "Usage: ", + "areYouSureWantToLogOut": "Are you sure you want to log out?", + "searchDependents": "Search dependents", + "searchFamilyMembers": "Search family members", + "addAnotherUser": "Add another user", + "joinMazaya": "Join Mazaya", + "joinMazayaSubtitle": + "Get the best offers and exclusive deals across dining, shopping, and lifestyle rewards.", + "continueAsEmployee": "Continue as an employee", + "continueAsEmployeeSubtitle": + "Sign in with your employee username and password.", + "pleaseEnterNationalId": "Please enter National ID", + "pleaseSelectDob": "Please select Date of Birth", + "unableToRetrieveDependentInfo": "Unable to retrieve dependent information", + "failedToSendOtp": "Failed to send verification code", + "verificationCodeResent": "Verification code resent", + "nationalId": "National ID", + "addDependent": "Add Dependent", + "stepVerify": "Verify", + "stepBasic": "Basic", + "stepAdditional": "Additional", + "findYourDependent": "Find your dependent", + "findYourDependentDesc": + "Enter the details exactly as they appear on the National ID. We'll securely retrieve the record from NHIC.", + "enter10DigitNationalId": "Enter 10-digit National ID", + "nationalIdMustBe10Digits": "National ID must be 10 digits", + "dateFormatPlaceholder": "DD / MM / YYYY", + "searchUser": "Search User", + "dependentNotFoundNhic": + "Sorry, error while getting dependent info from NHIC", + "basicInfo": "Basic Info", + "basicInfoDesc": "Required identity details fetched from NHIC.", + "additionalInfo": "Additional Info", + "additionalInfoDesc": "Add or review sponsorship and eligibility details.", + "select": "Select", + "enterFieldPlaceholder": "Enter {}", + "requiredField": "Required field", + "pleaseFillField": "Please fill {}", + "reviewAndSubmit": "Review & Submit", + "reviewAndSubmitDesc": + "Please review the dependent details carefully before submitting.", + "arabicName": "Arabic Name", + "relationship": "Relationship", + "sponsor": "Sponsor", + "dependentSponsorDetail": "Dependent Sponsor Detail", + "insuranceEligibility": "Insurance Eligibility", + "relationshipStartDate": "Start Date", + "dependentAddedSuccessfully": "Dependent added successfully", + "genderMale": "Male", + "genderFemale": "Female", + "religionIslam": "Islam", + "back": "Back", + "submitRequest": "Submit", + "enterDependentDetailsToContinue": + "Enter the dependent details to continue.", + "enterBasicDetailsDesc": + "Please enter the dependent's basic identity details.", + "locations": "Locations", + "availableOffers": "Available Offers", + "selectOfferToRedeem": "Select an offer to use", + "viewOnMap": "View on map", + "showAllLocations": "Show all {} locations", + "searchBranches": "Search branches or cities...", + "allCities": "All", + "allCitiesOption": "All Cities", + "noBranchesFound": "No branches found", + "browseAllBranches": "Browse all {} branches across cities", + "branchesCount": "{} Branches", + "kmAway": "{} KM Away", + "dependentDetails": "Dependent Details", + "keyDetails": "Key details", + "verified": "Verified", + "idEnding": "ID ending {}", + "servicesAndActions": "Services & actions", + "startDependentFlowsDesc": + "Start dependent flows and manage access from one place.", + "mazayaAccess": "Mazaya access", + "accessOff": "Off", + "allowDependentMazayaOffersDesc": + "Allow {} to use Mazaya offers with her verified identity.", + "loginMethod": "Login method", + "nationalIdAndDob": "National ID & Date of Birth", + "sponsorOtp": "Sponsor OTP", + "revokingPreventsAccessDesc": + "Revoking prevents all future dependent access until you allow it again.", + "locationPermissionRequiredForAttendance": + "You need to give location permission to mark attendance", + "locationServicesRequiredForAttendance": + "You need to enable location services to mark attendance", + "pleaseProvideLocationPermission": "Please provide location permission", + "microphoneAccessRequired": + "The app needs microphone access to be able to record audio.", + "shareAccessGuide": "Share Access Guide", + "nationalIdOrIqamaNumber": "National ID or Iqama Number", + "multipleCities": "Multi-city", + "filters": "Filters", + "availability": "Availability", + "chooseOneOrBoth": "Choose one or both", + "sortBy": "Sort by", + "recommended": "Recommended", + "nearest": "Nearest", + "highestDiscount": "Highest discount", + "newest": "Newest", + "distance": "Distance", + "fromYourCurrentLocation": "From your current location", + "any": "Any", + "minimumDiscount": "Minimum discount", + "reset": "Reset", + "applyFilters": "Apply filters", + "distanceKm": "{} km", + "discountPercentPlus": "{}%+", + "visitMerchantWebsite": "Visit Merchant Website", + "merchantWebsiteNotAvailable": "Merchant website not available", + "locationServicesRequiredForNearestOffers": + "You need to enable location services to show nearest offers", + "locationPermissionRequiredForNearestOffers": + "You need to give location permission to show nearest offers", + "mazayaDeals": "Mazaya Deals", + "helloName": "Hello, {}", + "findABrandOrSomething": "Find a brand or a little something", + "exploreYourBenefits": "Explore your benefits", + "theMazayaEdit": "The Mazaya Edit", + "exclusivelyYours": "Exclusively yours", + "aLittleExtraJustForMazayaMembers": + "A little extra, just for Mazaya members.", + "seeAll": "See all", + "latestOnMazaya": "Latest on Mazaya", + "goodFoodGreatCompanyEvenBetterPerks": + "Good food. Great company. Even better perks.", + "travelEssentials": "Travel Essentials", + "fromEverydayCareToYourNextAdventure": + "From everyday care to your next adventure.", + "homeAndKitchen": "Home & Kitchen", + "curatedPicksForYourHomeAndKitchen": + "Curated picks for your home and kitchen.", + "discover": "Discover", + "saved": "Saved", + "myFamily": "My Family", + "educationAndTraining": "Education & Training", + "foodsAndDrinks": "Foods & Drinks", + "travelAndEntertainment": "Travel & Entertainment", + "beautyAndFitness": "Beauty & Fitness", + "healthcare": "Healthcare", + "favoriteAddedSuccess": "Added to favorites successfully", + "favoriteRemovedSuccess": "Removed from favorites successfully", + "favoriteError": "An error occurred while updating favorites", + "favoriteMerchant": "Favorite Offers", + "favoriteOffers": "Favorite Offers", + "goodToKnow": "Good to know", + "goodToKnowDesc": + "Keep your Mazaya membership handy. Check the merchant's availability, eligible activities and full terms before you book.", + "termsAndConditions": "Terms & conditions", + "haveAQuestionAboutOffer": "Have a question about this offer?", + "getHelp": "Get help", + "redeemOffer": "Redeem offer", + "merchantContact": "Merchant contact", + "website": "Website", + "phone": "Phone", + "viewAll": "View all", + "moreCitiesCount": "+ {} more cities", + "findAnEscapeOrAnExperience": "Find an escape or an experience", + "allOffers": "All offers", + "sampleAvailability": "sample availability", + "offersCount": "{} offers", + "mazayaExclusive": "MAZAYA EXCLUSIVE", + "youAreAllCaughtUp": "You're all caught up. More little extras soon.", + "selectCity": "Select City", + }; + static const Map> mapLocales = { + "ar_SA": _ar_SA, + "en_US": _en_US, + }; } diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index 9bc9bfd5..93b787f2 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -2,7 +2,7 @@ // ignore_for_file: constant_identifier_names -abstract class LocaleKeys { +abstract class LocaleKeys { static const mohemm = 'mohemm'; static const english = 'english'; static const arabic = 'arabic'; @@ -14,7 +14,8 @@ abstract class LocaleKeys { static const userSearch = 'userSearch'; static const password = 'password'; static const welcomeBack = 'welcomeBack'; - static const wouldYouLikeToLoginWithCurrentUsername = 'wouldYouLikeToLoginWithCurrentUsername'; + static const wouldYouLikeToLoginWithCurrentUsername = + 'wouldYouLikeToLoginWithCurrentUsername'; static const lastLoginDetails = 'lastLoginDetails'; static const verificationType = 'verificationType'; static const pleaseVerify = 'pleaseVerify'; @@ -24,8 +25,10 @@ abstract class LocaleKeys { static const verifyThroughSMS = 'verifyThroughSMS'; static const verifyThroughWhatsapp = 'verifyThroughWhatsapp'; static const useAnotherAccount = 'useAnotherAccount'; - static const pleaseEnterTheVerificationCodeSentTo = 'pleaseEnterTheVerificationCodeSentTo'; - static const theVerificationCodeWillExpireIn = 'theVerificationCodeWillExpireIn'; + static const pleaseEnterTheVerificationCodeSentTo = + 'pleaseEnterTheVerificationCodeSentTo'; + static const theVerificationCodeWillExpireIn = + 'theVerificationCodeWillExpireIn'; static const goodMorning = 'goodMorning'; static const markAttendance = 'markAttendance'; static const timeLeftToday = 'timeLeftToday'; @@ -49,7 +52,8 @@ abstract class LocaleKeys { static const newString = 'newString'; static const setTheNewPassword = 'setTheNewPassword'; static const typeYourNewPasswordBelow = 'typeYourNewPasswordBelow'; - static const typeYourNewActiveDirectoryPasswordBelow = 'typeYourNewActiveDirectoryPasswordBelow'; + static const typeYourNewActiveDirectoryPasswordBelow = + 'typeYourNewActiveDirectoryPasswordBelow'; static const confirmPassword = 'confirmPassword'; static const update = 'update'; static const title = 'title'; @@ -58,7 +62,8 @@ abstract class LocaleKeys { static const createRequest = 'createRequest'; static const forgotPassword = 'forgotPassword'; static const employeeId = 'employeeId'; - static const loginCodeWillSentToMobileNumber = 'loginCodeWillSentToMobileNumber'; + static const loginCodeWillSentToMobileNumber = + 'loginCodeWillSentToMobileNumber'; static const changePassword = 'changePassword'; static const ok = 'ok'; static const confirm = 'confirm'; @@ -94,7 +99,8 @@ abstract class LocaleKeys { static const atLeastOneNumeric = 'atLeastOneNumeric'; static const minimum8Characters = 'minimum8Characters'; static const doNotAddRepeatingLetters = 'doNotAddRepeatingLetters'; - static const itShouldContainSpecialCharacter = 'itShouldContainSpecialCharacter'; + static const itShouldContainSpecialCharacter = + 'itShouldContainSpecialCharacter'; static const confirmPasswordMustMatch = 'confirmPasswordMustMatch'; static const sms = 'sms'; static const fingerPrint = 'fingerPrint'; @@ -137,7 +143,8 @@ abstract class LocaleKeys { static const category = 'category'; static const employeeEmailAddress = 'employeeEmailAddress'; static const payrollBranch = 'payrollBranch'; - static const yourChangeHasBeenSavedSuccessfully = 'yourChangeHasBeenSavedSuccessfully'; + static const yourChangeHasBeenSavedSuccessfully = + 'yourChangeHasBeenSavedSuccessfully'; static const code = 'code'; static const unit = 'unit'; static const quantity = 'quantity'; @@ -232,7 +239,8 @@ abstract class LocaleKeys { static const templateName = 'templateName'; static const itemCreationStatus = 'itemCreationStatus'; static const standardizationApprovalStatus = 'standardizationApprovalStatus'; - static const standardizationApprovalRejectionReason = 'standardizationApprovalRejectionReason'; + static const standardizationApprovalRejectionReason = + 'standardizationApprovalRejectionReason'; static const analyzedBy = 'analyzedBy'; static const approvedDate = 'approvedDate'; static const itemType = 'itemType'; @@ -258,7 +266,7 @@ abstract class LocaleKeys { static const Payroll = 'Payroll'; static const civilIdentityNumber = 'civilIdentityNumber'; static const dateOfBirth = 'dateOfBirth'; - static const maritalStatus = 'maritalStatus '; + static const maritalStatus = 'maritalStatus '; static const fullName = 'fullName'; static const remove = 'remove'; static const submit = 'submit'; @@ -267,7 +275,8 @@ abstract class LocaleKeys { static const comments = 'comments'; static const writeComment = 'writeComment'; static const approversList = 'approversList'; - static const yourRequestHasBeenSubmittedForApprovals = 'yourRequestHasBeenSubmittedForApprovals'; + static const yourRequestHasBeenSubmittedForApprovals = + 'yourRequestHasBeenSubmittedForApprovals'; static const monthlyPaySlip = 'monthlyPaySlip'; static const particular = 'particular'; static const earnings = 'earnings'; @@ -289,7 +298,7 @@ abstract class LocaleKeys { static const enterNewInfo = 'enterNewInfo'; static const endDate = 'endDate'; static const removeThisMember = 'removeThisMember'; - static const wantUpdateThisMember = 'wantUpdateThisMember '; + static const wantUpdateThisMember = 'wantUpdateThisMember '; static const addNewFamilyMember = 'addNewFamilyMember'; static const addRow = 'addRow'; static const pleaseSelect = 'pleaseSelect'; @@ -336,7 +345,8 @@ abstract class LocaleKeys { static const mark = 'mark'; static const selectMethodOfAttendance = 'selectMethodOfAttendance'; static const comeNearHMGWifi = 'comeNearHMGWifi'; - static const deliverNotificationToMeRegardless = 'deliverNotificationToMeRegardless'; + static const deliverNotificationToMeRegardless = + 'deliverNotificationToMeRegardless'; static const close = 'close'; static const respond = 'respond'; static const vacationRuleAdded = 'vacationRuleAdded'; @@ -355,8 +365,10 @@ abstract class LocaleKeys { static const searchEmployeeForReplacement = 'searchEmployeeForReplacement'; static const searchForEmployee = 'searchForEmployee'; static const pleaseSpecifyEndTime = 'pleaseSpecifyEndTime'; - static const pleaseSelectNotificationReassign = 'pleaseSelectNotificationReassign'; - static const pleaseSelectEmployeeForReplacement = 'pleaseSelectEmployeeForReplacement'; + static const pleaseSelectNotificationReassign = + 'pleaseSelectNotificationReassign'; + static const pleaseSelectEmployeeForReplacement = + 'pleaseSelectEmployeeForReplacement'; static const pleaseSelectAction = 'pleaseSelectAction'; static const pleaseSelectDate = 'pleaseSelectDate'; static const todayAttendance = 'todayAttendance'; @@ -441,8 +453,10 @@ abstract class LocaleKeys { static const CorrectAddress = 'CorrectAddress'; static const SelectChangeWantToMake = 'SelectChangeWantToMake'; static const profile_reset_password_label = 'profile.reset_password.label'; - static const profile_reset_password_username = 'profile.reset_password.username'; - static const profile_reset_password_password = 'profile.reset_password.password'; + static const profile_reset_password_username = + 'profile.reset_password.username'; + static const profile_reset_password_password = + 'profile.reset_password.password'; static const profile_reset_password = 'profile.reset_password'; static const profile_profileCompletionPer = 'profile.profileCompletionPer'; static const profile_completeProfile = 'profile.completeProfile'; @@ -537,7 +551,8 @@ abstract class LocaleKeys { static const missingDocuments = 'missingDocuments'; static const uploadedDocuments = 'uploadedDocuments'; static const addAtLeastOneAttachment = 'addAtLeastOneAttachment'; - static const pleaseClickButtonToJoinMarathon = 'pleaseClickButtonToJoinMarathon'; + static const pleaseClickButtonToJoinMarathon = + 'pleaseClickButtonToJoinMarathon'; static const youCannotJoinTheMarathon = 'youCannotJoinTheMarathon'; static const open = 'open'; static const paymentRequest = 'paymentRequest'; @@ -595,8 +610,10 @@ abstract class LocaleKeys { static const yes = 'yes'; static const no = 'no'; static const mazayaInviteInstructions = 'mazayaInviteInstructions'; - static const cameraPermissionRequiredToScan = 'cameraPermissionRequiredToScan'; - static const cameraPermissionPermanentlyDenied = 'cameraPermissionPermanentlyDenied'; + static const cameraPermissionRequiredToScan = + 'cameraPermissionRequiredToScan'; + static const cameraPermissionPermanentlyDenied = + 'cameraPermissionPermanentlyDenied'; static const openSettings = 'openSettings'; static const nationalIdOrIqamaFallback = 'nationalIdOrIqamaFallback'; static const Attendance = 'Attendance'; @@ -761,7 +778,8 @@ abstract class LocaleKeys { static const religionIslam = 'religionIslam'; static const back = 'back'; static const submitRequest = 'submitRequest'; - static const enterDependentDetailsToContinue = 'enterDependentDetailsToContinue'; + static const enterDependentDetailsToContinue = + 'enterDependentDetailsToContinue'; static const enterBasicDetailsDesc = 'enterBasicDetailsDesc'; static const locations = 'locations'; static const availableOffers = 'availableOffers'; @@ -783,14 +801,18 @@ abstract class LocaleKeys { static const startDependentFlowsDesc = 'startDependentFlowsDesc'; static const mazayaAccess = 'mazayaAccess'; static const accessOff = 'accessOff'; - static const allowDependentMazayaOffersDesc = 'allowDependentMazayaOffersDesc'; + static const allowDependentMazayaOffersDesc = + 'allowDependentMazayaOffersDesc'; static const loginMethod = 'loginMethod'; static const nationalIdAndDob = 'nationalIdAndDob'; static const sponsorOtp = 'sponsorOtp'; static const revokingPreventsAccessDesc = 'revokingPreventsAccessDesc'; - static const locationPermissionRequiredForAttendance = 'locationPermissionRequiredForAttendance'; - static const locationServicesRequiredForAttendance = 'locationServicesRequiredForAttendance'; - static const pleaseProvideLocationPermission = 'pleaseProvideLocationPermission'; + static const locationPermissionRequiredForAttendance = + 'locationPermissionRequiredForAttendance'; + static const locationServicesRequiredForAttendance = + 'locationServicesRequiredForAttendance'; + static const pleaseProvideLocationPermission = + 'pleaseProvideLocationPermission'; static const microphoneAccessRequired = 'microphoneAccessRequired'; static const shareAccessGuide = 'shareAccessGuide'; static const nationalIdOrIqamaNumber = 'nationalIdOrIqamaNumber'; @@ -816,21 +838,28 @@ abstract class LocaleKeys { static const favoriteRemovedSuccess = 'favoriteRemovedSuccess'; static const favoriteError = 'favoriteError'; static const merchantWebsiteNotAvailable = 'merchantWebsiteNotAvailable'; - static const locationServicesRequiredForNearestOffers = 'locationServicesRequiredForNearestOffers'; - static const locationPermissionRequiredForNearestOffers = 'locationPermissionRequiredForNearestOffers'; + static const locationServicesRequiredForNearestOffers = + 'locationServicesRequiredForNearestOffers'; + static const locationPermissionRequiredForNearestOffers = + 'locationPermissionRequiredForNearestOffers'; static const mazayaDeals = 'mazayaDeals'; + static const helloName = 'helloName'; static const findABrandOrSomething = 'findABrandOrSomething'; static const exploreYourBenefits = 'exploreYourBenefits'; static const theMazayaEdit = 'theMazayaEdit'; static const exclusivelyYours = 'exclusivelyYours'; - static const aLittleExtraJustForMazayaMembers = 'aLittleExtraJustForMazayaMembers'; + static const aLittleExtraJustForMazayaMembers = + 'aLittleExtraJustForMazayaMembers'; static const seeAll = 'seeAll'; static const latestOnMazaya = 'latestOnMazaya'; - static const goodFoodGreatCompanyEvenBetterPerks = 'goodFoodGreatCompanyEvenBetterPerks'; + static const goodFoodGreatCompanyEvenBetterPerks = + 'goodFoodGreatCompanyEvenBetterPerks'; static const travelEssentials = 'travelEssentials'; - static const fromEverydayCareToYourNextAdventure = 'fromEverydayCareToYourNextAdventure'; + static const fromEverydayCareToYourNextAdventure = + 'fromEverydayCareToYourNextAdventure'; static const homeAndKitchen = 'homeAndKitchen'; - static const curatedPicksForYourHomeAndKitchen = 'curatedPicksForYourHomeAndKitchen'; + static const curatedPicksForYourHomeAndKitchen = + 'curatedPicksForYourHomeAndKitchen'; static const discover = 'discover'; static const saved = 'saved'; static const myFamily = 'myFamily'; @@ -859,5 +888,4 @@ abstract class LocaleKeys { static const mazayaExclusive = 'mazayaExclusive'; static const youAreAllCaughtUp = 'youAreAllCaughtUp'; static const selectCity = 'selectCity'; - } diff --git a/lib/ui/mazaya/mazaya_discover_screen.dart b/lib/ui/mazaya/mazaya_discover_screen.dart index eec1603b..56d8627a 100644 --- a/lib/ui/mazaya/mazaya_discover_screen.dart +++ b/lib/ui/mazaya/mazaya_discover_screen.dart @@ -237,6 +237,19 @@ class _MazayaDiscoverScreenState extends State { } } + // AppState().dependentName sometimes comes back with stray " - " separators (e.g. + // "John - Smith") - collapse those into plain spaces for display. + String? get _dependentGreetingName { + String? raw = AppState().dependentName; + if (raw == null || raw.trim().isEmpty) return null; + String cleaned = + raw + .replaceAll(RegExp(r'\s*-\s*'), ' ') + .replaceAll(RegExp(r'\s+'), ' ') + .trim(); + return cleaned.isEmpty ? null : cleaned; + } + void _openRetailer(WalaPlusRetailerModel item) { Navigator.pushNamed( context, @@ -264,6 +277,23 @@ class _MazayaDiscoverScreenState extends State { ); } + // Tapping the search field opens the same "all categories / newest" data as "Latest on + // Mazaya"'s See all, but with the category hero hidden and the search bar auto-focused with + // the keyboard open (see RetailersListScreen's isSearchMode) instead of landing on Travel. + void _openSearchGrid() { + Navigator.pushNamed( + context, + AppRoutes.retailersListScreen, + arguments: { + 'category': WalaPlusCategoryModel( + id: 'all', + name: LocaleKeys.allCategories.tr(), + ), + 'searchMode': true, + }, + ); + } + Future _onRefresh() async { await Future.wait(>[ _fetchCategories(), @@ -366,11 +396,13 @@ class _MazayaDiscoverScreenState extends State { context, title: LocaleKeys.mazayaDeals.tr(), showHomeButton: false, + // Discover is the dependent-login landing page - no back button there (logout is still + // reachable via the explicit logout action below). Employees reaching Discover from the + // regular dashboard can still pop back normally. + showBackButton: !ApiConsts.isDependetLogin, onBackTapped: () { if (Navigator.canPop(context)) { Navigator.pop(context); - } else if (ApiConsts.isDependetLogin) { - _performLogout(); } }, actions: @@ -407,6 +439,13 @@ class _MazayaDiscoverScreenState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ + if (ApiConsts.isDependetLogin && _dependentGreetingName != null) + Padding( + padding: const EdgeInsets.fromLTRB(22, 16, 22, 0), + child: LocaleKeys.helloName + .tr(args: [_dependentGreetingName!]) + .toText20(isBold: true, color: const Color(0xFF202F31)), + ), Padding( padding: const EdgeInsets.fromLTRB(22, 16, 22, 0), child: _buildSearchField(), @@ -506,7 +545,7 @@ class _MazayaDiscoverScreenState extends State { ), ), style: const TextStyle(fontSize: 12, color: Color(0xFF202F32)), - onTap: _openRetailersGrid, + onTap: _openSearchGrid, readOnly: true, ), ), @@ -669,6 +708,7 @@ class _MazayaDiscoverScreenState extends State { } Widget _buildExclusiveOffersSection() { + bool isAr = AppState().isArabic(context); return Container( width: double.infinity, color: const Color(0xFF143F36), @@ -705,13 +745,16 @@ class _MazayaDiscoverScreenState extends State { weight: FontWeight.w500, ), const SizedBox(width: 4), - SvgPicture.asset( - "assets/icons/mazaya_arrow_right.svg", - width: 15, - height: 15, - colorFilter: const ColorFilter.mode( - Color(0xFFF1EBDD), - BlendMode.srcIn, + RotatedBox( + quarterTurns: isAr ? 2 : 0, + child: SvgPicture.asset( + "assets/icons/mazaya_arrow_right.svg", + width: 15, + height: 15, + colorFilter: const ColorFilter.mode( + Color(0xFFF1EBDD), + BlendMode.srcIn, + ), ), ), ], @@ -868,6 +911,7 @@ class _MazayaDiscoverScreenState extends State { required VoidCallback onSeeAll, }) { if (!isLoading && retailers.isEmpty) return const SizedBox.shrink(); + bool isAr = AppState().isArabic(context); return Container( width: double.infinity, color: backgroundColor, @@ -897,13 +941,16 @@ class _MazayaDiscoverScreenState extends State { weight: FontWeight.w500, ), const SizedBox(width: 4), - SvgPicture.asset( - "assets/icons/mazaya_arrow_right.svg", - width: 15, - height: 15, - colorFilter: const ColorFilter.mode( - Color(0xFF147D6B), - BlendMode.srcIn, + RotatedBox( + quarterTurns: isAr ? 2 : 0, + child: SvgPicture.asset( + "assets/icons/mazaya_arrow_right.svg", + width: 15, + height: 15, + colorFilter: const ColorFilter.mode( + Color(0xFF147D6B), + BlendMode.srcIn, + ), ), ), ], diff --git a/lib/ui/mazaya/retailers_list_screen.dart b/lib/ui/mazaya/retailers_list_screen.dart index e1c65d12..dd4fd045 100644 --- a/lib/ui/mazaya/retailers_list_screen.dart +++ b/lib/ui/mazaya/retailers_list_screen.dart @@ -52,6 +52,13 @@ class _RetailersListScreenState extends State { bool isExclusiveMode = false; List _exclusiveOffers = []; + // Reached by tapping Discover's search field - same "all categories / newest" data as the + // "Latest on Mazaya" See all, but the category hero is hidden (there's no specific category + // context, it's a pure search entry point) and the search bar auto-focuses with the keyboard + // open instead. + bool isSearchMode = false; + final FocusNode _searchFocusNode = FocusNode(); + // Subcategories of whichever main category is currently selected - fetched via // getWalaPlusCategories(parentId: ...) whenever a main category card is tapped. Empty/cleared // when "All Categories" (or nothing) is selected, since there's no specific parent to ask for. @@ -112,6 +119,12 @@ class _RetailersListScreenState extends State { selectedCategory = args['category'] as WalaPlusCategoryModel; currentCategoryId = selectedCategory?.id ?? ""; } + if (args is Map && args['searchMode'] == true) { + isSearchMode = true; + WidgetsBinding.instance.addPostFrameCallback((_) { + if (mounted) _searchFocusNode.requestFocus(); + }); + } } } @@ -193,6 +206,7 @@ class _RetailersListScreenState extends State { _scrollController.removeListener(_scrollListener); _scrollController.dispose(); _searchController.dispose(); + _searchFocusNode.dispose(); super.dispose(); } @@ -994,8 +1008,10 @@ class _RetailersListScreenState extends State { // 1. Sub-header: "Explore your benefits" | "📍 Riyadh" _buildSubHeaderRow(isAr), - // 2. Category Hero Section: Title, Subtitle, Category image - _buildCategoryHero(isAr), + // 2. Category Hero Section: Title, Subtitle, Category image - hidden when + // reached from Discover's search field, since there's no specific category + // context there and the search bar should be the first thing on screen. + if (!isSearchMode) _buildCategoryHero(isAr), // 3. Search Bar: "Find an escape or an experience" _buildSearchBar(isAr), @@ -1239,6 +1255,7 @@ class _RetailersListScreenState extends State { Expanded( child: TextField( controller: _searchController, + focusNode: _searchFocusNode, onChanged: _onSearchChanged, onSubmitted: (String val) { _debounceTimer?.cancel(); diff --git a/lib/ui/mazaya/saved_retailers_screen.dart b/lib/ui/mazaya/saved_retailers_screen.dart index 4e2bf0e0..63484cc0 100644 --- a/lib/ui/mazaya/saved_retailers_screen.dart +++ b/lib/ui/mazaya/saved_retailers_screen.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/offers_and_discounts_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/consts.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; @@ -257,6 +258,9 @@ class _SavedRetailersScreenState extends State { context, title: LocaleKeys.favoriteOffers.tr(), showHomeButton: false, + // Reached from the Mazaya bottom nav - same as Discover, no back button for a + // dependent-login session since this is one of their root tabs, not a pushed screen. + showBackButton: !ApiConsts.isDependetLogin, ), bottomNavigationBar: const MazayaBottomNav(currentTab: MazayaTab.saved), body: Column( diff --git a/lib/ui/mazaya/widgets/mazaya_bottom_nav.dart b/lib/ui/mazaya/widgets/mazaya_bottom_nav.dart index de6ff796..898478a3 100644 --- a/lib/ui/mazaya/widgets/mazaya_bottom_nav.dart +++ b/lib/ui/mazaya/widgets/mazaya_bottom_nav.dart @@ -1,6 +1,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:mohem_flutter_app/classes/consts.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/ui/mazaya/mazaya_discover_screen.dart'; @@ -34,21 +35,33 @@ class MazayaBottomNav extends StatelessWidget { break; case MazayaTab.myFamily: targetScreen = const FamilyMembers(); - settings = const RouteSettings(arguments: {'fromMazaya': true}); + settings = const RouteSettings( + arguments: {'fromMazaya': true}, + ); break; } Navigator.pushReplacement( context, PageRouteBuilder( settings: settings, - pageBuilder: (BuildContext context, Animation animation, Animation secondaryAnimation) => targetScreen, + pageBuilder: + ( + BuildContext context, + Animation animation, + Animation secondaryAnimation, + ) => targetScreen, transitionDuration: Duration.zero, reverseTransitionDuration: Duration.zero, ), ); } - Widget _buildItem(BuildContext context, {required MazayaTab tab, required String svgAsset, required String label}) { + Widget _buildItem( + BuildContext context, { + required MazayaTab tab, + required String svgAsset, + required String label, + }) { bool isActive = tab == currentTab; return Expanded( child: InkWell( @@ -56,9 +69,20 @@ class MazayaBottomNav extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - SvgPicture.asset(svgAsset, width: 22, height: 22, colorFilter: ColorFilter.mode(isActive ? _activeColor : _inactiveColor, BlendMode.srcIn)), + SvgPicture.asset( + svgAsset, + width: 22, + height: 22, + colorFilter: ColorFilter.mode( + isActive ? _activeColor : _inactiveColor, + BlendMode.srcIn, + ), + ), const SizedBox(height: 5), - label.toText11(weight: isActive ? FontWeight.w600 : FontWeight.w400, color: isActive ? _activeColor : _inactiveColor), + label.toText11( + weight: isActive ? FontWeight.w600 : FontWeight.w400, + color: isActive ? _activeColor : _inactiveColor, + ), ], ), ), @@ -70,13 +94,34 @@ class MazayaBottomNav extends StatelessWidget { return SafeArea( top: false, child: Container( - decoration: const BoxDecoration(color: Colors.white, border: Border(top: BorderSide(color: Color(0xFFE8EAE4)))), + decoration: const BoxDecoration( + color: Colors.white, + border: Border(top: BorderSide(color: Color(0xFFE8EAE4))), + ), padding: const EdgeInsets.only(top: 13, bottom: 9), child: Row( children: [ - _buildItem(context, tab: MazayaTab.discover, svgAsset: "assets/icons/mazaya_compass.svg", label: LocaleKeys.discover.tr()), - _buildItem(context, tab: MazayaTab.saved, svgAsset: "assets/icons/mazaya_heart_outline.svg", label: LocaleKeys.saved.tr()), - _buildItem(context, tab: MazayaTab.myFamily, svgAsset: "assets/icons/mazaya_user_round.svg", label: LocaleKeys.myFamily.tr()), + _buildItem( + context, + tab: MazayaTab.discover, + svgAsset: "assets/icons/mazaya_compass.svg", + label: LocaleKeys.discover.tr(), + ), + _buildItem( + context, + tab: MazayaTab.saved, + svgAsset: "assets/icons/mazaya_heart_outline.svg", + label: LocaleKeys.saved.tr(), + ), + // My Family lets the account holder manage their dependents' Mazaya access - not + // applicable (and not shown) when a dependent is the one logged in. + if (!ApiConsts.isDependetLogin) + _buildItem( + context, + tab: MazayaTab.myFamily, + svgAsset: "assets/icons/mazaya_user_round.svg", + label: LocaleKeys.myFamily.tr(), + ), ], ), ), diff --git a/lib/ui/profile/mazaya_access_result_screen.dart b/lib/ui/profile/mazaya_access_result_screen.dart index dd43f001..dfb1ad1b 100644 --- a/lib/ui/profile/mazaya_access_result_screen.dart +++ b/lib/ui/profile/mazaya_access_result_screen.dart @@ -1,9 +1,7 @@ import 'dart:io'; - import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:intl/intl.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; @@ -81,7 +79,8 @@ class MazayaAccessResultScreen extends StatelessWidget { final String? dateOfBirth; final String? message; - const MazayaAccessResultScreen({Key? key, this.isGranted = true, this.dependentName = "", this.dependentInitials, this.downloadUrl, this.nationalId, this.dateOfBirth, this.message}) : super(key: key); + const MazayaAccessResultScreen({Key? key, this.isGranted = true, this.dependentName = "", this.dependentInitials, this.downloadUrl, this.nationalId, this.dateOfBirth, this.message}) + : super(key: key); static String getDownloadLink() { int channel = AppState().postParamsObject?.channel ?? 31; @@ -187,7 +186,9 @@ class MazayaAccessResultScreen extends StatelessWidget { child: SingleChildScrollView( padding: const EdgeInsets.fromLTRB(20, 16, 20, 20), child: - effectiveGranted ? _buildGrantedContent(context, isAr, fontFamily, effectiveName, initials, linkToShare) : _buildRevokedContent(context, isAr, fontFamily, effectiveName, initials, effectiveMessage), + effectiveGranted + ? _buildGrantedContent(context, isAr, fontFamily, effectiveName, initials, linkToShare) + : _buildRevokedContent(context, isAr, fontFamily, effectiveName, initials, effectiveMessage), ), ), _buildBottomButtons(context, isAr, fontFamily, effectiveGranted, linkToShare, effectiveNationalId ?? "", effectiveDateOfBirth ?? ""), @@ -497,6 +498,8 @@ class MazayaAccessResultScreen extends StatelessWidget { } catch (_) {} } + + Widget _buildBottomButtons(BuildContext context, bool isAr, String fontFamily, bool granted, String linkToShare, String nationalId, String dateOfBirth) { if (granted) { return Container( diff --git a/lib/widgets/app_bar_widget.dart b/lib/widgets/app_bar_widget.dart index 41a6942e..e25165b2 100644 --- a/lib/widgets/app_bar_widget.dart +++ b/lib/widgets/app_bar_widget.dart @@ -11,6 +11,7 @@ AppBar AppBarWidget( BuildContext context, { required String title, bool showHomeButton = true, + bool showBackButton = true, bool showLogo = false, String? logoPath, bool showWorkListSettingButton = false, @@ -25,18 +26,19 @@ AppBar AppBarWidget( surfaceTintColor: Colors.transparent, title: Row( children: [ - GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: Feedback.wrapForTap(() { - (onBackTapped == null - ? Navigator.maybePop(context) - : onBackTapped()); - }, context), - child: const Icon( - Icons.arrow_back_ios, - color: MyColors.darkIconColor, + if (showBackButton) + GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: Feedback.wrapForTap(() { + (onBackTapped == null + ? Navigator.maybePop(context) + : onBackTapped()); + }, context), + child: const Icon( + Icons.arrow_back_ios, + color: MyColors.darkIconColor, + ), ), - ), if (showLogo) 4.width, if (showLogo) SvgPicture.asset(logoPath!), 4.width,