Merge remote-tracking branch 'origin/faiz_dev1' into dev_aamir
# Conflicts: # lib/main.dart # lib/presentation/authentication/register.dart # lib/providers/authentication_view_model.dartpull/8/head
						commit
						5e292544d7
					
				| @ -0,0 +1,512 @@ | ||||
| import 'dart:async'; | ||||
| import 'dart:convert'; | ||||
| import 'dart:developer'; | ||||
| import 'dart:io' show Platform; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:hmg_patient_app_new/core/api_consts.dart'; | ||||
| import 'package:hmg_patient_app_new/core/app_state.dart'; | ||||
| import 'package:hmg_patient_app_new/core/dependencies.dart'; | ||||
| import 'package:hmg_patient_app_new/core/utils/utils.dart'; | ||||
| import 'package:hmg_patient_app_new/services/analytics/analytics_service.dart'; | ||||
| import 'package:hmg_patient_app_new/services/logger_service.dart'; | ||||
| import 'package:http/http.dart' as http; | ||||
| 
 | ||||
| abstract class ApiClient { | ||||
|   Future<void> post( | ||||
|     String endPoint, { | ||||
|     required Map<String, dynamic> body, | ||||
|     required Function(dynamic response, int statusCode) onSuccess, | ||||
|     required Function(String error, int statusCode) onFailure, | ||||
|     bool isAllowAny, | ||||
|     bool isExternal, | ||||
|     bool isRCService, | ||||
|     bool bypassConnectionCheck, | ||||
|   }); | ||||
| 
 | ||||
|   Future<void> get( | ||||
|     String endPoint, { | ||||
|     required Function(dynamic response, int statusCode) onSuccess, | ||||
|     required Function(String error, int statusCode) onFailure, | ||||
|     Map<String, dynamic>? queryParams, | ||||
|     bool isExternal, | ||||
|     bool isRCService, | ||||
|   }); | ||||
| 
 | ||||
|   Future<void> simplePost( | ||||
|     String fullUrl, { | ||||
|     required Map<dynamic, dynamic> body, | ||||
|     required Map<String, String> headers, | ||||
|     required Function(dynamic response, int statusCode) onSuccess, | ||||
|     required Function(String error, int statusCode) onFailure, | ||||
|   }); | ||||
| 
 | ||||
|   Future<void> simpleGet( | ||||
|     String fullUrl, { | ||||
|     Function(dynamic response, int statusCode)? onSuccess, | ||||
|     Function(String error, int statusCode)? onFailure, | ||||
|     Map<String, dynamic>? queryParams, | ||||
|     Map<String, String>? headers, | ||||
|   }); | ||||
| 
 | ||||
|   Future<void> simplePut( | ||||
|     String fullUrl, { | ||||
|     Map<String, dynamic>? body, | ||||
|     Map<String, String>? headers, | ||||
|     Function(dynamic response, int statusCode)? onSuccess, | ||||
|     Function(String error, int statusCode)? onFailure, | ||||
|   }); | ||||
| 
 | ||||
|   Future<void> simpleDelete( | ||||
|     String fullUrl, { | ||||
|     Function(dynamic response, int statusCode)? onSuccess, | ||||
|     Function(String error, int statusCode)? onFailure, | ||||
|     Map<String, String>? queryParams, | ||||
|     Map<String, String>? headers, | ||||
|   }); | ||||
| 
 | ||||
|   Future<bool> handleUnauthorized(int statusCode, {required String forUrl}); | ||||
| 
 | ||||
|   String getSessionId(String id); | ||||
| 
 | ||||
|   Future<String> generatePackagesToken(); | ||||
| } | ||||
| 
 | ||||
| class ApiClientImp implements ApiClient { | ||||
|   final _analytics = getIt<GAnalytics>(); | ||||
| 
 | ||||
|   final LoggerService loggerService; | ||||
| 
 | ||||
|   ApiClientImp({required this.loggerService}); | ||||
| 
 | ||||
|   @override | ||||
|   post(String endPoint, | ||||
|       {required Map<String, dynamic> body, | ||||
|       required Function(dynamic response, int statusCode) onSuccess, | ||||
|       required Function(String error, int statusCode) onFailure, | ||||
|       bool isAllowAny = false, | ||||
|       bool isExternal = false, | ||||
|       bool isRCService = false, | ||||
|       bool bypassConnectionCheck = false}) async { | ||||
|     AppState appState = getIt.get<AppState>(); | ||||
|     String url; | ||||
|     if (isExternal) { | ||||
|       url = endPoint; | ||||
|     } else { | ||||
|       if (isRCService) { | ||||
|         url = RC_BASE_URL + endPoint; | ||||
|       } else { | ||||
|         url = BASE_URL + endPoint; | ||||
|       } | ||||
|     } | ||||
|     try { | ||||
|       var user = appState.getAuthenticatedUser; | ||||
|       Map<String, String> headers = {'Content-Type': 'application/json', 'Accept': 'application/json'}; | ||||
|       if (!isExternal) { | ||||
|         String? token = appState.appAuthToken; | ||||
|         String? languageID = (appState.postParamsObject?.languageID == 1 ? 'ar' : 'en') ?? 'ar'; | ||||
|         if (endPoint == ApiConsts.sendActivationCode) { | ||||
|           languageID = 'en'; | ||||
|         } | ||||
|         if (body.containsKey('SetupID')) { | ||||
|           body['SetupID'] = body.containsKey('SetupID') ? body['SetupID'] ?? body[''] : SETUP_ID; | ||||
|         } else {} | ||||
| 
 | ||||
|         if (body.containsKey('LanguageID')) { | ||||
|           if (body['LanguageID'] != null) { | ||||
|             //change this line because language issue happened on dental | ||||
|             body['LanguageID'] = body['LanguageID'] == 'ar' | ||||
|                 ? 1 | ||||
|                 : body['LanguageID'] == 'en' | ||||
|                     ? 2 | ||||
|                     : body['LanguageID']; | ||||
|           } | ||||
|         } | ||||
| 
 | ||||
|         if (body.containsKey('isDentalAllowedBackend')) { | ||||
|           body['isDentalAllowedBackend'] = body.containsKey('isDentalAllowedBackend') | ||||
|               ? body['isDentalAllowedBackend'] ?? IS_DENTAL_ALLOWED_BACKEND | ||||
|               : IS_DENTAL_ALLOWED_BACKEND; | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         //Todo:  I have converted it to string | ||||
|         body['DeviceTypeID'] = Platform.isIOS | ||||
|             ? "1" | ||||
|             : await Utils.isGoogleServicesAvailable() | ||||
|                 ? "2" | ||||
|                 : "3"; | ||||
| 
 | ||||
|         if (!body.containsKey('IsPublicRequest')) { | ||||
|           // if (!body.containsKey('PatientType')) { | ||||
|           if (user != null && user.patientType != null) { | ||||
|             body['PatientType'] = user.patientType; | ||||
|           } else { | ||||
|             body['PatientType'] = PATIENT_TYPE.toString(); | ||||
|           } | ||||
| 
 | ||||
|           if (user != null && user.patientType != null) { | ||||
|             body['PatientTypeID'] = user.patientType; | ||||
|           } else { | ||||
|             body['PatientType'] = PATIENT_TYPE_ID.toString(); | ||||
|           } | ||||
| 
 | ||||
|           if (user != null) { | ||||
|             body['TokenID'] = body['TokenID'] ?? token; | ||||
|             body['PatientID'] = body['PatientID'] ?? user.patientID; | ||||
| 
 | ||||
|             body['PatientOutSA'] = body.containsKey('PatientOutSA') ? body['PatientOutSA'] ?? user.outSA : user.outSA; | ||||
|             body['SessionID'] = getSessionId(body['TokenID'] ?? ""); //getSe | ||||
|           } | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
| 
 | ||||
|       body['LanguageID']   = body['LanguageID'] ?? "2"; | ||||
|       body['VersionID']    = body['VersionID'] ?? "18.7"; | ||||
|       body['Channel']      = body['Channel'] ?? "3"; | ||||
|       body['IPAdress']     = body['IPAdress'] ?? "10.20.10.20"; | ||||
|       body['generalid']    = body['generalid'] ?? "Cs2020@2016\$2958"; | ||||
|       body['Latitude']     = body['Latitude'] ?? "0.0"; | ||||
|       body['Longitude']    = body['Longitude'] ?? "0.0"; | ||||
|       body['DeviceTypeID'] = body['DeviceTypeID'] ?? | ||||
| 
 | ||||
| 
 | ||||
|           (Platform.isIOS ? "1" : await Utils.isGoogleServicesAvailable() ? "2" : "3"); | ||||
|       //"LanguageID":1,"VersionID":18.7,"Channel":3,"IPAdress":"10.20.10.20","generalid":"Cs2020@2016$2958","Latitude":0.0,"Longitude":0.0,"DeviceTypeID":2,"PatientType":1} | ||||
|       body.removeWhere((key, value) => value == null); | ||||
| 
 | ||||
|       log("bodi: ${json.encode(body)}"); | ||||
|       log("bodi: ${Uri.parse(url.trim())}"); | ||||
| 
 | ||||
|       if (await Utils.checkConnection(bypassConnectionCheck: bypassConnectionCheck)) { | ||||
| 
 | ||||
|         final response = await http.post(Uri.parse(url.trim()), body: json.encode(body), headers: headers); | ||||
| 
 | ||||
|         final int statusCode = response.statusCode; | ||||
|         if (statusCode < 200 || statusCode >= 400) { | ||||
|           onFailure('Error While Fetching data', statusCode); | ||||
|           logApiEndpointError(endPoint, 'Error While Fetching data', statusCode); | ||||
|         } else { | ||||
|           var parsed =  json.decode(utf8.decode(response.bodyBytes)); | ||||
|           log("parsed: ${parsed.toString()}"); | ||||
|           if (isAllowAny) { | ||||
|             onSuccess(parsed, statusCode); | ||||
|           } else { | ||||
|             if (parsed['Response_Message'] != null) { | ||||
|               onSuccess(parsed, statusCode); | ||||
|             } else { | ||||
|               if (parsed['ErrorType'] == 4) { | ||||
|                 //TODO : handle app update | ||||
|                 logApiEndpointError(endPoint, parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); | ||||
|               } | ||||
|               if (parsed['ErrorType'] == 2) { | ||||
|                 // todo: handle Logout | ||||
|                 logApiEndpointError(endPoint, "session logged out", statusCode); | ||||
|               } | ||||
|               if (isAllowAny) { | ||||
|                 onSuccess(parsed, statusCode); | ||||
|               } else if (parsed['IsAuthenticated'] == null) { | ||||
|                 if (parsed['isSMSSent'] == true) { | ||||
|                   onSuccess(parsed, statusCode); | ||||
|                 } else if (parsed['MessageStatus'] == 1) { | ||||
|                   onSuccess(parsed, statusCode); | ||||
|                 } else if (parsed['Result'] == 'OK') { | ||||
|                   onSuccess(parsed, statusCode); | ||||
|                 } else { | ||||
| 
 | ||||
|                   onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); | ||||
|                   logApiEndpointError(endPoint, parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); | ||||
| 
 | ||||
|                 } | ||||
|               } else if (parsed['MessageStatus'] == 1 || parsed['SMSLoginRequired'] == true) { | ||||
|                 onSuccess(parsed, statusCode); | ||||
|               } else if (parsed['MessageStatus'] == 2 && parsed['IsAuthenticated']) { | ||||
|                 if (parsed['SameClinicApptList'] != null) { | ||||
|                   onSuccess(parsed, statusCode); | ||||
|                 } else { | ||||
|                   if (parsed['message'] == null && parsed['ErrorEndUserMessage'] == null) { | ||||
|                     if (parsed['ErrorSearchMsg'] == null) { | ||||
|                       onFailure("Server Error found with no available message", statusCode); | ||||
|                       logApiEndpointError(endPoint, "Server Error found with no available message", statusCode); | ||||
|                     } else { | ||||
|                       onFailure(parsed['ErrorSearchMsg'], statusCode); | ||||
|                       logApiEndpointError(endPoint, parsed['ErrorSearchMsg'], statusCode); | ||||
|                     } | ||||
|                   } else { | ||||
|                     onFailure(parsed['message'] ?? parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); | ||||
|                     logApiEndpointError(endPoint, parsed['message'] ?? parsed['message'], statusCode); | ||||
|                   } | ||||
|                 } | ||||
|               } | ||||
| 
 | ||||
|               else { | ||||
|                 if (parsed['SameClinicApptList'] != null) { | ||||
|                   onSuccess(parsed, statusCode); | ||||
|                 } else { | ||||
|                   if (parsed['message'] != null) { | ||||
|                     onFailure(parsed['message'] ?? parsed['message'], statusCode); | ||||
|                     logApiEndpointError(endPoint, parsed['message'] ?? parsed['message'], statusCode); | ||||
|                   } else { | ||||
|                     onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); | ||||
|                     logApiEndpointError(endPoint, parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); | ||||
|                   } | ||||
|                 } | ||||
|               } | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|       } else { | ||||
|         onFailure('Please Check The Internet Connection 1', -1); | ||||
|         _analytics.errorTracking.log("internet_connectivity", error: "no internet available"); | ||||
|       } | ||||
|     } catch (e) { | ||||
|       loggerService.errorLogs(e.toString()); | ||||
|       if (e.toString().contains("ClientException")) { | ||||
|         onFailure('Something went wrong, plase try again', -1); | ||||
|         _analytics.errorTracking.log("internet_connectivity", error: "no internet available"); | ||||
|       } else { | ||||
|         onFailure(e.toString(), -1); | ||||
|       } | ||||
|       _analytics.errorTracking.log(endPoint, error: "api exception: $e - API Path: $url"); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   get(String endPoint, | ||||
|       {required Function(dynamic response, int statusCode) onSuccess, | ||||
|       required Function(String error, int statusCode) onFailure, | ||||
|       Map<String, dynamic>? queryParams, | ||||
|       bool isExternal = false, | ||||
|       bool isRCService = false}) async { | ||||
|     String url; | ||||
|     if (isExternal) { | ||||
|       url = endPoint; | ||||
|     } else { | ||||
|       if (isRCService) { | ||||
|         url = RC_BASE_URL + endPoint; | ||||
|       } else { | ||||
|         url = BASE_URL + endPoint; | ||||
|       } | ||||
|     } | ||||
|     if (queryParams != null) { | ||||
|       String queryString = Uri(queryParameters: queryParams).query; | ||||
|       url += '?$queryString'; | ||||
|     } | ||||
| 
 | ||||
|     debugPrint("URL : $url"); | ||||
|     // print("Body : ${json.encode(body)}"); | ||||
| 
 | ||||
|     if (await Utils.checkConnection()) { | ||||
|       final response = await http.get( | ||||
|         Uri.parse(url.trim()), | ||||
|         headers: {'Content-Type': 'application/json', 'Accept': 'application/json'}, | ||||
|       ); | ||||
|       final int statusCode = response.statusCode; | ||||
|       // print("statusCode :$statusCode"); | ||||
| 
 | ||||
|       if (statusCode < 200 || statusCode >= 400) { | ||||
|         onFailure!('Error While Fetching data', statusCode); | ||||
|         logApiEndpointError(endPoint, 'Error While Fetching data', statusCode); | ||||
|       } else { | ||||
|         var parsed = json.decode(utf8.decode(response.bodyBytes)); | ||||
|         onSuccess!(parsed, statusCode); | ||||
|       } | ||||
|     } else { | ||||
|       onFailure!('Please Check The Internet Connection', -1); | ||||
|       _analytics.errorTracking.log("internet_connectivity", error: "no internet available"); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   simplePost( | ||||
|     String fullUrl, { | ||||
|     required Map<dynamic, dynamic> body, | ||||
|     required Map<String, String> headers, | ||||
|     required Function(dynamic response, int statusCode) onSuccess, | ||||
|     required Function(String error, int statusCode) onFailure, | ||||
|   }) async { | ||||
|     String url = fullUrl; | ||||
|     // print("URL Query String: $url"); | ||||
|     // print("body: $body"); | ||||
| 
 | ||||
|     if (await Utils.checkConnection()) { | ||||
|       headers!.addAll({'Content-Type': 'application/json', 'Accept': 'application/json'}); | ||||
|       final response = await http.post( | ||||
|         Uri.parse(url.trim()), | ||||
|         body: json.encode(body), | ||||
|         headers: headers, | ||||
|       ); | ||||
|       final int statusCode = response.statusCode; | ||||
|       // print("statusCode :$statusCode"); | ||||
|       if (await handleUnauthorized(statusCode, forUrl: fullUrl)) | ||||
|         simplePost(fullUrl, onFailure: onFailure, onSuccess: onSuccess, body: body, headers: headers); | ||||
| 
 | ||||
|       // print(response.body.toString()); | ||||
| 
 | ||||
|       if (statusCode < 200 || statusCode >= 400) { | ||||
|         onFailure!('Error While Fetching data', statusCode); | ||||
|         logApiFullUrlError(fullUrl, 'Error While Fetching data', statusCode); | ||||
|       } else { | ||||
|         onSuccess!(response.body.toString(), statusCode); | ||||
|       } | ||||
|     } else { | ||||
|       onFailure!('Please Check The Internet Connection', -1); | ||||
|       _analytics.errorTracking.log("internet_connectivity", error: "no internet available"); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   simpleGet(String fullUrl, | ||||
|       {Function(dynamic response, int statusCode)? onSuccess, | ||||
|       Function(String error, int statusCode)? onFailure, | ||||
|       Map<String, dynamic>? queryParams, | ||||
|       Map<String, String>? headers}) async { | ||||
|     headers = headers ?? {}; | ||||
|     String url = fullUrl; | ||||
| 
 | ||||
|     var haveParams = (queryParams != null); | ||||
|     if (haveParams) { | ||||
|       String queryString = Uri(queryParameters: queryParams).query; | ||||
|       url += '?$queryString'; | ||||
|       // print("URL Query String: $url"); | ||||
|     } | ||||
| 
 | ||||
|     if (await Utils.checkConnection()) { | ||||
|       headers.addAll({'Content-Type': 'application/json', 'Accept': 'application/json'}); | ||||
|       final response = await http.get( | ||||
|         Uri.parse(url.trim()), | ||||
|         headers: headers, | ||||
|       ); | ||||
| 
 | ||||
|       final int statusCode = response.statusCode; | ||||
|       // print("statusCode :$statusCode"); | ||||
|       if (await handleUnauthorized(statusCode, forUrl: fullUrl)) | ||||
|         simpleGet(fullUrl, onFailure: onFailure, onSuccess: onSuccess, headers: headers, queryParams: queryParams); | ||||
| 
 | ||||
|       if (statusCode < 200 || statusCode >= 400) { | ||||
|         onFailure!('Error While Fetching data', statusCode); | ||||
|         logApiFullUrlError(fullUrl, 'Error While Fetching data', statusCode); | ||||
|       } else { | ||||
|         onSuccess!(response.body.toString(), statusCode); | ||||
|       } | ||||
|     } else { | ||||
|       onFailure!('Please Check The Internet Connection', -1); | ||||
|       _analytics.errorTracking.log("internet_connectivity", error: "no internet available"); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   simplePut(String fullUrl, | ||||
|       {Map<String, dynamic>? body, | ||||
|       Map<String, String>? headers, | ||||
|       Function(dynamic response, int statusCode)? onSuccess, | ||||
|       Function(String error, int statusCode)? onFailure}) async { | ||||
|     String url = fullUrl; | ||||
|     // print("URL Query String: $url"); | ||||
| 
 | ||||
|     if (await Utils.checkConnection()) { | ||||
|       headers!.addAll({'Content-Type': 'application/json', 'Accept': 'application/json'}); | ||||
|       final response = await http.put( | ||||
|         Uri.parse(url.trim()), | ||||
|         body: json.encode(body), | ||||
|         headers: headers, | ||||
|       ); | ||||
| 
 | ||||
|       final int statusCode = response.statusCode; | ||||
|       // print("statusCode :$statusCode"); | ||||
|       if (await handleUnauthorized(statusCode, forUrl: fullUrl)) | ||||
|         simplePut(fullUrl, onFailure: onFailure, onSuccess: onSuccess, headers: headers, body: body); | ||||
| 
 | ||||
|       if (statusCode < 200 || statusCode >= 400) { | ||||
|         onFailure!('Error While Fetching data', statusCode); | ||||
|         logApiFullUrlError(fullUrl, 'Error While Fetching data', statusCode); | ||||
|       } else { | ||||
|         onSuccess!(response.body.toString(), statusCode); | ||||
|       } | ||||
|     } else { | ||||
|       onFailure!('Please Check The Internet Connection', -1); | ||||
|       _analytics.errorTracking.log("internet_connectivity", error: "no internet available"); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   simpleDelete(String fullUrl, | ||||
|       {Function(dynamic response, int statusCode)? onSuccess, | ||||
|       Function(String error, int statusCode)? onFailure, | ||||
|       Map<String, String>? queryParams, | ||||
|       Map<String, String>? headers}) async { | ||||
|     String url = fullUrl; | ||||
|     // print("URL Query String: $url"); | ||||
| 
 | ||||
|     var haveParams = (queryParams != null); | ||||
|     if (haveParams) { | ||||
|       String queryString = Uri(queryParameters: queryParams).query; | ||||
|       url += '?$queryString'; | ||||
|       // print("URL Query String: $url"); | ||||
|     } | ||||
| 
 | ||||
|     if (await Utils.checkConnection()) { | ||||
|       headers!.addAll({'Content-Type': 'application/json', 'Accept': 'application/json'}); | ||||
|       final response = await http.delete( | ||||
|         Uri.parse(url.trim()), | ||||
|         headers: headers, | ||||
|       ); | ||||
| 
 | ||||
|       final int statusCode = response.statusCode; | ||||
|       // print("statusCode :$statusCode"); | ||||
|       if (await handleUnauthorized(statusCode, forUrl: fullUrl)) | ||||
|         simpleDelete(fullUrl, onFailure: onFailure, onSuccess: onSuccess, queryParams: queryParams, headers: headers); | ||||
| 
 | ||||
|       if (statusCode < 200 || statusCode >= 400) { | ||||
|         onFailure!('Error While Fetching data', statusCode); | ||||
|         logApiFullUrlError(fullUrl, 'Error While Fetching data', statusCode); | ||||
|       } else { | ||||
|         onSuccess!(response.body.toString(), statusCode); | ||||
|       } | ||||
|     } else { | ||||
|       onFailure!('Please Check The Internet Connection', -1); | ||||
|       _analytics.errorTracking.log("internet_connectivity", error: "no internet available"); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   Future<bool> handleUnauthorized(int statusCode, {required String forUrl}) async { | ||||
|     if (forUrl.startsWith(EXA_CART_API_BASE_URL) && statusCode == 401) { | ||||
|       final token = await generatePackagesToken(); | ||||
|       ApiConsts.packagesAuthHeader['Authorization'] = 'Bearer $token'; | ||||
|       return (token is String); | ||||
|     } | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
|   String getSessionId(String id) { | ||||
|     return id.replaceAll(RegExp('/[^a-zA-Z]'), ''); | ||||
|   } | ||||
| 
 | ||||
|   Future<String> generatePackagesToken() async { | ||||
|     var url = EXA_CART_API_BASE_URL + PACKAGES_TOKEN; | ||||
|     var body = { | ||||
|       "api_client": { | ||||
|         "client_id": "a4ab6be4-424f-4836-b032-46caed88e184", | ||||
|         "client_secret": "3c1a3e07-4a40-4510-9fb0-ee5f0a72752c" | ||||
|       } | ||||
|     }; | ||||
|     String? token; | ||||
|     final completer = Completer(); | ||||
|     simplePost(url, body: body, headers: {}, onSuccess: (dynamic stringResponse, int statusCode) { | ||||
|       if (statusCode == 200) { | ||||
|         var jsonResponse = json.decode(stringResponse); | ||||
|         token = jsonResponse['auth_token']; | ||||
|         completer.complete(); | ||||
|       } | ||||
|     }, onFailure: (String error, int statusCode) { | ||||
|       completer.complete(); | ||||
|       logApiFullUrlError(url, error, statusCode); | ||||
|     }); | ||||
|     await completer.future; | ||||
|     return token!; | ||||
|   } | ||||
| 
 | ||||
|   logApiFullUrlError(String fullUrl, error, code) { | ||||
|     final endpoint = Uri.parse(fullUrl).pathSegments.last; | ||||
|     logApiEndpointError(endpoint, error, code); | ||||
|   } | ||||
| 
 | ||||
|   logApiEndpointError(String endPoint, error, code) { | ||||
|     _analytics.errorTracking.log(endPoint, error: error); | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,765 @@ | ||||
| import 'dart:io'; | ||||
| 
 | ||||
| var MAX_SMALL_SCREEN = 660; | ||||
| final OPENTOK_API_KEY = '46209962'; | ||||
| // final OPENTOK_API_KEY = '47464241'; | ||||
| 
 | ||||
| // PACKAGES and OFFERS | ||||
| var EXA_CART_API_BASE_URL = 'https://mdlaboratories.com/offersdiscounts'; | ||||
| // var  EXA_CART_API_BASE_URL = 'http://10.200.101.75:9000'; | ||||
| var PACKAGES_CATEGORIES = '/api/categories'; | ||||
| var PACKAGES_STORES = '/api/stores'; | ||||
| var PACKAGES_TOKEN = '/api/token'; | ||||
| var PACKAGES_PRODUCTS = '/api/products'; | ||||
| var PACKAGES_CUSTOMER = '/api/customers'; | ||||
| var PACKAGES_SHOPPING_CART = '/api/shopping_cart_items'; | ||||
| var PACKAGES_ORDERS = '/api/orders'; | ||||
| var PACKAGES_ORDER_HISTORY = '/api/orders/items'; | ||||
| var PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara'; | ||||
| // var  BASE_URL = 'http://10.50.100.198:2018/'; | ||||
| var  BASE_URL = 'https://uat.hmgwebservices.com/'; | ||||
| // var BASE_URL = 'https://hmgwebservices.com/'; | ||||
| // var  BASE_URL = 'http://10.201.204.103/'; | ||||
| // var BASE_URL = 'https://orash.cloudsolutions.com.sa/'; | ||||
| // var BASE_URL = 'https://vidauat.cloudsolutions.com.sa/'; | ||||
| // var BASE_URL = 'https://vidamergeuat.cloudsolutions.com.sa/'; | ||||
| 
 | ||||
| // var BASE_URL = 'https://webservices.hmg.com/'; | ||||
| 
 | ||||
| // var BASE_URL = 'http://10.50.100.198:4422/'; | ||||
| 
 | ||||
| // Pharmacy UAT URLs | ||||
| //  var  BASE_PHARMACY_URL = 'https://uat.hmgwebservices.com/epharmacy/api/'; | ||||
| //  var  PHARMACY_BASE_URL = 'https://uat.hmgwebservices.com/epharmacy/api/'; | ||||
| 
 | ||||
| // // Pharmacy Production URLs | ||||
| var BASE_PHARMACY_URL = 'https://mdlaboratories.com/exacartapi/api/'; | ||||
| var PHARMACY_BASE_URL = 'https://mdlaboratories.com/exacartapi/api/'; | ||||
| 
 | ||||
| var PHARMACY_REDIRECT_URL = 'https://bit.ly/AlhabibPharmacy'; | ||||
| 
 | ||||
| // Pharmacy VidaPlus URLs | ||||
| // var BASE_PHARMACY_URL = 'https://mdlaboratories.com/exacartapitest/api/'; | ||||
| // var PHARMACY_BASE_URL = 'https://mdlaboratories.com/exacartapitest/api/'; | ||||
| 
 | ||||
| // // Pharmacy Pre-Production URLs | ||||
| // var  BASE_PHARMACY_URL = 'https://mdlaboratories.com/exacartapitest/api/'; | ||||
| // var  PHARMACY_BASE_URL = 'https://mdlaboratories.com/exacartapitest/api/'; | ||||
| 
 | ||||
| // RC API URL | ||||
| var RC_BASE_URL = 'https://rc.hmg.com/'; | ||||
| 
 | ||||
| // var RC_BASE_URL = 'https://rc.hmg.com/test/'; | ||||
| 
 | ||||
| // var RC_BASE_URL = 'https://ms.hmg.com/rc/'; | ||||
| 
 | ||||
| var PING_SERVICE = 'Services/Weather.svc/REST/CheckConnectivity'; | ||||
| 
 | ||||
| var GET_PROJECT = 'Services/Lists.svc/REST/GetProject'; | ||||
| 
 | ||||
| ///Geofencing | ||||
| var GET_GEO_ZONES = 'Services/Patients.svc/REST/GeoF_GetAllPoints'; | ||||
| var LOG_GEO_ZONES = 'Services/Patients.svc/REST/GeoF_InsertPatientFileInfo'; | ||||
| 
 | ||||
| // Delivery Driver | ||||
| var DRIVER_LOCATION = 'Services/Patients.svc/REST/PatientER_GetDriverLocation'; | ||||
| 
 | ||||
| //weather | ||||
| var WEATHER_INDICATOR = 'Services/Weather.svc/REST/GetCityInfo'; | ||||
| 
 | ||||
| var GET_PRIVILEGE = 'Services/Patients.svc/REST/Service_Privilege'; | ||||
| 
 | ||||
| // Wifi Credentials | ||||
| var WIFI_CREDENTIALS = "Services/Patients.svc/Hmg_SMS_Get_By_ProjectID_And_PatientID"; | ||||
| 
 | ||||
| ///Doctor | ||||
| var GET_MY_DOCTOR = 'Services/Doctors.svc/REST/GetPatientDoctorAppointmentResult'; | ||||
| var GET_DOCTOR_PROFILE = 'Services/Doctors.svc/REST/GetDocProfiles'; | ||||
| var GET_DOCTOR_PRE_POST_IMAGES = 'Services/Doctors.svc/REST/GetDoctorPrePostImages'; | ||||
| var GET_DOCTOR_RATING_NOTES = 'Services/Doctors.svc/REST/dr_GetNotesDoctorRating'; | ||||
| var GET_DOCTOR_RATING_DETAILS = 'Services/Doctors.svc/REST/dr_GetDoctorRatingDetails'; | ||||
| 
 | ||||
| var GET_DOCTOR_RATING = 'Services/Doctors.svc/REST/dr_GetAvgDoctorRating'; | ||||
| 
 | ||||
| ///Prescriptions | ||||
| // var  PRESCRIPTIONS = 'Services/Patients.svc/REST/GetPrescriptionApptList'; | ||||
| var PRESCRIPTIONS = 'Services/Patients.svc/REST/GetPrescriptionApptList_Async'; | ||||
| 
 | ||||
| var GET_PRESCRIPTIONS_ALL_ORDERS = 'Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders'; | ||||
| var GET_PRESCRIPTION_REPORT = 'Services/Patients.svc/REST/INP_GetPrescriptionReport'; | ||||
| var SEND_PRESCRIPTION_EMAIL = 'Services/Notifications.svc/REST/SendPrescriptionEmail'; | ||||
| var GET_PRESCRIPTION_REPORT_ENH = 'Services/Patients.svc/REST/GetPrescriptionReport_enh'; | ||||
| 
 | ||||
| ///Lab Order | ||||
| var GET_Patient_LAB_ORDERS = 'Services/Patients.svc/REST/GetPatientLabOrders'; | ||||
| var GET_Patient_LAB_SPECIAL_RESULT = 'Services/Patients.svc/REST/GetPatientLabSpecialResults'; | ||||
| var SEND_LAB_RESULT_EMAIL = 'Services/Notifications.svc/REST/SendLabReportEmail'; | ||||
| var GET_Patient_LAB_RESULT = 'Services/Patients.svc/REST/GetPatientLabResults'; | ||||
| var GET_Patient_LAB_ORDERS_RESULT = 'Services/Patients.svc/REST/GetPatientLabOrdersResults'; | ||||
| var SEND_COVID_LAB_RESULT_EMAIL = 'Services/Notifications.svc/REST/GenerateCOVIDReport'; | ||||
| var COVID_PASSPORT_UPDATE = 'Services/Patients.svc/REST/Covid19_Certificate_PassportUpdate'; | ||||
| var GET_PATIENT_PASSPORT_NUMBER = 'Services/Patients.svc/REST/Covid19_Certificate_GetPassport'; | ||||
| var SEND_LAB_RESULT_EMAIL_NEW = 'ReportsAPI/api/reports/labReport'; | ||||
| 
 | ||||
| var UPDATE_WORKPLACE_NAME = 'Services/Patients.svc/REST/ActivateSickLeave_FromVida'; | ||||
| var GET_SICKLEAVE_STATUS_ADMISSION_NO = 'Services/ChatBot_Service.svc/REST/GetSickLeaveStatusByAdmissionNo'; | ||||
| 
 | ||||
| /// | ||||
| var GET_PATIENT_ORDERS = 'Services/Patients.svc/REST/GetPatientRadOrders'; | ||||
| var GET_PATIENT_LAB_ORDERS_BY_APPOINTMENT = 'Services/Patients.svc/REST/GetPatientLabResultsByAppointmentNo'; | ||||
| 
 | ||||
| var GET_PATIENT_ORDERS_DETAILS = 'Services/Patients.svc/REST/Rad_UpdatePatientRadOrdersToRead'; | ||||
| var GET_RAD_IMAGE_URL = 'Services/Patients.svc/Rest/GetRadImageURL'; | ||||
| var SEND_RAD_REPORT_EMAIL = 'Services/Notifications.svc/REST/SendRadReportEmail'; | ||||
| 
 | ||||
| ///Feedback | ||||
| var SEND_FEEDBACK = 'Services/COCWS.svc/REST/InsertCOCItemInSPList'; | ||||
| var GET_STATUS_FOR_COCO = 'Services/COCWS.svc/REST/GetStatusforCOC'; | ||||
| // var  GET_PATIENT_AppointmentHistory = 'Services' | ||||
| //     '/Doctors.svc/REST/PateintHasAppoimentHistory'; | ||||
| 
 | ||||
| var GET_PATIENT_AppointmentHistory = 'Services' | ||||
|     '/Doctors.svc/REST/PateintHasAppoimentHistory_Async'; | ||||
| 
 | ||||
| ///VITAL SIGN | ||||
| var GET_PATIENT_VITAL_SIGN = 'Services/Doctors.svc/REST/Doctor_GetPatientVitalSign'; | ||||
| 
 | ||||
| ///Er Nearest | ||||
| var GET_NEAREST_HOSPITAL = 'Services/Patients.svc/REST/Patient_GetProjectAvgERWaitingTime'; | ||||
| 
 | ||||
| ///ED Online | ||||
| var ER_GET_VISUAL_TRIAGE_QUESTIONS = "services/Doctors.svc/REST/ER_GetVisualTriageQuestions"; | ||||
| var ER_SAVE_TRIAGE_INFORMATION = "services/Doctors.svc/REST/ER_SaveTriageInformation"; | ||||
| var ER_GetPatientPaymentInformationForERClinic = "services/Doctors.svc/REST/ER_GetPatientPaymentInformationForERClinic"; | ||||
| 
 | ||||
| ///Er Nearest | ||||
| var GET_AMBULANCE_REQUEST = 'Services/Patients.svc/REST/PatientER_RRT_GetAllTransportationMethod'; | ||||
| var GET_PATIENT_ALL_PRES_ORDERS = 'Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders'; | ||||
| var GET_PICK_UP_REQUEST_BY_PRES_ORDER_ID = 'Services/Patients.svc/REST/PatientER_RRT_GetPickUpRequestByPresOrderID'; | ||||
| var UPDATE_PRESS_ORDER = 'Services/Patients.svc/REST/PatientER_UpdatePresOrder'; | ||||
| var INSERT_ER_INERT_PRES_ORDER = 'Services/Patients.svc/REST/PatientER_InsertPresOrder'; | ||||
| 
 | ||||
| /// ER RRT | ||||
| var GET_ALL_RC_TRANSPORTATION = 'api/Transportation/getalltransportation'; | ||||
| var GET_ALL_TRANSPORTATIONS_RC = 'api/Transportation/getalltransportation'; | ||||
| var GET_ALL_RRT_QUESTIONS = 'Services/Patients.svc/REST/PatientER_RRT_GetAllQuestions'; | ||||
| var GET_RRT_SERVICE_PRICE = 'Services/Patients.svc/REST/PatientE_RealRRT_GetServicePrice'; | ||||
| 
 | ||||
| var GET_ALL_TRANSPORTATIONS_ORDERS = 'api/Transportation/get'; | ||||
| 
 | ||||
| var CANCEL_AMBULANCE_REQUEST = "api/Transportation/update"; | ||||
| 
 | ||||
| var INSERT_TRANSPORTATION_ORDER_RC = "api/Transportation/add"; | ||||
| 
 | ||||
| ///FindUs | ||||
| var GET_FINDUS_REQUEST = 'Services/Lists.svc/REST/Get_HMG_Locations'; | ||||
| 
 | ||||
| ///LiveChat | ||||
| var GET_LIVECHAT_REQUEST = 'Services/Patients.svc/REST/GetPatientICProjects'; | ||||
| 
 | ||||
| ///babyInformation | ||||
| var GET_BABYINFORMATION_REQUEST = 'Services/Community.svc/REST/GetBabyByUserID'; | ||||
| 
 | ||||
| ///Get Baby By User ID | ||||
| var GET_BABY_BY_USER_ID = 'Services/Community.svc/REST/GetBabyByUserID'; | ||||
| 
 | ||||
| ///userInformation | ||||
| var GET_USERINFORMATION_REQUEST = 'Services/Community.svc/REST/GetUserInformation_New'; | ||||
| 
 | ||||
| ///Update email | ||||
| var UPDATE_PATENT_EMAIL = 'Services/Patients.svc/REST/UpdatePateintEmail'; | ||||
| var UPDATE_PATENT_INFO = 'Services/Community.svc/REST/UpdateUserInfo_New'; | ||||
| 
 | ||||
| ///addNewChild | ||||
| var GET_NEWCHILD_REQUEST = 'Services/Community.svc/REST/CreateNewBaby'; | ||||
| 
 | ||||
| ///newUserId | ||||
| var GET_NEW_USER_REQUEST = 'Services/Community.svc/REST/CreateNewUser_New'; | ||||
| 
 | ||||
| ///delete Child | ||||
| var DELETE_CHILD_REQUEST = 'Services/Community.svc/REST/DeleteBaby'; | ||||
| 
 | ||||
| ///addNewTABLE | ||||
| var GET_TABLE_REQUEST = 'Services/Community.svc/REST/CreateVaccinationTable'; | ||||
| 
 | ||||
| ///BloodDenote | ||||
| var GET_CITIES_REQUEST = 'Services/Lists.svc/REST/GetAllCities'; | ||||
| 
 | ||||
| ///BloodDetails | ||||
| var GET_BLOOD_REQUEST = 'services/PatientVarification.svc/REST/BloodDonation_GetBloodGroupDetails'; | ||||
| 
 | ||||
| var SAVE_BLOOD_REQUEST = 'Services/PatientVarification.svc/REST/BloodDonation_RegisterBloodType'; | ||||
| 
 | ||||
| var GET_BLOOD_AGREEMENT = 'Services/PatientVarification.svc/REST/CheckUserAgreementForBloodDonation'; | ||||
| var SAVE_BLOOD_AGREEMENT = 'Services/PatientVarification.svc/REST/AddUserAgreementForBloodDonation'; | ||||
| 
 | ||||
| ///Reports | ||||
| var REPORTS = 'Services/Doctors.svc/REST/GetPatientMedicalReportStatusInfo'; | ||||
| var INSERT_REQUEST_FOR_MEDICAL_REPORT = 'Services/Doctors.svc/REST/InsertRequestForMedicalReport'; | ||||
| var SEND_MEDICAL_REPORT_EMAIL = 'Services/Notifications.svc/REST/SendMedicalReportEmail'; | ||||
| var GET_INPATIENT_ADMISSIONS = 'Services/inps.svc/REST/getAdmissionForMedicalReport'; | ||||
| var GET_MEDICAL_REPORT_PDF = 'Services/inps.svc/REST/getMedicalReportPDF'; | ||||
| 
 | ||||
| ///Rate | ||||
| // var  IS_LAST_APPOITMENT_RATED = 'Services/Doctors.svc/REST/IsLastAppoitmentRated'; | ||||
| var IS_LAST_APPOITMENT_RATED = 'Services/Doctors.svc/REST/IsLastAppoitmentRated_Async'; | ||||
| var GET_APPOINTMENT_DETAILS_BY_NO = 'Services/MobileNotifications.svc/REST/GetAppointmentDetailsByApptNo'; | ||||
| var NEW_RATE_APPOINTMENT_URL = "Services/Doctors.svc/REST/AppointmentsRating_InsertAppointmentRate"; | ||||
| var NEW_RATE_DOCTOR_URL = "Services/Doctors.svc/REST/DoctorsRating_InsertDoctorRate"; | ||||
| 
 | ||||
| var GET_QR_PARKING = 'Services/SWP.svc/REST/GetQRParkingByID'; | ||||
| 
 | ||||
| //URL to get clinic list | ||||
| var GET_CLINICS_LIST_URL = "Services/lists.svc/REST/GetClinicCentralized"; | ||||
| var GET_CLINICS_LIST_WRT_HOSPITAL_URL = "Services/Lists.svc/REST/GetClinicFromDoctorSchedule"; | ||||
| 
 | ||||
| //URL to get active appointment list | ||||
| var GET_ACTIVE_APPOINTMENTS_LIST_URL = "Services/Doctors.svc/Rest/Dr_GetAppointmentActiveNumber"; | ||||
| 
 | ||||
| //URL to get projects list | ||||
| var GET_PROJECTS_LIST = 'Services/Lists.svc/REST/GetProject'; | ||||
| 
 | ||||
| //URL to get doctors list | ||||
| var GET_DOCTORS_LIST_URL = "Services/Doctors.svc/REST/SearchDoctorsByTime"; | ||||
| 
 | ||||
| //URL to dental doctors list | ||||
| var GET_DENTAL_DOCTORS_LIST_URL = "Services/Doctors.svc/REST/Dental_DoctorChiefComplaintMapping"; | ||||
| 
 | ||||
| //URL to get doctor free slots | ||||
| var GET_DOCTOR_FREE_SLOTS = "Services/Doctors.svc/REST/GetDoctorFreeSlots"; | ||||
| 
 | ||||
| //URL to insert appointment | ||||
| var INSERT_SPECIFIC_APPOINTMENT = "Services/Doctors.svc/REST/InsertSpecificAppointment"; | ||||
| 
 | ||||
| //URL to get patient share | ||||
| var GET_PATIENT_SHARE = "Services/Doctors.svc/REST/GetCheckinScreenAppointmentDetailsByAppointmentNO"; | ||||
| 
 | ||||
| //URL to get patient appointment history | ||||
| var GET_PATIENT_APPOINTMENT_HISTORY = "Services/Doctors.svc/REST/PateintHasAppoimentHistory"; | ||||
| 
 | ||||
| var GET_OBGYNE_ORDERS_LIST = "services/Patients.svc/REST/HIS_OBGYNEProcedureGet"; | ||||
| 
 | ||||
| var GET_OBGYNE_DOCTORS_LIST = "services/Doctors.svc/REST/HIS_ObgyneUltrasoundDoctors"; | ||||
| 
 | ||||
| var OBGYNE_PROCEDURE_UPDATE = "services/Patients.svc/REST/HIS_OBGYNEProcedure_Update"; | ||||
| 
 | ||||
| var GET_RRT_PROCEDURE_LIST = "Services/Patients.svc/REST/GetRRTProcedureDetailsListFromVida"; | ||||
| 
 | ||||
| var DOCTOR_SCHEDULE_URL = 'Services/Doctors.svc/REST/GetDoctorWorkingHoursTable'; | ||||
| 
 | ||||
| var SEND_REPORT_EYE_EMAIL = "Services/Notifications.svc/REST/SendGlassesPrescriptionEmail"; | ||||
| 
 | ||||
| var SEND_CONTACT_LENS_PRESCRIPTION_EMAIL = "Services/Notifications.svc/REST/SendContactLensPrescriptionEmail"; | ||||
| 
 | ||||
| //URL to get patient appointment curfew history | ||||
| // var  GET_PATIENT_APPOINTMENT_CURFEW_HISTORY = "Services/Doctors.svc/REST/AppoimentHistoryForCurfew"; | ||||
| var GET_PATIENT_APPOINTMENT_CURFEW_HISTORY = "Services/Doctors.svc/REST/AppoimentHistoryForCurfew_Async"; | ||||
| 
 | ||||
| //URL to confirm appointment | ||||
| var CONFIRM_APPOINTMENT = "Services/MobileNotifications.svc/REST/ConfirmAppointment"; | ||||
| 
 | ||||
| var INSERT_VIDA_REQUEST = "Services/ER_VirtualCall.svc/REST/PatientER_VidaRequestInseart"; | ||||
| 
 | ||||
| //URL to cancel appointment | ||||
| var CANCEL_APPOINTMENT = "Services/Doctors.svc/REST/CancelAppointment"; | ||||
| 
 | ||||
| //URL get appointment QR | ||||
| var GENERATE_QR_APPOINTMENT = "Services/Doctors.svc/REST/GenerateQRAppointmentNo"; | ||||
| 
 | ||||
| //URL send email appointment QR | ||||
| var EMAIL_QR_APPOINTMENT = "Services/Notifications.svc/REST/sendEmailForOnLineCheckin"; | ||||
| 
 | ||||
| //URL check payment status | ||||
| var CHECK_PAYMENT_STATUS = "Services/PayFort_Serv.svc/REST/GetRequestStatusByRequestID"; | ||||
| 
 | ||||
| //URL create advance payment | ||||
| var CREATE_ADVANCE_PAYMENT = "Services/Doctors.svc/REST/CreateAdvancePayment"; | ||||
| 
 | ||||
| var HIS_CREATE_ADVANCE_PAYMENT = "Services/Patients.svc/REST/HIS_CreateAdvancePayment"; | ||||
| 
 | ||||
| var ER_CREATE_ADVANCE_PAYMENT = "services/Doctors.svc/REST/ER_CreateAdvancePaymentForClinic"; | ||||
| 
 | ||||
| var ER_INSERT_ADVANCE_PAYMENT = "services/Doctors.svc/REST/ER_InsertEROnlinePaymentDetails"; | ||||
| 
 | ||||
| var ADD_ADVANCE_NUMBER_REQUEST = 'Services/PayFort_Serv.svc/REST/AddAdvancedNumberRequest'; | ||||
| 
 | ||||
| var GENERATE_ANCILLARY_ORDERS_INVOICE = 'Services/Doctors.svc/REST/AutoGenerateAncillaryOrderInvoice'; | ||||
| 
 | ||||
| var IS_ALLOW_ASK_DOCTOR = 'Services/Doctors.svc/REST/GetPatientDoctorAppointmentResult'; | ||||
| var GET_CALL_REQUEST_TYPE = 'Services/Doctors.svc/REST/GetCallRequestType_LOV'; | ||||
| var ADD_VIDA_REQUEST = 'Services/ER_VirtualCall.svc/REST/PatientER_VidaRequestInseart'; | ||||
| 
 | ||||
| var SEND_CALL_REQUEST = 'Services/Doctors.svc/REST/InsertCallInfo'; | ||||
| 
 | ||||
| var GET_LIVECARE_CLINICS = 'Services/ER_VirtualCall.svc/REST/PatientER_GetClinics'; | ||||
| 
 | ||||
| var GET_LIVECARE_SCHEDULE_CLINICS = 'Services/Doctors.svc/REST/PatientER_GetClinicsHaveSchedule'; | ||||
| 
 | ||||
| var GET_LIVECARE_SCHEDULE_CLINIC_DOCTOR_LIST = 'Services/Doctors.svc/REST/PatientER_GetDoctorByClinicID'; | ||||
| 
 | ||||
| var GET_LIVECARE_SCHEDULE_DOCTOR_TIME_SLOTS = 'Services/Doctors.svc/REST/PatientER_GetDoctorFreeSlots'; | ||||
| 
 | ||||
| var INSERT_LIVECARE_SCHEDULE_APPOINTMENT = 'Services/Doctors.svc/REST/InsertSpecificAppoitmentForSchedule'; | ||||
| 
 | ||||
| var GET_PATIENT_SHARE_LIVECARE = "Services/Doctors.svc/REST/GetCheckinScreenAppointmentDetailsByAppointmentNOForLiveCare"; | ||||
| 
 | ||||
| var SET_ONLINE_CHECKIN_FOR_APPOINTMENT = "Services/Patients.svc/REST/SetOnlineCheckInForAppointment"; | ||||
| 
 | ||||
| var GET_LIVECARE_CLINIC_TIMING = 'Services/ER_VirtualCall.svc/REST/PatientER_GetClinicsServiceTimingsSchedule'; | ||||
| 
 | ||||
| var GET_ER_APPOINTMENT_FEES = 'Services/DoctorApplication.svc/REST/GetERAppointmentFees'; | ||||
| var GET_ER_APPOINTMENT_TIME = 'Services/ER_VirtualCall.svc/REST/GetRestTime'; | ||||
| 
 | ||||
| var CHECK_PATIENT_DERMA_PACKAGE = 'Services/OUTPs.svc/REST/getPatientPackageComponentsForOnlineCheckIn'; | ||||
| 
 | ||||
| var ADD_NEW_CALL_FOR_PATIENT_ER = 'Services/DoctorApplication.svc/REST/NewCallForPatientER'; | ||||
| 
 | ||||
| var GET_LIVECARE_HISTORY = 'Services/ER_VirtualCall.svc/REST/GetPatientErVirtualHistory'; | ||||
| var CANCEL_LIVECARE_REQUEST = 'Services/ER_VirtualCall.svc/REST/DeleteErRequest'; | ||||
| var SEND_LIVECARE_INVOICE_EMAIL = 'Services/Notifications.svc/REST/SendInvoiceForLiveCare'; | ||||
| 
 | ||||
| var CHANGE_PATIENT_ER_SESSION = 'Services/DoctorApplication.svc/REST/ChangePatientERSession'; | ||||
| 
 | ||||
| var APPLE_PAY_INSERT_REQUEST = 'Services/PayFort_Serv.svc/REST/PayFort_ApplePayRequestData_Insert'; | ||||
| 
 | ||||
| var GET_USER_TERMS = 'Services/Patients.svc/REST/GetUserTermsAndConditions'; | ||||
| 
 | ||||
| var TAMARA_REQUEST_INSERT = 'Services/PayFort_Serv.svc/REST/AddTamaraRequest'; | ||||
| 
 | ||||
| var UPDATE_HEALTH_TERMS = 'services/Patients.svc/REST/UpdatePateintHealthSummaryReport'; | ||||
| 
 | ||||
| var GET_PATIENT_HEALTH_STATS = 'Services/Patients.svc/REST/Med_GetTransactionsSts'; | ||||
| 
 | ||||
| var SEND_CHECK_IN_NFC_REQUEST = 'Services/Patients.svc/REST/Patient_CheckAppointmentValidation_ForNFC'; | ||||
| 
 | ||||
| var CHECK_SCANNED_NFC_QR_CODE = 'Services/Patients.svc/REST/Patient_ValidationMachine_ForNFC'; | ||||
| 
 | ||||
| var HAS_DENTAL_PLAN = 'Services/Doctors.svc/REST/Dental_IsPatientHasOnGoingEstimation'; | ||||
| 
 | ||||
| var LASER_BODY_PARTS = 'Services/Patients.svc/REST/Laser_GetBodyPartsByCategory'; | ||||
| 
 | ||||
| var INSERT_COVID_QUESTIONNAIRE = 'Services/Doctors.svc/REST/COVID19_Questionnarie_Insert'; | ||||
| 
 | ||||
| var UPDATE_COVID_QUESTIONNAIRE = 'Services/Doctors.svc/REST/COVID19_Questionnarie_Update'; | ||||
| 
 | ||||
| var GET_PATIENT_SHARE_FOR_WALKIN_APPOINTMENT = 'Services/Doctors.svc/REST/GetCheckinScreenAppointmentDetailsByAppointmentNOForWalkIn'; | ||||
| 
 | ||||
| var CAN_PAY_FOR_FOR_WALKIN_APPOINTMENT = 'Services/Doctors.svc/REST/CanPayForWalkinAppointment'; | ||||
| 
 | ||||
| //URL to get medicine and pharmacies list | ||||
| var CHANNEL = 3; | ||||
| var GENERAL_ID = 'Cs2020@2016\$2958'; | ||||
| var IP_ADDRESS = '10.20.10.20'; | ||||
| var VERSION_ID = 18.7; | ||||
| var SETUP_ID = '91877'; | ||||
| var LANGUAGE = 2; | ||||
| // var  PATIENT_OUT_SA = 0; | ||||
| var SESSION_ID = 'TMRhVmkGhOsvamErw'; | ||||
| var IS_DENTAL_ALLOWED_BACKEND = false; | ||||
| var PATIENT_TYPE = 1; | ||||
| var PATIENT_TYPE_ID = 1; | ||||
| var DEVICE_TOKEN = ""; | ||||
| var IS_VOICE_COMMAND_CLOSED = true; | ||||
| var IS_TEXT_COMPLETED = false; | ||||
| // var DeviceTypeID = Platform.isIOS ? 1 : 2; | ||||
| // var  LANGUAGE_ID = 2; | ||||
| 
 | ||||
| var GET_PHARMCY_ITEMS = "Services/Lists.svc/REST/GetPharmcyItems_Region"; | ||||
| var GET_PHARMACY_LIST = "Services/Patients.svc/REST/GetPharmcyList"; | ||||
| var GET_PAtIENTS_INSURANCE = "Services/Patients.svc/REST/Get_PatientInsuranceDetails"; | ||||
| var GET_PAtIENTS_INSURANCE_UPDATED = "Services/Patients.svc/REST/PatientER_GetPatientInsuranceCardUpdateHistory"; | ||||
| 
 | ||||
| var INSURANCE_DETAILS = "Services/Patients.svc/REST/Get_InsuranceCheckList"; | ||||
| var INSURANCE_SCHEMES = "Services/Patients.svc/REST/PatientER_SchemesOfAactiveCompaniesGet"; | ||||
| var UPDATE_MANUAL_INSURANCE = "Services/Patients.svc/REST/PatientER_PatientInfoForInsuranceCardUpdate"; | ||||
| var INSURANCE_COMPANIES = "Services/Patients.svc/REST/PatientER_InsuranceCompanyGet"; | ||||
| var GET_PATIENT_INSURANCE_DETAILS = "Services/Patients.svc/REST/PatientER_GetPatientInsuranceDetails"; | ||||
| var UPLOAD_INSURANCE_CARD = 'Services/Patients.svc/REST/PatientER_PatientInfoForInsuranceCardUpdate'; | ||||
| 
 | ||||
| var GET_VACCINES = "Services/Patients.svc/REST/GetDoneVaccinesByPatientID"; | ||||
| var GET_VACCINES_EMAIL = "Services/Notifications.svc/REST/SendVaccinesEmail"; | ||||
| var GET_PAtIENTS_INSURANCE_APPROVALS = "Services/Patients.svc/REST/GetApprovalStatus_Async"; | ||||
| // var  GET_PAtIENTS_INSURANCE_APPROVALS = "Services/Patients.svc/REST/GetApprovalStatus"; | ||||
| var SEARCH_BOT = 'HabibiChatBotApi/BotInterface/GetVoiceCommandResponse'; | ||||
| 
 | ||||
| var GET_VACCINATIONS_ITEMS = "/Services/ERP.svc/REST/GET_VACCINATIONS_ITEMS"; | ||||
| var GET_VACCINATION_ONHAND = "/Services/ERP.svc/REST/GET_VACCINATION_ONHAND"; | ||||
| 
 | ||||
| var GET_PATIENT_SICK_LEAVE = 'Services/Patients.svc/REST/GetPatientSickLeave'; | ||||
| 
 | ||||
| var GET_PATIENT_SICK_LEAVE_STATUS = 'Services/Patients.svc/REST/GetPatientSickLeave_Status'; | ||||
| 
 | ||||
| var SendSickLeaveEmail = 'Services/Notifications.svc/REST/SendSickLeaveEmail'; | ||||
| 
 | ||||
| var GET_PATIENT_AdVANCE_BALANCE_AMOUNT = 'Services/Patients.svc/REST/GetPatientAdvanceBalanceAmount'; | ||||
| var GET_PATIENT_INFO_BY_ID = 'Services/Doctors.svc/REST/GetPatientInfoByPatientID'; | ||||
| var GET_PATIENT_INFO_BY_ID_AND_MOBILE_NUMBER = 'Services/Patients.svc/REST/AP_GetPatientInfoByPatientIDandMobileNumber'; | ||||
| var SEND_ACTIVATION_CODE_FOR_ADVANCE_PAYMENT = 'Services/Authentication.svc/REST/SendActivationCodeForAdvancePayment'; | ||||
| var CHECK_ACTIVATION_CODE_FOR_ADVANCE_PAYMENT = 'Services/Authentication.svc/REST/CheckActivationCodeForAdvancePayment'; | ||||
| 
 | ||||
| var GET_COVID_DRIVETHRU_PROJECT_LIST = 'Services/Doctors.svc/REST/COVID19_ProjectDriveThroughTestingCenter'; | ||||
| 
 | ||||
| var GET_COVID_DRIVETHRU_PAYMENT_INFO = 'Services/Doctors.svc/REST/COVID19_GetPatientPaymentInormation'; | ||||
| 
 | ||||
| var GET_COVID_DRIVETHRU_FREE_SLOTS = 'Services/Doctors.svc/REST/COVID19_GetFreeSlots'; | ||||
| 
 | ||||
| var GET_COVID_DRIVETHRU_PROCEDURES_LIST = 'Services/Doctors.svc/REST/COVID19_GetTestProcedures'; | ||||
| 
 | ||||
| ///Smartwatch Integration Services | ||||
| var GET_PATIENT_LAST_RECORD = 'Services/Patients.svc/REST/Med_GetPatientLastRecord'; | ||||
| var INSERT_PATIENT_HEALTH_DATA = 'Services/Patients.svc/REST/Med_InsertTransactions'; | ||||
| 
 | ||||
| ///My Trackers | ||||
| var GET_DIABETIC_RESULT_AVERAGE = 'Services/Patients.svc/REST/Patient_GetDiabeticResultAverage'; | ||||
| var GET_DIABTEC_RESULT = 'Services/Patients.svc/REST/Patient_GetDiabtecResults'; | ||||
| var ADD_DIABTEC_RESULT = 'Services/Patients.svc/REST/Patient_AddDiabtecResult'; | ||||
| 
 | ||||
| var GET_BLOOD_PRESSURE_RESULT_AVERAGE = 'Services/Patients.svc/REST/Patient_GetBloodPressureResultAverage'; | ||||
| var GET_BLOOD_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_GetBloodPressureResult'; | ||||
| var ADD_BLOOD_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_AddBloodPressureResult'; | ||||
| 
 | ||||
| var GET_WEIGHT_PRESSURE_RESULT_AVERAGE = 'Services/Patients.svc/REST/Patient_GetWeightMeasurementResultAverage'; | ||||
| var GET_WEIGHT_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_GetWeightMeasurementResult'; | ||||
| var ADD_WEIGHT_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_AddWeightMeasurementResult'; | ||||
| 
 | ||||
| var ADD_ACTIVE_PRESCRIPTIONS_REPORT_BY_PATIENT_ID = 'Services/Patients.svc/Rest/GetActivePrescriptionReportByPatientID'; | ||||
| 
 | ||||
| var GET_CALL_INFO_HOURS_RESULT = 'Services/Doctors.svc/REST/GetCallInfoHoursResult'; | ||||
| var GET_CALL_REQUEST_TYPE_LOV = 'Services/Doctors.svc/REST/GetCallRequestType_LOV'; | ||||
| 
 | ||||
| var GET_QUESTION_TYPES = 'Services/OUTPs.svc/REST/getQuestionsTypes'; | ||||
| 
 | ||||
| var UPDATE_DIABETIC_RESULT = 'Services/Patients.svc/REST/Patient_UpdateDiabeticResult'; | ||||
| 
 | ||||
| var SEND_AVERAGE_BLOOD_SUGAR_REPORT = 'Services/Notifications.svc/REST/SendAverageBloodSugarReport'; | ||||
| var DEACTIVATE_DIABETIC_STATUS = 'services/Patients.svc/REST/Patient_DeactivateDiabeticStatus'; | ||||
| var DEACTIVATE_BLOOD_PRESSURES_STATUS = 'services/Patients.svc/REST/Patient_DeactivateBloodPressureStatus'; | ||||
| 
 | ||||
| var UPDATE_BLOOD_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_UpdateBloodPressureResult'; | ||||
| var SEND_AVERAGE_BLOOD_WEIGHT_REPORT = 'Services/Notifications.svc/REST/SendAverageBodyWeightReport'; | ||||
| var SEND_AVERAGE_BLOOD_PRESSURE_REPORT = 'Services/Notifications.svc/REST/SendAverageBloodPressureReport'; | ||||
| 
 | ||||
| var UPDATE_WEIGHT_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_UpdateWeightMeasurementResult'; | ||||
| var DEACTIVATE_WEIGHT_PRESSURE_RESULT = 'services/Patients.svc/REST/Patient_DeactivateWeightMeasurementStatus'; | ||||
| var GET_DOCTOR_RESPONSE = 'Services/Patients.svc/REST/GetDoctorResponse'; | ||||
| var UPDATE_READ_STATUS = 'Services/Patients.svc/REST/UpdateReadStatus'; | ||||
| 
 | ||||
| var INSERT_CALL_INFO = 'Services/Doctors.svc/REST/InsertCallInfo'; | ||||
| var INSERT_APPOINTMENT_QUESTION = 'Services/OUTPs.svc/REST/insertAppointmentQuestion'; | ||||
| var RATE_DOCTOR_RESPONSE = 'Services/OUTPs.svc/REST/insertAppointmentQuestionRating'; | ||||
| 
 | ||||
| var GET_PATIENT_ALLERGIES = 'Services/Patients.svc/REST/GetPatientAllergies'; | ||||
| 
 | ||||
| // H2O | ||||
| var H2O_GET_USER_PROGRESS = "Services/H2ORemainder.svc/REST/H2O_GetUserProgress"; | ||||
| var H2O_INSERT_USER_ACTIVITY = "Services/H2ORemainder.svc/REST/H2O_InsertUserActivity"; | ||||
| var H2O_GET_USER_DETAIL = "Services/H2ORemainder.svc/REST/H2O_GetUserDetails_New"; | ||||
| var H2O_UPDATE_USER_DETAIL = "Services/H2ORemainder.svc/REST/H2O_UpdateUserDetails_New"; | ||||
| var H2O_UNDO_USER_ACTIVITY = "Services/H2ORemainder.svc/REST/H2o_UndoUserActivity"; | ||||
| //E_Referral Services | ||||
| 
 | ||||
| var GET_ALL_RELATIONSHIP_TYPES = "Services/Patients.svc/REST/GetAllRelationshipTypes"; | ||||
| var SEND_ACTIVATION_CODE_FOR_E_REFERRAL = 'Services/Authentication.svc/REST/SendActivationCodeForEReferral'; | ||||
| var CHECK_ACTIVATION_CODE_FOR_E_REFERRAL = 'Services/Authentication.svc/REST/CheckActivationCodeForEReferral'; | ||||
| var GET_ALL_CITIES = 'services/Lists.svc/rest/GetAllCities'; | ||||
| var CREATE_E_REFERRAL = "Services/Patients.svc/REST/CreateEReferral"; | ||||
| var GET_E_REFERRALS = "Services/Patients.svc/REST/GetEReferrals"; | ||||
| 
 | ||||
| // Encillary Orders | ||||
| 
 | ||||
| var GET_ANCILLARY_ORDERS = 'Services/Doctors.svc/REST/GetOnlineAncillaryOrderList'; | ||||
| 
 | ||||
| var GET_ANCILLARY_ORDERS_DETAILS = 'Services/Doctors.svc/REST/GetOnlineAncillaryOrderProcList'; | ||||
| 
 | ||||
| //Pharmacy wishlist | ||||
| // var  GET_WISHLIST = "http://swd-pharapp-01:7200/api/shopping_cart_items/"; | ||||
| 
 | ||||
| var GET_DOCTOR_LIST_BY_TIME = "Services/Doctors.svc/REST/SearchDoctorsByTime"; | ||||
| 
 | ||||
| // pharmacy | ||||
| var PHARMACY_AUTORZIE_CUSTOMER = "AutorizeCustomer"; | ||||
| var PHARMACY_VERIFY_CUSTOMER = "VerifyCustomer"; | ||||
| var PHARMACY_GET_COUNTRY = "countries"; | ||||
| // var  PHARMACY_CREATE_CUSTOMER = "epharmacy/api/CreateCustomer"; | ||||
| var PHARMACY_CREATE_CUSTOMER = "getorcreateCustomer"; | ||||
| var GET_PHARMACY_BANNER = "promotionbanners"; | ||||
| var GET_PHARMACY_TOP_MANUFACTURER = "topmanufacturer"; | ||||
| var GET_PHARMACY_BEST_SELLER_PRODUCT = "bestsellerproducts"; | ||||
| var GET_PHARMACY_PRODUCTs_BY_IDS = "productsbyids/"; | ||||
| var GET_PHARMACY_PRODUCTs_BY_SKU = "productbysku/"; | ||||
| var GET_CUSTOMERS_ADDRESSES = "Customers/"; | ||||
| var SUBSCRIBE_PRODUCT = "subscribe?"; | ||||
| var GET_ORDER = "orders?"; | ||||
| var GET_ORDER_DETAILS = "orders/"; | ||||
| var ADD_CUSTOMER_ADDRESS = "addcustomeraddress"; | ||||
| var EDIT_CUSTOMER_ADDRESS = "editcustomeraddress"; | ||||
| var DELETE_CUSTOMER_ADDRESS = "deletecustomeraddress"; | ||||
| var GET_ADDRESS = "Customers/"; | ||||
| var GET_Cancel_ORDER = "cancelorder/"; | ||||
| var WRITE_REVIEW = "Content-Type" + "text/plain; charset=utf-8"; | ||||
| var GET_SHOPPING_CART = "shopping_cart_items/"; | ||||
| var GET_SHIPPING_OPTIONS = "get_shipping_option/"; | ||||
| var DELETE_SHOPPING_CART = "delete_shopping_cart_items/"; | ||||
| var DELETE_SHOPPING_CART_ALL = "delete_shopping_cart_item_by_customer/"; | ||||
| var ORDER_SHOPPING_CART = "orders"; | ||||
| var GET_LACUM_ACCOUNT_INFORMATION = "Services/Patients.svc/REST/GetLakumAccountInformation"; | ||||
| var GET_LACUM_GROUP_INFORMATION = "Services/Patients.svc/REST/GetlakumInQueryInfoGrouping"; | ||||
| var LACUM_ACCOUNT_ACTIVATE = "Services/Patients.svc/REST/LakumAccountActivation"; | ||||
| var LACUM_ACCOUNT_DEACTIVATE = "Services/Patients.svc/REST/LakumAccountDeactivation"; | ||||
| var CREATE_LAKUM_ACCOUNT = "Services/Patients.svc/REST/PHR_CreateLakumAccount"; | ||||
| var TRANSFER_YAHALA_LOYALITY_POINTS = "Services/Patients.svc/REST/TransferYaHalaLoyaltyPoints"; | ||||
| var LAKUM_GET_USER_TERMS_AND_CONDITIONS = "Services/ERP.svc/REST/GetUserTermsAndConditionsForEPharmcy"; | ||||
| 
 | ||||
| // var  PRESCRIPTION = 'Services/Patients.svc/REST/GetPrescriptionApptList'; | ||||
| var PRESCRIPTION = 'Services/Patients.svc/REST/GetPrescriptionApptList_Async'; | ||||
| 
 | ||||
| var GET_RECOMMENDED_PRODUCT = 'alsoProduct/'; | ||||
| var GET_MOST_VIEWED_PRODUCTS = "mostview"; | ||||
| var GET_NEW_PRODUCTS = "newproducts"; | ||||
| 
 | ||||
| // Home Health Care | ||||
| var HHC_GET_ALL_SERVICES = "Services/Patients.svc/REST/PatientER_HHC_GetAllServices"; | ||||
| var HHC_GET_ALL_CMC_SERVICES = "Services/Patients.svc/REST/PatientER_CMC_GetAllServices"; | ||||
| var PATIENT_ER_UPDATE_PRES_ORDER = "Services/Patients.svc/REST/PatientER_UpdatePresOrder"; | ||||
| var GET_ORDER_DETAIL_BY_ID = "Services/Patients.svc/REST/PatientER_HHC_GetTransactionsForOrder"; | ||||
| var GET_CMC_ORDER_DETAIL_BY_ID = "Services/Patients.svc/REST/PatientER_CMC_GetTransactionsForOrder"; | ||||
| var GET_CHECK_UP_ITEMS = "Services/Patients.svc/REST/GetCheckUpItems"; | ||||
| var PUSH_NOTIFICATION_GET_ALL_NOTIFICATIONS = 'Services/MobileNotifications.svc/REST/PushNotification_GetAllNotifications'; | ||||
| var PUSH_NOTIFICATION_SET_MESSAGES_FROM_POOL_AS_READ = 'Services/MobileNotifications.svc/REST/PushNotification_SetMessagesFromPoolAsRead'; | ||||
| var GET_PATIENT_ALL_PRES_ORD = 'Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders'; | ||||
| var PATIENT_ER_INSERT_PRES_ORDER = 'Services/Patients.svc/REST/PatientER_InsertPresOrder'; | ||||
| var BLOOD_DONATION_REGISTER_BLOOD_TYPE = 'Services/PatientVarification.svc/REST/BloodDonation_RegisterBloodType'; | ||||
| var ADD_USER_AGREEMENT_FOR_BLOOD_DONATION = 'Services/PatientVarification.svc/REST/AddUserAgreementForBloodDonation'; | ||||
| 
 | ||||
| // HHC RC SERVICES | ||||
| var HHC_GET_ALL_SERVICES_RC = "api/HHC/getallhhc"; | ||||
| var ADD_HHC_ORDER_RC = "api/HHC/add"; | ||||
| var GET_ALL_HHC_ORDERS_RC = 'api/hhc/list'; | ||||
| var UPDATE_HHC_ORDER_RC = 'api/hhc/update'; | ||||
| 
 | ||||
| // CMC RC SERVICES | ||||
| var GET_ALL_CMC_SERVICES_RC = 'api/cmc/getallcmc'; | ||||
| var ADD_CMC_ORDER_RC = 'api/cmc/add'; | ||||
| var GET_ALL_CMC_ORDERS_RC = 'api/cmc/list'; | ||||
| var UPDATE_CMC_ORDER_RC = 'api/cmc/update'; | ||||
| 
 | ||||
| // RRT RC SERVICES | ||||
| var ADD_RRT_ORDER_RC = "api/rrt/add"; | ||||
| var GET_ALL_RRT_ORDERS_RC = "api/rrt/list"; | ||||
| var UPDATE_RRT_ORDER_RC = 'api/rrt/update'; | ||||
| 
 | ||||
| // PRESCRIPTION RC SERVICES | ||||
| var ADD_PRESCRIPTION_ORDER_RC = "api/prescription/add"; | ||||
| var GET_ALL_PRESCRIPTION_ORDERS_RC = "api/prescription/list"; | ||||
| var GET_ALL_PRESCRIPTION_INFO_RC = "api/Prescription/info"; | ||||
| var UPDATE_PRESCRIPTION_ORDER_RC = 'api/prescription/update'; | ||||
| 
 | ||||
| //Pharmacy wishlist | ||||
| var GET_WISHLIST = "shopping_cart_items/"; | ||||
| var DELETE_WISHLIST = "delete_shopping_cart_item_by_product?customer_id="; | ||||
| var GET_REVIEW = "customerreviews/"; | ||||
| var GET_BRANDS = "manufacturer"; | ||||
| var GET_TOP_BRANDS = "topmanufacturer?page=1&limit=8"; | ||||
| var GET_PRODUCT_DETAIL = "products/"; | ||||
| var GET_LOCATION = "Services/Patients.svc/REST/GetPharmcyListBySKU"; | ||||
| var GET_SPECIFICATION = "productspecification/"; | ||||
| var GET_BRAND_ITEMS = "products"; | ||||
| var PHARMACY_MAKE_REVIEW = 'insertreviews'; | ||||
| 
 | ||||
| // External API | ||||
| var ADD_ADDRESS_INFO = "addcustomeraddress"; | ||||
| var GET_CUSTOMER_ADDRESSES = "Customers/"; | ||||
| var GET_CUSTOMER_INFO = "VerifyCustomer"; | ||||
| 
 | ||||
| //Pharmacy | ||||
| 
 | ||||
| var GET_PHARMACY_CATEGORISE = 'categories?fields=id,name,namen,description,image,localized_names,display_order,parent_category_id,is_leaf&parent_id=0'; | ||||
| var GET_OFFERS_CATEGORISE = 'discountcategories'; | ||||
| var GET_OFFERS_PRODUCTS = 'offerproducts/'; | ||||
| var GET_CATEGORISE_PARENT = 'categories?fields=id,name,namen,description,image,localized_names,display_order,parent_category_id,is_leaf&parent_id='; | ||||
| var GET_PARENT_PRODUCTS = 'products?categoryid='; | ||||
| var GET_SUB_CATEGORISE = 'categories?fields=id,name,namen,description,image,localized_names,display_order,parent_category_id,is_leaf&parent_id='; | ||||
| var GET_SUB_PRODUCTS = 'products?categoryid='; | ||||
| var GET_FINAL_PRODUCTS = | ||||
|     'products?fields=id,reviews,discount_ids,name,namen,localized_names,display_order,short_description,full_description,full_descriptionn,sku,order_minimum_quantity,order_maximum_quantity,price,old_price,images,is_rx,rx_message,rx_messagen,discount_name,discount_namen,approved_rating_sum,approved_total_reviews,allow_back_in_stock_subscriptions,stock_quantity,stock_availability,stock_availabilityn,discount_percentage&CategoryId='; | ||||
| var GET_CLINIC_CATEGORY = 'Services/Doctors.svc/REST/DP_GetClinicCategory'; | ||||
| var GET_DISEASE_BY_CLINIC_ID = 'Services/Doctors.svc/REST/DP_GetDiseasesByClinicID'; | ||||
| var SEARCH_DOCTOR_BY_TIME = 'Services/Doctors.svc/REST/SearchDoctorsByTime'; | ||||
| 
 | ||||
| var TIMER_MIN = 10; | ||||
| 
 | ||||
| var GOOGLE_API_KEY = "AIzaSyCmevVlr2Bh-c8W1VUzo8gt8JRY7n5PANw"; | ||||
| 
 | ||||
| var GET_BRANDS_LIST = 'categoryManufacturer?categoryids='; | ||||
| 
 | ||||
| var GET_SEARCH_PRODUCTS = | ||||
|     'searchproducts?fields=id,discount_ids,reviews,name,namen,localized_names,display_order,short_description,full_description,full_descriptionn,sku,order_minimum_quantity,order_maximum_quantity,price,old_price,images,is_rx,rx_message,rx_messagen,discount_name,discount_namen,approved_rating_sum,approved_total_reviews,allow_back_in_stock_subscriptions,stock_quantity,stock_availability,stock_availabilityn,discount_percentage&search_key='; | ||||
| 
 | ||||
| var SCAN_QR_CODE = 'productbysku/'; | ||||
| 
 | ||||
| var FILTERED_PRODUCTS = 'products?categoryids='; | ||||
| 
 | ||||
| var GET_DOCTOR_LIST_CALCULATION = "Services/Doctors.svc/REST/GetCallculationDoctors"; | ||||
| 
 | ||||
| var GET_ALL_APPOINTMENTS_FOR_DENTAL_CLINIC = "Services/Patients.svc/REST/GetDentalAppointments"; | ||||
| 
 | ||||
| var GET_DENTAL_APPOINTMENT_INVOICE = "Services/Patients.svc/REST/HIS_eInvoiceForDentalByAppointmentNo"; | ||||
| 
 | ||||
| var SEND_DENTAL_APPOINTMENT_INVOICE_EMAIL = "Services/Notifications.svc/REST/SendInvoiceForDental"; | ||||
| 
 | ||||
| var GET_TAMARA_PLAN = 'https://mdlaboratories.com/tamaralive/Home/GetInstallments'; | ||||
| 
 | ||||
| var GET_TAMARA_PAYMENT_STATUS = 'https://mdlaboratories.com/tamaralive/api/OnlineTamara/order_status?orderid='; | ||||
| 
 | ||||
| var UPDATE_TAMARA_STATUS = 'Services/PayFort_Serv.svc/REST/Tamara_UpdateRequestStatus'; | ||||
| 
 | ||||
| var MARK_APPOINTMENT_TAMARA_STATUS = 'Services/Patients.svc/REST/MarkAppointmentForTamaraPayment_FromVida'; | ||||
| 
 | ||||
| var AUTO_GENERATE_INVOICE_TAMARA = 'Services/PayFort_Serv.svc/REST/Tamara_GetinfoByAppointmentNo_AutoGenerateInvoice'; | ||||
| 
 | ||||
| var GET_ONESIGNAL_VOIP_TOKEN = 'https://onesignal.com/api/v1/players'; | ||||
| 
 | ||||
| var CANCEL_PHARMA_LIVECARE_REQUEST = 'https://vcallapi.hmg.com/api/PharmaLiveCare/SendPaymentStatus'; | ||||
| 
 | ||||
| var INSERT_FREE_SLOTS_LOGS = 'Services/Doctors.svc/Rest/InsertDoctorFreeSlotsLogs'; | ||||
| 
 | ||||
| var GET_NATIONALITY = 'Services/Lists.svc/REST/GetNationality'; | ||||
| 
 | ||||
| var PAYFORT_TEST_URL = 'https://sbpaymentservices.payfort.com/FortAPI/paymentApi'; | ||||
| var PAYFORT_PROD_URL = 'https://paymentservices.payfort.com/FortAPI/paymentApi'; | ||||
| 
 | ||||
| // Check If InPatient API | ||||
| var CHECK_IF_INPATIENT = 'Services/Patients.svc/REST/GetInPatientAdmissionInfo'; | ||||
| 
 | ||||
| var CHECK_IF_PATIENT_ADMITTED = 'Services/Inps.svc/REST/checkIsPatientAdmittedOrAdmissionRequest'; | ||||
| 
 | ||||
| // Get General Instructions API | ||||
| var GET_GENERAL_INSTRUCTIONS = 'Services/INPs.svc/REST/getGeneralInstructions'; | ||||
| 
 | ||||
| // Get Medical Instructions API | ||||
| var GET_MEDICAL_INSTRUCTIONS = 'Services/INPs.svc/REST/getPatientAdmissionRequest'; | ||||
| 
 | ||||
| var GET_INPATIENT_ADVANCE_PAYMENT_REQUESTS = 'Services/INPs.svc/REST/getInpatientAdvancePendingPayment'; | ||||
| 
 | ||||
| var GET_INPATIENT_PAID_ADVANCE_PAYMENT = 'Services/INPs.svc/REST/getInpatientAdvanceHistory'; | ||||
| 
 | ||||
| var GET_INPATIENT_ADVANCE_PAYMENT_LINK = 'Services/PayFort_Serv.svc/REST/InsertInPatientAdvanceDetails'; | ||||
| 
 | ||||
| var INSERT_INPATIENT_ORDER = 'Services/INPs.svc/REST/Inpcp_insertOrder'; | ||||
| 
 | ||||
| var INPATIENT_DISCHARGE_MEDICATIONS = 'Services/INPs.svc/REST/chekPatientHasDischargeMedicine'; | ||||
| 
 | ||||
| var GET_BIRTH_NOTIFICATION = 'Services/INPs.svc/REST/getBirthNotification_bymothermrn'; | ||||
| 
 | ||||
| var SAVE_BIRTH_NOTIFICATION = 'Services/INPs.svc/REST/SaveBirthNotification'; | ||||
| 
 | ||||
| var INSERT_GENERAL_ADMISSION_CONSENT = 'Services/INPs.svc/REST/Inp_insertAAForGeneralAdmissionConsent'; | ||||
| 
 | ||||
| //Meal Plan APIs | ||||
| var GET_ADMITTED_PATIENTS = 'Services/MOP.svc/REST/GetAdmittedPatients'; | ||||
| var GET_CURRENT_WEEKID_WEEKDAY = 'Services/MOP.svc/REST/GetCurrentWeekAndDayHMGMP'; | ||||
| var GET_MEALS_OF_SCHEDULE_ID = 'Services/MOP.svc/REST/GetMealsOfScheduleID_Mobile'; | ||||
| var GET_MEAL_ITEMS_OF_SCHEDULE_ID = 'Services/MOP.svc/REST/GetDefaultItemsOfScheduleID'; | ||||
| var PLACE_MEAL_PLAN_ORDER = 'Services/MOP.svc/REST/UpdateOrMakeNewOrder'; | ||||
| 
 | ||||
| var CHECK_PATIENT_NPHIES_ELIGIBILITY = 'Services/Doctors.svc/REST/checkPatientInsuranceCompanyValidity'; | ||||
| var CONVERT_PATIENT_TO_CASH = 'Services/Doctors.svc/REST/deActivateInsuranceCompany'; | ||||
| 
 | ||||
| var GET_BLOOD_DONATION_PROJECTS_LIST = 'Services/OUTPs.svc/REST/BD_getProjectsHaveBDClinics'; | ||||
| 
 | ||||
| var GET_BLOOD_DONATION_FREE_SLOTS = 'Services/OUTPs.svc/REST/BD_GetFreeSlots'; | ||||
| 
 | ||||
| var GET_WE_CARE_TOUR_URL = 'Services/Consent.svc/Rest/Consent_VirtualJurny_Url_GetByProjectID'; | ||||
| 
 | ||||
| var GET_DENTAL_INSTRUCTIONS = 'Services/OUTPs.svc/Rest/getProcedureNotification'; | ||||
| 
 | ||||
| var INSERT_WALKIN_APPOINTMENT = "Services/Doctors.svc/REST/InsertWalkinAppointment"; | ||||
| 
 | ||||
| //Usage Agreement APIs | ||||
| var CHECK_USAGE_AGREEMENT = "Services/Patients.svc/REST/CheckForUsageAgreement"; | ||||
| var GET_USAGE_AGREEMENT = "Services/Patients.svc/REST/GetUsageAgreementText"; | ||||
| var ADD_USAGE_AGREEMENT = "Services/Patients.svc/REST/AddUsageAgreement"; | ||||
| 
 | ||||
| var GET_ER_ONLINE_PAYMENT_DETAILS = 'Services/OUTPs.svc/Rest/Outp_GetPatientPaymentInformationForERClinic'; | ||||
| 
 | ||||
| var AUTO_GENERATE_INVOICE_ER = 'Services/OUTPs.svc/Rest/Outp_AutoGenerateInvoiceForER'; | ||||
| 
 | ||||
| var CHECK_IF_PATIENT_ARRIVED_ER_ONLINE_CHECKIN = 'Services/OUTPs.svc/Rest/IsPatientArrived'; | ||||
| 
 | ||||
| var CHECK_PATIENT_ER_ADVANCE_BALANCE = 'Services/OUTPs.svc/Rest/getPatientAdvanceBalanceAmountByClinic'; | ||||
| 
 | ||||
| var GET_PROJECT_FROM_NFC = 'Services/OUTPs.svc/Rest/GetProjectByNFC'; | ||||
| 
 | ||||
| var GET_PATIENT_OCCUPATION_LIST = 'Services/Authentication.svc/REST/GetPatientOccupation'; | ||||
| 
 | ||||
| var IS_DOCTOR_AVAILABLE_BY_CALENDAR_SCHEDULE = 'Services/OUTPs.svc/REST/HIS_IsDoctorAvailableByCalendarSchedule'; | ||||
| 
 | ||||
| //PAYFORT | ||||
| var getPayFortProjectDetails = "Services/PayFort_Serv.svc/REST/GetPayFortProjectDetails"; | ||||
| var addPayFortApplePayResponse = "Services/PayFort_Serv.svc/REST/AddResponse"; | ||||
| // var payFortEnvironment = FortEnvironment.production; | ||||
| var applePayMerchantId = "merchant.com.hmgwebservices"; | ||||
| // var payFortEnvironment = FortEnvironment.test; | ||||
| // var applePayMerchantId = "merchant.com.hmgwebservices.uat"; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // Auth Provider Consts | ||||
| 
 | ||||
| 
 | ||||
| const String INSERT_DEVICE_IMEI = 'Services/Patients.svc/REST/Patient_INSERTDeviceIMEI'; | ||||
| const String SELECT_DEVICE_IMEI = 'Services/Patients.svc/REST/Patient_SELECTDeviceIMEIbyIMEI'; | ||||
| const String CHECK_PATIENT_AUTH = 'Services/Authentication.svc/REST/CheckPatientAuthentication'; | ||||
| const GET_MOBILE_INFO = 'Services/Authentication.svc/REST/GetMobileLoginInfo'; | ||||
| const SEND_ACTIVATION_CODE = 'Services/Authentication.svc/REST/SendActivationCodebyOTPNotificationType'; | ||||
| 
 | ||||
| const SEND_ACTIVATION_CODE_REGISTER = 'Services/Authentication.svc/REST/SendActivationCodebyOTPNotificationTypeForRegistration'; | ||||
| const CHECK_ACTIVATION_CODE = 'Services/Authentication.svc/REST/CheckActivationCode'; | ||||
| const CHECK_ACTIVATION_CODE_REGISTER = 'Services/Authentication.svc/REST/CheckActivationCodeForRegistration'; | ||||
| 
 | ||||
| const FORGOT_PASSWORD = 'Services/Authentication.svc/REST/CheckActivationCodeForSendFileNo'; | ||||
| const CHECK_PATIENT_FOR_REGISTRATION = "Services/Authentication.svc/REST/CheckPatientForRegisteration"; | ||||
| 
 | ||||
| const CHECK_USER_STATUS = "Services/NHIC.svc/REST/GetPatientInfo"; | ||||
| const REGISTER_USER = 'Services/Authentication.svc/REST/PatientRegistration'; | ||||
| const LOGGED_IN_USER_URL = 'Services/MobileNotifications.svc/REST/Insert_PatientMobileDeviceInfo'; | ||||
| 
 | ||||
| const FORGOT_PATIENT_ID = 'Services/Authentication.svc/REST/SendPatientIDSMSByMobileNumber'; | ||||
| const DASHBOARD = 'Services/Patients.svc/REST/PatientDashboard'; | ||||
| const PROFILE_SETTING = 'Services/Patients.svc/REST/GetPateintInfoForUpdate'; | ||||
| const SAVE_SETTING = 'Services/Patients.svc/REST/UpdatePateintInfo'; | ||||
| 
 | ||||
| const DEACTIVATE_ACCOUNT = 'Services/Patients.svc/REST/PatientAppleActivation_InsertUpdate'; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| class ApiConsts { | ||||
|   static const maxSmallScreen = 660; | ||||
| 
 | ||||
|   static bool isDevelopment = true; | ||||
| 
 | ||||
|   // static String baseUrl = 'https://uat.hmgwebservices.com/'; // HIS API URL UAT | ||||
|   static String baseUrl = 'https://hmgwebservices.com/'; // HIS API URL PROD | ||||
| 
 | ||||
|   static String SELECT_DEVICE_IMEI = 'Services/Patients.svc/REST/Patient_SELECTDeviceIMEIbyIMEI'; | ||||
| 
 | ||||
|   static num VERSION_ID = 18.9; | ||||
| 
 | ||||
|   static final String selectDeviceImei = 'Services/Patients.svc/REST/Patient_SELECTDeviceIMEIbyIMEI'; | ||||
|   static final String sendActivationCode = 'Services/Authentication.svc/REST/SendActivationCodebyOTPNotificationType'; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   static setBackendURLs() { | ||||
|     if (isDevelopment) { | ||||
|       baseUrl = "https://uat.hmgwebservices.com/"; | ||||
|     } else { | ||||
|       baseUrl = "https://hmgwebservices.com/"; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   static final Map<String, String> packagesAuthHeader = {}; | ||||
| 
 | ||||
| } | ||||
| @ -1,9 +1,39 @@ | ||||
| import 'package:get_it/get_it.dart'; | ||||
| import 'package:hmg_patient_app_new/core/api/api_client.dart'; | ||||
| import 'package:hmg_patient_app_new/core/app_state.dart'; | ||||
| import 'package:injector/injector.dart'; | ||||
| import 'package:hmg_patient_app_new/features/authentication/authentication_repo.dart'; | ||||
| import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_repo.dart'; | ||||
| import 'package:hmg_patient_app_new/features/common/common_repo.dart'; | ||||
| import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_repo.dart'; | ||||
| import 'package:hmg_patient_app_new/services/analytics/analytics_service.dart'; | ||||
| import 'package:hmg_patient_app_new/services/cache_service.dart'; | ||||
| import 'package:hmg_patient_app_new/services/logger_service.dart'; | ||||
| import 'package:logger/web.dart'; | ||||
| import 'package:shared_preferences/shared_preferences.dart'; | ||||
| 
 | ||||
| GetIt getIt = GetIt.instance; | ||||
| 
 | ||||
| class AppDependencies { | ||||
|   static void addDependencies() { | ||||
|     Injector injector = Injector.appInstance; | ||||
|     injector.registerSingleton<AppState>(() => AppState()); | ||||
|   static Future<void> addDependencies() async { | ||||
|     // Services | ||||
|     getIt.registerLazySingleton<LoggerService>(() => LoggerServiceImp(logger: Logger(printer: PrettyPrinter( | ||||
|       methodCount: 2,        // number of stack trace lines | ||||
|       errorMethodCount: 5,   // number of stack trace lines for errors | ||||
|       lineLength: 100,       // wrap width | ||||
|       colors: true,          // colorful logs | ||||
|       printEmojis: true,     // include emojis | ||||
|     ),))); | ||||
|     final sharedPreferences = await SharedPreferences.getInstance(); | ||||
|     getIt.registerLazySingleton<CacheService>(() => CacheServiceImp(sharedPreferences: sharedPreferences)); | ||||
|     getIt.registerSingleton(AppState()); | ||||
|     getIt.registerSingleton(GAnalytics()); | ||||
|     getIt.registerLazySingleton<ApiClient>(() => ApiClientImp(loggerService: getIt())); | ||||
| 
 | ||||
|     // Repositories | ||||
|     getIt.registerLazySingleton<CommonRepo>(() => CommonRepoImp(loggerService: getIt())); | ||||
|     getIt.registerLazySingleton<AuthenticationRepo>(() => AuthenticationRepoImp(loggerService: getIt<LoggerService>(), apiClient: getIt())); | ||||
|     getIt.registerLazySingleton<BookAppointmentsRepo>(() => BookAppointmentsRepoImp(loggerService: getIt<LoggerService>(), apiClient: getIt())); | ||||
|     getIt.registerLazySingleton<MyAppointmentsRepo>(() => MyAppointmentsRepoImp(loggerService: getIt<LoggerService>(), apiClient: getIt())); | ||||
| 
 | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -0,0 +1,42 @@ | ||||
| 
 | ||||
| import 'package:equatable/equatable.dart'; | ||||
| 
 | ||||
| abstract class Failure extends Equatable implements Exception { | ||||
|   final String message; | ||||
|   const Failure(this.message); | ||||
| } | ||||
| 
 | ||||
| class ServerFailure extends Failure { | ||||
|   const ServerFailure(super.message); | ||||
| 
 | ||||
|   @override | ||||
|   List<Object?> get props => [message]; | ||||
| } | ||||
| 
 | ||||
| class ConnectivityFailure extends Failure { | ||||
|   const ConnectivityFailure(super.message); | ||||
| 
 | ||||
|   @override | ||||
|   List<Object?> get props => [message]; | ||||
| } | ||||
| 
 | ||||
| class LocalStorageFailure extends Failure { | ||||
|   const LocalStorageFailure(super.message); | ||||
| 
 | ||||
|   @override | ||||
|   List<Object?> get props => [message]; | ||||
| } | ||||
| 
 | ||||
| class DuplicateUsername extends Failure { | ||||
|   const DuplicateUsername({String? message}) : super(message ?? ''); | ||||
| 
 | ||||
|   @override | ||||
|   List<Object?> get props => [message]; | ||||
| } | ||||
| 
 | ||||
| class InvalidCredentials extends Failure { | ||||
|   const InvalidCredentials({String? message}) : super(message ?? ''); | ||||
| 
 | ||||
|   @override | ||||
|   List<Object?> get props => [message]; | ||||
| } | ||||
| @ -0,0 +1,487 @@ | ||||
| import 'package:device_calendar/device_calendar.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:intl/intl.dart'; | ||||
| 
 | ||||
| class DateUtil { | ||||
|   /// convert String To Date function | ||||
|   /// [date] String we want to convert | ||||
|   static DateTime convertStringToDate(String? date) { | ||||
|     if (date != null) { | ||||
|       const start = "/Date("; | ||||
|       const end = "+0300)"; | ||||
|       final startIndex = date.indexOf(start); | ||||
|       final endIndex = date.indexOf(end, startIndex + start.length); | ||||
|       return DateTime.fromMillisecondsSinceEpoch(int.parse( | ||||
|         date.substring(startIndex + start.length, endIndex), | ||||
|       )); | ||||
|     } else { | ||||
|       return DateTime.now(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   static DateTime convertStringToDateSaudiTimezone(String date, int projectId) { | ||||
|     if (date != null) { | ||||
|       const start = "/Date("; | ||||
|       const end = "+0300)"; | ||||
|       final startIndex = date.indexOf(start); | ||||
|       final endIndex = date.indexOf(end, startIndex + start.length); | ||||
|       // if (projectId == 2 || projectId == 3) { | ||||
|       //   return DateTime.fromMillisecondsSinceEpoch( | ||||
|       //           int.parse( | ||||
|       //             date.substring(startIndex + start.length, endIndex), | ||||
|       //           ), | ||||
|       //           isUtc: true) | ||||
|       //       .add(Duration(hours: 4)); | ||||
|       // } else { | ||||
|       return DateTime.fromMillisecondsSinceEpoch( | ||||
|           int.parse( | ||||
|             date.substring(startIndex + start.length, endIndex), | ||||
|           ), | ||||
|           isUtc: true) | ||||
|           .add(Duration(hours: 3)); | ||||
|       // } | ||||
|     } else { | ||||
|       return DateTime.now(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   static DateTime convertStringToDateNoTimeZone(String date) { | ||||
|     // /Date(1585774800000+0300)/ | ||||
|     if (date != null) { | ||||
|       const start = "/Date("; | ||||
|       const end = ")"; | ||||
|       final startIndex = date.indexOf(start); | ||||
|       final endIndex = date.indexOf(end, startIndex + start.length); | ||||
|       return DateTime.fromMillisecondsSinceEpoch( | ||||
|         int.parse( | ||||
|           date.substring(startIndex + start.length, endIndex), | ||||
|         ), | ||||
|       ); | ||||
|     } else { | ||||
|       return DateTime.now(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   static DateTime convertStringToDateTime(String? date) { | ||||
|     if (date != null) { | ||||
|       try { | ||||
|         var dateT = date.split('/'); | ||||
|         var year = dateT[2].substring(0, 4); | ||||
|         var dateP = DateTime(int.parse(year), int.parse(dateT[1]), int.parse(dateT[0])); | ||||
|         return dateP; | ||||
|       } catch (e) { | ||||
|         print(e); | ||||
|       } | ||||
| 
 | ||||
|       return DateTime.now(); | ||||
|     } else { | ||||
|       return DateTime.now(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   static String convertDateToString(DateTime date) { | ||||
|     const start = "/Date("; | ||||
|     const end = "+0300)/"; | ||||
|     int milliseconds = date.millisecondsSinceEpoch; | ||||
| 
 | ||||
|     return start + "$milliseconds" + end; | ||||
|   } | ||||
| 
 | ||||
|   static String convertDateToStringLocation(DateTime date) { | ||||
|     const start = "/Date("; | ||||
|     const end = ")/"; | ||||
|     int milliseconds = date.millisecondsSinceEpoch; | ||||
| 
 | ||||
|     return start + "$milliseconds" + end; | ||||
|   } | ||||
| 
 | ||||
|   static String convertTime(String timeStr) { | ||||
|     TimeOfDay time = TimeOfDay(hour: int.parse(timeStr.split(":")[0]), minute: int.parse(timeStr.split(":")[1])); // 24-hour format time | ||||
| 
 | ||||
|     int hour = time.hourOfPeriod; // get hour in 12-hour format | ||||
|     String meridiem = time.period == DayPeriod.am ? "AM" : "PM"; // get AM/PM | ||||
| 
 | ||||
|     String convertedTime = '$hour:${time.minute == 0 ? "00" : time.minute} $meridiem'; // create the new time string | ||||
| 
 | ||||
|     return convertedTime; | ||||
|   } | ||||
| 
 | ||||
|   static String formatDateToDate(DateTime date, bool isArabic) { | ||||
|     return DateFormat('dd MMM yyy', isArabic ? "ar_SA" : "en_US").format(date); | ||||
|   } | ||||
| 
 | ||||
|   static String formatDateToTime(DateTime date) { | ||||
|     return DateFormat('hh:mm a').format(date); | ||||
|   } | ||||
| 
 | ||||
|   static String yearMonthDay(DateTime dateTime) { | ||||
|     String dateFormat = '${dateTime.year}-${dateTime.month}-${dateTime.day}'; | ||||
|     return dateFormat; | ||||
|   } | ||||
| 
 | ||||
|   static String time(DateTime dateTime) { | ||||
|     String dateFormat = '${dateTime.hour}:${dateTime.minute}:00'; | ||||
|     return dateFormat; | ||||
|   } | ||||
| 
 | ||||
|   static String convertDateMSToJsonDate(utc) { | ||||
|     var dt = new DateTime.fromMicrosecondsSinceEpoch(utc); | ||||
| 
 | ||||
|     return "/Date(" + (dt.millisecondsSinceEpoch * 1000).toString() + '+0300' + ")/"; | ||||
|   } | ||||
| 
 | ||||
|   /// check Date | ||||
|   /// [dateString] String we want to convert | ||||
|   static String checkDate(DateTime checkedTime) { | ||||
|     DateTime currentTime = DateTime.now(); | ||||
|     if ((currentTime.year == checkedTime.year) && (currentTime.month == checkedTime.month) && (currentTime.day == checkedTime.day)) { | ||||
|       return "Today"; | ||||
|     } else if ((currentTime.year == checkedTime.year) && (currentTime.month == checkedTime.month)) { | ||||
|       if ((currentTime.day - checkedTime.day) == 1) { | ||||
|         return "YESTERDAY"; | ||||
|       } else if ((currentTime.day - checkedTime.day) == -1) { | ||||
|         return "Tomorrow"; | ||||
|       } | ||||
| 
 | ||||
|       if ((currentTime.day - checkedTime.day) <= -2) { | ||||
|         return "Next Week"; | ||||
|       } else { | ||||
|         return "Old Date"; | ||||
|       } | ||||
|     } | ||||
|     return "Old Date"; | ||||
|   } | ||||
| 
 | ||||
|   static String getDateFormatted(String date) { | ||||
|     DateTime dateObj = DateUtil.convertStringToDate(date); | ||||
|     return DateUtil.getWeekDay(dateObj.weekday) + ", " + dateObj.day.toString() + " " + DateUtil.getMonth(dateObj.month) + " " + dateObj.year.toString(); | ||||
|   } | ||||
| 
 | ||||
|   static String getISODateFormat(DateTime dateTime) { | ||||
|     // 2020-04-30T00:00:00.000 | ||||
|     return dateTime.toIso8601String(); | ||||
|   } | ||||
| 
 | ||||
|   /// get month by | ||||
|   /// [month] convert month number in to month name | ||||
|   static getMonth(int month) { | ||||
|     switch (month) { | ||||
|       case 1: | ||||
|         return "January"; | ||||
|       case 2: | ||||
|         return "February"; | ||||
|       case 3: | ||||
|         return "March"; | ||||
|       case 4: | ||||
|         return "April"; | ||||
|       case 5: | ||||
|         return "May"; | ||||
|       case 6: | ||||
|         return "June"; | ||||
|       case 7: | ||||
|         return "July"; | ||||
|       case 8: | ||||
|         return "August"; | ||||
|       case 9: | ||||
|         return "September"; | ||||
|       case 10: | ||||
|         return "October"; | ||||
|       case 11: | ||||
|         return "November"; | ||||
|       case 12: | ||||
|         return "December"; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /// get month by | ||||
|   /// [month] convert month number in to month name in Arabic | ||||
|   static getMonthArabic(int month) { | ||||
|     switch (month) { | ||||
|       case 1: | ||||
|         return "يناير"; | ||||
|       case 2: | ||||
|         return " فبراير"; | ||||
|       case 3: | ||||
|         return "مارس"; | ||||
|       case 4: | ||||
|         return "أبريل"; | ||||
|       case 5: | ||||
|         return "مايو"; | ||||
|       case 6: | ||||
|         return "يونيو"; | ||||
|       case 7: | ||||
|         return "يوليو"; | ||||
|       case 8: | ||||
|         return "أغسطس"; | ||||
|       case 9: | ||||
|         return "سبتمبر"; | ||||
|       case 10: | ||||
|         return " اكتوبر"; | ||||
|       case 11: | ||||
|         return " نوفمبر"; | ||||
|       case 12: | ||||
|         return "ديسمبر"; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   static getMonthByName(String month) { | ||||
|     switch (month.toLowerCase()) { | ||||
|       case 'january': | ||||
|         return 1; | ||||
|       case 'february': | ||||
|         return 2; | ||||
|       case 'march': | ||||
|         return 3; | ||||
|       case 'april': | ||||
|         return 4; | ||||
|       case 'may': | ||||
|         return 5; | ||||
|       case 'june': | ||||
|         return 6; | ||||
|       case 'july': | ||||
|         return 7; | ||||
|       case 'august': | ||||
|         return 8; | ||||
|       case 'september': | ||||
|         return 9; | ||||
|       case 'october': | ||||
|         return 10; | ||||
|       case 'november': | ||||
|         return 11; | ||||
|       case 'december': | ||||
|         return 12; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   static getMonthDateTime(String month, yearName) { | ||||
|     DateTime? date; | ||||
|     try { | ||||
|       date = DateTime(int.parse(yearName), getMonthByName(month)); | ||||
|     } catch (e) { | ||||
|       print(e); | ||||
|     } | ||||
|     return date ?? DateTime.now(); | ||||
|   } | ||||
| 
 | ||||
|   /// get month by | ||||
|   /// [weekDay] convert week day in int to week day name | ||||
|   static getWeekDay(int weekDay) { | ||||
|     switch (weekDay) { | ||||
|       case 1: | ||||
|         return "Monday"; | ||||
|       case 2: | ||||
|         return "Tuesday"; | ||||
|       case 3: | ||||
|         return "Wednesday"; | ||||
|       case 4: | ||||
|         return "Thursday"; | ||||
|       case 5: | ||||
|         return "Friday"; | ||||
|       case 6: | ||||
|         return "Saturday "; | ||||
|       case 7: | ||||
|         return "Sunday"; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /// get month by | ||||
|   /// [weekDay] convert week day in int to week day name arabic | ||||
|   static getWeekDayArabic(int weekDay) { | ||||
|     switch (weekDay) { | ||||
|       case 1: | ||||
|         return "الاثنين"; | ||||
|       case 2: | ||||
|         return "الثلاثاء"; | ||||
|       case 3: | ||||
|         return "الاربعاء"; | ||||
|       case 4: | ||||
|         return "الخميس"; | ||||
|       case 5: | ||||
|         return "الجمعه"; | ||||
|       case 6: | ||||
|         return "السبت "; | ||||
|       case 7: | ||||
|         return "الاحد"; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   static getWeekDayEnglish(int weekDay) { | ||||
|     switch (weekDay) { | ||||
|       case 1: | ||||
|         return "Monday"; | ||||
|       case 2: | ||||
|         return "Tuesday"; | ||||
|       case 3: | ||||
|         return "Wednesday"; | ||||
|       case 4: | ||||
|         return "Thursday"; | ||||
|       case 5: | ||||
|         return "Friday"; | ||||
|       case 6: | ||||
|         return "Saturday "; | ||||
|       case 7: | ||||
|         return "Sunday"; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /// get data formatted like Apr 26,2020 | ||||
|   /// [dateTime] convert DateTime to data formatted | ||||
|   static String getMonthDayYearDateFormatted(DateTime dateTime) { | ||||
|     if (dateTime != null) { | ||||
|       return getMonth(dateTime.month) + " " + dateTime.day.toString() + ", " + dateTime.year.toString(); | ||||
|     } else { | ||||
|       return ""; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /// get data formatted like Apr 26,2020 | ||||
|   /// [dateTime] convert DateTime to data formatted Arabic | ||||
|   static String getMonthDayYearDateFormattedAr(DateTime dateTime) { | ||||
|     if (dateTime != null) { | ||||
|       return getMonthArabic(dateTime.month) + " " + dateTime.day.toString() + ", " + dateTime.year.toString(); | ||||
|     } else { | ||||
|       return ""; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /// get data formatted like Thursday, Apr 26,2020 | ||||
|   /// [dateTime] convert DateTime to date formatted | ||||
|   static String getWeekDayMonthDayYearDateFormatted(DateTime dateTime, String lang) { | ||||
|     if (dateTime != null) { | ||||
|       return lang == 'en' | ||||
|           ? getWeekDayEnglish(dateTime.weekday) + ", " + getMonth(dateTime.month) + " " + dateTime.day.toString() + " " + dateTime.year.toString() | ||||
|           : getWeekDayArabic(dateTime.weekday) + ", " + dateTime.day.toString() + " " + getMonthArabic(dateTime.month) + " " + dateTime.year.toString(); | ||||
|     } else { | ||||
|       return ""; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   static String getMonthDayYearLangDateFormatted(DateTime dateTime, String lang) { | ||||
|     if (dateTime != null) { | ||||
|       return lang == 'en' | ||||
|           ? getMonth(dateTime.month) + " " + dateTime.day.toString() + " " + dateTime.year.toString() | ||||
|           : dateTime.day.toString() + " " + getMonthArabic(dateTime.month) + " " + dateTime.year.toString(); | ||||
|     } else { | ||||
|       return ""; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /// get data  formatted like 26/4/2020 | ||||
|   static String getDayMonthYearLangDateFormatted(DateTime dateTime, String lang) { | ||||
|     if (dateTime != null) { | ||||
|       return lang == 'en' | ||||
|           ? dateTime.day.toString() + " " + getMonth(dateTime.month) + " " + dateTime.year.toString() | ||||
|           : dateTime.day.toString() + " " + getMonthArabic(dateTime.month) + " " + dateTime.year.toString(); | ||||
|     } else { | ||||
|       return ""; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   static String getMonthYearLangDateFormatted(DateTime dateTime, String lang) { | ||||
|     if (dateTime != null) { | ||||
|       return lang == 'en' ? getMonth(dateTime.month) + " " + dateTime.year.toString() : getMonthArabic(dateTime.month) + " " + dateTime.year.toString(); | ||||
|     } else { | ||||
|       return ""; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /// get data  formatted like 26/4/2020 | ||||
|   /// [dateTime] convert DateTime to data formatted | ||||
|   static String getDayMonthYearDateFormatted(DateTime dateTime) { | ||||
|     if (dateTime != null) { | ||||
|       return dateTime.day.toString() + "/" + dateTime.month.toString() + "/" + dateTime.year.toString(); | ||||
|     } else { | ||||
|       return ""; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /// get data  formatted like 26/4/2020 | ||||
|   /// [dateTime] convert DateTime to data formatted | ||||
|   static String getDayMonthDateFormatted(DateTime dateTime) { | ||||
|     if (dateTime != null) { | ||||
|       return DateFormat('dd/MM').format(dateTime); | ||||
|     } else { | ||||
|       return ""; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /// get data  formatted like 26/4/2020 | ||||
|   /// [dateTime] convert DateTime to data formatted according to language | ||||
|   static String getDayMonthYearDateFormattedLang(DateTime dateTime, bool isArabic) { | ||||
|     if (dateTime != null) { | ||||
|       return DateFormat('dd/MM/yyyy', isArabic ? "ar_SA" : "en_US").format(dateTime); | ||||
|     } else { | ||||
|       return ""; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /// get data  formatted like 10:30 according to lang | ||||
|   static String formatDateToTimeLang(DateTime date, bool isArabic) { | ||||
|     return DateFormat('HH:mm', isArabic ? "ar_SA" : "en_US").format(date); | ||||
|   } | ||||
| 
 | ||||
|   /// get data  formatted like 26/4/2020 10:30 | ||||
|   /// [dateTime] convert DateTime to data formatted | ||||
|   static String getDayMonthYearHourMinuteDateFormatted(DateTime dateTime) { | ||||
|     if (dateTime != null) { | ||||
|       return dateTime.day.toString() + "/" + dateTime.month.toString() + "/" + dateTime.year.toString() + " " + DateFormat('HH:mm').format(dateTime); | ||||
|     } else { | ||||
|       return ""; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /// get data  formatted like 2020-8-13 09:43:00 | ||||
|   /// [dateTime] convert DateTime to data formatted | ||||
|   static String getYearMonthDayHourMinSecDateFormatted(DateTime dateTime) { | ||||
|     if (dateTime != null) { | ||||
|       return dateTime.year.toString() + | ||||
|           "-" + | ||||
|           dateTime.month.toString() + | ||||
|           "-" + | ||||
|           dateTime.day.toString() + | ||||
|           " " + | ||||
|           dateTime.hour.toString() + | ||||
|           ":" + | ||||
|           dateTime.minute.toString() + | ||||
|           ":" + | ||||
|           dateTime.second.toString(); | ||||
|     } else { | ||||
|       return ""; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   static String getFormattedDate(DateTime dateTime, String formattedString) { | ||||
|     return DateFormat(formattedString).format(dateTime); | ||||
|   } | ||||
| 
 | ||||
|   static convertISODateToJsonDate(String isoDate) { | ||||
|     return "/Date(" + DateFormat('mm-dd-yyy').parse(isoDate).millisecondsSinceEpoch.toString() + ")/"; | ||||
|   } | ||||
| 
 | ||||
|   static String getDay(DayOfWeek dayOfWeek) { | ||||
|     switch (dayOfWeek) { | ||||
|       case DayOfWeek.Monday: | ||||
|         return "Monday"; | ||||
|         break; | ||||
|       case DayOfWeek.Tuesday: | ||||
|         return "Tuesday"; | ||||
|         break; | ||||
|       case DayOfWeek.Wednesday: | ||||
|         return "Wednesday"; | ||||
|         break; | ||||
|       case DayOfWeek.Thursday: | ||||
|         return "Thursday"; | ||||
|         break; | ||||
|       case DayOfWeek.Friday: | ||||
|         return "Friday"; | ||||
|         break; | ||||
|       case DayOfWeek.Saturday: | ||||
|         return "Saturday"; | ||||
|         break; | ||||
|       case DayOfWeek.Sunday: | ||||
|         return "Sunday"; | ||||
|         break; | ||||
|     } | ||||
|     return ""; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,23 @@ | ||||
| import 'package:flutter/material.dart'; | ||||
| 
 | ||||
| extension NavigationExtensions on BuildContext { | ||||
|   void navigateWithName(String routeName, {Object? arguments}) { | ||||
|     Navigator.pushNamed(this, routeName, arguments: arguments); | ||||
|   } | ||||
| 
 | ||||
|   Future<void> navigateReplaceWithName(String routeName, {Object? arguments}) async { | ||||
|     await Navigator.pushReplacementNamed(this, routeName, arguments: arguments); | ||||
|   } | ||||
| 
 | ||||
|   void navigateReplaceWithNameUntilRoute(String routeName, {Object? arguments}) { | ||||
|     Navigator.pushNamedAndRemoveUntil(this, routeName, (route) => false); | ||||
|   } | ||||
| 
 | ||||
|   void pop() { | ||||
|     Navigator.of(this).pop(); | ||||
|   } | ||||
| 
 | ||||
|   void navigateTo(Widget page) { | ||||
|     Navigator.push(this, MaterialPageRoute(builder: (context) => page)); | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,57 @@ | ||||
| import 'dart:async'; | ||||
| import 'dart:developer'; | ||||
| 
 | ||||
| import 'package:dartz/dartz.dart'; | ||||
| import 'package:hmg_patient_app_new/core/api/api_client.dart'; | ||||
| import 'package:hmg_patient_app_new/core/api_consts.dart'; | ||||
| import 'package:hmg_patient_app_new/core/exceptions/api_exception.dart'; | ||||
| import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart'; | ||||
| import 'package:hmg_patient_app_new/features/authentication/models/select_device_by_imei.dart'; | ||||
| import 'package:hmg_patient_app_new/services/logger_service.dart'; | ||||
| 
 | ||||
| abstract class AuthenticationRepo { | ||||
|   Future<Either<Failure, SelectDeviceByImeiRespModelElement?>> selectDeviceByImei({required String firebaseToken}); | ||||
| } | ||||
| 
 | ||||
| class AuthenticationRepoImp implements AuthenticationRepo { | ||||
|   final ApiClient apiClient; | ||||
|   final LoggerService loggerService; | ||||
| 
 | ||||
|   AuthenticationRepoImp({required this.loggerService, required this.apiClient}); | ||||
| 
 | ||||
|   @override | ||||
|   Future<Either<Failure, SelectDeviceByImeiRespModelElement?>> selectDeviceByImei({ | ||||
|     required String firebaseToken, | ||||
|   }) async { | ||||
|     final mapDevice = {"IMEI": firebaseToken}; | ||||
|     try { | ||||
| 
 | ||||
|     final completer = Completer<Either<Failure, SelectDeviceByImeiRespModelElement?>>(); | ||||
|     await apiClient.post( | ||||
|       ApiConsts.selectDeviceImei, | ||||
|       body: mapDevice, | ||||
|       onSuccess: (response, statusCode) { | ||||
|         try { | ||||
|           final SelectDeviceByImeiRespModelElement model = | ||||
|               SelectDeviceByImeiRespModelElement.fromJson(response['Patient_SELECTDeviceIMEIbyIMEIList'][0]); | ||||
|           completer.complete(Right(model)); | ||||
|         } catch (e) { | ||||
|           completer.complete(Left(ServerFailure(e.toString()))); | ||||
|         } | ||||
|       }, | ||||
|       onFailure: (error, statusCode) { | ||||
|         loggerService.logInfo(("$error - $statusCode").toString()); | ||||
|         completer.complete(Left(ServerFailure(error))); | ||||
|       }, | ||||
|     ); | ||||
| 
 | ||||
|     return await completer.future; | ||||
|     } on APIException catch (e) { | ||||
|       loggerService.errorLogs(e.toString()); | ||||
|       return Left(ServerFailure(e.message)); | ||||
|     } catch (e) { | ||||
|       loggerService.errorLogs(e.toString()); | ||||
|       return Left(ServerFailure(e.toString())); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,47 @@ | ||||
| import 'dart:developer'; | ||||
| import 'dart:io'; | ||||
| 
 | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:hmg_patient_app_new/core/api_consts.dart'; | ||||
| import 'package:hmg_patient_app_new/core/app_state.dart'; | ||||
| import 'package:hmg_patient_app_new/core/utils/utils.dart'; | ||||
| import 'package:hmg_patient_app_new/features/authentication/authentication_repo.dart'; | ||||
| import 'package:hmg_patient_app_new/features/authentication/models/check_activation_code_request_register.dart'; | ||||
| 
 | ||||
| class AuthenticationViewModel extends ChangeNotifier { | ||||
|   AuthenticationRepo authenticationRepo; | ||||
|   AppState appState; | ||||
| 
 | ||||
|   AuthenticationViewModel({ | ||||
|     required this.appState, | ||||
|     required this.authenticationRepo, | ||||
|   }); | ||||
| 
 | ||||
|   final TextEditingController nationalIdController = TextEditingController(); | ||||
|   final TextEditingController phoneNumberController = TextEditingController(); | ||||
| 
 | ||||
|   Future<void> selectDeviceImei({ | ||||
|     Function(dynamic)? onSuccess, | ||||
|     Function(String)? onError | ||||
|   }) async { | ||||
|     final String firebaseToken = | ||||
|         "cIkkB7h7Q7uoFkC4Qv82xG:APA91bEb53Z9XzqymCIctaLxCoMX6bm9fuKlWILQ59uUqfwhCoD42AOP1-jWGB1WYd9BVN5PT2pUUFxrT07vcNg1KH9OH39mrPgCl0m21XVIgWrzNnCkufg"; | ||||
| 
 | ||||
|     final resultEither = | ||||
|         await authenticationRepo.selectDeviceByImei(firebaseToken: firebaseToken); | ||||
| 
 | ||||
|     resultEither.fold( | ||||
|       (failure) { | ||||
|         notifyListeners(); | ||||
|         if (onError != null) onError(failure.message); | ||||
|       }, | ||||
|       (data) { | ||||
| 
 | ||||
|         log("resultEither: ${data.toString()} "); | ||||
| 
 | ||||
|         notifyListeners(); | ||||
|         if (onSuccess != null) onSuccess(data); | ||||
|       }, | ||||
|     ); | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,292 @@ | ||||
| import 'package:hmg_patient_app_new/core/utils/date_util.dart'; | ||||
| 
 | ||||
| class AuthenticatedUser { | ||||
|   String? setupID; | ||||
|   int? patientType; | ||||
|   int? patientID; | ||||
|   String? firstName; | ||||
|   String? middleName; | ||||
|   String? lastName; | ||||
|   String? firstNameN; | ||||
|   String? middleNameN; | ||||
|   String? lastNameN; | ||||
|   int? relationshipID; | ||||
|   int? gender; | ||||
|   String? dateofBirth; | ||||
|   DateTime? dateofBirthDataTime; | ||||
|   dynamic dateofBirthN; | ||||
|   String? nationalityID; | ||||
|   dynamic phoneResi; | ||||
|   dynamic phoneOffice; | ||||
|   String? mobileNumber; | ||||
|   dynamic faxNumber; | ||||
|   String? emailAddress; | ||||
|   dynamic bloodGroup; | ||||
|   dynamic rHFactor; | ||||
|   bool? isEmailAlertRequired; | ||||
|   bool? isSMSAlertRequired; | ||||
|   String? preferredLanguage; | ||||
|   bool? isPrivilegedMember; | ||||
|   dynamic memberID; | ||||
|   dynamic expiryDate; | ||||
|   dynamic isHmgEmployee; | ||||
|   dynamic employeeID; | ||||
|   dynamic emergencyContactName; | ||||
|   dynamic emergencyContactNo; | ||||
|   int? patientPayType; | ||||
|   dynamic dHCCPatientRefID; | ||||
|   bool? isPatientDummy; | ||||
|   int? status; | ||||
|   dynamic isStatusCleared; | ||||
|   int? patientIdentificationType; | ||||
|   String? patientIdentificationNo; | ||||
|   int? projectID; | ||||
|   int? infoSourceID; | ||||
|   dynamic address; | ||||
|   int? age; | ||||
|   String? ageDesc; | ||||
|   int? areaID; | ||||
|   int? createdBy; | ||||
|   String? genderDescription; | ||||
|   dynamic iR; | ||||
|   dynamic iSOCityID; | ||||
|   dynamic iSOCountryID; | ||||
|   List<ListPrivilege>? listPrivilege; | ||||
|   dynamic marital; | ||||
|   int? outSA; | ||||
|   dynamic pOBox; | ||||
|   bool? receiveHealthSummaryReport; | ||||
|   int? sourceType; | ||||
|   dynamic strDateofBirth; | ||||
|   dynamic tempAddress; | ||||
|   dynamic zipCode; | ||||
|   dynamic isFamily; | ||||
|   dynamic cRSVerificationStatus; | ||||
|   // dynamic patientPayType; | ||||
|   // dynamic patientType; | ||||
|   // dynamic status; | ||||
| 
 | ||||
|   AuthenticatedUser( | ||||
|       {this.setupID, | ||||
|         this.patientType, | ||||
|         this.patientID, | ||||
|         this.firstName, | ||||
|         this.middleName, | ||||
|         this.lastName, | ||||
|         this.firstNameN, | ||||
|         this.middleNameN, | ||||
|         this.lastNameN, | ||||
|         this.relationshipID, | ||||
|         this.gender, | ||||
|         this.dateofBirth, | ||||
|         this.dateofBirthN, | ||||
|         this.nationalityID, | ||||
|         this.phoneResi, | ||||
|         this.phoneOffice, | ||||
|         this.mobileNumber, | ||||
|         this.faxNumber, | ||||
|         this.emailAddress, | ||||
|         this.bloodGroup, | ||||
|         this.rHFactor, | ||||
|         this.isEmailAlertRequired, | ||||
|         this.isSMSAlertRequired, | ||||
|         this.preferredLanguage, | ||||
|         this.isPrivilegedMember, | ||||
|         this.memberID, | ||||
|         this.expiryDate, | ||||
|         this.isHmgEmployee, | ||||
|         this.employeeID, | ||||
|         this.emergencyContactName, | ||||
|         this.emergencyContactNo, | ||||
|         this.patientPayType, | ||||
|         this.dHCCPatientRefID, | ||||
|         this.isPatientDummy, | ||||
|         this.status, | ||||
|         this.isStatusCleared, | ||||
|         this.patientIdentificationType, | ||||
|         this.patientIdentificationNo, | ||||
|         this.projectID, | ||||
|         this.infoSourceID, | ||||
|         this.address, | ||||
|         this.age, | ||||
|         this.ageDesc, | ||||
|         this.areaID, | ||||
|         this.createdBy, | ||||
|         this.genderDescription, | ||||
|         this.iR, | ||||
|         this.iSOCityID, | ||||
|         this.iSOCountryID, | ||||
|         this.listPrivilege, | ||||
|         this.marital, | ||||
|         this.outSA, | ||||
|         this.pOBox, | ||||
|         this.receiveHealthSummaryReport, | ||||
|         this.sourceType, | ||||
|         this.strDateofBirth, | ||||
|         this.tempAddress, | ||||
|         this.zipCode, | ||||
|         this.isFamily, | ||||
|         this.cRSVerificationStatus}); | ||||
| 
 | ||||
|   AuthenticatedUser.fromJson(Map<String, dynamic> json) { | ||||
|     setupID = json['SetupID']; | ||||
|     patientType = json['PatientType']; | ||||
|     patientID = json['PatientID']; | ||||
|     firstName = json['FirstName']; | ||||
|     middleName = json['MiddleName']; | ||||
|     lastName = json['LastName']; | ||||
|     firstNameN = json['FirstNameN']; | ||||
|     middleNameN = json['MiddleNameN']; | ||||
|     lastNameN = json['LastNameN']; | ||||
|     relationshipID = json['RelationshipID']; | ||||
|     gender = json['Gender']; | ||||
|     dateofBirth = json['DateofBirth']; | ||||
|     dateofBirthDataTime = DateUtil.convertStringToDate(json['DateofBirth']); | ||||
|     dateofBirthN = json['DateofBirthN']; | ||||
|     nationalityID = json['NationalityID']; | ||||
|     phoneResi = json['PhoneResi']; | ||||
|     phoneOffice = json['PhoneOffice']; | ||||
|     mobileNumber = json['MobileNumber']; | ||||
|     faxNumber = json['FaxNumber']; | ||||
|     emailAddress = json['EmailAddress']; | ||||
|     bloodGroup = json['BloodGroup']; | ||||
|     rHFactor = json['RHFactor']; | ||||
|     isEmailAlertRequired = json['IsEmailAlertRequired']; | ||||
|     isSMSAlertRequired = json['IsSMSAlertRequired']; | ||||
|     preferredLanguage = json['PreferredLanguage']; | ||||
|     isPrivilegedMember = json['IsPrivilegedMember']; | ||||
|     memberID = json['MemberID']; | ||||
|     expiryDate = json['ExpiryDate']; | ||||
|     isHmgEmployee = json['IsHmgEmployee']; | ||||
|     employeeID = json['EmployeeID']; | ||||
|     emergencyContactName = json['EmergencyContactName']; | ||||
|     emergencyContactNo = json['EmergencyContactNo']; | ||||
|     patientPayType = json['PatientPayType']; | ||||
|     dHCCPatientRefID = json['DHCCPatientRefID']; | ||||
|     isPatientDummy = json['IsPatientDummy']; | ||||
|     status = json['Status']; | ||||
|     isStatusCleared = json['IsStatusCleared']; | ||||
|     patientIdentificationType = json['PatientIdentificationType']; | ||||
|     patientIdentificationNo = json['PatientIdentificationNo']; | ||||
|     projectID = json['ProjectID']; | ||||
|     infoSourceID = json['InfoSourceID']; | ||||
|     address = json['Address']; | ||||
|     age = json['Age']; | ||||
|     ageDesc = json['AgeDesc']; | ||||
|     areaID = json['AreaID']; | ||||
|     createdBy = json['CreatedBy']; | ||||
|     genderDescription = json['GenderDescription']; | ||||
|     iR = json['IR']; | ||||
|     iSOCityID = json['ISOCityID']; | ||||
|     iSOCountryID = json['ISOCountryID']; | ||||
|     if (json['ListPrivilege'] != null) { | ||||
|       listPrivilege = []; | ||||
|       json['ListPrivilege'].forEach((v) { | ||||
|         listPrivilege!.add(new ListPrivilege.fromJson(v)); | ||||
|       }); | ||||
|     } | ||||
|     marital = json['Marital']; | ||||
|     outSA = json['OutSA']; | ||||
|     pOBox = json['POBox']; | ||||
|     receiveHealthSummaryReport = json['ReceiveHealthSummaryReport']; | ||||
|     sourceType = json['SourceType']; | ||||
|     strDateofBirth = json['StrDateofBirth']; | ||||
|     tempAddress = json['TempAddress']; | ||||
|     zipCode = json['ZipCode']; | ||||
|     isFamily = json['IsFamily']; | ||||
|     cRSVerificationStatus = json['CRSVerificationStatus']; | ||||
|   } | ||||
| 
 | ||||
|   Map<String, dynamic> toJson() { | ||||
|     final Map<String, dynamic> data = new Map<String, dynamic>(); | ||||
|     data['SetupID'] = this.setupID; | ||||
|     data['PatientType'] = this.patientType; | ||||
|     data['PatientID'] = this.patientID; | ||||
|     data['FirstName'] = this.firstName; | ||||
|     data['MiddleName'] = this.middleName; | ||||
|     data['LastName'] = this.lastName; | ||||
|     data['FirstNameN'] = this.firstNameN; | ||||
|     data['MiddleNameN'] = this.middleNameN; | ||||
|     data['LastNameN'] = this.lastNameN; | ||||
|     data['RelationshipID'] = this.relationshipID; | ||||
|     data['Gender'] = this.gender; | ||||
|     data['DateofBirth'] = this.dateofBirth; | ||||
|     data['DateofBirthN'] = this.dateofBirthN; | ||||
|     data['NationalityID'] = this.nationalityID; | ||||
|     data['PhoneResi'] = this.phoneResi; | ||||
|     data['PhoneOffice'] = this.phoneOffice; | ||||
|     data['MobileNumber'] = this.mobileNumber; | ||||
|     data['FaxNumber'] = this.faxNumber; | ||||
|     data['EmailAddress'] = this.emailAddress; | ||||
|     data['BloodGroup'] = this.bloodGroup; | ||||
|     data['RHFactor'] = this.rHFactor; | ||||
|     data['IsEmailAlertRequired'] = this.isEmailAlertRequired; | ||||
|     data['IsSMSAlertRequired'] = this.isSMSAlertRequired; | ||||
|     data['PreferredLanguage'] = this.preferredLanguage; | ||||
|     data['IsPrivilegedMember'] = this.isPrivilegedMember; | ||||
|     data['MemberID'] = this.memberID; | ||||
|     data['ExpiryDate'] = this.expiryDate; | ||||
|     data['IsHmgEmployee'] = this.isHmgEmployee; | ||||
|     data['EmployeeID'] = this.employeeID; | ||||
|     data['EmergencyContactName'] = this.emergencyContactName; | ||||
|     data['EmergencyContactNo'] = this.emergencyContactNo; | ||||
|     data['PatientPayType'] = this.patientPayType; | ||||
|     data['DHCCPatientRefID'] = this.dHCCPatientRefID; | ||||
|     data['IsPatientDummy'] = this.isPatientDummy; | ||||
|     data['Status'] = this.status; | ||||
|     data['IsStatusCleared'] = this.isStatusCleared; | ||||
|     data['PatientIdentificationType'] = this.patientIdentificationType; | ||||
|     data['PatientIdentificationNo'] = this.patientIdentificationNo; | ||||
|     data['ProjectID'] = this.projectID; | ||||
|     data['InfoSourceID'] = this.infoSourceID; | ||||
|     data['Address'] = this.address; | ||||
|     data['Age'] = this.age; | ||||
|     data['AgeDesc'] = this.ageDesc; | ||||
|     data['AreaID'] = this.areaID; | ||||
|     data['CreatedBy'] = this.createdBy; | ||||
|     data['GenderDescription'] = this.genderDescription; | ||||
|     data['IR'] = this.iR; | ||||
|     data['ISOCityID'] = this.iSOCityID; | ||||
|     data['ISOCountryID'] = this.iSOCountryID; | ||||
|     if (this.listPrivilege != null) { | ||||
|       data['ListPrivilege'] = | ||||
|           this.listPrivilege!.map((v) => v.toJson()).toList(); | ||||
|     } | ||||
|     data['Marital'] = this.marital; | ||||
|     data['OutSA'] = this.outSA; | ||||
|     data['POBox'] = this.pOBox; | ||||
|     data['ReceiveHealthSummaryReport'] = this.receiveHealthSummaryReport; | ||||
|     data['SourceType'] = this.sourceType; | ||||
|     data['StrDateofBirth'] = this.strDateofBirth; | ||||
|     data['TempAddress'] = this.tempAddress; | ||||
|     data['ZipCode'] = this.zipCode; | ||||
|     data['IsFamily'] = this.isFamily; | ||||
|     data['CRSVerificationStatus'] = this.cRSVerificationStatus; | ||||
|     return data; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| class ListPrivilege { | ||||
|   int? iD; | ||||
|   String? serviceName; | ||||
|   bool? previlege; | ||||
|   dynamic region; | ||||
| 
 | ||||
|   ListPrivilege({this.iD, this.serviceName, this.previlege, this.region}); | ||||
| 
 | ||||
|   ListPrivilege.fromJson(Map<String, dynamic> json) { | ||||
|     iD = json['ID']; | ||||
|     serviceName = json['ServiceName']; | ||||
|     previlege = json['Previlege']; | ||||
|     region = json['Region']; | ||||
|   } | ||||
| 
 | ||||
|   Map<String, dynamic> toJson() { | ||||
|     final Map<String, dynamic> data = new Map<String, dynamic>(); | ||||
|     data['ID'] = this.iD; | ||||
|     data['ServiceName'] = this.serviceName; | ||||
|     data['Previlege'] = this.previlege; | ||||
|     data['Region'] = this.region; | ||||
|     return data; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,121 @@ | ||||
| class CheckActivationCodeRegisterReq { | ||||
|   int? patientMobileNumber; | ||||
|   String? mobileNo; | ||||
|   String? deviceToken; | ||||
|   bool? projectOutSA; | ||||
|   int? loginType; | ||||
|   String? zipCode; | ||||
|   bool? isRegister; | ||||
|   String? logInTokenID; | ||||
|   int? searchType; | ||||
|   int? patientID; | ||||
|   String? nationalID; | ||||
|   String? patientIdentificationID; | ||||
|   String? activationCode; | ||||
|   bool? isSilentLogin; | ||||
|   double? versionID; | ||||
|   int? channel; | ||||
|   int? languageID; | ||||
|   String? iPAdress; | ||||
|   String? generalid; | ||||
|   int? patientOutSA; | ||||
|   dynamic sessionID; | ||||
|   bool? isDentalAllowedBackend; | ||||
|   int? deviceTypeID; | ||||
|   bool? forRegisteration; | ||||
|   String? dob; | ||||
|   int? isHijri; | ||||
|   String? healthId; | ||||
| 
 | ||||
|   CheckActivationCodeRegisterReq({ | ||||
|     this.patientMobileNumber, | ||||
|     this.mobileNo, | ||||
|     this.deviceToken, | ||||
|     this.projectOutSA, | ||||
|     this.loginType, | ||||
|     this.zipCode, | ||||
|     this.isRegister, | ||||
|     this.logInTokenID, | ||||
|     this.searchType, | ||||
|     this.patientID, | ||||
|     this.nationalID, | ||||
|     this.patientIdentificationID, | ||||
|     this.activationCode, | ||||
|     this.isSilentLogin, | ||||
|     this.versionID, | ||||
|     this.channel, | ||||
|     this.languageID, | ||||
|     this.iPAdress, | ||||
|     this.generalid, | ||||
|     this.patientOutSA, | ||||
|     this.sessionID, | ||||
|     this.isDentalAllowedBackend, | ||||
|     this.deviceTypeID, | ||||
|     this.forRegisteration, | ||||
|     this.dob, | ||||
|     this.isHijri, | ||||
|     this.healthId, | ||||
|   }); | ||||
| 
 | ||||
|   CheckActivationCodeRegisterReq.fromJson(Map<String, dynamic> json) { | ||||
|     patientMobileNumber = json['PatientMobileNumber']; | ||||
|     mobileNo = json['MobileNo']; | ||||
|     deviceToken = json['DeviceToken']; | ||||
|     projectOutSA = json['ProjectOutSA']; | ||||
|     loginType = json['LoginType']; | ||||
|     zipCode = json['ZipCode']; | ||||
|     isRegister = json['isRegister']; | ||||
|     logInTokenID = json['LogInTokenID']; | ||||
|     searchType = json['SearchType']; | ||||
|     patientID = json['PatientID']; | ||||
|     nationalID = json['NationalID']; | ||||
|     patientIdentificationID = json['PatientIdentificationID']; | ||||
|     activationCode = json['activationCode']; | ||||
|     isSilentLogin = json['IsSilentLogin']; | ||||
|     versionID = json['VersionID']; | ||||
|     channel = json['Channel']; | ||||
|     languageID = json['LanguageID']; | ||||
|     iPAdress = json['IPAdress']; | ||||
|     generalid = json['generalid']; | ||||
|     patientOutSA = json['PatientOutSA']; | ||||
|     sessionID = json['SessionID']; | ||||
|     isDentalAllowedBackend = json['isDentalAllowedBackend']; | ||||
|     deviceTypeID = json['DeviceTypeID']; | ||||
|     forRegisteration = json['ForRegisteration']; | ||||
|     dob = json['DOB']; | ||||
|     isHijri = json['IsHijri']; | ||||
|     healthId = json['HealthId']; | ||||
|   } | ||||
| 
 | ||||
|   Map<String, dynamic> toJson() { | ||||
|     final Map<String, dynamic> data = new Map<String, dynamic>(); | ||||
|     data['PatientMobileNumber'] = this.patientMobileNumber; | ||||
|     data['MobileNo'] = this.mobileNo; | ||||
|     data['DeviceToken'] = this.deviceToken; | ||||
|     data['ProjectOutSA'] = this.projectOutSA; | ||||
|     data['LoginType'] = this.loginType; | ||||
|     data['ZipCode'] = this.zipCode; | ||||
|     data['isRegister'] = this.isRegister; | ||||
|     data['LogInTokenID'] = this.logInTokenID; | ||||
|     data['SearchType'] = this.searchType; | ||||
|     data['PatientID'] = this.patientID; | ||||
|     data['NationalID'] = this.nationalID; | ||||
|     data['PatientIdentificationID'] = this.patientIdentificationID; | ||||
|     data['activationCode'] = this.activationCode; | ||||
|     data['IsSilentLogin'] = this.isSilentLogin; | ||||
|     data['VersionID'] = this.versionID; | ||||
|     data['Channel'] = this.channel; | ||||
|     data['LanguageID'] = this.languageID; | ||||
|     data['IPAdress'] = this.iPAdress; | ||||
|     data['generalid'] = this.generalid; | ||||
|     data['PatientOutSA'] = this.patientOutSA; | ||||
|     data['SessionID'] = this.sessionID; | ||||
|     data['isDentalAllowedBackend'] = this.isDentalAllowedBackend; | ||||
|     data['DeviceTypeID'] = this.deviceTypeID; | ||||
|     data['ForRegisteration'] = this.forRegisteration; | ||||
|     data['DOB'] = dob; | ||||
|     data['IsHijri'] = isHijri; | ||||
|     data['HealthId'] = healthId; | ||||
|     return data; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,77 @@ | ||||
| // To parse this JSON data, do | ||||
| // | ||||
| //     final selectDeviceByImeiRespModel = selectDeviceByImeiRespModelFromJson(jsonString); | ||||
| 
 | ||||
| import 'dart:convert'; | ||||
| 
 | ||||
| Map<String, dynamic> selectDeviceByImeiRespModelFromJson(String str) => Map.from(json.decode(str)).map((k, v) => MapEntry<String, dynamic>(k, v)); | ||||
| 
 | ||||
| String selectDeviceByImeiRespModelToJson(Map<String, dynamic> data) => json.encode(Map.from(data).map((k, v) => MapEntry<String, dynamic>(k, v))); | ||||
| 
 | ||||
| class SelectDeviceByImeiRespModelElement { | ||||
|   int id; | ||||
|   String imei; | ||||
|   int logInType; | ||||
|   int patientId; | ||||
|   bool outSa; | ||||
|   String mobile; | ||||
|   String identificationNo; | ||||
|   String name; | ||||
|   String nameN; | ||||
|   String createdOn; | ||||
|   String editedOn; | ||||
|   bool biometricEnabled; | ||||
|   int patientType; | ||||
|   int preferredLanguage; | ||||
| 
 | ||||
|   SelectDeviceByImeiRespModelElement({ | ||||
|     required this.id, | ||||
|     required this.imei, | ||||
|     required this.logInType, | ||||
|     required this.patientId, | ||||
|     required this.outSa, | ||||
|     required this.mobile, | ||||
|     required this.identificationNo, | ||||
|     required this.name, | ||||
|     required this.nameN, | ||||
|     required this.createdOn, | ||||
|     required this.editedOn, | ||||
|     required this.biometricEnabled, | ||||
|     required this.patientType, | ||||
|     required this.preferredLanguage, | ||||
|   }); | ||||
| 
 | ||||
|   factory SelectDeviceByImeiRespModelElement.fromJson(Map<String, dynamic> json) => SelectDeviceByImeiRespModelElement( | ||||
|     id: json["ID"], | ||||
|     imei: json["IMEI"], | ||||
|     logInType: json["LogInType"], | ||||
|     patientId: json["PatientID"], | ||||
|     outSa: json["OutSA"], | ||||
|     mobile: json["Mobile"], | ||||
|     identificationNo: json["IdentificationNo"], | ||||
|     name: json["Name"], | ||||
|     nameN: json["NameN"], | ||||
|     createdOn: json["CreatedOn"], | ||||
|     editedOn: json["EditedOn"], | ||||
|     biometricEnabled: json["BiometricEnabled"], | ||||
|     patientType: json["PatientType"], | ||||
|     preferredLanguage: json["PreferredLanguage"], | ||||
|   ); | ||||
| 
 | ||||
|   Map<String, dynamic> toJson() => { | ||||
|     "ID": id, | ||||
|     "IMEI": imei, | ||||
|     "LogInType": logInType, | ||||
|     "PatientID": patientId, | ||||
|     "OutSA": outSa, | ||||
|     "Mobile": mobile, | ||||
|     "IdentificationNo": identificationNo, | ||||
|     "Name": name, | ||||
|     "NameN": nameN, | ||||
|     "CreatedOn": createdOn, | ||||
|     "EditedOn": editedOn, | ||||
|     "BiometricEnabled": biometricEnabled, | ||||
|     "PatientType": patientType, | ||||
|     "PreferredLanguage": preferredLanguage, | ||||
|   }; | ||||
| } | ||||
| @ -0,0 +1,48 @@ | ||||
| import 'package:dartz/dartz.dart'; | ||||
| import 'package:hmg_patient_app_new/core/api/api_client.dart'; | ||||
| import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart'; | ||||
| import 'package:hmg_patient_app_new/services/logger_service.dart'; | ||||
| 
 | ||||
| abstract class BookAppointmentsRepo { | ||||
|   Future<Either<Failure, dynamic>> getDoctors(); | ||||
| } | ||||
| 
 | ||||
| class BookAppointmentsRepoImp implements BookAppointmentsRepo { | ||||
|   final ApiClient apiClient; | ||||
|   final LoggerService loggerService; | ||||
| 
 | ||||
|   BookAppointmentsRepoImp({required this.loggerService, required this.apiClient}); | ||||
| 
 | ||||
|   @override | ||||
|   Future<Either<Failure, dynamic>> getDoctors() async { | ||||
|     try { | ||||
|       // Mock API call with delayed response | ||||
|       final result = await Future.delayed( | ||||
|         const Duration(seconds: 2), | ||||
|         () => { | ||||
|           'success': true, | ||||
|           'data': [ | ||||
|             { | ||||
|               'id': '1', | ||||
|               'name': 'Dr. Ahmed Hassan', | ||||
|               'specialty': 'Cardiology', | ||||
|               'experience': '10 years', | ||||
|               'rating': 4.8, | ||||
|               'image': 'https://example.com/doctor1.jpg' | ||||
|             }, | ||||
|           ] | ||||
|         } | ||||
|       ); | ||||
| 
 | ||||
|       if (result != null && result is Map && result['success'] != null && result['success'] != false) { | ||||
|         return Right(result); | ||||
|       } else { | ||||
|         loggerService.errorLogs(result.toString()); | ||||
|         return Left(ServerFailure(result.toString())); | ||||
|       } | ||||
|     } catch (e) { | ||||
|       loggerService.errorLogs(e.toString()); | ||||
|       return Left(ServerFailure(e.toString())); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,13 @@ | ||||
| import 'package:hmg_patient_app_new/services/logger_service.dart'; | ||||
| 
 | ||||
| abstract class CommonRepo { | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| class CommonRepoImp implements CommonRepo { | ||||
|   LoggerService loggerService; | ||||
| 
 | ||||
|   CommonRepoImp({required this.loggerService}); | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,71 @@ | ||||
| import 'package:dartz/dartz.dart'; | ||||
| import 'package:hmg_patient_app_new/core/api/api_client.dart'; | ||||
| import 'package:hmg_patient_app_new/core/exceptions/api_exception.dart'; | ||||
| import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart'; | ||||
| import 'package:hmg_patient_app_new/services/logger_service.dart'; | ||||
| 
 | ||||
| abstract class MyAppointmentsRepo { | ||||
|   Future<Either<Failure, dynamic>> getMyAppointments(); | ||||
| } | ||||
| 
 | ||||
| class MyAppointmentsRepoImp implements MyAppointmentsRepo { | ||||
|   final ApiClient apiClient; | ||||
|   final LoggerService loggerService; | ||||
| 
 | ||||
|   MyAppointmentsRepoImp({required this.loggerService, required this.apiClient}); | ||||
| 
 | ||||
|   @override | ||||
|   Future<Either<Failure, dynamic>> getMyAppointments() async { | ||||
|     try { | ||||
|       // Mock API call with delayed response | ||||
|       final result = await Future.delayed( | ||||
|           const Duration(seconds: 2), | ||||
|               () => { | ||||
|             'success': true, | ||||
|             'data': [ | ||||
|               { | ||||
|                 'id': '1', | ||||
|                 'doctorName': 'Dr. Ahmed Hassan', | ||||
|                 'specialty': 'Cardiology', | ||||
|                 'appointmentDate': '2025-09-05', | ||||
|                 'appointmentTime': '10:00 AM', | ||||
|                 'status': 'confirmed', | ||||
|                 'clinicName': 'HMG Hospital', | ||||
|                 'patientName': 'John Doe' | ||||
|               }, | ||||
|               { | ||||
|                 'id': '2', | ||||
|                 'doctorName': 'Dr. Sarah Johnson', | ||||
|                 'specialty': 'Dermatology', | ||||
|                 'appointmentDate': '2025-09-08', | ||||
|                 'appointmentTime': '2:30 PM', | ||||
|                 'status': 'pending', | ||||
|                 'clinicName': 'HMG Medical Center', | ||||
|                 'patientName': 'John Doe' | ||||
|               }, | ||||
|               { | ||||
|                 'id': '3', | ||||
|                 'doctorName': 'Dr. Mohamed Ali', | ||||
|                 'specialty': 'Pediatrics', | ||||
|                 'appointmentDate': '2025-08-25', | ||||
|                 'appointmentTime': '11:15 AM', | ||||
|                 'status': 'completed', | ||||
|                 'clinicName': 'HMG Children\'s Clinic', | ||||
|                 'patientName': 'John Doe' | ||||
|               } | ||||
|             ] | ||||
|           } | ||||
|       ); | ||||
| 
 | ||||
|       if (result != null && result is Map && result['success'] != null && result['success'] != false) { | ||||
|         return Right(result); | ||||
|       } else { | ||||
|         loggerService.errorLogs(result.toString()); | ||||
|         return Left(ServerFailure(result.toString())); | ||||
|       } | ||||
|     } catch (e) { | ||||
|       loggerService.errorLogs(e.toString()); | ||||
|       return Left(ServerFailure(e.toString())); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -1,6 +1,6 @@ | ||||
| 
 | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:hmg_patient_app_new/core/app_state.dart'; | ||||
| 
 | ||||
| class AuthenticationViewModel extends ChangeNotifier { | ||||
| // Add properties and methods related to authentication here | ||||
| } | ||||
|  | ||||
| @ -0,0 +1,143 @@ | ||||
| 
 | ||||
| import 'package:firebase_analytics/firebase_analytics.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:flutter/services.dart'; | ||||
| import 'package:geolocator/geolocator.dart'; | ||||
| import 'package:hmg_patient_app_new/core/utils/utils.dart'; | ||||
| import 'package:hmg_patient_app_new/features/authentication/models/authenticated_user_model.dart'; | ||||
| import 'package:hmg_patient_app_new/services/analytics/flows/advance_payments.dart'; | ||||
| import 'package:hmg_patient_app_new/services/analytics/flows/app_nav.dart'; | ||||
| import 'package:hmg_patient_app_new/services/analytics/flows/appointments.dart'; | ||||
| import 'package:hmg_patient_app_new/services/analytics/flows/error_tracking.dart'; | ||||
| import 'package:hmg_patient_app_new/services/analytics/flows/hamburger_menu.dart'; | ||||
| import 'package:hmg_patient_app_new/services/analytics/flows/hmg_services.dart'; | ||||
| import 'package:hmg_patient_app_new/services/analytics/flows/live_care.dart'; | ||||
| import 'package:hmg_patient_app_new/services/analytics/flows/login_registration.dart'; | ||||
| import 'package:hmg_patient_app_new/services/analytics/flows/offers_promotions.dart'; | ||||
| import 'package:hmg_patient_app_new/services/analytics/flows/todo_list.dart'; | ||||
| import 'package:http/http.dart' as AnalyticEvents; | ||||
| 
 | ||||
| 
 | ||||
| typedef GALogger = Function(String name, {Map<String, dynamic> parameters}); | ||||
| 
 | ||||
| var _analytics = FirebaseAnalytics.instance; | ||||
| 
 | ||||
| _logger(String name, {Map<String, dynamic>? parameters}) async { | ||||
|   // return; | ||||
|   if (name.isNotEmpty) { | ||||
|     if (name.contains(' ')) name = name.replaceAll(' ', '_'); | ||||
| 
 | ||||
|     // To LowerCase | ||||
|     if (parameters != null && parameters.isNotEmpty) { | ||||
|       parameters = parameters.map((key, value) { | ||||
|         final key_ = key.toLowerCase(); | ||||
|         var value_ = value; | ||||
|         if (value is String) value_ = value.toLowerCase(); | ||||
|         return MapEntry(key_, value_); | ||||
|       }); | ||||
|     } | ||||
| 
 | ||||
|     try { | ||||
|       final safeParameters = parameters?.map((key, value) => MapEntry(key, value as Object)); | ||||
|       await _analytics.logEvent( | ||||
|         name: name.trim().toLowerCase(), | ||||
|         parameters: safeParameters, | ||||
|       ); | ||||
|     } catch (e) { | ||||
|       print('Error sending analytics event: $e'); | ||||
|     } | ||||
| 
 | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| class GAnalytics { | ||||
|   static String? TREATMENT_TYPE; | ||||
|   static String? APPOINTMENT_DETAIL_FLOW_TYPE; | ||||
|   static String? PAYMENT_TYPE; | ||||
| 
 | ||||
|   setUser(AuthenticatedUser user) async { | ||||
|     try { | ||||
|       _analytics.setUserProperty(name: 'user_language', value: user.preferredLanguage == '1' ? 'arabic' : 'english'); | ||||
|       _analytics.setUserProperty(name: 'userid', value: Utils.generateMd5Hash(user.emailAddress!)); | ||||
|       _analytics.setUserProperty(name: 'login_status', value: user == null ? 'guest' : 'loggedin'); | ||||
|       // if (await PermissionService.isLocationEnabled()) { | ||||
|       //   final location = await Geolocator.getCurrentPosition(); | ||||
|       //   if (location != null && !location.isMocked) { | ||||
|       //     final places = await placemarkFromCoordinates(location.latitude, location.longitude,); | ||||
|       //     final countryCode = places.first.isoCountryCode; | ||||
|       //     _analytics.setUserProperty(name: 'user_country', value: countryCode); | ||||
|       //   } | ||||
|       // } else { | ||||
|       //   _analytics.setUserProperty(name: 'user_country', value: "N/A"); | ||||
|       // } | ||||
|     } catch (e) {} | ||||
|   } | ||||
| 
 | ||||
|   // NavObserver navObserver() => NavObserver(); | ||||
|   final hamburgerMenu = HamburgerMenu(_logger); | ||||
|   final bottomTabNavigation = AppNav(_logger); | ||||
|   final hmgServices = HMGServices(_logger); | ||||
|   final loginRegistration = LoginRegistration(_logger); | ||||
|   final appointment = Appointment(_logger); | ||||
|   final liveCare = LiveCare(_logger); | ||||
|   final todoList = TodoList(_logger); | ||||
|   final advancePayments = AdvancePayments(_logger); | ||||
|   final offerPackages = OfferAndPromotion(_logger); | ||||
|   final errorTracking = ErrorTracking(_logger); | ||||
| } | ||||
| 
 | ||||
| // // adb shell setprop debug.firebase.analytics.app com.ejada.hmg -> Android | ||||
| // class NavObserver extends RouteObserver<PageRoute<dynamic>> { | ||||
| //   _sendScreenView(PageRoute route) async { | ||||
| //     log(String className) { | ||||
| //       var event = AnalyticEvents.get(className); | ||||
| //       if (event.active != null) { | ||||
| //         _analytics.setCurrentScreen(screenName: event.flutterName(), screenClassOverride: className).catchError( | ||||
| //               (Object error) { | ||||
| //             print('$FirebaseAnalyticsObserver: $error'); | ||||
| //           }, | ||||
| //           test: (Object error) { | ||||
| //             return error is PlatformException; | ||||
| //           }, | ||||
| //         ); | ||||
| //       } | ||||
| //     } | ||||
| // | ||||
| //     if (route.settings.name != null && route.settings.name!.isNotEmpty && route.settings.name != "null") { | ||||
| //       var class_ = routes[route.settings.name]!(0); | ||||
| //       if (class_ != null) log(class_.toStringShort()); | ||||
| //     } else if (route is FadePage) { | ||||
| //       var class_ = route.page; | ||||
| //       if (class_ != null) log(class_.toStringShort()); | ||||
| //     } else if (route is MaterialPageRoute) { | ||||
| //       var class_ = route.builder(route.subtreeContext!); | ||||
| //       log(class_.toStringShort()); | ||||
| //     } else { | ||||
| //       print(""); | ||||
| //     } | ||||
| //   } | ||||
| // | ||||
| //   @override | ||||
| //   void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) { | ||||
| //     super.didPush(route, previousRoute); | ||||
| //     if (route is PageRoute) { | ||||
| //       _sendScreenView(route); | ||||
| //     } | ||||
| //   } | ||||
| // | ||||
| //   @override | ||||
| //   void didReplace({Route<dynamic>? newRoute, Route<dynamic>? oldRoute}) { | ||||
| //     super.didReplace(newRoute: newRoute, oldRoute: oldRoute); | ||||
| //     if (newRoute is PageRoute) { | ||||
| //       _sendScreenView(newRoute); | ||||
| //     } | ||||
| //   } | ||||
| // | ||||
| //   @override | ||||
| //   void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) { | ||||
| //     super.didPop(route, previousRoute); | ||||
| //     // if (previousRoute is PageRoute && route is PageRoute) { | ||||
| //     //   _sendScreenView(previousRoute); | ||||
| //     // } | ||||
| //   } | ||||
| // } | ||||
| @ -0,0 +1,91 @@ | ||||
| import 'package:flutter/cupertino.dart'; | ||||
| import 'package:hmg_patient_app_new/services/analytics/analytics_service.dart'; | ||||
| 
 | ||||
| class AdvancePayments{ | ||||
| 
 | ||||
|   final GALogger logger; | ||||
|   AdvancePayments(this.logger); | ||||
| 
 | ||||
|   // R038 | ||||
|   payment_services({required String service_type}){ | ||||
|     logger('payment_services', parameters: { | ||||
|       'service_type' : service_type | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R039 | ||||
|   wallet_recharge({required String service_type}){ | ||||
|     logger('wallet_recharge', parameters: { | ||||
|       'service_type' : service_type | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R040 | ||||
|   wallet_payment_details(){ | ||||
|     logger('wallet_payment_details'); | ||||
|   } | ||||
| 
 | ||||
|   // R041 | ||||
|   payment_method({required String method,type}){ | ||||
|     logger('payment_method', parameters: { | ||||
|       'payment_method' : method, | ||||
|       'payment_type' : type | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R042 | ||||
|   payment_confirm({required String method,type}){ | ||||
|     logger('payment_confirm', parameters: { | ||||
|       'payment_method' : method, | ||||
|       'payment_type' : type | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R043 | ||||
|   payment_otp_confirmation({required String method,type}){ | ||||
|     logger('payment_otp_confirmation', parameters: { | ||||
|       'payment_method' : method, | ||||
|       'payment_type' : type | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R044 | ||||
|   payment_confirm_card_details({required String method,type}){ | ||||
|     logger('payment_confirm_card_details', parameters: { | ||||
|       'payment_method' : method, | ||||
|       'payment_type' : type | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R045 | ||||
|   payment_pay({required String method,type}){ | ||||
|     logger('payment_pay', parameters: { | ||||
|       'payment_method' : method, | ||||
|       'payment_type' : type | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R046 | ||||
|   payment_success({required String hospital, payment_method, payment_type, txn_number, txn_amount, txn_currency}){ | ||||
|     logger('payment_success', parameters: { | ||||
|       'payment_method' : payment_method, | ||||
|       'payment_type' : payment_type, | ||||
|       'hospital_name' : hospital, | ||||
|       'transaction_number' : txn_number, | ||||
|       'transaction_amount' : txn_amount, | ||||
|       'transaction_currency' : txn_currency | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   payment_fail({required String hospital, payment_method, payment_type, txn_amount, txn_currency, error_type}){ | ||||
|     logger('payment_fail', parameters: { | ||||
|       'payment_method' : payment_method, | ||||
|       'payment_type' : payment_type, | ||||
|       'hospital_name' : hospital, | ||||
|       'transaction_amount' : txn_amount, | ||||
|       'transaction_currency' : txn_currency, | ||||
|       'error_type' : error_type | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,30 @@ | ||||
| import 'package:hmg_patient_app_new/services/analytics/analytics_service.dart'; | ||||
| 
 | ||||
| class AppNav{ | ||||
|   final name = 'app_nav'; | ||||
|   final GALogger logger; | ||||
|   AppNav(this.logger); | ||||
| 
 | ||||
|   logNavName(String value){ | ||||
|     logger(name, parameters: { | ||||
|       'nav_name' : value | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   log({int? tabIndex, bool? isLoggedIn}){ | ||||
|     var nav_name = ""; | ||||
|     if(tabIndex == 1) | ||||
|       nav_name = "medical file"; | ||||
|     if(tabIndex == 3) | ||||
|       nav_name = "my family"; | ||||
|     if(tabIndex == 4) | ||||
|       nav_name = "todo list"; | ||||
|     if(tabIndex == 5) | ||||
|       nav_name = "help"; | ||||
| 
 | ||||
|     if(nav_name.isNotEmpty) | ||||
|       logger(name, parameters: { | ||||
|         'nav_name' : nav_name | ||||
|       }); | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,16 @@ | ||||
| 
 | ||||
| import 'package:hmg_patient_app_new/services/analytics/analytics_service.dart'; | ||||
| 
 | ||||
| class ErrorTracking{ | ||||
| 
 | ||||
|   final GALogger logger; | ||||
|   ErrorTracking(this.logger); | ||||
| 
 | ||||
|   log(String type, {String? error}){ | ||||
|     logger('errors', parameters: { | ||||
|       'error_type' : type ?? 'unknown', | ||||
|       'error' : error ?? 'unknown', | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,16 @@ | ||||
| 
 | ||||
| import 'package:hmg_patient_app_new/services/analytics/analytics_service.dart'; | ||||
| 
 | ||||
| class HamburgerMenu{ | ||||
|   final hamburger_menu = 'hamburger_menu'; | ||||
| 
 | ||||
|   final GALogger logger; | ||||
|   HamburgerMenu(this.logger); | ||||
| 
 | ||||
|   logMenuItemClick(String value){ | ||||
|     logger(hamburger_menu, parameters: { | ||||
|       'menu_item' : value | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,19 @@ | ||||
| 
 | ||||
| import 'package:hmg_patient_app_new/services/analytics/analytics_service.dart'; | ||||
| 
 | ||||
| class HMGServices{ | ||||
|   final hmg_services = 'hmg_services'; | ||||
| 
 | ||||
|   final GALogger logger; | ||||
|   HMGServices(this.logger); | ||||
|   logServiceName(String value){ | ||||
|     logger('hmg_services', parameters: { | ||||
|       'services_name' : value | ||||
|     }); | ||||
|   } | ||||
|   viewAll(){ | ||||
|     logger('hmg_services', parameters: { | ||||
|       'services_name' : 'view all services' | ||||
|     }); | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,102 @@ | ||||
| import 'package:flutter/cupertino.dart'; | ||||
| import 'package:hmg_patient_app_new/services/analytics/analytics_service.dart'; | ||||
| 
 | ||||
| class LiveCare{ | ||||
| 
 | ||||
|   final GALogger logger; | ||||
|   LiveCare(this.logger); | ||||
| 
 | ||||
|   // R030.1 | ||||
|   livecare_immediate_consultation(){ | ||||
|     logger('livecare_immediate_consultation'); | ||||
|   } | ||||
| 
 | ||||
|   // R030.2 | ||||
|   livecare_schedule_video_call(){ | ||||
|     logger('livecare_schedule_video_call'); | ||||
|   } | ||||
| 
 | ||||
|   // R031.1 | ||||
|   livecare_clinic_schedule({required String clinic}){ | ||||
|     logger('livecare_clinic_schedule', parameters: { | ||||
|       'clinic_type_online' : clinic | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R031.2 | ||||
|   livecare_immediate_consultation_clinic({required String clinic}){ | ||||
|     logger('livecare_immediate_consultation_clinic', parameters: { | ||||
|       'clinic_type_online' : clinic | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R031.2 | ||||
|   livecare_schedule_video_call_clinic({required String clinic}){ | ||||
|     logger('livecare_schedule_video_call_clinic', parameters: { | ||||
|       'clinic_type_online' : clinic | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R032 | ||||
|   livecare_immediate_consultation_TnC({required String clinic}){ | ||||
|     logger('livecare_immediate_consultation_tandc', parameters: { | ||||
|       'clinic_type_online' : clinic | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R033 | ||||
|   payment_method({required String appointment_type, clinic, payment_method, payment_type}){ | ||||
|     logger('payment_method', parameters: { | ||||
|       'appointment_type' : appointment_type, | ||||
|       'clinic_type_online' : clinic, | ||||
|       'payment_method' : payment_method, | ||||
|       'payment_type' : payment_type | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R034 | ||||
|   payment_confirm({required String appointment_type, clinic, payment_method, payment_type}){ | ||||
|     logger('payment_confirm', parameters: { | ||||
|       'appointment_type' : appointment_type, | ||||
|       'clinic_type_online' : clinic, | ||||
|       'payment_method' : payment_method, | ||||
|       'payment_type' : payment_type | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R035 | ||||
|   payment_pay({required String appointment_type, clinic, hospital, payment_method, payment_type}){ | ||||
|     // logger('payment_pay', parameters: { | ||||
|     //   'appointment_type' : appointment_type, | ||||
|     //   'clinic_type_online' : clinic, | ||||
|     //   'payment_method' : payment_method, | ||||
|     //   'payment_type' : payment_type, | ||||
|     //   'hospital_name' : hospital | ||||
|     // }); | ||||
|   } | ||||
| 
 | ||||
|   // R036 | ||||
|   payment_success({required String appointment_type, clinic, hospital, payment_method, payment_type, txn_number, txn_amount, txn_currency}){ | ||||
|     // appointment_type | ||||
|     // clinic_type_online | ||||
|     // payment_method | ||||
|     // payment_type | ||||
|     // hospital_name | ||||
|     // transaction_number | ||||
|     // transaction_amount | ||||
|     // transaction_currency | ||||
|   } | ||||
| 
 | ||||
|   // R037 | ||||
|   livecare_immediate_consultation_payment_failed({required String appointment_type, clinic, payment_method, payment_type, txn_amount, txn_currency, error_message}){ | ||||
|     logger('livecare_immediate_consult_payment_fail', parameters: { | ||||
|     'payment_method' : payment_method, | ||||
|     'appointment_type' : appointment_type, | ||||
|     'payment_type' : payment_type, | ||||
|     'clinic_type_online' : clinic, | ||||
|     'transaction_amount' : txn_amount, | ||||
|     'transaction_currency' : txn_currency, | ||||
|     'error_type' : error_message | ||||
|     }); | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,156 @@ | ||||
| import 'package:flutter/cupertino.dart'; | ||||
| import 'package:hmg_patient_app_new/services/analytics/analytics_service.dart'; | ||||
| 
 | ||||
| class LoginRegistration{ | ||||
|   static int loginMethod = 0; | ||||
|   static int verificationMethod = 0; | ||||
| 
 | ||||
|   final GALogger logger; | ||||
|   LoginRegistration(this.logger); | ||||
|   // R004.1 | ||||
|   login_register_initiate(){ | ||||
|     logger('login_register_initiate'); | ||||
|   } | ||||
| 
 | ||||
|   // R005.1 | ||||
|   visited_alhabib_group(bool value){ | ||||
|     // selection_type: yes/no | ||||
|     logger('visited_alhabib_group', parameters: { | ||||
|       'selection_type' : value ? 'yes' : 'no' | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R006.1, R007.1, R008.1, R009.1 | ||||
|   registration_cancel({required String step}){ | ||||
|     // registration_step : enter details | ||||
|     // registration_step : personal info | ||||
|     // registration_step : patient info | ||||
|     // fourth (verification) | ||||
|     logger('registration_cancel', parameters: { | ||||
|       'registration_step' : step | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R006.2 | ||||
|   registration_enter_details(){ | ||||
|     logger('registration_enter_details'); | ||||
|   } | ||||
| 
 | ||||
|   // R007.2 | ||||
|   registration_personal_info(){ | ||||
|     logger('registration_personal_info'); | ||||
|   } | ||||
| 
 | ||||
|   // R008.2 | ||||
|   registration_patient_info(){ | ||||
|     logger('registration_patient_info'); | ||||
|   } | ||||
| 
 | ||||
|   // R009.2 | ||||
|   registration_verification_option(){ | ||||
|     logger('registration_verification_option'); | ||||
|   } | ||||
| 
 | ||||
|   // R010:registration_confirmation | ||||
|   registration_confirmation(){ | ||||
|     // verification_method: by | ||||
|     logger('registration_confirmation'); | ||||
|   } | ||||
| 
 | ||||
|   registration_fail({required String errorType}){ | ||||
|     // verification_method: by | ||||
|     logger('registration_fail', parameters: { | ||||
|       'error_type' : errorType | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R011.1 | ||||
|   login_start({required String method}){ | ||||
|     logger('login_start', parameters: { | ||||
|       'login_method' : method | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R011:login_verify_otp |  R009:registration_verification_option | ||||
|   verify_otp_method({bool forRegistration = false}){ | ||||
|     if(forRegistration == false) | ||||
|       logger("login_verify_otp", parameters: { | ||||
|         'login_method' : _getLoginMethod(), | ||||
|         'verification_method' : _getVerificationMethod(), | ||||
|       }); | ||||
|     else | ||||
|       logger("registration_verification_option", parameters: { | ||||
|         'verification_method' : _getVerificationMethod() | ||||
|       }); | ||||
|   } | ||||
| 
 | ||||
|   // R011:login_verify_otp |  R009:registration_verification_option | ||||
|   login_verfication({bool forRegistration = false}){ | ||||
|     if(forRegistration == false) | ||||
|       logger("login_verfication", parameters: { | ||||
|         'login_method' : _getLoginMethod(), | ||||
|         'verification_method' : _getVerificationMethod(), | ||||
|       }); | ||||
|     else | ||||
|       logger("login_varification_register", parameters: { | ||||
|         'login_method' : _getLoginMethod(), | ||||
|         'verification_method' : _getVerificationMethod(), | ||||
|       }); | ||||
|   } | ||||
| 
 | ||||
|   // R011.2 | ||||
|   forget_file_number(){ | ||||
|     logger('forget_file_number'); | ||||
|   } | ||||
| 
 | ||||
|   // R011.3 | ||||
|   register_now(){ | ||||
|     logger('register_now'); | ||||
|   } | ||||
| 
 | ||||
|   // R012.1, R014.1 | ||||
|   login_successful(){ | ||||
|     logger('login_successful', parameters: { | ||||
|       'login_method' : _getVerificationMethod() | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R012.4 | ||||
|   login_unsuccessful({required String method, error}){ | ||||
|     logger('login_unsuccessful', parameters: { | ||||
|       'login_method' : method | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   login_fail({error}){ | ||||
|     logger('login_unsuccessful', parameters: { | ||||
|       'login_method' : loginMethod, | ||||
|       'error': error | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // R013 | ||||
|   recover_file_number(){ | ||||
|     logger('recover_file_number'); | ||||
|   } | ||||
| 
 | ||||
|   // R014.2 | ||||
|   login_with_other_account(){ | ||||
|     logger('login_with_other_account'); | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
|   _getLoginMethod(){ | ||||
|     if(loginMethod == 1) return 'national id'; | ||||
|     if(loginMethod == 2) return 'file number'; | ||||
|     return 'otp'; | ||||
|   } | ||||
| 
 | ||||
|   String _getVerificationMethod(){ | ||||
|     if(verificationMethod == 1) return 'sms'; | ||||
|     if(verificationMethod == 2) return 'fingerprint'; | ||||
|     if(verificationMethod == 3) return 'face id'; | ||||
|     if(verificationMethod == 4) return 'whatsapp'; | ||||
|     return "unknown"; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,17 @@ | ||||
| 
 | ||||
| import 'package:hmg_patient_app_new/services/analytics/analytics_service.dart'; | ||||
| 
 | ||||
| class OfferAndPromotion{ | ||||
| 
 | ||||
|   final GALogger logger; | ||||
|   OfferAndPromotion(this.logger); | ||||
| 
 | ||||
|   final offers_and_promotion = 'offers_&_promotion'; | ||||
| 
 | ||||
|   log(){ | ||||
|     logger('offers_and_promotion', parameters: { | ||||
|       'promotion_name' : "offer" | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,111 @@ | ||||
| 
 | ||||
| 
 | ||||
| import 'package:hmg_patient_app_new/services/analytics/analytics_service.dart'; | ||||
| 
 | ||||
| class TodoList{ | ||||
| 
 | ||||
|   final GALogger logger; | ||||
|   TodoList(this.logger); | ||||
| 
 | ||||
|   // R047.1 | ||||
|   // to_do_list_pay_now(AppoitmentAllHistoryResultList appointment){ | ||||
|   //   logger('to_do_list_pay_now', parameters: { | ||||
|   //     'appointment_type' : appointment.isLiveCareAppointment! ? 'livecare' : 'regular', | ||||
|   //     'clinic_type_online' : appointment.clinicName, | ||||
|   //     'hospital_name' : appointment.projectName, | ||||
|   //     'doctor_name' : (appointment.doctorName == null || appointment.doctorName == '') ?  appointment.doctorNameObj : appointment.doctorName, | ||||
|   //     'payment_type' : 'appointment', | ||||
|   //   }); | ||||
|   // } | ||||
| 
 | ||||
|   // // R047.2 | ||||
|   // to_do_list_more_details(AppoitmentAllHistoryResultList appointment){ | ||||
|   //   logger('to_do_list_more_details', parameters: { | ||||
|   //     'appointment_type' : appointment.isLiveCareAppointment! ? 'livecare' : 'regular', | ||||
|   //     'clinic_type_online' : appointment.clinicName, | ||||
|   //     'hospital_name' : appointment.projectName, | ||||
|   //     'doctor_name' : (appointment.doctorName == null || appointment.doctorName == '') ?  appointment.doctorNameObj : appointment.doctorName, | ||||
|   //     'payment_type' : 'appointment', | ||||
|   //   }); | ||||
|   // } | ||||
|   // | ||||
|   // // R048 | ||||
|   // to_do_list_confirm_payment_details(AppoitmentAllHistoryResultList appointment){ | ||||
|   //   logger('to_do_list_confirm_payment_details', parameters: { | ||||
|   //     'appointment_type' : appointment.isLiveCareAppointment! ? 'livecare' : 'regular', | ||||
|   //     'clinic_type_online' : appointment.clinicName, | ||||
|   //     'hospital_name' : appointment.projectName, | ||||
|   //     'doctor_name' : (appointment.doctorName == null || appointment.doctorName == '') ?  appointment.doctorNameObj : appointment.doctorName, | ||||
|   //     'payment_type' : 'appointment', | ||||
|   //   }); | ||||
|   // } | ||||
|   // | ||||
|   // // R048 | ||||
|   // to_do_list_cancel_payment_details(AppoitmentAllHistoryResultList appointment){ | ||||
|   //   logger('to_do_list_cancel_payment_details', parameters: { | ||||
|   //     'appointment_type' : appointment.isLiveCareAppointment! ? 'livecare' : 'regular', | ||||
|   //     'clinic_type_online' : appointment.clinicName, | ||||
|   //     'hospital_name' : appointment.projectName, | ||||
|   //     'doctor_name' : (appointment.doctorName == null || appointment.doctorName == '') ?  appointment.doctorNameObj : appointment.doctorName, | ||||
|   //     'payment_type' : 'appointment', | ||||
|   //   }); | ||||
|   // } | ||||
|   // | ||||
|   // | ||||
|   // | ||||
|   // // R049.2 | ||||
|   // to_do_list_cancel_appointment(AppoitmentAllHistoryResultList appointment){ | ||||
|   //   logger('to_do_list_cancel_appointment', parameters: { | ||||
|   //     'appointment_type' : appointment.isLiveCareAppointment! ? 'livecare' : 'regular', | ||||
|   //     'clinic_type_online' : appointment.clinicName, | ||||
|   //     'hospital_name' : appointment.projectName, | ||||
|   //     'doctor_name' : (appointment.doctorName == null || appointment.doctorName == '') ?  appointment.doctorNameObj : appointment.doctorName, | ||||
|   //     'payment_type' : 'appointment', | ||||
|   //   }); | ||||
|   // } | ||||
|   // | ||||
|   // // R049.3 | ||||
|   // to_do_list_confirm_appointment(AppoitmentAllHistoryResultList appointment){ | ||||
|   //   logger('confirm_appointment', parameters: { | ||||
|   //     'appointment_type' : appointment.isLiveCareAppointment! ? 'livecare' : 'regular', | ||||
|   //     'flow_type' : 'todo list', | ||||
|   //     'clinic_type_online' : appointment.clinicName, | ||||
|   //     'hospital_name' : appointment.projectName, | ||||
|   //     'doctor_name' : (appointment.doctorName == null || appointment.doctorName == '') ?  appointment.doctorNameObj : appointment.doctorName, | ||||
|   //     'payment_type' : 'appointment', | ||||
|   //   }); | ||||
|   // } | ||||
|   // | ||||
|   // // R050 | ||||
|   // to_do_list_check_in(AppoitmentAllHistoryResultList appointment){ | ||||
|   //   logger('to_do_list_check_in', parameters: { | ||||
|   //     'appointment_type' : appointment.isLiveCareAppointment! ? 'livecare' : 'regular', | ||||
|   //     'clinic_type_online' : appointment.clinicName, | ||||
|   //     'hospital_name' : appointment.projectName, | ||||
|   //     'doctor_name' : (appointment.doctorName == null || appointment.doctorName == '') ?  appointment.doctorNameObj : appointment.doctorName, | ||||
|   //     'payment_type' : 'appointment', | ||||
|   //   }); | ||||
|   // } | ||||
|   // | ||||
|   // // R051 | ||||
|   // to_do_list_nfc(AppoitmentAllHistoryResultList appointment){ | ||||
|   //   logger('to_do_list_nfc', parameters: { | ||||
|   //     'appointment_type' : appointment.isLiveCareAppointment! ? 'livecare' : 'regular', | ||||
|   //     'clinic_type_online' : appointment.clinicName, | ||||
|   //     'hospital_name' : appointment.projectName, | ||||
|   //     'doctor_name' : (appointment.doctorName == null || appointment.doctorName == '') ?  appointment.doctorNameObj : appointment.doctorName, | ||||
|   //     'payment_type' : 'appointment', | ||||
|   //   }); | ||||
|   // } | ||||
|   // | ||||
|   // // R052 | ||||
|   // to_do_list_nfc_cancel(AppoitmentAllHistoryResultList appointment){ | ||||
|   //   logger('to_do_list_nfc_cancel', parameters: { | ||||
|   //     'appointment_type' : appointment.isLiveCareAppointment != null ? appointment.isLiveCareAppointment! ? 'livecare' : 'regular' : 'regular', | ||||
|   //     'clinic_type_online' : appointment.clinicName, | ||||
|   //     'hospital_name' : appointment.projectName, | ||||
|   //     'doctor_name' : (appointment.doctorName == null || appointment.doctorName == '') ?  appointment.doctorNameObj : appointment.doctorName, | ||||
|   //     'payment_type' : 'appointment', | ||||
|   //   }); | ||||
|   // } | ||||
| } | ||||
| @ -1,291 +0,0 @@ | ||||
| import 'dart:async'; | ||||
| import 'dart:convert'; | ||||
| import 'dart:io'; | ||||
| 
 | ||||
| import 'package:flutter/foundation.dart'; | ||||
| import 'package:hmg_patient_app_new/services/api_exception.dart'; | ||||
| import 'package:http/http.dart'; | ||||
| import 'package:http/io_client.dart'; | ||||
| 
 | ||||
| import '../core/app_state.dart'; | ||||
| import '../core/consts.dart'; | ||||
| import '../core/utils/utils.dart'; | ||||
| import '../main.dart'; | ||||
| 
 | ||||
| // ignore_for_file: avoid_annotating_with_dynamic | ||||
| 
 | ||||
| typedef FactoryConstructor<U> = U Function(dynamic); | ||||
| 
 | ||||
| class APIError { | ||||
|   int? errorCode; | ||||
|   String? errorMessage; | ||||
| 
 | ||||
|   APIError(this.errorCode, this.errorMessage); | ||||
| 
 | ||||
|   Map<String, dynamic> toJson() => {'errorCode': errorCode, 'errorMessage': errorMessage}; | ||||
| 
 | ||||
|   @override | ||||
|   String toString() { | ||||
|     return jsonEncode(this); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| APIException _throwAPIException(Response response, Function retryCallBack) { | ||||
|   switch (response.statusCode) { | ||||
|     case 200: | ||||
|       APIError? apiError; | ||||
|       if (response.body != null && response.body.isNotEmpty) { | ||||
|         var jsonError = jsonDecode(response.body); | ||||
|         print(jsonError); | ||||
|         apiError = APIError(jsonError['ErrorCode'], jsonError['ErrorMessage']); | ||||
|       } | ||||
|       return APIException(APIException.BAD_REQUEST, error: apiError); | ||||
|     case 400: | ||||
|       APIError? apiError; | ||||
|       if (response.body != null && response.body.isNotEmpty) { | ||||
|         var jsonError = jsonDecode(response.body); | ||||
|         apiError = APIError(jsonError['ErrorCode'], jsonError['ErrorMessage']); | ||||
|       } | ||||
|       return APIException(APIException.BAD_REQUEST, error: apiError); | ||||
|     case 401: | ||||
|       return APIException(APIException.UNAUTHORIZED); | ||||
|     case 403: | ||||
|       return APIException(APIException.FORBIDDEN); | ||||
|     case 404: | ||||
|       return APIException(APIException.NOT_FOUND); | ||||
|     case 500: | ||||
|       return APIException(APIException.INTERNAL_SERVER_ERROR); | ||||
|     case 444: | ||||
|       var downloadUrl = response.headers["location"]; | ||||
|       return APIException(APIException.UPGRADE_REQUIRED, arguments: downloadUrl); | ||||
|     default: | ||||
|       return APIException(APIException.OTHER); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| abstract class IApiClient { | ||||
|   Future<U> postJsonForObject<T, U>(FactoryConstructor<U> factoryConstructor, String url, T jsonObject, | ||||
|       {String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0}); | ||||
| 
 | ||||
|   Future<Response> postJsonForResponse<T>(String url, T jsonObject, {String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0}); | ||||
| 
 | ||||
|   Future<Response> getJsonForResponse<T>(String url, {String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0}); | ||||
| 
 | ||||
|   void setHomeUrl(String url); | ||||
| } | ||||
| 
 | ||||
| class ApiClient implements IApiClient { | ||||
|   // static final ApiClient _instance = ApiClient._internal(); | ||||
| 
 | ||||
|   // ApiClient._internal(); | ||||
| 
 | ||||
|   // factory ApiClient() => _instance; | ||||
| 
 | ||||
|   @override | ||||
|   Future<U> postJsonForObject<T, U>(FactoryConstructor<U> factoryConstructor, String url, T jsonObject, | ||||
|       {String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0, bool isFormData = false}) async { | ||||
|     var _headers = {'Accept': 'application/json'}; | ||||
|     if (headers != null && headers.isNotEmpty) { | ||||
|       _headers.addAll(headers); | ||||
|     } | ||||
|     if (!kReleaseMode) { | ||||
|       print("Url:$url"); | ||||
|       var bodyJson = json.encode(jsonObject); | ||||
|       print("body:$bodyJson"); | ||||
|     } | ||||
|     var response = await postJsonForResponse(url, jsonObject, token: token, queryParameters: queryParameters, headers: _headers, retryTimes: retryTimes); | ||||
|     // try { | ||||
|     if (!kReleaseMode) { | ||||
|       logger.i("res: " + response.body); | ||||
|     } | ||||
|     var jsonData = jsonDecode(response.body); | ||||
|     if (jsonData["IsAuthenticated"] != null) { | ||||
|       AppState().setIsAuthenticated = jsonData["IsAuthenticated"]; | ||||
|     } | ||||
|     if (jsonData["ErrorMessage"] == null) { | ||||
|       return factoryConstructor(jsonData); | ||||
|     } else { | ||||
|       APIError? apiError; | ||||
|       apiError = APIError(jsonData['ErrorCode'], jsonData['ErrorEndUserMessage']); | ||||
|       throw APIException(APIException.BAD_REQUEST, error: apiError); | ||||
|     } | ||||
|     // } catch (ex) { | ||||
|     //   if (ex is APIException) { | ||||
|     //     rethrow; | ||||
|     //   } else { | ||||
|     //     throw APIException(APIException.BAD_RESPONSE_FORMAT, arguments: ex); | ||||
|     //   } | ||||
|     // } | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   Future<Response> postJsonForResponse<T>(String url, T jsonObject, {String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0}) async { | ||||
|     String? requestBody; | ||||
|     late Map<String, String> stringObj; | ||||
|     if (jsonObject != null) { | ||||
|       requestBody = jsonEncode(jsonObject); | ||||
|       if (headers == null) { | ||||
|         headers = {'Content-Type': 'application/json'}; | ||||
|       } else { | ||||
|         headers['Content-Type'] = 'application/json'; | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|     return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes); | ||||
|   } | ||||
| 
 | ||||
|   Future<Response> _postForResponse(String url, requestBody, {String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0}) async { | ||||
|     try { | ||||
|       var _headers = <String, String>{}; | ||||
|       // if (token != null) { | ||||
|       //   _headers['Authorization'] = 'Bearer $token'; | ||||
|       // } | ||||
| 
 | ||||
|       if (headers != null && headers.isNotEmpty) { | ||||
|         _headers.addAll(headers); | ||||
|       } | ||||
|       if (queryParameters != null) { | ||||
|         // var queryString = new Uri(queryParameters: queryParameters).query; | ||||
|         var queryString = Uri(queryParameters: queryParameters.map((key, value) => MapEntry(key, value == null ? null : value.toString()))).query; | ||||
|         url = url + '?' + queryString; | ||||
|       } | ||||
| 
 | ||||
|       // if (!kReleaseMode && url.contains("saned")) { | ||||
|       if (!kReleaseMode) { | ||||
|         print("Url: $url"); | ||||
|         print("Headers: $_headers"); | ||||
|         // var bodyJson = json.encode(requestBody); | ||||
|         print("body: $requestBody"); | ||||
|       } | ||||
| 
 | ||||
|       var response = await _post(Uri.parse(url), body: requestBody, headers: _headers).timeout(Duration(seconds: 120)); | ||||
| 
 | ||||
|       if (response.statusCode >= 200 && response.statusCode < 300) { | ||||
|         return response; | ||||
|       } else { | ||||
|         throw _throwAPIException(response, () { | ||||
|           // _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes, isAuthAPI: isAuthAPI); | ||||
|           postJsonForResponse(url, requestBody); | ||||
|         }); | ||||
|       } | ||||
|     } on SocketException catch (e) { | ||||
|       if (retryTimes > 0) { | ||||
|         print('will retry after 3 seconds...'); | ||||
|         await Future.delayed(Duration(seconds: 3)); | ||||
|         return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); | ||||
|       } else { | ||||
|         throw APIException(APIException.OTHER, arguments: e); | ||||
|       } | ||||
|     } on HttpException catch (e) { | ||||
|       if (retryTimes > 0) { | ||||
|         print('will retry after 3 seconds...'); | ||||
|         await Future.delayed(Duration(seconds: 3)); | ||||
|         return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); | ||||
|       } else { | ||||
|         throw APIException(APIException.OTHER, arguments: e); | ||||
|       } | ||||
|     } on TimeoutException catch (e) { | ||||
|       throw APIException(APIException.TIMEOUT, arguments: e); | ||||
|     } on ClientException catch (e) { | ||||
|       if (retryTimes > 0) { | ||||
|         print('will retry after 3 seconds...'); | ||||
|         await Future.delayed(Duration(seconds: 3)); | ||||
|         return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); | ||||
|       } else { | ||||
|         throw APIException(APIException.OTHER, arguments: e); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   Future<Response> getJsonForResponse<T>(String url, {String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0, bool isAuthAPI = false}) async { | ||||
|     logger.i("Url:$url"); | ||||
|     if (headers == null) { | ||||
|       headers = {'Content-Type': 'application/json'}; | ||||
|     } else { | ||||
|       headers['Content-Type'] = 'application/json'; | ||||
|     } | ||||
|     return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes, isAuthAPI: isAuthAPI); | ||||
|   } | ||||
| 
 | ||||
|   Future<Response> _getForResponse(String url, {String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0, bool isAuthAPI = false}) async { | ||||
|     try { | ||||
|       var _headers = <String, String>{}; | ||||
|       if (token != null) { | ||||
|         _headers['Authorization'] = 'Bearer $token'; | ||||
|       } | ||||
| 
 | ||||
|       if (headers != null && headers.isNotEmpty) { | ||||
|         _headers.addAll(headers); | ||||
|       } | ||||
| 
 | ||||
|       if (isAuthAPI) { | ||||
|         String token = await Utils.getStringFromPrefs(SharedPrefsConsts.appAuthToken); | ||||
|         _headers['Authorization'] = "Bearer $token"; | ||||
|       } | ||||
| 
 | ||||
|       if (queryParameters != null) { | ||||
|         var queryString = new Uri(queryParameters: queryParameters).query; | ||||
|         url = url + '?' + queryString; | ||||
|       } | ||||
|       var response = await _get(Uri.parse(url), headers: _headers).timeout(Duration(seconds: 60)); | ||||
| 
 | ||||
|       if (response.statusCode >= 200 && response.statusCode < 300) { | ||||
|         return response; | ||||
|       } else { | ||||
|         throw _throwAPIException(response, () { | ||||
|           _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes); | ||||
|         }); | ||||
|       } | ||||
|     } on SocketException catch (e) { | ||||
|       if (retryTimes > 0) { | ||||
|         print('will retry after 3 seconds...'); | ||||
|         await Future.delayed(Duration(seconds: 3)); | ||||
|         return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); | ||||
|       } else { | ||||
|         throw APIException(APIException.OTHER, arguments: e); | ||||
|       } | ||||
|     } on HttpException catch (e) { | ||||
|       if (retryTimes > 0) { | ||||
|         print('will retry after 3 seconds...'); | ||||
|         await Future.delayed(Duration(seconds: 3)); | ||||
|         return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); | ||||
|       } else { | ||||
|         throw APIException(APIException.OTHER, arguments: e); | ||||
|       } | ||||
|     } on TimeoutException catch (e) { | ||||
|       throw APIException(APIException.TIMEOUT, arguments: e); | ||||
|     } on ClientException catch (e) { | ||||
|       if (retryTimes > 0) { | ||||
|         print('will retry after 3 seconds...'); | ||||
|         await Future.delayed(Duration(seconds: 3)); | ||||
|         return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); | ||||
|       } else { | ||||
|         throw APIException(APIException.OTHER, arguments: e); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   Future<Response> _get(url, {Map<String, String>? headers}) => _withClient((client) => client.get(url, headers: headers)); | ||||
| 
 | ||||
|   bool _certificateCheck(X509Certificate cert, String host, int port) => true; | ||||
| 
 | ||||
|   Future<T> _withClient<T>(Future<T> Function(Client) fn) async { | ||||
|     var httpClient = HttpClient()..badCertificateCallback = _certificateCheck; | ||||
|     var client = IOClient(httpClient); | ||||
|     try { | ||||
|       return await fn(client); | ||||
|     } finally { | ||||
|       client.close(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   Future<Response> _post(url, {Map<String, String>? headers, body, Encoding? encoding}) => _withClient((client) => client.post(url, headers: headers, body: body, encoding: encoding)); | ||||
| 
 | ||||
|   Future<Response> _put(url, {Map<String, String>? headers, body, Encoding? encoding}) => _withClient((client) => client.put(url, headers: headers, body: body, encoding: encoding)); | ||||
| 
 | ||||
|   @override | ||||
|   void setHomeUrl(String url) { | ||||
|     // TODO: implement setHomeUrl | ||||
|   } | ||||
| } | ||||
| @ -1,30 +0,0 @@ | ||||
| import 'dart:convert'; | ||||
| 
 | ||||
| import 'package:hmg_patient_app_new/core/app_state.dart'; | ||||
| import 'package:http/http.dart'; | ||||
| 
 | ||||
| import '../../core/consts.dart'; | ||||
| import '../api_client.dart'; | ||||
| import 'models/response_models/get_patient_last_login_details_response_model.dart'; | ||||
| 
 | ||||
| class AuthenticationApiClient { | ||||
|   static final AuthenticationApiClient _instance = AuthenticationApiClient._internal(); | ||||
| 
 | ||||
|   AuthenticationApiClient._internal(); | ||||
| 
 | ||||
|   factory AuthenticationApiClient() => _instance; | ||||
| 
 | ||||
|   Future<GetPatientLastLoginDetailsResponseModel> getMultipleLoginUserData(String deviceIMEI) async { | ||||
|     GetPatientLastLoginDetailsResponseModel getPatientLastLoginDetailsResponseModel; | ||||
| 
 | ||||
|     Map<String, dynamic> request = {"IMEI": deviceIMEI}; | ||||
|     request.addAll(AppState().postParamsJson); | ||||
|     String url = ApiConsts.baseUrl + ApiConsts.SELECT_DEVICE_IMEI; | ||||
|     Response response = await ApiClient().postJsonForResponse(url, request); | ||||
| 
 | ||||
|     var json = jsonDecode(response.body); | ||||
|     getPatientLastLoginDetailsResponseModel = GetPatientLastLoginDetailsResponseModel.fromJson(json); | ||||
| 
 | ||||
|     return getPatientLastLoginDetailsResponseModel; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,14 @@ | ||||
| 
 | ||||
| import 'package:shared_preferences/shared_preferences.dart'; | ||||
| 
 | ||||
| abstract class CacheService { | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| class CacheServiceImp implements CacheService { | ||||
|   SharedPreferences sharedPreferences; | ||||
| 
 | ||||
|   CacheServiceImp({required this.sharedPreferences}); | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,27 @@ | ||||
| 
 | ||||
| import 'package:logger/logger.dart'; | ||||
| 
 | ||||
| abstract class LoggerService { | ||||
| 
 | ||||
|   void errorLogs(String message); | ||||
| 
 | ||||
|   void logInfo(String message); | ||||
| } | ||||
| 
 | ||||
| class LoggerServiceImp implements LoggerService { | ||||
|   Logger logger; | ||||
| 
 | ||||
|   LoggerServiceImp({required this.logger}); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   @override | ||||
|   void errorLogs(String message) { | ||||
|     logger.e(message); | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   void logInfo(String message) { | ||||
|     logger.i(message); | ||||
|   } | ||||
| } | ||||
					Loading…
					
					
				
		Reference in New Issue