|  |  |  | @ -1,8 +1,10 @@ | 
		
	
		
			
				|  |  |  |  | import 'package:easy_localization/easy_localization.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:flutter/material.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/core/app_state.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/core/cache_consts.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/core/dependencies.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/core/utils/date_util.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/core/utils/doctor_response_mapper.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/core/utils/loading_utils.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/core/utils/utils.dart'; | 
		
	
	
		
			
				
					|  |  |  | @ -13,6 +15,8 @@ import 'package:hmg_patient_app_new/features/book_appointments/models/resp_model | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/doctors_list_response_model.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/get_clinic_list_response_model.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/features/book_appointments/models/timeslots.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/features/my_appointments/models/facility_selection.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/doctor_list_api_response.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; | 
		
	
	
		
			
				
					|  |  |  | @ -21,6 +25,7 @@ import 'package:hmg_patient_app_new/services/error_handler_service.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/services/navigation_service.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:location/location.dart' show Location; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | class BookAppointmentsViewModel extends ChangeNotifier { | 
		
	
		
			
				|  |  |  |  |   int selectedTabIndex = 0; | 
		
	
	
		
			
				
					|  |  |  | @ -60,6 +65,10 @@ class BookAppointmentsViewModel extends ChangeNotifier { | 
		
	
		
			
				|  |  |  |  |   MyAppointmentsViewModel myAppointmentsViewModel; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   late AppState _appState; | 
		
	
		
			
				|  |  |  |  |   RegionList? hospitalList; | 
		
	
		
			
				|  |  |  |  |   RegionList? filteredHospitalList; | 
		
	
		
			
				|  |  |  |  |   FacilitySelection currentlySelectedFacility = FacilitySelection.ALL; | 
		
	
		
			
				|  |  |  |  |   bool isRegionListLoading = false; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   BookAppointmentsViewModel({required this.bookAppointmentsRepo, required this.errorHandlerService, required this.navigationService, required this.myAppointmentsViewModel}); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -380,4 +389,84 @@ class BookAppointmentsViewModel extends ChangeNotifier { | 
		
	
		
			
				|  |  |  |  |       }, | 
		
	
		
			
				|  |  |  |  |     ); | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   Future<void> getRegionMappedProjectList() async { | 
		
	
		
			
				|  |  |  |  |     if(hospitalList != null && hospitalList!.registeredDoctorMap != null && hospitalList!.registeredDoctorMap!.isNotEmpty){ | 
		
	
		
			
				|  |  |  |  |       filteredHospitalList = hospitalList; | 
		
	
		
			
				|  |  |  |  |       return; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     isRegionListLoading = true; | 
		
	
		
			
				|  |  |  |  |     notifyListeners(); | 
		
	
		
			
				|  |  |  |  |     final result = await bookAppointmentsRepo.getProjectList(); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     result.fold( | 
		
	
		
			
				|  |  |  |  |           (failure) async => | 
		
	
		
			
				|  |  |  |  |       await errorHandlerService.handleError(failure: failure), | 
		
	
		
			
				|  |  |  |  |           (apiResponse) async { | 
		
	
		
			
				|  |  |  |  |         if (apiResponse.messageStatus == 2) { | 
		
	
		
			
				|  |  |  |  |           // dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {}); | 
		
	
		
			
				|  |  |  |  |         } else if (apiResponse.messageStatus == 1) { | 
		
	
		
			
				|  |  |  |  |           var projectList = apiResponse.data!; | 
		
	
		
			
				|  |  |  |  |           hospitalList = await DoctorMapper.getMappedHospitals(projectList, | 
		
	
		
			
				|  |  |  |  |               isArabic: false); | 
		
	
		
			
				|  |  |  |  |           var lat = await Utils.getNumFromPrefs(CacheConst.userLat); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |           var lng = await Utils.getNumFromPrefs(CacheConst.userLong); | 
		
	
		
			
				|  |  |  |  |           var isLocationEnabled = (lat != 0) && (lng != 0); | 
		
	
		
			
				|  |  |  |  |           hospitalList = | 
		
	
		
			
				|  |  |  |  |           await DoctorMapper.sortList(isLocationEnabled, hospitalList!); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |           isRegionListLoading = false; | 
		
	
		
			
				|  |  |  |  |           filteredHospitalList = hospitalList; | 
		
	
		
			
				|  |  |  |  |           notifyListeners(); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |       }, | 
		
	
		
			
				|  |  |  |  |     ); | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   void setSelectedFacility(FacilitySelection selection) { | 
		
	
		
			
				|  |  |  |  |     currentlySelectedFacility = selection; | 
		
	
		
			
				|  |  |  |  |     notifyListeners(); | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   void filterHospitalListByString(String? value, String? selectedRegionId, bool isHMG) { | 
		
	
		
			
				|  |  |  |  |     if(value ==null || value.isEmpty){ | 
		
	
		
			
				|  |  |  |  |       filteredHospitalList = hospitalList; | 
		
	
		
			
				|  |  |  |  |     } else { | 
		
	
		
			
				|  |  |  |  |       filteredHospitalList = RegionList(); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       var list = isHMG | 
		
	
		
			
				|  |  |  |  |           ? hospitalList?.registeredDoctorMap![selectedRegionId]!.hmgDoctorList | 
		
	
		
			
				|  |  |  |  |           : hospitalList?.registeredDoctorMap![selectedRegionId]!.hmcDoctorList; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       if(list != null && list.isEmpty){ notifyListeners(); return;} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       var filteredList = list!.where((element) => | 
		
	
		
			
				|  |  |  |  |           element.filterName!.toLowerCase().contains(value.toLowerCase()) | 
		
	
		
			
				|  |  |  |  |       ).toList(); | 
		
	
		
			
				|  |  |  |  |       var regionData = PatientDoctorAppointmentListByRegion(); | 
		
	
		
			
				|  |  |  |  |       if(isHMG){ | 
		
	
		
			
				|  |  |  |  |         regionData.hmgDoctorList = filteredList; | 
		
	
		
			
				|  |  |  |  |         regionData.hmgSize = filteredList.length; | 
		
	
		
			
				|  |  |  |  |       } else { | 
		
	
		
			
				|  |  |  |  |         regionData.hmcDoctorList = filteredList; | 
		
	
		
			
				|  |  |  |  |         regionData.hmcSize = filteredList.length; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       filteredHospitalList?.registeredDoctorMap = { | 
		
	
		
			
				|  |  |  |  |         selectedRegionId! : regionData | 
		
	
		
			
				|  |  |  |  |       }; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     notifyListeners(); | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   Future<bool> isLocationEnabled() async{ | 
		
	
		
			
				|  |  |  |  |     return await Location().serviceEnabled(); | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   bool getLocationStatus() { | 
		
	
		
			
				|  |  |  |  |     bool isLocationAvaiable =  false; | 
		
	
		
			
				|  |  |  |  |     isLocationEnabled().then((value) => isLocationAvaiable = value); | 
		
	
		
			
				|  |  |  |  |     return isLocationAvaiable; | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | } | 
		
	
	
		
			
				
					|  |  |  | 
 |