From 66e23197c546c5a2ba6ebad0609acd40f9940c35 Mon Sep 17 00:00:00 2001 From: tahaalam Date: Wed, 15 Apr 2026 10:39:08 +0300 Subject: [PATCH] referral lingual change --- assets/langs/ar-SA.json | 9 ++++- assets/langs/en-US.json | 9 ++++- .../emergency_services_view_model.dart | 38 ++++++++++--------- lib/generated/locale_keys.g.dart | 6 +++ .../e_referral/new_e_referral.dart | 2 +- .../widget/e_referral_other_details.dart | 4 +- .../widget/e_referral_patient_info.dart | 14 +++++-- .../widget/e_referral_requester_form.dart | 6 +-- .../widget/search_e_referral_form.dart | 26 +++++++------ 9 files changed, 73 insertions(+), 41 deletions(-) diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index 2ad381a8..de64d1ad 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -1757,7 +1757,12 @@ "calculateCaloriesBasedOnFactors": "حساب السعرات الحرارية اليومية بناءً على عدة عوامل مثل الطول، الوزن، العمر، الجنس، والنشاط البدني اليومي.", "conformationCall": "ستتلقى مكالمة لتأكيد طلبك قريباً.", "radiologyLabResults": "نتائج الأشعة", - "disclaimerRadiology": "تم تحليل نتائج الأشعة هذه بواسطة الذكاء الاصطناعي، وهي لا تُعدّ نصيحة طبية. استشر طبيبك المختص للتشخيص والعلاج." - + "disclaimerRadiology": "تم تحليل نتائج الأشعة هذه بواسطة الذكاء الاصطناعي، وهي لا تُعدّ نصيحة طبية. استشر طبيبك المختص للتشخيص والعلاج.", + "enterIdentificationNumberWithNoStar": "أدخل رقم الهوية", + "enterReferralNumber": "أدخل رقم الإحالة", + "referralNumber": "رقم الإحالة", + "phoneHint": "5xxxxxxxx", + "selectSearchCriteria": "اختر معيار البحث", + "selectCriteria": "اختيار المعيار" } diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index 7c4f2ab4..bc596d82 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -1745,8 +1745,13 @@ "insurance2": "Insurance", "conformationCall": "You will receive a call from HMG for confirmation ", "radiologyLabResults": "Radiology Results", - "disclaimerRadiology": "This radiology result was analyzed by AI, and it is not medical advice. Consult your healthcare provider for diagnosis and treatment." - + "disclaimerRadiology": "This radiology result was analyzed by AI, and it is not medical advice. Consult your healthcare provider for diagnosis and treatment.", + "enterIdentificationNumberWithNoStar": "Enter Identification Number", + "enterReferralNumber": "Enter Referral Number", + "referralNumber": "Referral Number", + "phoneHint": "5xxxxxxxx", + "selectSearchCriteria": "Select the Search Criteria", + "selectCriteria": "Select Criteria" } diff --git a/lib/features/emergency_services/emergency_services_view_model.dart b/lib/features/emergency_services/emergency_services_view_model.dart index 55e355fa..b74318f4 100644 --- a/lib/features/emergency_services/emergency_services_view_model.dart +++ b/lib/features/emergency_services/emergency_services_view_model.dart @@ -792,7 +792,6 @@ class EmergencyServicesViewModel extends ChangeNotifier { allOrders.clear(); allOrders.addAll(ambulanceOrders ?? []); allOrders.addAll(ordersRRT?.completedOrders ?? []); - _sortOrdersByDate(allOrders); changeOrderDisplayItems(OrderDislpay.ALL); notifyListeners(); }, @@ -967,7 +966,6 @@ class EmergencyServicesViewModel extends ChangeNotifier { allOrders.clear(); allOrders.addAll(ambulanceOrders ?? []); allOrders.addAll(ordersRRT?.completedOrders ?? []); - _sortOrdersByDate(allOrders); changeOrderDisplayItems(OrderDislpay.ALL); notifyListeners(); }, @@ -996,32 +994,38 @@ class EmergencyServicesViewModel extends ChangeNotifier { this.currentlyDisplayedOrder = currentlyDisplayedOrder; switch (currentlyDisplayedOrder) { case OrderDislpay.ALL: - orderDisplayList = allOrders; + orderDisplayList = List.from(allOrders); break; case OrderDislpay.RRT: - orderDisplayList = ordersRRT?.completedOrders ?? []; + orderDisplayList = List.from(ordersRRT?.completedOrders ?? []); break; case OrderDislpay.AMBULANCE: - orderDisplayList = ambulanceOrders ?? []; + orderDisplayList = List.from(ambulanceOrders ?? []); break; } - _sortOrdersByDate(orderDisplayList); + + orderDisplayList = _sortOrdersByDate(orderDisplayList); notifyListeners(); } - void _sortOrdersByDate(List list) { + List _sortOrdersByDate(List list) { list.sort((a, b) { - final String? dateA = _getCreatedDate(a); - final String? dateB = _getCreatedDate(b); - final bool hasDateA = dateA != null && dateA.contains('/Date('); - final bool hasDateB = dateB != null && dateB.contains('/Date('); - if (!hasDateA && !hasDateB) return 0; - if (!hasDateA) return 1; - if (!hasDateB) return -1; - final parsedA = DateUtil.convertStringToDate(dateA); - final parsedB = DateUtil.convertStringToDate(dateB); - return parsedB.compareTo(parsedA); + final DateTime? dateA = _parseCreatedDate(a); + final DateTime? dateB = _parseCreatedDate(b); + print("the dateA is $dateA and dateB is $dateB"); + if (dateA == null && dateB == null) return 0; + if (dateA == null) return 1; + if (dateB == null) return -1; + return dateB.compareTo(dateA); }); + return list; + } + + DateTime? _parseCreatedDate(dynamic order) { + final String? raw = _getCreatedDate(order); + + + return DateTime.tryParse(raw??""); } String? _getCreatedDate(dynamic order) { diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index 5ced1efb..66c7c094 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -1748,5 +1748,11 @@ abstract class LocaleKeys { static const conformationCall = 'conformationCall'; static const radiologyLabResults = 'radiologyLabResults'; static const disclaimerRadiology = 'disclaimerRadiology'; + static const enterIdentificationNumberWithNoStar = 'enterIdentificationNumberWithNoStar'; + static const enterReferralNumber = 'enterReferralNumber'; + static const referralNumber = 'referralNumber'; + static const phoneHint = 'phoneHint'; + static const selectSearchCriteria = 'selectSearchCriteria'; + static const selectCriteria = 'selectCriteria'; } diff --git a/lib/presentation/e_referral/new_e_referral.dart b/lib/presentation/e_referral/new_e_referral.dart index 8631fa62..b9d54942 100644 --- a/lib/presentation/e_referral/new_e_referral.dart +++ b/lib/presentation/e_referral/new_e_referral.dart @@ -193,7 +193,7 @@ class _NewReferralPageState extends State { children: List.generate(3, (index) { // Fill current step and all previous completed steps if (index <= _currentStep) { - return StepperWidget(widthOfOneState, AppColors.primaryRedColor, true, 4.h); + return StepperWidget(widthOfOneState, AppColors.primaryRedColor, index == _currentStep, 4.h); } else { return StepperWidget(widthOfOneState, AppColors.greyLightColor, false, 4.h); } diff --git a/lib/presentation/e_referral/widget/e_referral_other_details.dart b/lib/presentation/e_referral/widget/e_referral_other_details.dart index 579f281f..c30b67c3 100644 --- a/lib/presentation/e_referral/widget/e_referral_other_details.dart +++ b/lib/presentation/e_referral/widget/e_referral_other_details.dart @@ -142,8 +142,8 @@ class _OtherDetailsStepState extends State { Widget _buildBranchField(BuildContext context, ReferralFormManager formManager) { return DropdownWidget( - labelText: 'Branch', - hintText: formManager.formData.branch?.desciption ?? "Select Branch", + labelText: LocaleKeys.branch.tr(), + hintText: formManager.formData.branch?.desciption ?? LocaleKeys.selectBranch.tr(), isEnable: false, hasSelectionCustomIcon: true, labelColor: Colors.black, diff --git a/lib/presentation/e_referral/widget/e_referral_patient_info.dart b/lib/presentation/e_referral/widget/e_referral_patient_info.dart index efbac168..a30c0c3e 100644 --- a/lib/presentation/e_referral/widget/e_referral_patient_info.dart +++ b/lib/presentation/e_referral/widget/e_referral_patient_info.dart @@ -2,9 +2,11 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'dart:ui' as ui; import 'package:hmg_patient_app_new/core/app_export.dart'; +import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_all_cities_resp_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart'; import 'package:provider/provider.dart'; @@ -14,6 +16,8 @@ import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart'; import 'package:hmg_patient_app_new/widgets/input_widget.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; +import '../../../core/dependencies.dart' show getIt; + class PatientInformationStep extends StatefulWidget { const PatientInformationStep({super.key}); @@ -171,8 +175,8 @@ class PatientInformationStepState extends State { Widget _buildPatientCityField(BuildContext context, ReferralFormManager formManager) { return DropdownWidget( - labelText: 'City', - hintText: formManager.formData.patientCity?.description ?? LocaleKeys.selectCity.tr(context: context), + labelText: LocaleKeys.city.tr(), + hintText: getLocaleDescription(formManager.formData.patientCity) ?? LocaleKeys.selectCity.tr(context: context), isEnable: false, hasSelectionCustomIcon: true, labelColor: Colors.black, @@ -187,6 +191,10 @@ class PatientInformationStepState extends State { }); } + String? getLocaleDescription(GetAllCitiesResponseModel? patientCity){ + return getIt.get().isArabic() ? patientCity?.descriptionN: patientCity?.description; + } + void _showCityBottomSheet(BuildContext context, ReferralFormManager formManager) { @@ -217,7 +225,7 @@ class PatientInformationStepState extends State { itemBuilder: (context, index) { final city = cities[index]; return ListTile( - title: (city.description ?? 'Unknown').toText14(), + title: (getLocaleDescription(city) ?? 'Unknown').toText14(), onTap: () { formManager.updatePatientCity(city); Navigator.pop(context); diff --git a/lib/presentation/e_referral/widget/e_referral_requester_form.dart b/lib/presentation/e_referral/widget/e_referral_requester_form.dart index d57abe23..926aab4f 100644 --- a/lib/presentation/e_referral/widget/e_referral_requester_form.dart +++ b/lib/presentation/e_referral/widget/e_referral_requester_form.dart @@ -116,9 +116,9 @@ class RequesterFormStepState extends State { Widget _buildRelationshipField(BuildContext context, ReferralFormManager formManager) { return DropdownWidget( labelText: LocaleKeys.relationship.tr(context: context), - hintText: formManager.formData.relationship?.textEn ?? LocaleKeys.selectRelation.tr(context: context), + hintText: formManager.formData.relationship?.text ?? LocaleKeys.selectRelation.tr(context: context), isEnable: false, - selectedValue: formManager.formData.relationship?.textEn ?? LocaleKeys.selectRelation.tr(context: context), + selectedValue: formManager.formData.relationship?.text ?? LocaleKeys.selectRelation.tr(context: context), errorMessage: formManager.errors.relationship, hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.relationship), hasSelectionCustomIcon: false, @@ -182,7 +182,7 @@ class RequesterFormStepState extends State { itemBuilder: (context, index) { final relationship = hmgServicesVM.relationTypes[index]; return ListTile( - title:relationship.textEn?.toText14(), + title:relationship.text?.toText14(), onTap: () { formManager.updateRelationship(relationship); Navigator.pop(context); diff --git a/lib/presentation/e_referral/widget/search_e_referral_form.dart b/lib/presentation/e_referral/widget/search_e_referral_form.dart index 33697d5e..c19b8a40 100644 --- a/lib/presentation/e_referral/widget/search_e_referral_form.dart +++ b/lib/presentation/e_referral/widget/search_e_referral_form.dart @@ -1,6 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart'; import 'package:provider/provider.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; @@ -69,12 +72,13 @@ class SearchEReferralFormFormState extends State { autofocus: true, child: TextInputWidget( controller: _searchController, - padding: const EdgeInsets.symmetric(horizontal: 16.0), - hintText: formManager.searchCriteria == 0 ? "Enter Identification Number" : "Enter Referral Number", - labelText: formManager.searchCriteria == 0 ? "Identification Number" : "Referral Number", + hintText: formManager.searchCriteria == 0 ? LocaleKeys.enterIdentificationNumber.tr() : LocaleKeys.enterReferralNumber.tr(), + labelText: formManager.searchCriteria == 0 ? LocaleKeys.identificationNumber.tr() : LocaleKeys.referralNumber.tr(), keyboardType: TextInputType.number, fontFamily: "Poppins", errorMessage: formManager.errors.searchValue, + padding: EdgeInsets.symmetric(vertical: 14.h, horizontal: 16.h), + hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.searchValue), onChange: (value) { formManager.updateSearchValue(value ?? ''); @@ -90,10 +94,10 @@ class SearchEReferralFormFormState extends State { autofocus: false, child: TextInputWidget( autoFocus: false, - labelText: 'Phone Number', - hintText: "5xxxxxxxx", + labelText: LocaleKeys.phoneNumber.tr(), + hintText: LocaleKeys.phoneHint.tr(), controller: _phoneController, - padding: const EdgeInsets.all(8), + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), keyboardType: TextInputType.number, fontFamily: "Poppins", onChange: (value) { @@ -122,8 +126,8 @@ class SearchEReferralFormFormState extends State { Widget _buildSelectionField(BuildContext context, ReferralFormManager formManager) { return DropdownWidget( - labelText: "Select the Search Criteria", - hintText: formManager.searchCriteria == 0 ? "Identification Number" : "Referral Number", + labelText: LocaleKeys.selectCriteria.tr(), + hintText: formManager.searchCriteria == 0 ? LocaleKeys.identificationNumber.tr() : LocaleKeys.referralNumber.tr(), isEnable: false, hasSelectionCustomIcon: false, labelColor: Colors.black, @@ -137,13 +141,13 @@ class SearchEReferralFormFormState extends State { void _showCriteriaBottomSheet(BuildContext context, ReferralFormManager formManager) { final criteriaList = [ - {0: 'Identification Number'}, - {1: 'Referral Number'}, + {0: LocaleKeys.identificationNumber.tr()}, + {1: LocaleKeys.referralNumber.tr()}, ]; showCommonBottomSheetWithoutHeight( context, - title: "Select Criteria", + title: LocaleKeys.selectCriteria.tr(), child: ListView.separated( shrinkWrap: true, physics: const BouncingScrollPhysics(),