diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist
index 7c56964..1dc6cf7 100644
--- a/ios/Flutter/AppFrameworkInfo.plist
+++ b/ios/Flutter/AppFrameworkInfo.plist
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 12.0
+ 13.0
diff --git a/ios/Podfile b/ios/Podfile
index 6010472..9249e54 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -99,4 +99,4 @@ post_integrate do |installer|
end
end
project.save()
-end
\ No newline at end of file
+end
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 4641728..5249fe5 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -103,6 +103,32 @@ PODS:
- Flutter
- Google-Maps-iOS-Utils (< 7.0, >= 5.0)
- GoogleMaps (< 10.0, >= 8.4)
+ - GoogleAdsOnDeviceConversion (2.1.0):
+ - GoogleUtilities/Logger (~> 8.1)
+ - GoogleUtilities/Network (~> 8.1)
+ - nanopb (~> 3.30910.0)
+ - GoogleAppMeasurement/Core (11.15.0):
+ - GoogleUtilities/AppDelegateSwizzler (~> 8.1)
+ - GoogleUtilities/MethodSwizzler (~> 8.1)
+ - GoogleUtilities/Network (~> 8.1)
+ - "GoogleUtilities/NSData+zlib (~> 8.1)"
+ - nanopb (~> 3.30910.0)
+ - GoogleAppMeasurement/Default (11.15.0):
+ - GoogleAdsOnDeviceConversion (= 2.1.0)
+ - GoogleAppMeasurement/Core (= 11.15.0)
+ - GoogleAppMeasurement/IdentitySupport (= 11.15.0)
+ - GoogleUtilities/AppDelegateSwizzler (~> 8.1)
+ - GoogleUtilities/MethodSwizzler (~> 8.1)
+ - GoogleUtilities/Network (~> 8.1)
+ - "GoogleUtilities/NSData+zlib (~> 8.1)"
+ - nanopb (~> 3.30910.0)
+ - GoogleAppMeasurement/IdentitySupport (11.15.0):
+ - GoogleAppMeasurement/Core (= 11.15.0)
+ - GoogleUtilities/AppDelegateSwizzler (~> 8.1)
+ - GoogleUtilities/MethodSwizzler (~> 8.1)
+ - GoogleUtilities/Network (~> 8.1)
+ - "GoogleUtilities/NSData+zlib (~> 8.1)"
+ - nanopb (~> 3.30910.0)
- GoogleDataTransport (10.1.0):
- nanopb (~> 3.30910.0)
- PromisesObjC (~> 2.4)
@@ -121,6 +147,9 @@ PODS:
- GoogleUtilities/Logger (8.1.0):
- GoogleUtilities/Environment
- GoogleUtilities/Privacy
+ - GoogleUtilities/MethodSwizzler (8.1.0):
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Privacy
- GoogleUtilities/Network (8.1.0):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
@@ -212,6 +241,7 @@ DEPENDENCIES:
- device_calendar (from `.symlinks/plugins/device_calendar/ios`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- file_picker (from `.symlinks/plugins/file_picker/ios`)
+ - firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`)
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
- FLAnimatedImage
@@ -243,12 +273,15 @@ SPEC REPOS:
- DKImagePickerController
- DKPhotoGallery
- Firebase
+ - FirebaseAnalytics
- FirebaseCore
- FirebaseCoreInternal
- FirebaseInstallations
- FirebaseMessaging
- FLAnimatedImage
- Google-Maps-iOS-Utils
+ - GoogleAdsOnDeviceConversion
+ - GoogleAppMeasurement
- GoogleDataTransport
- GoogleMaps
- GoogleUtilities
@@ -282,6 +315,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/device_info_plus/ios"
file_picker:
:path: ".symlinks/plugins/file_picker/ios"
+ firebase_analytics:
+ :path: ".symlinks/plugins/firebase_analytics/ios"
firebase_core:
:path: ".symlinks/plugins/firebase_core/ios"
firebase_messaging:
@@ -386,6 +421,6 @@ SPEC CHECKSUMS:
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
ZoomVideoSDK: 94e939820e57a075c5e712559f927017da0de06a
-PODFILE CHECKSUM: ac23c99fc61c3e92ed1c20a19299a1205568c016
+PODFILE CHECKSUM: 5df9d8aa8f2c105eacd5ad7a310503d93c68c86b
COCOAPODS: 1.15.2
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 3f36518..a0241a1 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -435,7 +435,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -451,7 +451,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 2;
- DEVELOPMENT_TEAM = 3A359E86ZF;
+ DEVELOPMENT_TEAM = ZB3P5B74MA;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.6;
@@ -564,7 +564,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -615,7 +615,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -633,7 +633,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 2;
- DEVELOPMENT_TEAM = 3A359E86ZF;
+ DEVELOPMENT_TEAM = ZB3P5B74MA;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.6;
@@ -658,7 +658,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 2;
- DEVELOPMENT_TEAM = 3A359E86ZF;
+ DEVELOPMENT_TEAM = ZB3P5B74MA;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.6;
diff --git a/lib/core/api/api_client.dart b/lib/core/api/api_client.dart
new file mode 100644
index 0000000..fbf63b2
--- /dev/null
+++ b/lib/core/api/api_client.dart
@@ -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 post(
+ String endPoint, {
+ required Map body,
+ required Function(dynamic response, int statusCode) onSuccess,
+ required Function(String error, int statusCode) onFailure,
+ bool isAllowAny,
+ bool isExternal,
+ bool isRCService,
+ bool bypassConnectionCheck,
+ });
+
+ Future get(
+ String endPoint, {
+ required Function(dynamic response, int statusCode) onSuccess,
+ required Function(String error, int statusCode) onFailure,
+ Map? queryParams,
+ bool isExternal,
+ bool isRCService,
+ });
+
+ Future simplePost(
+ String fullUrl, {
+ required Map body,
+ required Map headers,
+ required Function(dynamic response, int statusCode) onSuccess,
+ required Function(String error, int statusCode) onFailure,
+ });
+
+ Future simpleGet(
+ String fullUrl, {
+ Function(dynamic response, int statusCode)? onSuccess,
+ Function(String error, int statusCode)? onFailure,
+ Map? queryParams,
+ Map? headers,
+ });
+
+ Future simplePut(
+ String fullUrl, {
+ Map? body,
+ Map? headers,
+ Function(dynamic response, int statusCode)? onSuccess,
+ Function(String error, int statusCode)? onFailure,
+ });
+
+ Future simpleDelete(
+ String fullUrl, {
+ Function(dynamic response, int statusCode)? onSuccess,
+ Function(String error, int statusCode)? onFailure,
+ Map? queryParams,
+ Map? headers,
+ });
+
+ Future handleUnauthorized(int statusCode, {required String forUrl});
+
+ String getSessionId(String id);
+
+ Future generatePackagesToken();
+}
+
+class ApiClientImp implements ApiClient {
+ final _analytics = getIt();
+
+ final LoggerService loggerService;
+
+ ApiClientImp({required this.loggerService});
+
+ @override
+ post(String endPoint,
+ {required Map 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();
+ 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 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? 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 body,
+ required Map 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? queryParams,
+ Map? 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? body,
+ Map? 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? queryParams,
+ Map? 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 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 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);
+ }
+}
diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart
new file mode 100644
index 0000000..6f82e26
--- /dev/null
+++ b/lib/core/api_consts.dart
@@ -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 packagesAuthHeader = {};
+
+}
\ No newline at end of file
diff --git a/lib/core/app_state.dart b/lib/core/app_state.dart
index 8d495e0..91e200a 100644
--- a/lib/core/app_state.dart
+++ b/lib/core/app_state.dart
@@ -1,17 +1,15 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:hmg_patient_app_new/core/post_params_model.dart';
+import 'package:hmg_patient_app_new/features/authentication/models/authenticated_user_model.dart';
import 'package:hmg_patient_app_new/main.dart';
-import 'consts.dart';
+import 'api_consts.dart' as ApiConsts;
-class AppState {
- static final AppState _instance = AppState._internal();
-
- AppState._internal();
- factory AppState() => _instance;
+class AppState {
+ // Simple constructor - let get_it handle the singleton behavior
+ AppState();
- //Tokens
bool isAuthenticated = true;
@@ -25,8 +23,13 @@ class AppState {
set setUserLong(v) => userLong = v;
- final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 3, versionID: ApiConsts.VERSION_ID);
-
+ final PostParamsModel _postParamsInitConfig = PostParamsModel(
+ channel: 3,
+ versionID: ApiConsts.VERSION_ID,
+ ipAddress: '10.20.10.20',
+ generalId: 'Cs2020@2016\$2958',
+ deviceTypeID: "2",
+ sessionID: 'TMRhVmkGhOsvamErw');
void setPostParamsInitConfig() {
isAuthenticated = false;
@@ -34,8 +37,12 @@ class AppState {
}
PostParamsModel? _postParams;
+
PostParamsModel? get postParamsObject => _postParams;
- Map get postParamsJson => isAuthenticated ? (_postParams?.toJsonAfterLogin() ?? {}) : (_postParams?.toJson() ?? {});
+
+ Map get postParamsJson => isAuthenticated
+ ? (_postParams?.toJsonAfterLogin() ?? {})
+ : (_postParams?.toJson() ?? {});
void setPostParamsModel(PostParamsModel _postParams) {
this._postParams = _postParams;
@@ -44,7 +51,18 @@ class AppState {
double userLat = 0.0;
double userLong = 0.0;
- bool isArabic() => EasyLocalization.of(navigatorKey.currentContext!)?.locale.languageCode == "ar";
+ bool isArabic() =>
+ EasyLocalization.of(navigatorKey.currentContext!)?.locale.languageCode ==
+ "ar";
+
+ int getLanguageID(context) =>
+ EasyLocalization.of(context)?.locale.languageCode == "ar" ? 1 : 2;
+
+ AuthenticatedUser? _authenticatedUser;
+
+ void setAuthenticatedUser(AuthenticatedUser authenticatedUser) {
+ _authenticatedUser = authenticatedUser;
+ }
- int getLanguageID(context) => EasyLocalization.of(context)?.locale.languageCode == "ar" ? 1 : 2;
+ AuthenticatedUser? get getAuthenticatedUser => _authenticatedUser;
}
diff --git a/lib/core/consts.dart b/lib/core/consts.dart
index 5818b1e..216b9a7 100644
--- a/lib/core/consts.dart
+++ b/lib/core/consts.dart
@@ -1,23 +1,4 @@
-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 setBackendURLs() {
- if (isDevelopment) {
- baseUrl = "https://uat.hmgwebservices.com/";
- } else {
- baseUrl = "https://hmgwebservices.com/";
- }
- }
-}
class SharedPrefsConsts {
static String isRememberMe = "remember_me";
diff --git a/lib/core/dependencies.dart b/lib/core/dependencies.dart
index 4b3b0d6..440cd26 100644
--- a/lib/core/dependencies.dart
+++ b/lib/core/dependencies.dart
@@ -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());
+ static Future addDependencies() async {
+ // Services
+ getIt.registerLazySingleton(() => 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(() => CacheServiceImp(sharedPreferences: sharedPreferences));
+ getIt.registerSingleton(AppState());
+ getIt.registerSingleton(GAnalytics());
+ getIt.registerLazySingleton(() => ApiClientImp(loggerService: getIt()));
+
+ // Repositories
+ getIt.registerLazySingleton(() => CommonRepoImp(loggerService: getIt()));
+ getIt.registerLazySingleton(() => AuthenticationRepoImp(loggerService: getIt(), apiClient: getIt()));
+ getIt.registerLazySingleton(() => BookAppointmentsRepoImp(loggerService: getIt(), apiClient: getIt()));
+ getIt.registerLazySingleton(() => MyAppointmentsRepoImp(loggerService: getIt(), apiClient: getIt()));
+
}
}
diff --git a/lib/core/enums.dart b/lib/core/enums.dart
index 95efb6c..db758f3 100644
--- a/lib/core/enums.dart
+++ b/lib/core/enums.dart
@@ -23,9 +23,9 @@ enum ViewState {
}
enum LoginType {
- FROM_LOGIN,
- SILENT_LOGIN,
- SILENT_WITH_OTP,
+ fromLogin,
+ silentLogin,
+ silentWithOTP,
}
enum OTPType { sms, whatsapp }
diff --git a/lib/services/api_exception.dart b/lib/core/exceptions/api_exception.dart
similarity index 76%
rename from lib/services/api_exception.dart
rename to lib/core/exceptions/api_exception.dart
index f0f1ff9..eb11b71 100644
--- a/lib/services/api_exception.dart
+++ b/lib/core/exceptions/api_exception.dart
@@ -1,6 +1,7 @@
import 'dart:convert';
-import 'package:hmg_patient_app_new/services/api_client.dart';
+import 'package:equatable/equatable.dart';
+import 'package:hmg_patient_app_new/core/api/api_client.dart';
class APIException implements Exception {
static const String BAD_REQUEST = 'api_common_bad_request';
@@ -15,15 +16,15 @@ class APIException implements Exception {
static const String UNKNOWN = 'unexpected_error';
final String message;
- final APIError? error;
final arguments;
- const APIException(this.message, {this.arguments, this.error});
+ const APIException(this.message, {this.arguments});
- Map toJson() => {'message': message, 'error': error, 'arguments': '$arguments'};
+ Map toJson() => {'message': message, 'arguments': '$arguments'};
@override
String toString() {
return jsonEncode(this);
}
}
+
diff --git a/lib/core/exceptions/api_failure.dart b/lib/core/exceptions/api_failure.dart
new file mode 100644
index 0000000..eaa434e
--- /dev/null
+++ b/lib/core/exceptions/api_failure.dart
@@ -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