Merge branch 'master' of http://34.17.182.140/Haroon6138/HMG_Patient_App into login_other_country

* 'master' of http://34.17.182.140/Haroon6138/HMG_Patient_App:
  Update to stores, VersionID 20.1
  updates
  updates
  VIDA 4 lab fixes
  Added immediate patient insurance update API
  test description issue fixed
  Services page changes & API implementation
  Services page changes, Update to stores VersionID 19.7
  updates
  implemented services price list page, Update to stores 19.6
  Services list page implemented
  PenguinIn android updates
  Updated PenguinIn Navigation
  updates for offer details page, Update to stores 19.5
  fixes for ApplePay amount issue in arabic, Fix for CheckInType

# Conflicts:
#	lib/config/config.dart
login_other_country
Sultan khan 4 months ago
commit 2bbb81a914

1
.gitignore vendored

@ -32,6 +32,7 @@ pubspec.lock
.pub/ .pub/
/build/ /build/
/ios/Frameworks/ /ios/Frameworks/
/ios_old/
# Web related # Web related
lib/generated_plugin_registrant.dart lib/generated_plugin_registrant.dart

@ -148,6 +148,7 @@ dependencies {
annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0'
implementation 'com.mapbox.maps:android:11.5.0' implementation 'com.mapbox.maps:android:11.5.0'
implementation 'com.mapbox.mapboxsdk:mapbox-sdk-turf:7.3.1'
// implementation 'com.mapbox.maps:android:11.4.0' // implementation 'com.mapbox.maps:android:11.4.0'
// AARs // AARs

Binary file not shown.

Binary file not shown.

@ -52,7 +52,7 @@
<uses-permission <uses-permission
android:name="android.permission.ACCESS_BACKGROUND_LOCATION" android:name="android.permission.ACCESS_BACKGROUND_LOCATION"
tools:node="remove" /> <!-- <uses-permission android:name="android.permission.INTERNET" /> --> tools:node="remove" /> <!-- <uses-permission android:name="android.permission.INTERNET" /> -->
<!-- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH" />
@ -138,6 +138,8 @@
android:name="push_kit_auto_init_enabled" android:name="push_kit_auto_init_enabled"
android:value="true" /> android:value="true" />
<meta-data android:name="com.google.ar.core" android:value="optional" tools:node="remove"/>
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"

@ -30,6 +30,8 @@ import com.peng.pennavmap.interfaces.PIEventsDelegate
import com.peng.pennavmap.interfaces.PILocationDelegate import com.peng.pennavmap.interfaces.PILocationDelegate
import com.peng.pennavmap.interfaces.RefIdDelegate import com.peng.pennavmap.interfaces.RefIdDelegate
import com.peng.pennavmap.models.PIReportIssue import com.peng.pennavmap.models.PIReportIssue
import com.peng.pennavmap.models.LocationMessage
import penguin.com.pennav.renderer.PIRendererSettings
/** /**
* Custom PlatformView for displaying Penguin UI components within a Flutter app. * Custom PlatformView for displaying Penguin UI components within a Flutter app.
* Implements `PlatformView` for rendering the view, `MethodChannel.MethodCallHandler` for handling method calls, * Implements `PlatformView` for rendering the view, `MethodChannel.MethodCallHandler` for handling method calls,
@ -43,7 +45,8 @@ internal class PenguinView(
messenger: BinaryMessenger, messenger: BinaryMessenger,
activity: MainActivity, activity: MainActivity,
val channel: MethodChannel val channel: MethodChannel
) : PlatformView, MethodChannel.MethodCallHandler, PenNavUIDelegate { ) : PlatformView, MethodChannel.MethodCallHandler, PenNavUIDelegate, PIEventsDelegate,
PILocationDelegate {
// The layout for displaying the Penguin UI // The layout for displaying the Penguin UI
private val mapLayout: RelativeLayout = RelativeLayout(context) private val mapLayout: RelativeLayout = RelativeLayout(context)
private val _context: Context = context private val _context: Context = context
@ -183,6 +186,7 @@ internal class PenguinView(
"TAG", "TAG",
"initPenguin: ${Languages.getLanguageEnum(creationParams["languageCode"] as String)}" "initPenguin: ${Languages.getLanguageEnum(creationParams["languageCode"] as String)}"
) )
PIRendererSettings.styleUri = "mapbox://styles/rwaid/cm3h30b36007v01qz7ik8a0sk"
PlugAndPlaySDK.configuration = PlugAndPlayConfiguration.Builder() PlugAndPlaySDK.configuration = PlugAndPlayConfiguration.Builder()
.setBaseUrl( .setBaseUrl(
creationParams["dataURL"] as String, creationParams["dataURL"] as String,
@ -197,14 +201,20 @@ internal class PenguinView(
creationParams["clientKey"] as String creationParams["clientKey"] as String
) )
.setUserName(creationParams["username"] as String) .setUserName(creationParams["username"] as String)
// .setUserName("Haroon")
// .setLanguageID(Languages.en) // .setLanguageID(Languages.en)
.setLanguageID(language) .setLanguageID(language)
.setSimulationModeEnabled(creationParams["isSimulationModeEnabled"] as Boolean) .setSimulationModeEnabled(creationParams["isSimulationModeEnabled"] as Boolean)
// .setSimulationModeEnabled(true)
.setEnableBackButton(true) .setEnableBackButton(true)
// .setDeepLinkData("deeplink") // .setDeepLinkData("deeplink")
.setCustomizeColor("#2CA0AF") .setCustomizeColor("#2CA0AF")
.setDeepLinkSchema("") // .setDeepLinkSchema("")
.setIsEnableReportIssue(true) .setDeepLinkData("")
.setIsEnableReportIssue(false)
.setEnableSharedLocationCallBack(false)
.setShowUILoader(true)
.setCampusId(creationParams["projectID"] as Int)
.build() .build()
// Set location delegate to handle location updates // Set location delegate to handle location updates
@ -229,6 +239,8 @@ internal class PenguinView(
// }) // })
// Start the Penguin SDK // Start the Penguin SDK
PlugAndPlaySDK.setPiEventsDelegate(this)
PlugAndPlaySDK.setPiLocationDelegate(this)
PlugAndPlaySDK.start(mContext, this) PlugAndPlaySDK.start(mContext, this)
} }
@ -239,14 +251,17 @@ internal class PenguinView(
* @param refID The reference ID to navigate to. * @param refID The reference ID to navigate to.
*/ */
fun navigateTo(refID: String) { fun navigateTo(refID: String) {
Log.e("navigateTo", "inside navigateTo")
try { try {
if (refID.isBlank()) { if (refID.isBlank()) {
Log.e("navigateTo", "Invalid refID: The reference ID is blank.") Log.e("navigateTo", "Invalid refID: The reference ID is blank.")
} }
// referenceId = refID // referenceId = refID
navigator.navigateTo(mContext, refID,object : RefIdDelegate { Log.e("navigateTo", "before navigateTo")
navigator.navigateTo(mContext, refID, object : RefIdDelegate {
// navigator.navigateTo(mContext, "3-3", object : RefIdDelegate {
override fun onRefByIDSuccess(PoiId: String?) { override fun onRefByIDSuccess(PoiId: String?) {
Log.e("navigateTo", "PoiId is penguin view+++++++ $PoiId") Log.e("navigateTo", "PoiId is penguin view+++++++ $refID")
// channelFlutter.invokeMethod( // channelFlutter.invokeMethod(
// PenguinMethod.navigateToPOI.name, // PenguinMethod.navigateToPOI.name,
@ -280,9 +295,12 @@ internal class PenguinView(
*/ */
override fun onPenNavSuccess(warningCode: String?) { override fun onPenNavSuccess(warningCode: String?) {
val clinicId = creationParams["clinicID"] as String val clinicId = creationParams["clinicID"] as String
// val clinicId = "3-3"
if(clinicId.isEmpty()) return if(clinicId.isEmpty()) return
Log.e("navigateTo", "onPenNavSuccess")
navigateTo(clinicId) navigateTo(clinicId)
} }
@ -317,4 +335,20 @@ internal class PenguinView(
Log.e("PenguinView", "Receiver not registered: $e") Log.e("PenguinView", "Receiver not registered: $e")
} }
} }
override fun onReportIssue(issue: PIReportIssue?) {
TODO("Not yet implemented")
}
override fun onSharedLocation(link: String?) {
TODO("Not yet implemented")
}
override fun onLocationOffCampus(location: ArrayList<Double>?) {
TODO("Not yet implemented")
}
override fun onLocationMessage(locationMessage: LocationMessage?) {
TODO("Not yet implemented")
}
} }

@ -19,5 +19,5 @@
<string name="GEOFENCE_REQUEST_TOO_FREQUENT"> <string name="GEOFENCE_REQUEST_TOO_FREQUENT">
Geofence requests happened too frequently. Geofence requests happened too frequently.
</string> </string>
<string name="mapbox_access_token" translatable="false">sk.eyJ1IjoicndhaWQiLCJhIjoiY2x6NWo0bTMzMWZodzJrcGZpemYzc3Z4dSJ9.uSSZuwNSGCcCdPAiORECmg</string> <string name="mapbox_access_token" translatable="false">pk.eyJ1IjoicndhaWQiLCJhIjoiY2x5cGo4aHNjMGNsbTJyc2djempobGQxaSJ9.RCaC6WrUt4A4YnZNfxnONQ</string>
</resources> </resources>

Binary file not shown.

@ -54,6 +54,8 @@ post_install do |installer|
'PERMISSION_EVENTS_FULL_ACCESS=1', 'PERMISSION_EVENTS_FULL_ACCESS=1',
## dart: PermissionGroup.reminders ## dart: PermissionGroup.reminders
'PERMISSION_REMINDERS=1', 'PERMISSION_REMINDERS=1',
## dart: PermissionGroup.notifications
'PERMISSION_NOTIFICATIONS=1',
] ]
build_configuration.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64 i386' build_configuration.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64 i386'
build_configuration.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0' build_configuration.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'

@ -14,18 +14,18 @@
306FE6C8271D790C002D6EFC /* OpenTokPlatformBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 306FE6C7271D790C002D6EFC /* OpenTokPlatformBridge.swift */; }; 306FE6C8271D790C002D6EFC /* OpenTokPlatformBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 306FE6C7271D790C002D6EFC /* OpenTokPlatformBridge.swift */; };
306FE6CB271D8B73002D6EFC /* OpenTok.swift in Sources */ = {isa = PBXBuildFile; fileRef = 306FE6CA271D8B73002D6EFC /* OpenTok.swift */; }; 306FE6CB271D8B73002D6EFC /* OpenTok.swift in Sources */ = {isa = PBXBuildFile; fileRef = 306FE6CA271D8B73002D6EFC /* OpenTok.swift */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
3DB328A4BC3A43F45E064B43 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E19F7CAE4CB09D1D186CB8A0 /* Pods_Runner.framework */; }; 55AA48E49B1975752B97D5AC /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 722389C8A524DEC951FB496C /* Pods_Runner.framework */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
762D738E274E42650063CE73 /* ring_30Sec.caf in Resources */ = {isa = PBXBuildFile; fileRef = 762D738C274E42650063CE73 /* ring_30Sec.caf */; }; 762D738E274E42650063CE73 /* ring_30Sec.caf in Resources */ = {isa = PBXBuildFile; fileRef = 762D738C274E42650063CE73 /* ring_30Sec.caf */; };
762D738F274E42650063CE73 /* ring_30Sec.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 762D738D274E42650063CE73 /* ring_30Sec.mp3 */; }; 762D738F274E42650063CE73 /* ring_30Sec.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 762D738D274E42650063CE73 /* ring_30Sec.mp3 */; };
7651B82F2D3E9CA40066B33A /* PenguinINRenderer.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7651B82C2D3E9CA40066B33A /* PenguinINRenderer.xcframework */; };
7651B8302D3E9CA40066B33A /* PenguinINRenderer.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7651B82C2D3E9CA40066B33A /* PenguinINRenderer.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
7651B8312D3E9CA40066B33A /* Penguin.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7651B82D2D3E9CA40066B33A /* Penguin.xcframework */; };
7651B8322D3E9CA40066B33A /* Penguin.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7651B82D2D3E9CA40066B33A /* Penguin.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
7651B8332D3E9CA40066B33A /* PenNavUI.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7651B82E2D3E9CA40066B33A /* PenNavUI.xcframework */; };
7651B8342D3E9CA40066B33A /* PenNavUI.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7651B82E2D3E9CA40066B33A /* PenNavUI.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
76815B27275F381C00E66E94 /* HealthKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76815B26275F381C00E66E94 /* HealthKit.framework */; }; 76815B27275F381C00E66E94 /* HealthKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76815B26275F381C00E66E94 /* HealthKit.framework */; };
76962ECE28AE5C10004EAE09 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 76962ECD28AE5C10004EAE09 /* GoogleService-Info.plist */; }; 76962ECE28AE5C10004EAE09 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 76962ECD28AE5C10004EAE09 /* GoogleService-Info.plist */; };
769B40D72F28A3BB00FC6445 /* Penguin.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 769B40D12F28A3B800FC6445 /* Penguin.xcframework */; };
769B40D82F28A3BB00FC6445 /* Penguin.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 769B40D12F28A3B800FC6445 /* Penguin.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
769B40D92F28A3BC00FC6445 /* PenguinINRenderer.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 769B40D22F28A3B800FC6445 /* PenguinINRenderer.xcframework */; };
769B40DA2F28A3BC00FC6445 /* PenguinINRenderer.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 769B40D22F28A3B800FC6445 /* PenguinINRenderer.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
769B40DB2F28A3BD00FC6445 /* PenNavUI.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 769B40D32F28A3B800FC6445 /* PenNavUI.xcframework */; };
769B40DC2F28A3BD00FC6445 /* PenNavUI.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 769B40D32F28A3B800FC6445 /* PenNavUI.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
76D71B672C6B7F9C00DAFB84 /* HMGPenguinInPlatformBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D71B662C6B7F9C00DAFB84 /* HMGPenguinInPlatformBridge.swift */; }; 76D71B672C6B7F9C00DAFB84 /* HMGPenguinInPlatformBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D71B662C6B7F9C00DAFB84 /* HMGPenguinInPlatformBridge.swift */; };
76D71B6A2C6B819000DAFB84 /* PenguinModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D71B692C6B819000DAFB84 /* PenguinModel.swift */; }; 76D71B6A2C6B819000DAFB84 /* PenguinModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D71B692C6B819000DAFB84 /* PenguinModel.swift */; };
76D71B6C2C6B81B300DAFB84 /* PenguinView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D71B6B2C6B81B300DAFB84 /* PenguinView.swift */; }; 76D71B6C2C6B81B300DAFB84 /* PenguinView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D71B6B2C6B81B300DAFB84 /* PenguinView.swift */; };
@ -61,9 +61,9 @@
dstPath = ""; dstPath = "";
dstSubfolderSpec = 10; dstSubfolderSpec = 10;
files = ( files = (
7651B8322D3E9CA40066B33A /* Penguin.xcframework in Embed Frameworks */, 769B40DA2F28A3BC00FC6445 /* PenguinINRenderer.xcframework in Embed Frameworks */,
7651B8302D3E9CA40066B33A /* PenguinINRenderer.xcframework in Embed Frameworks */, 769B40D82F28A3BB00FC6445 /* Penguin.xcframework in Embed Frameworks */,
7651B8342D3E9CA40066B33A /* PenNavUI.xcframework in Embed Frameworks */, 769B40DC2F28A3BD00FC6445 /* PenNavUI.xcframework in Embed Frameworks */,
); );
name = "Embed Frameworks"; name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@ -74,13 +74,14 @@
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
29631B9D2C96C7F600DF5916 /* PenguinNavigator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenguinNavigator.swift; sourceTree = "<group>"; }; 29631B9D2C96C7F600DF5916 /* PenguinNavigator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenguinNavigator.swift; sourceTree = "<group>"; };
2C6B6DB9E23FC83C372DD365 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
301C79AD27200D9F0016307B /* OpenTokRemoteVideoFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenTokRemoteVideoFactory.swift; sourceTree = "<group>"; }; 301C79AD27200D9F0016307B /* OpenTokRemoteVideoFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenTokRemoteVideoFactory.swift; sourceTree = "<group>"; };
301C79AF27200DED0016307B /* OpenTokLocalVideoFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenTokLocalVideoFactory.swift; sourceTree = "<group>"; }; 301C79AF27200DED0016307B /* OpenTokLocalVideoFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenTokLocalVideoFactory.swift; sourceTree = "<group>"; };
306FE6C7271D790C002D6EFC /* OpenTokPlatformBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenTokPlatformBridge.swift; sourceTree = "<group>"; }; 306FE6C7271D790C002D6EFC /* OpenTokPlatformBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenTokPlatformBridge.swift; sourceTree = "<group>"; };
306FE6CA271D8B73002D6EFC /* OpenTok.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenTok.swift; sourceTree = "<group>"; }; 306FE6CA271D8B73002D6EFC /* OpenTok.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenTok.swift; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
54B166B4DC892AC4907E4EC3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; }; 6CD649749BB2F47B452A6202 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
7289ADA1C0D9050B5D84D72D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; }; 722389C8A524DEC951FB496C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
762D738C274E42650063CE73 /* ring_30Sec.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = ring_30Sec.caf; path = ../../assets/sounds/ring_30Sec.caf; sourceTree = "<group>"; }; 762D738C274E42650063CE73 /* ring_30Sec.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = ring_30Sec.caf; path = ../../assets/sounds/ring_30Sec.caf; sourceTree = "<group>"; };
@ -88,11 +89,11 @@
7643E4042BE0D0B400BD2F25 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Main_Custom.strings; sourceTree = "<group>"; }; 7643E4042BE0D0B400BD2F25 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Main_Custom.strings; sourceTree = "<group>"; };
7643E4052BE0D0B400BD2F25 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Main.strings; sourceTree = "<group>"; }; 7643E4052BE0D0B400BD2F25 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Main.strings; sourceTree = "<group>"; };
7643E4062BE0D0B400BD2F25 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/LaunchScreen.strings; sourceTree = "<group>"; }; 7643E4062BE0D0B400BD2F25 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/LaunchScreen.strings; sourceTree = "<group>"; };
7651B82C2D3E9CA40066B33A /* PenguinINRenderer.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = PenguinINRenderer.xcframework; path = Frameworks/PenguinINRenderer.xcframework; sourceTree = "<group>"; };
7651B82D2D3E9CA40066B33A /* Penguin.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Penguin.xcframework; path = Frameworks/Penguin.xcframework; sourceTree = "<group>"; };
7651B82E2D3E9CA40066B33A /* PenNavUI.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = PenNavUI.xcframework; path = Frameworks/PenNavUI.xcframework; sourceTree = "<group>"; };
76815B26275F381C00E66E94 /* HealthKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = HealthKit.framework; path = System/Library/Frameworks/HealthKit.framework; sourceTree = SDKROOT; }; 76815B26275F381C00E66E94 /* HealthKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = HealthKit.framework; path = System/Library/Frameworks/HealthKit.framework; sourceTree = SDKROOT; };
76962ECD28AE5C10004EAE09 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; }; 76962ECD28AE5C10004EAE09 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
769B40D12F28A3B800FC6445 /* Penguin.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = Penguin.xcframework; sourceTree = "<group>"; };
769B40D22F28A3B800FC6445 /* PenguinINRenderer.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = PenguinINRenderer.xcframework; sourceTree = "<group>"; };
769B40D32F28A3B800FC6445 /* PenNavUI.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = PenNavUI.xcframework; sourceTree = "<group>"; };
76D71B662C6B7F9C00DAFB84 /* HMGPenguinInPlatformBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HMGPenguinInPlatformBridge.swift; sourceTree = "<group>"; }; 76D71B662C6B7F9C00DAFB84 /* HMGPenguinInPlatformBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HMGPenguinInPlatformBridge.swift; sourceTree = "<group>"; };
76D71B692C6B819000DAFB84 /* PenguinModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenguinModel.swift; sourceTree = "<group>"; }; 76D71B692C6B819000DAFB84 /* PenguinModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenguinModel.swift; sourceTree = "<group>"; };
76D71B6B2C6B81B300DAFB84 /* PenguinView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenguinView.swift; sourceTree = "<group>"; }; 76D71B6B2C6B81B300DAFB84 /* PenguinView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenguinView.swift; sourceTree = "<group>"; };
@ -100,6 +101,7 @@
76D71B6F2C6B81EA00DAFB84 /* PenguinViewFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenguinViewFactory.swift; sourceTree = "<group>"; }; 76D71B6F2C6B81EA00DAFB84 /* PenguinViewFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenguinViewFactory.swift; sourceTree = "<group>"; };
76F2556027F1FFED0062C1CD /* PassKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PassKit.framework; path = System/Library/Frameworks/PassKit.framework; sourceTree = SDKROOT; }; 76F2556027F1FFED0062C1CD /* PassKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PassKit.framework; path = System/Library/Frameworks/PassKit.framework; sourceTree = SDKROOT; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
95022A170D86E777A3E61383 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@ -107,8 +109,6 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
B3049EEB8BADB14F6A5B7CB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
E19F7CAE4CB09D1D186CB8A0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
E91B538D256AAA6500E96549 /* GlobalHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GlobalHelper.swift; sourceTree = "<group>"; }; E91B538D256AAA6500E96549 /* GlobalHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GlobalHelper.swift; sourceTree = "<group>"; };
E91B538E256AAA6500E96549 /* Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = "<group>"; }; E91B538E256AAA6500E96549 /* Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = "<group>"; };
E91B538F256AAA6500E96549 /* API.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = API.swift; sourceTree = "<group>"; }; E91B538F256AAA6500E96549 /* API.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = API.swift; sourceTree = "<group>"; };
@ -134,13 +134,13 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
7651B8312D3E9CA40066B33A /* Penguin.xcframework in Frameworks */,
76F2556127F1FFED0062C1CD /* PassKit.framework in Frameworks */, 76F2556127F1FFED0062C1CD /* PassKit.framework in Frameworks */,
76815B27275F381C00E66E94 /* HealthKit.framework in Frameworks */, 76815B27275F381C00E66E94 /* HealthKit.framework in Frameworks */,
E9620805255C2ED100D3A35D /* NetworkExtension.framework in Frameworks */, E9620805255C2ED100D3A35D /* NetworkExtension.framework in Frameworks */,
7651B8332D3E9CA40066B33A /* PenNavUI.xcframework in Frameworks */, 769B40DB2F28A3BD00FC6445 /* PenNavUI.xcframework in Frameworks */,
7651B82F2D3E9CA40066B33A /* PenguinINRenderer.xcframework in Frameworks */, 769B40D72F28A3BB00FC6445 /* Penguin.xcframework in Frameworks */,
3DB328A4BC3A43F45E064B43 /* Pods_Runner.framework in Frameworks */, 769B40D92F28A3BC00FC6445 /* PenguinINRenderer.xcframework in Frameworks */,
55AA48E49B1975752B97D5AC /* Pods_Runner.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -160,13 +160,13 @@
555EAAA626EFB641859EF0BE /* Frameworks */ = { 555EAAA626EFB641859EF0BE /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
7651B82D2D3E9CA40066B33A /* Penguin.xcframework */, 769B40D12F28A3B800FC6445 /* Penguin.xcframework */,
7651B82C2D3E9CA40066B33A /* PenguinINRenderer.xcframework */, 769B40D22F28A3B800FC6445 /* PenguinINRenderer.xcframework */,
7651B82E2D3E9CA40066B33A /* PenNavUI.xcframework */, 769B40D32F28A3B800FC6445 /* PenNavUI.xcframework */,
76F2556027F1FFED0062C1CD /* PassKit.framework */, 76F2556027F1FFED0062C1CD /* PassKit.framework */,
76815B26275F381C00E66E94 /* HealthKit.framework */, 76815B26275F381C00E66E94 /* HealthKit.framework */,
E9620804255C2ED100D3A35D /* NetworkExtension.framework */, E9620804255C2ED100D3A35D /* NetworkExtension.framework */,
E19F7CAE4CB09D1D186CB8A0 /* Pods_Runner.framework */, 722389C8A524DEC951FB496C /* Pods_Runner.framework */,
); );
name = Frameworks; name = Frameworks;
sourceTree = "<group>"; sourceTree = "<group>";
@ -174,9 +174,9 @@
605039E5DDF72C245F9765FE /* Pods */ = { 605039E5DDF72C245F9765FE /* Pods */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
7289ADA1C0D9050B5D84D72D /* Pods-Runner.debug.xcconfig */, 2C6B6DB9E23FC83C372DD365 /* Pods-Runner.debug.xcconfig */,
B3049EEB8BADB14F6A5B7CB0 /* Pods-Runner.release.xcconfig */, 6CD649749BB2F47B452A6202 /* Pods-Runner.release.xcconfig */,
54B166B4DC892AC4907E4EC3 /* Pods-Runner.profile.xcconfig */, 95022A170D86E777A3E61383 /* Pods-Runner.profile.xcconfig */,
); );
path = Pods; path = Pods;
sourceTree = "<group>"; sourceTree = "<group>";
@ -293,15 +293,15 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = ( buildPhases = (
60AC8DEBE8BAE4B2EDC244F6 /* [CP] Check Pods Manifest.lock */, 45F878899E79CC5E1FB4EC58 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */, 9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */, 97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */, 97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */, 97C146EC1CF9000F007C117D /* Resources */,
7651B8352D3E9CA50066B33A /* Embed Frameworks */, 7651B8352D3E9CA50066B33A /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
F3C6EFB26D98B53D80BE1D19 /* [CP] Embed Pods Frameworks */, BB3C9FF59088A86CD7C1B673 /* [CP] Embed Pods Frameworks */,
5193A841765CF1882FA9CCE8 /* [CP] Copy Pods Resources */, E9BC15C0E47D70948E8DA8FE /* [CP] Copy Pods Resources */,
); );
buildRules = ( buildRules = (
); );
@ -384,24 +384,7 @@
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin\n"; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin\n";
}; };
5193A841765CF1882FA9CCE8 /* [CP] Copy Pods Resources */ = { 45F878899E79CC5E1FB4EC58 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
60AC8DEBE8BAE4B2EDC244F6 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
@ -438,7 +421,7 @@
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n"; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n";
}; };
F3C6EFB26D98B53D80BE1D19 /* [CP] Embed Pods Frameworks */ = { BB3C9FF59088A86CD7C1B673 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
@ -455,6 +438,23 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
E9BC15C0E47D70948E8DA8FE /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */ /* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */
@ -583,7 +583,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 4; CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 3A359E86ZF; DEVELOPMENT_TEAM = 3A359E86ZF;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = ( FRAMEWORK_SEARCH_PATHS = (
@ -601,7 +601,7 @@
"$(inherited)", "$(inherited)",
"$(PROJECT_DIR)/Flutter", "$(PROJECT_DIR)/Flutter",
); );
MARKETING_VERSION = 4.6.017; MARKETING_VERSION = 4.6.028;
PRODUCT_BUNDLE_IDENTIFIER = "com.HMG.HMG-Smartphone"; PRODUCT_BUNDLE_IDENTIFIER = "com.HMG.HMG-Smartphone";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
@ -735,7 +735,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 4; CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 3A359E86ZF; DEVELOPMENT_TEAM = 3A359E86ZF;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = ( FRAMEWORK_SEARCH_PATHS = (
@ -753,7 +753,7 @@
"$(inherited)", "$(inherited)",
"$(PROJECT_DIR)/Flutter", "$(PROJECT_DIR)/Flutter",
); );
MARKETING_VERSION = 4.6.017; MARKETING_VERSION = 4.6.028;
PRODUCT_BUNDLE_IDENTIFIER = "com.HMG.HMG-Smartphone"; PRODUCT_BUNDLE_IDENTIFIER = "com.HMG.HMG-Smartphone";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
@ -779,7 +779,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 4; CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 3A359E86ZF; DEVELOPMENT_TEAM = 3A359E86ZF;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = ( FRAMEWORK_SEARCH_PATHS = (
@ -797,7 +797,7 @@
"$(inherited)", "$(inherited)",
"$(PROJECT_DIR)/Flutter", "$(PROJECT_DIR)/Flutter",
); );
MARKETING_VERSION = 4.6.017; MARKETING_VERSION = 4.6.028;
PRODUCT_BUNDLE_IDENTIFIER = "com.HMG.HMG-Smartphone"; PRODUCT_BUNDLE_IDENTIFIER = "com.HMG.HMG-Smartphone";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";

@ -1,100 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1510"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Release"
selectedDebuggerIdentifier = ""
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
enableGPUValidationMode = "1"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<CommandLineArguments>
<CommandLineArgument
argument = "-FIRAnalyticsDebugEnabled"
isEnabled = "NO">
</CommandLineArgument>
<CommandLineArgument
argument = "-v"
isEnabled = "NO">
</CommandLineArgument>
</CommandLineArguments>
</LaunchAction>
<ProfileAction
buildConfiguration = "Profile"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

@ -26,7 +26,7 @@ var userNotificationCenterDelegate:UNUserNotificationCenterDelegate? = nil
func initializePlatformChannels(){ func initializePlatformChannels(){
if let mainViewController = window.rootViewController as? MainFlutterVC{ // platform initialization suppose to be in foreground if let mainViewController = window!.rootViewController as? MainFlutterVC{ // platform initialization suppose to be in foreground
flutterViewController = mainViewController flutterViewController = mainViewController
HMGPlatformBridge.initialize(flutterViewController: flutterViewController) HMGPlatformBridge.initialize(flutterViewController: flutterViewController)
OpenTokPlatformBridge.initialize(flutterViewController: flutterViewController, registrar: self.registrar(forPlugin: "open-tok")) OpenTokPlatformBridge.initialize(flutterViewController: flutterViewController, registrar: self.registrar(forPlugin: "open-tok"))

@ -109,7 +109,7 @@
"size" : "83.5x83.5" "size" : "83.5x83.5"
}, },
{ {
"filename" : "icon 1.jpg", "filename" : "icon.jpg",
"idiom" : "ios-marketing", "idiom" : "ios-marketing",
"scale" : "1x", "scale" : "1x",
"size" : "1024x1024" "size" : "1024x1024"

@ -357,7 +357,7 @@ var CAN_PAY_FOR_FOR_WALKIN_APPOINTMENT = 'Services/Doctors.svc/REST/CanPayForWal
var CHANNEL = 3; var CHANNEL = 3;
var GENERAL_ID = 'Cs2020@2016\$2958'; var GENERAL_ID = 'Cs2020@2016\$2958';
var IP_ADDRESS = '10.20.10.20'; var IP_ADDRESS = '10.20.10.20';
var VERSION_ID = 20.5; var VERSION_ID = 20.1;
var SETUP_ID = '91877'; var SETUP_ID = '91877';
var LANGUAGE = 2; var LANGUAGE = 2;
// var PATIENT_OUT_SA = 0; // var PATIENT_OUT_SA = 0;
@ -617,6 +617,7 @@ var SEND_DENTAL_APPOINTMENT_INVOICE_EMAIL = "Services/Notifications.svc/REST/Sen
var GET_TAMARA_PLAN = 'https://mdlaboratories.com/tamaralive/Home/GetInstallments'; 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 GET_TAMARA_PAYMENT_STATUS = 'https://mdlaboratories.com/tamaralive/api/OnlineTamara/order_status?orderid=';
// var GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid=';
var UPDATE_TAMARA_STATUS = 'Services/PayFort_Serv.svc/REST/Tamara_UpdateRequestStatus'; var UPDATE_TAMARA_STATUS = 'Services/PayFort_Serv.svc/REST/Tamara_UpdateRequestStatus';
@ -705,9 +706,14 @@ var GET_OFFER_DETAILS = 'Services/Authentication.svc/REST/GetNDOfferData';
var GET_PRESCRIPTION_INSTRUCTIONS_PDF = 'Services/ChatBot_Service.svc/REST/Chatbot_SendMedicationInstructionByWhatsApp'; var GET_PRESCRIPTION_INSTRUCTIONS_PDF = 'Services/ChatBot_Service.svc/REST/Chatbot_SendMedicationInstructionByWhatsApp';
var SEND_PATIENT_IMMEDIATE_UPDATE_INSURANCE_REQUEST = 'Services/OUTPs.svc/REST/PatientCompanyUpdate';
//PAYFORT //PAYFORT
var getPayFortProjectDetails = "Services/PayFort_Serv.svc/REST/GetPayFortProjectDetails"; var getPayFortProjectDetails = "Services/PayFort_Serv.svc/REST/GetPayFortProjectDetails";
var addPayFortApplePayResponse = "Services/PayFort_Serv.svc/REST/AddResponse"; var addPayFortApplePayResponse = "Services/PayFort_Serv.svc/REST/AddResponse";
var GET_SERVICES_PRICE_LIST = 'Services/OUTPs.svc/REST/GetServicesPriceList';
var payFortEnvironment = FortEnvironment.production; var payFortEnvironment = FortEnvironment.production;
var applePayMerchantId = "merchant.com.hmgwebservices"; var applePayMerchantId = "merchant.com.hmgwebservices";
// var payFortEnvironment = FortEnvironment.test; // var payFortEnvironment = FortEnvironment.test;

@ -1366,7 +1366,7 @@ const Map localizedValues = {
"livecare-option-1": {"en": "Get consultation immediately", "ar": "الحصول على الاستشارة فورا"}, "livecare-option-1": {"en": "Get consultation immediately", "ar": "الحصول على الاستشارة فورا"},
"livecare-option-2": {"en": "Instant video call", "ar": "اتصال فيديو فوري"}, "livecare-option-2": {"en": "Instant video call", "ar": "اتصال فيديو فوري"},
"livecare-option-3": {"en": "Book Appointment", "ar": "حجز موعد"}, "livecare-option-3": {"en": "Book Appointment", "ar": "حجز موعد"},
"livecare-option-4": {"en": "Schedule video call", "ar": "اتصال فيديو مجدول"}, "livecare-option-4": {"en": "Schedule Virtual Appointment", "ar": "جدولة موعد افتراضي"},
"sms_code": {"en": "Enter SMS Code here", "ar": "أدخل رمز التحقق هنا"}, "sms_code": {"en": "Enter SMS Code here", "ar": "أدخل رمز التحقق هنا"},
"code_failure": {"en": "Didnt received the code", "ar": "لم أستلم رمز التحقق"}, "code_failure": {"en": "Didnt received the code", "ar": "لم أستلم رمز التحقق"},
"resend": {"en": "Resend", "ar": "إعادة إرسال"}, "resend": {"en": "Resend", "ar": "إعادة إرسال"},
@ -2846,4 +2846,15 @@ const Map localizedValues = {
"seeAllGraphValues": {"en": "View all results", "ar": "عرض جميع النتائج"}, "seeAllGraphValues": {"en": "View all results", "ar": "عرض جميع النتائج"},
"verify-with-biometric": {"en": "Biometric", "ar": "الحيوية"}, "verify-with-biometric": {"en": "Biometric", "ar": "الحيوية"},
"medicationInstructions": {"en": "Medication Instructions", "ar": "تعليمات الدواء"}, "medicationInstructions": {"en": "Medication Instructions", "ar": "تعليمات الدواء"},
"servicePriceList": {"en": "Services Price List", "ar": "قائمة أسعار الخدمات"},
"servicePriceListDesc": {"en": "Below is the services price list outline the healthcare services fees for cash payments, where the insurance coverage, eligibility, and co-payment deductions will be processed in accordance with the insurance policy terms and the table of benefits of each insurance providers:", "ar": "توضح قائمة أسعار الخدمات أدناه رسوم الخدمات الصحية المقدمة للمرضى بنظام الدفع النقدي. أما فيما يتعلق بالخدمات المشمولة بالتأمين، فسيتم تطبيق التغطية التأمينية والتحقق من الأهلية واحتساب نسب التحمل وفقًا لشروط وثيقة التأمين وجدول المنافع المعتمد لكل شركة تأمين."},
"servicePriceList1": {"en": "Consultant Physician Consultation", "ar": "كشف طبيب استشاري"},
"servicePriceList2": {"en": "Specialist Physician Consultation", "ar": "كشف طبيب أخصائي"},
"servicePriceList3": {"en": "General Physician Consultation", "ar": "كشف طبيب عام"},
"servicePriceList4": {"en": "Dental Consultation", "ar": "كشف طبيب أسنان"},
"servicePriceList5": {"en": "Optometrist Consultation", "ar": "كشف أخصائي بصريات"},
"servicePriceList6": {"en": "Dietician Consultation", "ar": "كشف أخصائي تغذية"},
"servicePriceList7": {"en": "LiveCare Consultation", "ar": "كشف استشارة عن بعد ( لايف كير )"},
"servicePriceListRights": {"en": "The patient has the right to a free follow-up within 14 days of initial visit", "ar": "يحق للمريض الحصول على متابعة مجانية في غضون 14 يومًا من الزيارة الأولى"},
}; };

@ -0,0 +1,54 @@
class ServicesPriceListResponseModel {
int? createdBy;
String? createdOn;
int? editedBy;
String? editedOn;
int? id;
bool? isEnabled;
String? nameAR;
String? nameEN;
num? price;
int? rowID;
ServicesPriceListResponseModel({
this.createdBy,
this.createdOn,
this.editedBy,
this.editedOn,
this.id,
this.isEnabled,
this.nameAR,
this.nameEN,
this.price,
this.rowID,
});
ServicesPriceListResponseModel.fromJson(Map<String, dynamic> json) {
createdBy = json['CreatedBy'];
createdOn = json['CreatedOn'];
editedBy = json['EditedBy'];
editedOn = json['EditedOn'];
id = json['ID'];
isEnabled = json['IsEnabled'];
nameAR = json['NameAR'];
nameEN = json['NameEN'];
price = json['Price'];
rowID = json['RowID'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['CreatedBy'] = createdBy;
data['CreatedOn'] = createdOn;
data['EditedBy'] = editedBy;
data['EditedOn'] = editedOn;
data['ID'] = id;
data['IsEnabled'] = isEnabled;
data['NameAR'] = nameAR;
data['NameEN'] = nameEN;
data['Price'] = price;
data['RowID'] = rowID;
return data;
}
}

@ -1,7 +1,9 @@
import 'dart:async'; import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'dart:developer';
import 'dart:io' show Platform; import 'dart:io' show Platform;
import 'package:flutter/foundation.dart';
import 'package:hmg_patient_app/analytics/google-analytics.dart'; import 'package:hmg_patient_app/analytics/google-analytics.dart';
import 'package:hmg_patient_app/config/config.dart'; import 'package:hmg_patient_app/config/config.dart';
import 'package:hmg_patient_app/config/shared_pref_kay.dart'; import 'package:hmg_patient_app/config/shared_pref_kay.dart';
@ -187,7 +189,7 @@ class BaseAppClient {
// body['IdentificationNo'] = 1023854217; // body['IdentificationNo'] = 1023854217;
// body['MobileNo'] = "531940021"; //0560717232 // body['MobileNo'] = "531940021"; //0560717232
// body['PatientID'] = 4772161; //4609100 // body['PatientID'] = 4773715; //4609100
// body['TokenID'] = "@dm!n"; // body['TokenID'] = "@dm!n";
// Patient ID: 3027574 // Patient ID: 3027574
@ -202,9 +204,11 @@ class BaseAppClient {
// } // }
// if (AppGlobal.isNetworkDebugEnabled) { // if (AppGlobal.isNetworkDebugEnabled) {
debugPrint("URL : $url"); if(!kReleaseMode) {
final jsonBody = json.encode(body); log("URL : $url");
debugPrint(jsonBody); final jsonBody = json.encode(body);
log(jsonBody);
}
// } // }
if (await Utils.checkConnection(bypassConnectionCheck: bypassConnectionCheck)) { if (await Utils.checkConnection(bypassConnectionCheck: bypassConnectionCheck)) {

@ -237,9 +237,12 @@ class LabsService extends BaseService {
_requestSendLabReportEmail.languageID = languageID; _requestSendLabReportEmail.languageID = languageID;
// await baseAppClient.post(SEND_LAB_RESULT_EMAIL, onSuccess: (dynamic response, int statusCode) { // await baseAppClient.post(SEND_LAB_RESULT_EMAIL, onSuccess: (dynamic response, int statusCode) {
await baseAppClient.post(isVidaPlus ? SEND_LAB_RESULT_EMAIL : SEND_LAB_RESULT_EMAIL_NEW, onSuccess: (dynamic response, int statusCode) { // await baseAppClient.post(isVidaPlus ? SEND_LAB_RESULT_EMAIL : SEND_LAB_RESULT_EMAIL_NEW, onSuccess: (dynamic response, int statusCode) {
await baseAppClient.post(SEND_LAB_RESULT_EMAIL_NEW, onSuccess: (dynamic response, int statusCode) {
if (isDownload) { if (isDownload) {
labReportPDF = isVidaPlus ? response['LabReportsPDFContent'] : response['PdfContent']; // labReportPDF = isVidaPlus ? response['LabReportsPDFContent'] : response['PdfContent'];
labReportPDF = response['PdfContent'];
hasError = false;
} }
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
hasError = true; hasError = true;
@ -279,15 +282,12 @@ class LabsService extends BaseService {
return copy; return copy;
} }
Map<String, LabOrderResult> mapFirstItemByPriority( Map<String, LabOrderResult> mapFirstItemByPriority(List<LabOrderResult> sortedResults) {
List<LabOrderResult> sortedResults) {
final Map<String, LabOrderResult> priorityMap = {}; final Map<String, LabOrderResult> priorityMap = {};
const priorityOrder = ['LCL', 'CL', 'L', 'N', 'H', 'CH', 'HCH']; const priorityOrder = ['LCL', 'CL', 'L', 'N', 'H', 'CH', 'HCH'];
for (final result in sortedResults) { for (final result in sortedResults) {
final priority = result.calculatedResultFlag?.trim(); final priority = result.calculatedResultFlag?.trim();
if (priority != null && if (priority != null && priorityOrder.contains(priority) && !priorityMap.containsKey(priority)) {
priorityOrder.contains(priority) &&
!priorityMap.containsKey(priority)) {
priorityMap[priority] = result; priorityMap[priority] = result;
} }
@ -307,8 +307,7 @@ class LabsService extends BaseService {
print("the match iss not null"); print("the match iss not null");
final millis = int.tryParse(match.group(1)!); final millis = int.tryParse(match.group(1)!);
if (millis != null) { if (millis != null) {
print( print("the data and time is ${DateTime.fromMillisecondsSinceEpoch(millis)}");
"the data and time is ${DateTime.fromMillisecondsSinceEpoch(millis)}");
return DateTime.fromMillisecondsSinceEpoch(millis); return DateTime.fromMillisecondsSinceEpoch(millis);
} }
} }
@ -335,14 +334,9 @@ class LabsService extends BaseService {
return mapResultToThreshold(topResults, mapOfPriority); return mapResultToThreshold(topResults, mapOfPriority);
} }
List<ThresholdRange> mapResultToThreshold( List<ThresholdRange> mapResultToThreshold(List<LabOrderResult> results, Map<String, LabOrderResult> mapOfPriority) {
List<LabOrderResult> results, Map<String, LabOrderResult> mapOfPriority) {
// Extract valid numeric results // Extract valid numeric results
List<double> actualValues = results List<double> actualValues = results.map((e) => double.tryParse(e.resultValue ?? '')).where((v) => v != null).cast<double>().toList();
.map((e) => double.tryParse(e.resultValue ?? ''))
.where((v) => v != null)
.cast<double>()
.toList();
if (actualValues.isEmpty) return []; if (actualValues.isEmpty) return [];
@ -376,14 +370,10 @@ class LabsService extends BaseService {
var mapOfValues = inferThresholds(mapOfPriority); var mapOfValues = inferThresholds(mapOfPriority);
var item = results.first; var item = results.first;
String? realCriticalLow = String? realCriticalLow = (item.criticalLow == "0") ? null : item.criticalLow;
(item.criticalLow == "0") ? null : item.criticalLow; String? realReferenceHigh = (item.referenceHigh == "0") ? null : item.referenceHigh;
String? realReferenceHigh = String? realCriticalHigh = (item.criticalHigh == "0") ? null : item.criticalHigh;
(item.referenceHigh == "0") ? null : item.referenceHigh; String? realReferenceLow = (item.referenceLow == "0") ? null : item.referenceLow;
String? realCriticalHigh =
(item.criticalHigh == "0") ? null : item.criticalHigh;
String? realReferenceLow =
(item.referenceLow == "0") ? null : item.referenceLow;
final adjustedValues = adjustValues( final adjustedValues = adjustValues(
criticalLow: mapOfValues['criticalLow'], criticalLow: mapOfValues['criticalLow'],
low: mapOfValues['low'], low: mapOfValues['low'],
@ -393,53 +383,26 @@ class LabsService extends BaseService {
); );
return [ return [
ThresholdRange( ThresholdRange(label: 'Critical Low', value: adjustedValues["criticalLow"]!, color: Color(0xffffffff), lineColor: Color(0xFFe9a2a4), actualValue: realCriticalLow),
label: 'Critical Low', ThresholdRange(label: 'Low', value: adjustedValues['low']!, color: Color(0xFFf2fbf5), lineColor: Color(0xFFefc481), actualValue: realReferenceLow),
value: adjustedValues["criticalLow"]!, ThresholdRange(label: 'Normal', value: adjustedValues['normal']!, color: Color(0xFFf2fbf5), lineColor: Color(0xFF5dc36b)),
color: Color(0xffffffff), ThresholdRange(label: 'High', value: adjustedValues['high']!, color: Color(0xffffffff), lineColor: Color(0xFFefc481), actualValue: realReferenceHigh),
lineColor: Color(0xFFe9a2a4), ThresholdRange(label: 'Critical High', value: adjustedValues['criticalHigh']!, color: Color(0xffffffff), lineColor: Color(0xFFe9a2a4), actualValue: realCriticalHigh),
actualValue: realCriticalLow),
ThresholdRange(
label: 'Low',
value: adjustedValues['low']!,
color: Color(0xFFf2fbf5),
lineColor: Color(0xFFefc481),
actualValue: realReferenceLow),
ThresholdRange(
label: 'Normal',
value: adjustedValues['normal']!,
color: Color(0xFFf2fbf5),
lineColor: Color(0xFF5dc36b)),
ThresholdRange(
label: 'High',
value: adjustedValues['high']!,
color: Color(0xffffffff),
lineColor: Color(0xFFefc481),
actualValue: realReferenceHigh),
ThresholdRange(
label: 'Critical High',
value: adjustedValues['criticalHigh']!,
color: Color(0xffffffff),
lineColor: Color(0xFFe9a2a4),
actualValue: realCriticalHigh),
]; ];
} }
Map<String, double> inferThresholds( Map<String, double> inferThresholds(Map<String, LabOrderResult> mapOfPriority) {
Map<String, LabOrderResult> mapOfPriority) {
double? parse(String? v) { double? parse(String? v) {
final parsed = double.tryParse(v ?? ''); final parsed = double.tryParse(v ?? '');
return (parsed == null || parsed < 0) ? null : parsed; return (parsed == null || parsed < 0) ? null : parsed;
} }
// Parse inputs // Parse inputs
double? criticalLow = parse( double? criticalLow = parse(mapOfPriority['LCL']?.resultValue ?? mapOfPriority['CL']?.resultValue);
mapOfPriority['LCL']?.resultValue ?? mapOfPriority['CL']?.resultValue);
double? low = parse(mapOfPriority['L']?.resultValue); double? low = parse(mapOfPriority['L']?.resultValue);
double? normal = parse(mapOfPriority['N']?.resultValue); double? normal = parse(mapOfPriority['N']?.resultValue);
double? high = parse(mapOfPriority['H']?.resultValue); double? high = parse(mapOfPriority['H']?.resultValue);
double? criticalHigh = parse( double? criticalHigh = parse(mapOfPriority['CH']?.resultValue ?? mapOfPriority['HCH']?.resultValue);
mapOfPriority['CH']?.resultValue ?? mapOfPriority['HCH']?.resultValue);
const step = 5.0; const step = 5.0;
List<double?> values = [criticalLow, low, normal, high, criticalHigh]; List<double?> values = [criticalLow, low, normal, high, criticalHigh];
@ -453,11 +416,11 @@ class LabsService extends BaseService {
return v < 0 ? 0 : v; return v < 0 ? 0 : v;
}); });
var mapresult = { var mapresult = {
'criticalLow': values[0]??-1, 'criticalLow': values[0] ?? -1,
'low': values[1]??-1, 'low': values[1] ?? -1,
'normal': values[2]??-1, 'normal': values[2] ?? -1,
'high': values[3]??-1, 'high': values[3] ?? -1,
'criticalHigh': values[4]??-1, 'criticalHigh': values[4] ?? -1,
}; };
print("the result is $mapresult"); print("the result is $mapresult");
@ -480,20 +443,23 @@ class LabsService extends BaseService {
if (criticalLow == null || criticalLow == -1) criticalLowHasValue = false; if (criticalLow == null || criticalLow == -1) criticalLowHasValue = false;
if (low == null || low == -1) lowHasValue = false; if (low == null || low == -1) lowHasValue = false;
if (normal == null ||normal ==-1) normaHasValue = false; if (normal == null || normal == -1) normaHasValue = false;
if (high == null ||high ==-1) highHasValue = false; if (high == null || high == -1) highHasValue = false;
if (criticalHigh == null ||criticalHigh ==-1) criticalHighHasValue = false; if (criticalHigh == null || criticalHigh == -1) criticalHighHasValue = false;
print("the values arre $criticalLowHasValue $lowHasValue $normaHasValue $highHasValue $criticalHighHasValue"); print("the values arre $criticalLowHasValue $lowHasValue $normaHasValue $highHasValue $criticalHighHasValue");
if (!criticalLowHasValue) { if (!criticalLowHasValue) {
criticalLow = 0; criticalLow = 0;
if (lowHasValue) { if (lowHasValue) {
low = low! - step; low = low! - step;
} if (normaHasValue && (criticalLow!= 0 || criticalLow != -1)) { }
if (normaHasValue && (criticalLow != 0 || criticalLow != -1)) {
low = normal! - step * 2; low = normal! - step * 2;
} if (highHasValue && (criticalLow!= 0 || criticalLow != -1)) { }
if (highHasValue && (criticalLow != 0 || criticalLow != -1)) {
low = high! - step * 3; low = high! - step * 3;
} if (criticalHighHasValue && (criticalLow!= 0 || criticalLow != -1)) { }
if (criticalHighHasValue && (criticalLow != 0 || criticalLow != -1)) {
low = criticalHigh! - step * 4; low = criticalHigh! - step * 4;
} }
} }
@ -503,25 +469,30 @@ class LabsService extends BaseService {
if (criticalLowHasValue && (low != 0 || low != -1)) { if (criticalLowHasValue && (low != 0 || low != -1)) {
low = criticalLow! + step; low = criticalLow! + step;
} if (normaHasValue && (low != 0 || low != -1)) { }
if (normaHasValue && (low != 0 || low != -1)) {
low = normal! - step; low = normal! - step;
} if (highHasValue && (low != 0 || low != -1)) { }
if (highHasValue && (low != 0 || low != -1)) {
low = high! - step * 2; low = high! - step * 2;
} if (criticalHighHasValue && (low != 0 || low != -1)) { }
if (criticalHighHasValue && (low != 0 || low != -1)) {
low = criticalHigh! - step * 3; low = criticalHigh! - step * 3;
} }
} }
if (!normaHasValue) { if (!normaHasValue) {
normal = 0; normal = 0;
if (criticalLowHasValue && (normal != 0 || normal != -1)) { if (criticalLowHasValue && (normal != 0 || normal != -1)) {
normal = criticalLow! + step * 2; normal = criticalLow! + step * 2;
} if (lowHasValue) { }
if (lowHasValue) {
normal = low! + step; normal = low! + step;
} if (highHasValue) { }
if (highHasValue) {
normal = high! - step; normal = high! - step;
} if (criticalHighHasValue) { }
if (criticalHighHasValue) {
normal = criticalHigh! - step * 2; normal = criticalHigh! - step * 2;
} }
} }
@ -530,59 +501,62 @@ class LabsService extends BaseService {
if (criticalLowHasValue) { if (criticalLowHasValue) {
high = criticalLow! + step * 3; high = criticalLow! + step * 3;
} if (lowHasValue) { }
if (lowHasValue) {
high = low! + step * 2; high = low! + step * 2;
} if (normaHasValue) { }
if (normaHasValue) {
high = normal! + step; high = normal! + step;
} if (criticalHighHasValue) { }
if (criticalHighHasValue) {
high = criticalHigh! - step; high = criticalHigh! - step;
} }
} }
if (!criticalHighHasValue) { if (!criticalHighHasValue) {
criticalHigh = 0; criticalHigh = 0;
if (criticalLowHasValue) { if (criticalLowHasValue) {
criticalHigh = criticalLow! + step * 4; criticalHigh = criticalLow! + step * 4;
} if (lowHasValue) { }
if (lowHasValue) {
criticalHigh = low! + step * 3; criticalHigh = low! + step * 3;
} if (normaHasValue) { }
if (normaHasValue) {
criticalHigh = normal! + step * 2; criticalHigh = normal! + step * 2;
} if (highHasValue) { }
if (highHasValue) {
criticalHigh = high! + step; criticalHigh = high! + step;
} }
} }
if(((criticalLow??0)<0) == true){ if (((criticalLow ?? 0) < 0) == true) {
var mod = ((low ?? 0) + (normal??0) )/2; var mod = ((low ?? 0) + (normal ?? 0)) / 2;
criticalLow = mod; criticalLow = mod;
} }
if(((low??0)<0) == true){ if (((low ?? 0) < 0) == true) {
var mod = ((criticalLow ?? 0) + (normal??0) )/2; var mod = ((criticalLow ?? 0) + (normal ?? 0)) / 2;
low = mod; low = mod;
} }
if(((normal??0)<0) == true){ if (((normal ?? 0) < 0) == true) {
var mod = ((low ?? 0) + (high??0) )/2; var mod = ((low ?? 0) + (high ?? 0)) / 2;
normal = mod; normal = mod;
} }
if(((high??0)<0) == true){ if (((high ?? 0) < 0) == true) {
var mod = ((normal ?? 0) + (criticalHigh??0) )/2; var mod = ((normal ?? 0) + (criticalHigh ?? 0)) / 2;
high = mod; high = mod;
} }
if(((criticalHigh??0)<0) == true){ if (((criticalHigh ?? 0) < 0) == true) {
criticalHigh = (high??0)+step; criticalHigh = (high ?? 0) + step;
} }
Map<String, double?> values = { Map<String, double?> values = {
'criticalLow':criticalLow , 'criticalLow': criticalLow,
'low': low, 'low': low,
'normal': normal , 'normal': normal,
'high': high , 'high': high,
'criticalHigh': criticalHigh, 'criticalHigh': criticalHigh,
}; };
print("thee adjusted values `are $values"); print("thee adjusted values `are $values");
@ -628,9 +602,7 @@ class LabsService extends BaseService {
const priorityOrder = ['LCL', 'CL', 'L', 'N', 'H', 'CH', 'HCH']; const priorityOrder = ['LCL', 'CL', 'L', 'N', 'H', 'CH', 'HCH'];
// Sort results by priority order // Sort results by priority order
results.sort((a, b) => priorityOrder results.sort((a, b) => priorityOrder.indexOf(a.calculatedResultFlag ?? '').compareTo(priorityOrder.indexOf(b.calculatedResultFlag ?? '')));
.indexOf(a.calculatedResultFlag ?? '')
.compareTo(priorityOrder.indexOf(b.calculatedResultFlag ?? '')));
// Extract values // Extract values
List<double?> values = results.map((r) { List<double?> values = results.map((r) {
@ -716,54 +688,15 @@ class LabsService extends BaseService {
return transformedValue; return transformedValue;
} }
List<ThresholdRange> getThresholdValue() { List<ThresholdRange> getThresholdValue() {
return [ return [
ThresholdRange( ThresholdRange(label: 'LCL', value: 0, color: Color(0xffffffff), lineColor: Color(0xFFe9a2a4)),
label: 'LCL', ThresholdRange(label: 'CL', value: 0, color: Color(0xffffffff), lineColor: Color(0xFFe9a2a4)),
value: 0, ThresholdRange(label: 'L', value: 20, color: Color(0xFFf2fbf5), lineColor: Color(0xFFeecd94)),
color: Color(0xffffffff), ThresholdRange(label: 'N', value: 40, color: Color(0xFFf2fbf5), lineColor: Color(0xFF5dc36b)),
lineColor: Color(0xFFe9a2a4)), ThresholdRange( ThresholdRange(label: 'H', value: 60, color: Color(0xffffffff), lineColor: Color(0xFFeecd94)),
label: 'CL', ThresholdRange(label: 'CH', value: 80, color: Color(0xffffffff), lineColor: Color(0xFFe9a2a4)),
value: 0, ThresholdRange(label: 'HCH', value: 80, color: Color(0xffffffff), lineColor: Color(0xFFe9a2a4)),
color: Color(0xffffffff),
lineColor: Color(0xFFe9a2a4)),
ThresholdRange(
label: 'L',
value: 20,
color: Color(0xFFf2fbf5),
lineColor: Color(0xFFeecd94)),
ThresholdRange(
label: 'N',
value: 40,
color: Color(0xFFf2fbf5),
lineColor: Color(0xFF5dc36b)),
ThresholdRange(
label: 'H',
value: 60,
color: Color(0xffffffff),
lineColor: Color(0xFFeecd94)),
ThresholdRange(
label: 'CH',
value: 80,
color: Color(0xffffffff),
lineColor: Color(0xFFe9a2a4)), ThresholdRange(
label: 'HCH',
value: 80,
color: Color(0xffffffff),
lineColor: Color(0xFFe9a2a4)),
]; ];
} }
} }

@ -3,6 +3,7 @@ import 'package:hmg_patient_app/core/model/privilege/HMCProjectListModel.dart';
import 'package:hmg_patient_app/core/model/privilege/PrivilegeModel.dart'; import 'package:hmg_patient_app/core/model/privilege/PrivilegeModel.dart';
import 'package:hmg_patient_app/core/model/privilege/ProjectDetailListModel.dart'; import 'package:hmg_patient_app/core/model/privilege/ProjectDetailListModel.dart';
import 'package:hmg_patient_app/core/model/privilege/VidaPlusProjectListModel.dart'; import 'package:hmg_patient_app/core/model/privilege/VidaPlusProjectListModel.dart';
import 'package:hmg_patient_app/core/model/services_price_list_response_model.dart';
import 'package:hmg_patient_app/core/service/base_service.dart'; import 'package:hmg_patient_app/core/service/base_service.dart';
import 'package:hmg_patient_app/main.dart'; import 'package:hmg_patient_app/main.dart';
@ -12,6 +13,8 @@ class PrivilegeService extends BaseService {
List<HMCProjectListModel> hMCProjectListModel = []; List<HMCProjectListModel> hMCProjectListModel = [];
List<ProjectDetailListModel> projectDetailListModel = []; List<ProjectDetailListModel> projectDetailListModel = [];
List<ServicesPriceListResponseModel> servicesPriceList = [];
dynamic hisOffersList; dynamic hisOffersList;
Future<Map> offerDetailsAPICall() async { Future<Map> offerDetailsAPICall() async {
@ -28,6 +31,25 @@ class PrivilegeService extends BaseService {
return Future.value(localRes); return Future.value(localRes);
} }
Future getServicesPriceList({
String searchKey = "",
int pageIndex = 0,
int pageSize = 0,
}) async {
Map<String, dynamic> request = {"ID": 1, "SearchKey": searchKey, "PageIndex": pageIndex, "PageSize": pageSize, "RowCount": 0, "TokenID": "@dm!n"};
dynamic localRes;
await baseAppClient.post(GET_SERVICES_PRICE_LIST, onSuccess: (response, statusCode) async {
response['getServicesPriceList'].forEach((item) {
servicesPriceList.add(ServicesPriceListResponseModel.fromJson(item));
});
servicesPriceList.removeWhere((element) => element.isEnabled == false);
}, onFailure: (String error, int statusCode) {
localRes = {"error": error};
// throw error;
}, body: request);
}
Future getPrivilege() async { Future getPrivilege() async {
Map<String, dynamic> body = Map(); Map<String, dynamic> body = Map();
body['PatientType'] = 4; body['PatientType'] = 4;

@ -61,7 +61,7 @@ class LabsViewModel extends BaseViewModel {
List<PatientLabOrdersList> patientLabOrdersHospital = _patientLabOrdersListHospital List<PatientLabOrdersList> patientLabOrdersHospital = _patientLabOrdersListHospital
.where( .where(
(elementClinic) => elementClinic.filterName == element.projectName, (elementClinic) => elementClinic.filterName == element.projectName,
) )
.toList(); .toList();
if (patientLabOrdersHospital.length != 0) { if (patientLabOrdersHospital.length != 0) {
@ -120,7 +120,13 @@ class LabsViewModel extends BaseViewModel {
if (patientLabOrdersClinic.length != 0) { if (patientLabOrdersClinic.length != 0) {
labResultLists[labResultLists.indexOf(patientLabOrdersClinic[0])].patientLabResultList!.add(element); labResultLists[labResultLists.indexOf(patientLabOrdersClinic[0])].patientLabResultList!.add(element);
} else { } else {
labResultLists.add(LabResultList(filterName: element.testCode, description: element.packageShortDescription, lab: element)); // labResultLists.add(LabResultList(filterName: element.testCode, description: element.packageShortDescription, lab: element));
labResultLists.add(
LabResultList(
filterName: element.testCode,
description: ((element.testShortDescription != null && element.testShortDescription!.isNotEmpty) ? element.testShortDescription : element.packageShortDescription),
lab: element),
);
} }
}); });
setState(ViewState.Idle); setState(ViewState.Idle);
@ -208,7 +214,13 @@ class LabsViewModel extends BaseViewModel {
maxYForThreeDots = double.parse(element.resultValue!); maxYForThreeDots = double.parse(element.resultValue!);
} }
// threePointGraphValue.add(DataPoint( labelValue: counter,value : _labsService.transformValueInRange(double.parse(element.resultValue!), element.calculatedResultFlag??""), label: "${months[dateTime.month-1]} ${dateTime.year}", date: dateTime)); // threePointGraphValue.add(DataPoint( labelValue: counter,value : _labsService.transformValueInRange(double.parse(element.resultValue!), element.calculatedResultFlag??""), label: "${months[dateTime.month-1]} ${dateTime.year}", date: dateTime));
threePointGraphValue.add(DataPoint( labelValue: counter,value : double.parse(element.resultValue!), actualValue: element.resultValue!,label: formatDateAsMMYY(dateTime), date: dateTime, referenceRangeValue:element.calculatedResultFlag ??"IRR")); threePointGraphValue.add(DataPoint(
labelValue: counter,
value: double.parse(element.resultValue!),
actualValue: element.resultValue!,
label: formatDateAsMMYY(dateTime),
date: dateTime,
referenceRangeValue: element.calculatedResultFlag ?? "IRR"));
counter++; counter++;
} catch (e) {} } catch (e) {}
}); });
@ -226,15 +238,21 @@ class LabsViewModel extends BaseViewModel {
completeeGraphValues.clear(); completeeGraphValues.clear();
setState(ViewState.Busy); setState(ViewState.Busy);
double counter = 1; double counter = 1;
threshold = _labsService.getThresholdValue(); threshold = _labsService.getThresholdValue();
_labsService.labOrdersResultsList.reversed.forEach((element) { _labsService.labOrdersResultsList.reversed.forEach((element) {
try { try {
var dateTime = DateUtil.convertStringToDate(element.verifiedOnDateTime!); var dateTime = DateUtil.convertStringToDate(element.verifiedOnDateTime!);
if(double.parse(element.resultValue!)> maxYForCompleteGraph){ if (double.parse(element.resultValue!) > maxYForCompleteGraph) {
maxYForCompleteGraph = double.parse(element.resultValue!); maxYForCompleteGraph = double.parse(element.resultValue!);
} }
// completeeGraphValues.add(DataPoint( labelValue: counter,value : _labsService.transformValueInRange(double.parse(element.resultValue!), element.calculatedResultFlag??""), label: "${months[dateTime.month-1]} ${dateTime.year}", date: dateTime)); // completeeGraphValues.add(DataPoint( labelValue: counter,value : _labsService.transformValueInRange(double.parse(element.resultValue!), element.calculatedResultFlag??""), label: "${months[dateTime.month-1]} ${dateTime.year}", date: dateTime));
completeeGraphValues.add(DataPoint( labelValue: counter,value : double.parse(element.resultValue!), label: formatDateAsMMYY(dateTime), date: dateTime,actualValue: element.resultValue!, referenceRangeValue:element.calculatedResultFlag??"IRR" )); completeeGraphValues.add(DataPoint(
labelValue: counter,
value: double.parse(element.resultValue!),
label: formatDateAsMMYY(dateTime),
date: dateTime,
actualValue: element.resultValue!,
referenceRangeValue: element.calculatedResultFlag ?? "IRR"));
} catch (e) { } catch (e) {
print("the mapping is having exception $e"); print("the mapping is having exception $e");
} }
@ -251,6 +269,7 @@ class LabsViewModel extends BaseViewModel {
String year = date.year.toString().substring(2); String year = date.year.toString().substring(2);
return '$month/$year'; return '$month/$year';
} }
sendLabReportEmail({PatientLabOrders? patientLabOrder, String? mes, AuthenticatedUser? userObj, required bool isVidaPlus, bool isDownload = false}) async { sendLabReportEmail({PatientLabOrders? patientLabOrder, String? mes, AuthenticatedUser? userObj, required bool isVidaPlus, bool isDownload = false}) async {
setState(ViewState.Busy); setState(ViewState.Busy);

@ -303,7 +303,7 @@ class _BookConfirmState extends State<BookConfirm> {
confirmMessage: errorMsg, confirmMessage: errorMsg,
okText: TranslationBase.of(context).updateInsuranceText, okText: TranslationBase.of(context).updateInsuranceText,
cancelText: TranslationBase.of(context).continueCash, cancelText: TranslationBase.of(context).continueCash,
okFunction: () => {openUpdateInsurance()}, okFunction: () => {openUpdateInsuranceForWalkIn()},
cancelFunction: () => {continueAsCashForWalkIn(widget.doctor.projectID!)}); cancelFunction: () => {continueAsCashForWalkIn(widget.doctor.projectID!)});
dialog.showAlertDialog(context); dialog.showAlertDialog(context);
} }
@ -717,7 +717,7 @@ class _BookConfirmState extends State<BookConfirm> {
confirmMessage: res['ErrorEndUserMessage'], confirmMessage: res['ErrorEndUserMessage'],
okText: "Update insurance", okText: "Update insurance",
cancelText: "Continue as cash", cancelText: "Continue as cash",
okFunction: () => {openUpdateInsurance()}, okFunction: () => {openUpdateInsurance(docObject, appointmentNo, false)},
cancelFunction: () => {continueAsCash(docObject, appointmentNo, false)}); cancelFunction: () => {continueAsCash(docObject, appointmentNo, false)});
dialog.showAlertDialog(context); dialog.showAlertDialog(context);
} }
@ -727,9 +727,28 @@ class _BookConfirmState extends State<BookConfirm> {
}); });
} }
void openUpdateInsurance() { void openUpdateInsurance(DoctorList docObject, String appointmentNo, bool isLiveCareAppointment) {
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LandingPage()), (Route<dynamic> r) => false); DoctorsListService service = new DoctorsListService();
Navigator.push(context, FadePage(page: InsuranceUpdate())); GifLoaderDialogUtils.showMyDialog(context);
service.sendPatientUpdateRequest().then((res) {
GifLoaderDialogUtils.hideDialog(context);
if (res["MessageStatus"] == 1) {
if (isLiveCareAppointment) {
getLiveCareAppointmentPatientShare(context, appointmentNo, docObject!.clinicID!, docObject.projectID!, docObject);
} else {
getPatientShare(context, appointmentNo, docObject.clinicID!, docObject.projectID!, docObject);
}
getToDoCount();
} else {
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LandingPage()), (Route<dynamic> r) => false);
Navigator.push(context, FadePage(page: InsuranceUpdate()));
}
}).catchError((err) {
GifLoaderDialogUtils.hideDialog(context);
print(err);
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LandingPage()), (Route<dynamic> r) => false);
Navigator.push(context, FadePage(page: InsuranceUpdate()));
});
} }
void continueAsCash(DoctorList docObject, String appointmentNo, bool isLiveCareAppointment) { void continueAsCash(DoctorList docObject, String appointmentNo, bool isLiveCareAppointment) {
@ -753,6 +772,29 @@ class _BookConfirmState extends State<BookConfirm> {
}); });
} }
void openUpdateInsuranceForWalkIn() {
DoctorsListService service = new DoctorsListService();
GifLoaderDialogUtils.showMyDialog(context);
service.sendPatientUpdateRequest().then((res) {
GifLoaderDialogUtils.hideDialog(context);
if (res["MessageStatus"] == 1) {
if (res["MessageStatus"] == 1) {
getWalkinAppointmentPatientShare();
} else {
AppToast.showErrorToast(message: res["ErrorEndUserMessage"]);
}
} else {
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LandingPage()), (Route<dynamic> r) => false);
Navigator.push(context, FadePage(page: InsuranceUpdate()));
}
}).catchError((err) {
GifLoaderDialogUtils.hideDialog(context);
print(err);
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LandingPage()), (Route<dynamic> r) => false);
Navigator.push(context, FadePage(page: InsuranceUpdate()));
});
}
void continueAsCashForWalkIn(int projectID) { void continueAsCashForWalkIn(int projectID) {
GifLoaderDialogUtils.showMyDialog(context); GifLoaderDialogUtils.showMyDialog(context);
widget.service.convertPatientToCash(projectID).then((res) { widget.service.convertPatientToCash(projectID).then((res) {
@ -893,6 +935,7 @@ class _BookConfirmState extends State<BookConfirm> {
insertAppointment(context, widget.doctor, widget.initialSlotDuration); insertAppointment(context, widget.doctor, widget.initialSlotDuration);
} }
}).onError((error, stackTrace) { }).onError((error, stackTrace) {
GifLoaderDialogUtils.hideDialog(context);
insertAppointment(context, widget.doctor, widget.initialSlotDuration); insertAppointment(context, widget.doctor, widget.initialSlotDuration);
}); });
} }
@ -913,6 +956,7 @@ class _BookConfirmState extends State<BookConfirm> {
Future.delayed(Duration(milliseconds: 500), () { Future.delayed(Duration(milliseconds: 500), () {
// checkPatientNphiesEligibility(docObject, res['AppointmentNo'], context); // checkPatientNphiesEligibility(docObject, res['AppointmentNo'], context);
GifLoaderDialogUtils.hideDialog(context);
getToDoCount(); getToDoCount();
getPatientShare(context, res['AppointmentNo'], docObject.clinicID!, docObject.projectID!, docObject); getPatientShare(context, res['AppointmentNo'], docObject.clinicID!, docObject.projectID!, docObject);
}); });
@ -1025,6 +1069,7 @@ class _BookConfirmState extends State<BookConfirm> {
String errorMsg = ""; String errorMsg = "";
GifLoaderDialogUtils.showMyDialog(context, barrierDismissible: false); GifLoaderDialogUtils.showMyDialog(context, barrierDismissible: false);
widget.service.getPatientShare(appointmentNo, clinicID, projectID, languageID, context).then((res) { widget.service.getPatientShare(appointmentNo, clinicID, projectID, languageID, context).then((res) {
GifLoaderDialogUtils.hideDialog(context);
projectViewModel.selectedBodyPartList.clear(); projectViewModel.selectedBodyPartList.clear();
projectViewModel.laserSelectionDuration = 0; projectViewModel.laserSelectionDuration = 0;
if (res['OnlineCheckInAppointments'].length != 0) { if (res['OnlineCheckInAppointments'].length != 0) {
@ -1052,8 +1097,8 @@ class _BookConfirmState extends State<BookConfirm> {
confirmMessage: errorMsg, confirmMessage: errorMsg,
okText: TranslationBase.of(context).updateInsuranceText, okText: TranslationBase.of(context).updateInsuranceText,
cancelText: TranslationBase.of(context).continueCash, cancelText: TranslationBase.of(context).continueCash,
okFunction: () => {openUpdateInsurance()}, okFunction: () => {Navigator.pop(context), openUpdateInsurance(docObject, appointmentNo, widget.patientShareResponse.isLiveCareAppointment!)},
cancelFunction: () => {continueAsCash(docObject, appointmentNo, false)}); cancelFunction: () => {Navigator.pop(context), continueAsCash(docObject, appointmentNo, widget.patientShareResponse.isLiveCareAppointment!)});
dialog.showAlertDialog(context); dialog.showAlertDialog(context);
} }
} }
@ -1095,7 +1140,7 @@ class _BookConfirmState extends State<BookConfirm> {
confirmMessage: errorMsg, confirmMessage: errorMsg,
okText: TranslationBase.of(context).updateInsuranceText, okText: TranslationBase.of(context).updateInsuranceText,
cancelText: TranslationBase.of(context).continueCash, cancelText: TranslationBase.of(context).continueCash,
okFunction: () => {openUpdateInsurance()}, okFunction: () => {openUpdateInsurance(docObject, appointmentNo, true)},
cancelFunction: () => {continueAsCash(docObject, appointmentNo, true)}); cancelFunction: () => {continueAsCash(docObject, appointmentNo, true)});
dialog.showAlertDialog(context); dialog.showAlertDialog(context);
} }

@ -74,7 +74,7 @@ class _QRCodeState extends State<QRCode> {
Future.delayed(const Duration(milliseconds: 500), () { Future.delayed(const Duration(milliseconds: 500), () {
showNfcReader(context, onNcfScan: (String nfcId) { showNfcReader(context, onNcfScan: (String nfcId) {
Future.delayed(const Duration(milliseconds: 100), () { Future.delayed(const Duration(milliseconds: 100), () {
sendNfcCheckInRequest(nfcId, 2); sendNfcCheckInRequest(nfcId, 1);
locator<GAnalytics>().todoList.to_do_list_nfc(widget.appointment!); locator<GAnalytics>().todoList.to_do_list_nfc(widget.appointment!);
}); });
}, onCancel: () { }, onCancel: () {
@ -100,7 +100,7 @@ class _QRCodeState extends State<QRCode> {
double dist = Utils.distance(value.latitude, value.longitude, double.parse(projectDetailListModel.latitude!), double.parse(projectDetailListModel.longitude!)).ceilToDouble() * 1000; double dist = Utils.distance(value.latitude, value.longitude, double.parse(projectDetailListModel.latitude!), double.parse(projectDetailListModel.longitude!)).ceilToDouble() * 1000;
print(dist); print(dist);
if (dist <= projectDetailListModel.geofenceRadius!) { if (dist <= projectDetailListModel.geofenceRadius!) {
sendNfcCheckInRequest(projectDetailListModel.checkInQrCode!, 2); sendNfcCheckInRequest(projectDetailListModel.checkInQrCode!, 3);
} else { } else {
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(message: TranslationBase.of(context).locationCheckInError); AppToast.showErrorToast(message: TranslationBase.of(context).locationCheckInError);
@ -162,7 +162,7 @@ class _QRCodeState extends State<QRCode> {
onTap: () { onTap: () {
showNfcReader(context, onNcfScan: (String nfcId) { showNfcReader(context, onNcfScan: (String nfcId) {
Future.delayed(const Duration(milliseconds: 100), () { Future.delayed(const Duration(milliseconds: 100), () {
sendNfcCheckInRequest(nfcId, 2); sendNfcCheckInRequest(nfcId, 1);
locator<GAnalytics>().todoList.to_do_list_nfc(widget.appointment!); locator<GAnalytics>().todoList.to_do_list_nfc(widget.appointment!);
}); });

@ -25,6 +25,7 @@ import 'package:hmg_patient_app/uitl/location_util.dart';
import 'package:hmg_patient_app/uitl/translations_delegate_base.dart'; import 'package:hmg_patient_app/uitl/translations_delegate_base.dart';
import 'package:hmg_patient_app/uitl/utils_new.dart'; import 'package:hmg_patient_app/uitl/utils_new.dart';
import 'package:hmg_patient_app/widgets/card/rounded_container.dart'; import 'package:hmg_patient_app/widgets/card/rounded_container.dart';
import 'package:hmg_patient_app/widgets/dialogs/alert_dialog.dart';
import 'package:hmg_patient_app/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -696,7 +697,17 @@ class _SearchByClinicState extends State<SearchByClinic> {
}).catchError((err) { }).catchError((err) {
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
print(err); print(err);
AppToast.showErrorToast(message: err, localContext: context); if(clinicID == 23) {
AlertDialogBox(
context: context,
confirmMessage: err.toString(),
okText: TranslationBase.of(context).ok,
okFunction: () {
AlertDialogBox.closeAlertDialog(context);
}).showAlertDialog(context);
} else {
AppToast.showErrorToast(message: err, localContext: context);
}
}); });
} }

@ -134,7 +134,7 @@ class RRTRequestPickupAddressPageState extends State<RRTRequestPickupAddressPage
return BaseView<RRTViewModel>( return BaseView<RRTViewModel>(
onModelReady: (vm) { onModelReady: (vm) {
viewModel = vm; viewModel = vm;
loadAddresses(); // loadAddresses();
myAddresses = viewModel.addressesList; myAddresses = viewModel.addressesList;
}, },
builder: (ctx, vm, widget) => AppScaffold( builder: (ctx, vm, widget) => AppScaffold(

@ -6,6 +6,7 @@ import 'package:hmg_patient_app/config/shared_pref_kay.dart';
import 'package:hmg_patient_app/core/enum/PayfortEnums.dart'; import 'package:hmg_patient_app/core/enum/PayfortEnums.dart';
import 'package:hmg_patient_app/core/model/ImagesInfo.dart'; import 'package:hmg_patient_app/core/model/ImagesInfo.dart';
import 'package:hmg_patient_app/core/viewModels/project_view_model.dart'; import 'package:hmg_patient_app/core/viewModels/project_view_model.dart';
import 'package:hmg_patient_app/locator.dart';
import 'package:hmg_patient_app/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:hmg_patient_app/models/Appointments/AppoimentAllHistoryResultList.dart';
import 'package:hmg_patient_app/models/Appointments/DoctorListResponse.dart'; import 'package:hmg_patient_app/models/Appointments/DoctorListResponse.dart';
import 'package:hmg_patient_app/models/Appointments/OBGyneProcedureListResponse.dart'; import 'package:hmg_patient_app/models/Appointments/OBGyneProcedureListResponse.dart';
@ -34,6 +35,7 @@ import 'package:hmg_patient_app/uitl/app_shared_preferences.dart';
import 'package:hmg_patient_app/uitl/app_toast.dart'; import 'package:hmg_patient_app/uitl/app_toast.dart';
import 'package:hmg_patient_app/uitl/date_uitl.dart'; import 'package:hmg_patient_app/uitl/date_uitl.dart';
import 'package:hmg_patient_app/uitl/gif_loader_dialog_utils.dart'; import 'package:hmg_patient_app/uitl/gif_loader_dialog_utils.dart';
import 'package:hmg_patient_app/uitl/navigation_service.dart';
import 'package:hmg_patient_app/uitl/penguin_method_channel.dart'; import 'package:hmg_patient_app/uitl/penguin_method_channel.dart';
import 'package:hmg_patient_app/uitl/translations_delegate_base.dart'; import 'package:hmg_patient_app/uitl/translations_delegate_base.dart';
import 'package:hmg_patient_app/uitl/utils.dart'; import 'package:hmg_patient_app/uitl/utils.dart';
@ -967,7 +969,7 @@ class _ToDoState extends State<ToDo> with SingleTickerProviderStateMixin {
} }
}).catchError((err) { }).catchError((err) {
print(err); print(err);
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(locator<NavigationService>().navigatorKey.currentContext ?? context);
err != null ?? AppToast.showErrorToast(message: err); err != null ?? AppToast.showErrorToast(message: err);
}); });
getToDoCount(); getToDoCount();
@ -1000,8 +1002,8 @@ class _ToDoState extends State<ToDo> with SingleTickerProviderStateMixin {
confirmMessage: res['ErrorEndUserMessage'], confirmMessage: res['ErrorEndUserMessage'],
okText: "Update insurance", okText: "Update insurance",
cancelText: "Continue as cash", cancelText: "Continue as cash",
okFunction: () => {openUpdateInsurance()}, okFunction: () => {openUpdateInsurance(appo, appo.isLiveCareAppointment!)},
cancelFunction: () => {continueAsCash(appo, false)}); cancelFunction: () => {continueAsCash(appo, appo.isLiveCareAppointment!)});
dialog.showAlertDialog(context); dialog.showAlertDialog(context);
} }
}).catchError((err) { }).catchError((err) {
@ -1010,9 +1012,28 @@ class _ToDoState extends State<ToDo> with SingleTickerProviderStateMixin {
}); });
} }
void openUpdateInsurance() { void openUpdateInsurance(AppoitmentAllHistoryResultList appo, bool isLiveCareAppointment) {
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LandingPage()), (Route<dynamic> r) => false); DoctorsListService service = new DoctorsListService();
Navigator.push(context, FadePage(page: InsuranceUpdate())); GifLoaderDialogUtils.showMyDialog(context);
service.sendPatientUpdateRequest().then((res) {
GifLoaderDialogUtils.hideDialog(context);
if (res["MessageStatus"] == 1) {
if (isLiveCareAppointment) {
getLiveCareAppointmentPatientShare(context, service, appo);
} else {
getPatientShare(context, appo);
}
// getToDoCount();
} else {
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LandingPage()), (Route<dynamic> r) => false);
Navigator.push(context, FadePage(page: InsuranceUpdate()));
}
}).catchError((err) {
GifLoaderDialogUtils.hideDialog(context);
print(err);
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LandingPage()), (Route<dynamic> r) => false);
Navigator.push(context, FadePage(page: InsuranceUpdate()));
});
} }
void continueAsCash(AppoitmentAllHistoryResultList appo, bool isLiveCareAppointment) { void continueAsCash(AppoitmentAllHistoryResultList appo, bool isLiveCareAppointment) {
@ -1071,8 +1092,8 @@ class _ToDoState extends State<ToDo> with SingleTickerProviderStateMixin {
confirmMessage: errorMsg, confirmMessage: errorMsg,
okText: TranslationBase.of(context).updateInsuranceText, okText: TranslationBase.of(context).updateInsuranceText,
cancelText: TranslationBase.of(context).continueCash, cancelText: TranslationBase.of(context).continueCash,
okFunction: () => {openUpdateInsurance()}, okFunction: () => {openUpdateInsurance(appo, appo.isLiveCareAppointment!)},
cancelFunction: () => {continueAsCash(appo, false)}); cancelFunction: () => {continueAsCash(appo, appo.isLiveCareAppointment!)});
dialog.showAlertDialog(context); dialog.showAlertDialog(context);
} }
} }
@ -1112,7 +1133,7 @@ class _ToDoState extends State<ToDo> with SingleTickerProviderStateMixin {
confirmMessage: errorMsg, confirmMessage: errorMsg,
okText: TranslationBase.of(context).updateInsuranceText, okText: TranslationBase.of(context).updateInsuranceText,
cancelText: TranslationBase.of(context).continueCash, cancelText: TranslationBase.of(context).continueCash,
okFunction: () => {openUpdateInsurance()}, okFunction: () => {openUpdateInsurance(appo, appo.isLiveCareAppointment!)},
cancelFunction: () => {continueAsCash(appo, true)}); cancelFunction: () => {continueAsCash(appo, true)});
dialog.showAlertDialog(context); dialog.showAlertDialog(context);
} }

@ -76,15 +76,19 @@ class _OfferDetailsPageState extends State<OfferDetailsPage> {
child: Column( child: Column(
children: [ children: [
/// Banner /// Banner
SvgPicture.asset( projectViewModel.hisProjectOffers.first.projectArabic!.split("\$").length > 1
"assets/images/svg/details_page_banner.svg", ? SvgPicture.network(
height: 120, projectViewModel.isArabic
fit: BoxFit.fill, ? projectViewModel.hisProjectOffers.first.projectArabic!.split("\$")[1].trim()
), : projectViewModel.hisProjectOffers.first.projectEnglish!.split("\$")[1].trim(),
height: 120,
fit: BoxFit.cover,
)
: SizedBox.shrink(),
/// Arabic Offer Section /// Arabic Offer Section
Padding( Padding(
padding: const EdgeInsets.symmetric(horizontal: 24.0, vertical: 32.0), padding: const EdgeInsets.symmetric(horizontal: 24.0, vertical: 12.0),
child: Column( child: Column(
children: [ children: [
// Padding( // Padding(
@ -142,9 +146,10 @@ class _OfferDetailsPageState extends State<OfferDetailsPage> {
style: TextStyle( style: TextStyle(
fontSize: 22, fontSize: 22,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Color(0xff008b4c), // color: Color(0xff008b4c),
), ),
), ),
SizedBox(height: 12),
Text( Text(
projectViewModel.isArabic ? projectViewModel.hisProjectOffers.first.descriptionArabic! : projectViewModel.hisProjectOffers.first.descriptionEnglish!, projectViewModel.isArabic ? projectViewModel.hisProjectOffers.first.descriptionArabic! : projectViewModel.hisProjectOffers.first.descriptionEnglish!,
style: TextStyle( style: TextStyle(
@ -511,7 +516,8 @@ class _OfferDetailsPageState extends State<OfferDetailsPage> {
List<HospitalsModel> projectsListLocal = []; List<HospitalsModel> projectsListLocal = [];
projectViewModel.hisProjectOffers.forEach((project) { projectViewModel.hisProjectOffers.forEach((project) {
projectsListLocal.add(new HospitalsModel(iD: project.projectId, name: project.projectEnglish, nameN: project.projectArabic, amountWithTax: project.amountWithTax)); projectsListLocal.add(
new HospitalsModel(iD: project.projectId, name: project.projectEnglish!.split("\$")[0].trim(), nameN: project.projectArabic!.split("\$")[0].trim(), amountWithTax: project.amountWithTax));
}); });
showDialog( showDialog(

@ -208,6 +208,10 @@ class ServicesView extends StatelessWidget {
initPenguinSDK(int projectID) async { initPenguinSDK(int projectID) async {
final bool permited = await AppPermission.askPenguinPermissions(); final bool permited = await AppPermission.askPenguinPermissions();
NavigationClinicDetails data = NavigationClinicDetails();
// data.clinicId = "49";
data.patientId = projectViewModel.authenticatedUserObject.user.patientID.toString();
data.projectId = projectID.toString();
if (!permited) { if (!permited) {
Map<Permission, PermissionStatus> statuses = await [ Map<Permission, PermissionStatus> statuses = await [
Permission.location, Permission.location,
@ -216,7 +220,7 @@ class ServicesView extends StatelessWidget {
Permission.bluetoothScan, Permission.bluetoothScan,
Permission.activityRecognition, Permission.activityRecognition,
].request().whenComplete(() { ].request().whenComplete(() {
PenguinMethodChannel().launch("penguin", projectViewModel.isArabic ? "ar" : "en", projectViewModel.authenticatedUserObject.user.patientID.toString()); PenguinMethodChannel().launch("penguin", projectViewModel.isArabic ? "ar" : "en", projectViewModel.authenticatedUserObject.user.patientID.toString(), details: data);
}); });
} }
} }

@ -239,8 +239,25 @@ class _clinic_listState extends State<ClinicList> {
} }
void openUpdateInsurance() { void openUpdateInsurance() {
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LandingPage()), (Route<dynamic> r) => false); DoctorsListService service = new DoctorsListService();
Navigator.push(context, FadePage(page: InsuranceUpdate())); GifLoaderDialogUtils.showMyDialog(context);
service.sendPatientUpdateRequest().then((res) {
GifLoaderDialogUtils.hideDialog(context);
if (res["MessageStatus"] == 1) {
startLiveCare();
} else {
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LandingPage()), (Route<dynamic> r) => false);
Navigator.push(context, FadePage(page: InsuranceUpdate()));
}
}).catchError((err) {
GifLoaderDialogUtils.hideDialog(context);
print(err);
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LandingPage()), (Route<dynamic> r) => false);
Navigator.push(context, FadePage(page: InsuranceUpdate()));
});
// Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LandingPage()), (Route<dynamic> r) => false);
// Navigator.push(context, FadePage(page: InsuranceUpdate()));
} }
showLiveCarePaymentDialog(GetERAppointmentFeesList getERAppointmentFeesList, int waitingTime) { showLiveCarePaymentDialog(GetERAppointmentFeesList getERAppointmentFeesList, int waitingTime) {

@ -845,32 +845,71 @@ class _ConfirmLogin extends State<ConfirmLogin> {
appointmentRateViewModel appointmentRateViewModel
.getIsLastAppointmentRatedList(projectViewModel.isArabic ? 1 : 2) .getIsLastAppointmentRatedList(projectViewModel.isArabic ? 1 : 2)
.then((value) => { .then((value) => {
GifLoaderDialogUtils.hideDialog(AppGlobal.context), GifLoaderDialogUtils.hideDialog(AppGlobal.context),
if (appointmentRateViewModel.isHaveAppointmentNotRate) if (appointmentRateViewModel.isHaveAppointmentNotRate)
{ {
Navigator.pushAndRemoveUntil( Navigator.pushAndRemoveUntil(
context, context,
FadePage( FadePage(
page: RateAppointmentDoctor(), page: RateAppointmentDoctor(),
), ),
(r) => false) (r) => false)
} }
else else
{ {
Navigator.pushAndRemoveUntil( Navigator.pushAndRemoveUntil(
context, context,
FadePage( FadePage(
page: LandingPage(), page: LandingPage(),
), ),
(r) => false) (r) => false)
}, },
insertIMEI() insertIMEI()
}) })
.catchError((err) { .catchError((err) {
print(err); print(err);
}); });
} }
// goToHome() async {
// authenticatedUserObject.isLogin = true;
// appointmentRateViewModel.isLogin = true;
// projectViewModel.isLogin = true;
// projectViewModel.user = authenticatedUserObject.user;
// await authenticatedUserObject.getUser(getUser: true);
//
// // GifLoaderDialogUtils.hideDialog(context);
// getToDoCount();
// checkIfIsInPatient();
// // appointmentRateViewModel
// // .getIsLastAppointmentRatedList(projectViewModel.isArabic ? 1 : 2)
// // .then((value) => {
// // GifLoaderDialogUtils.hideDialog(AppGlobal.context),
// // if (appointmentRateViewModel.isHaveAppointmentNotRate)
// // {
// // Navigator.pushAndRemoveUntil(
// // context,
// // FadePage(
// // page: RateAppointmentDoctor(),
// // ),
// // (r) => false)
// // }
// // else
// // {
// Navigator.pushAndRemoveUntil(
// context,
// FadePage(
// page: LandingPage(),
// ),
// (r) => false);
// // },
// insertIMEI();
// // })
// // .catchError((err) {
// // print(err);
// // });
// }
loading(flag) { loading(flag) {
setState(() { setState(() {
isLoading = flag; isLoading = flag;

@ -777,34 +777,34 @@ class _UserLoginAgreementPageState extends State<UserLoginAgreementPage> {
// GifLoaderDialogUtils.hideDialog(context); // GifLoaderDialogUtils.hideDialog(context);
getToDoCount(); getToDoCount();
checkIfIsInPatient(); checkIfIsInPatient();
widget.appointmentRateViewModel // widget.appointmentRateViewModel
.getIsLastAppointmentRatedList(projectViewModel.isArabic ? 1 : 2) // .getIsLastAppointmentRatedList(projectViewModel.isArabic ? 1 : 2)
.then((value) => { // .then((value) => {
GifLoaderDialogUtils.hideDialog(context), // GifLoaderDialogUtils.hideDialog(context),
if (widget.appointmentRateViewModel.isHaveAppointmentNotRate) // if (widget.appointmentRateViewModel.isHaveAppointmentNotRate)
{ // {
Navigator.pushAndRemoveUntil( // Navigator.pushAndRemoveUntil(
context, // context,
FadePage( // FadePage(
page: RateAppointmentDoctor(), // page: RateAppointmentDoctor(),
), // ),
(r) => false) // (r) => false)
} // }
else // else
{ // {
GifLoaderDialogUtils.hideDialog(context), // GifLoaderDialogUtils.hideDialog(context),
Navigator.pushAndRemoveUntil( Navigator.pushAndRemoveUntil(
context, context,
FadePage( FadePage(
page: LandingPage(), page: LandingPage(),
), ),
(r) => false) (r) => false);
}, // },
insertIMEI() insertIMEI();
}) // })
.catchError((err) { // .catchError((err) {
print(err); // print(err);
}); // });
} }
insertIMEI() { insertIMEI() {

@ -355,7 +355,7 @@ class _ConfirmPaymentPageState extends State<ConfirmPaymentPage> {
}).catchError((err) { }).catchError((err) {
print(err); print(err);
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(message: err); AppToast.showErrorToast(message: err.toString());
}); });
} }

@ -0,0 +1,168 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:hmg_patient_app/core/service/privilege_service.dart';
import 'package:hmg_patient_app/core/viewModels/project_view_model.dart';
import 'package:hmg_patient_app/locator.dart';
import 'package:hmg_patient_app/theme/colors.dart';
import 'package:hmg_patient_app/uitl/translations_delegate_base.dart';
import 'package:hmg_patient_app/uitl/utils_new.dart';
import 'package:hmg_patient_app/widgets/others/app_scaffold_widget.dart';
import 'package:provider/provider.dart';
class ServicesPriceList extends StatelessWidget {
ServicesPriceList({super.key});
ProjectViewModel? projectViewModel;
PrivilegeService _privilegeService = locator<PrivilegeService>();
@override
Widget build(BuildContext context) {
projectViewModel = Provider.of(context);
return AppScaffold(
appBarTitle: TranslationBase.of(context).servicePriceList,
isShowAppBar: true,
showNewAppBar: true,
backgroundColor: Color(0xffF8F8F8),
showNewAppBarTitle: true,
showDropDown: false,
isShowDecPage: false,
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
Container(
padding: EdgeInsets.all(16),
decoration: cardRadius(10),
child: Text(
TranslationBase.of(context).servicePriceListDesc,
style: TextStyle(
color: CustomColors.textColor,
fontSize: 12,
fontWeight: FontWeight.w500,
letterSpacing: -0.64,
fontFamily: projectViewModel!.isArabic ? 'Cairo' : 'Poppins',
),
),
),
SizedBox(height: 16),
Container(
padding: EdgeInsets.all(16),
decoration: cardRadius(10),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
TranslationBase.of(context).serviceName,
style: TextStyle(
color: CustomColors.textDarkColor,
fontSize: 16,
fontWeight: FontWeight.bold,
letterSpacing: -0.64,
),
),
Text(
TranslationBase.of(context).price,
style: TextStyle(
color: CustomColors.textDarkColor,
fontSize: 16,
fontWeight: FontWeight.bold,
letterSpacing: -0.64,
),
),
],
),
SizedBox(height: 8),
Divider(
height: 1,
color: CustomColors.black,
),
SizedBox(height: 16),
ListView.separated(
shrinkWrap: true,
padding: EdgeInsets.zero,
physics: NeverScrollableScrollPhysics(),
itemCount: _privilegeService.servicesPriceList.length,
separatorBuilder: (context, index) =>
Padding(
padding: EdgeInsets.symmetric(vertical: 12),
child: Divider(
height: 1,
color: CustomColors.devider,
),
),
itemBuilder: (context, index) {
final service = _privilegeService.servicesPriceList[index];
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Text(
(projectViewModel!.isArabic ? service.nameAR ?? service.nameEN ?? '' : service.nameEN ?? service.nameAR ?? ''),
style: TextStyle(
color: CustomColors.textColor,
fontSize: 14,
fontWeight: FontWeight.bold,
letterSpacing: -0.64,
),
),
),
Row(
children: [
projectViewModel!.isArabic ? Container() : SvgPicture.asset("assets/images/new/Saudi_Riyal_Symbol.svg", width: 16, height: 16),
mWidth(6),
Text(
'${service.price ?? 0}',
style: TextStyle(
color: CustomColors.textDarkColor,
fontSize: 14,
fontWeight: FontWeight.bold,
letterSpacing: -0.64,
),
),
mWidth(6),
projectViewModel!.isArabic ? SvgPicture.asset("assets/images/new/Saudi_Riyal_Symbol.svg", width: 16, height: 16) : Container(),
],
),
],
),
],
);
},
),
],
)),
SizedBox(height: 16),
Container(
padding: EdgeInsets.all(16),
decoration: cardRadius(10),
child: Row(
children: [
Expanded(
child: Text(
TranslationBase.of(context).servicePriceListRights,
maxLines: 2,
style: TextStyle(
color: CustomColors.textColor,
fontSize: 12,
fontWeight: FontWeight.w500,
letterSpacing: -0.64,
),
),
),
],
),
),
],
),
),
);
}
}

@ -1931,6 +1931,19 @@ class DoctorsListService extends BaseService {
return Future.value(localRes); return Future.value(localRes);
} }
Future<Map> sendPatientUpdateRequest() async {
Map<String, dynamic> request;
request = {};
dynamic localRes;
await baseAppClient.post(SEND_PATIENT_IMMEDIATE_UPDATE_INSURANCE_REQUEST, onSuccess: (response, statusCode) async {
localRes = response;
}, onFailure: (String error, int statusCode) {
throw error;
}, body: request);
return Future.value(localRes);
}
Future<Map> getAncillaryOrders() async { Future<Map> getAncillaryOrders() async {
Map<String, dynamic> body = Map(); Map<String, dynamic> body = Map();

@ -51,6 +51,7 @@ class _SplashScreenState extends State<SplashScreen> {
LocalNotification.init(onNotificationClick: (payload) {}); LocalNotification.init(onNotificationClick: (payload) {});
// LocalNotification.getInstance().showNow(title: "Payload", subtitle: "Subtitle", payload: "Payload"); // LocalNotification.getInstance().showNow(title: "Payload", subtitle: "Subtitle", payload: "Payload");
if (!_privilegeService.hasError) { if (!_privilegeService.hasError) {
_privilegeService.getServicesPriceList();
Navigator.of(context).pushReplacement( Navigator.of(context).pushReplacement(
MaterialPageRoute( MaterialPageRoute(
builder: (BuildContext context) => LandingPage(), builder: (BuildContext context) => LandingPage(),

@ -13,12 +13,12 @@ class PenguinMethodChannel {
await _channel.invokeMethod('launchPenguin', { await _channel.invokeMethod('launchPenguin', {
"storyboardName": storyboardName, "storyboardName": storyboardName,
"baseURL": "https://prod.hmg.nav.penguinin.com", "baseURL": "https://prod.hmg.nav.penguinin.com",
// "dataURL": "https://hmg.nav.penguinin.com",
// "positionURL": "https://hmg.nav.penguinin.com",
// "dataURL": "https://hmg-v33.local.penguinin.com",
// "positionURL": "https://hmg-v33.local.penguinin.com",
"dataURL": "https://prod.hmg.nav.penguinin.com", "dataURL": "https://prod.hmg.nav.penguinin.com",
"positionURL": "https://prod.hmg.nav.penguinin.com", "positionURL": "https://prod.hmg.nav.penguinin.com",
// "baseURL": "https://penguinuat.hmg.com",
// "dataURL": "https://penguinuat.hmg.com",
// "positionURL": "https://penguinuat.hmg.com",
"dataServiceName": "api", "dataServiceName": "api",
"positionServiceName": "pe", "positionServiceName": "pe",
"clientID": "HMG", "clientID": "HMG",
@ -30,11 +30,12 @@ class PenguinMethodChannel {
"isEnableReportIssue": true, "isEnableReportIssue": true,
"languageCode": languageCode, "languageCode": languageCode,
"clientKey": "UGVuZ3VpbklOX1Blbk5hdl9QSUY=", "clientKey": "UGVuZ3VpbklOX1Blbk5hdl9QSUY=",
"mapBoxKey": "sk.eyJ1IjoicndhaWQiLCJhIjoiY2x6NWo0bTMzMWZodzJrcGZpemYzc3Z4dSJ9.uSSZuwNSGCcCdPAiORECmg", "mapBoxKey": "pk.eyJ1IjoicndhaWQiLCJhIjoiY2x5cGo4aHNjMGNsbTJyc2djempobGQxaSJ9.RCaC6WrUt4A4YnZNfxnONQ",
"clinicID": details?.clinicId ?? "", // "clinicID": details?.clinicId ?? "",
"clinicID": "",
// "clinicID": "108", // 46 ,49, 133 // "clinicID": "108", // 46 ,49, 133
"patientID": details?.patientId ?? "", "patientID": details?.patientId ?? "",
"projectID": details?.projectId ?? "", "projectID": int.parse(details?.projectId ?? "-1"),
"loaderImage": image, "loaderImage": image,
}); });
} on PlatformException catch (e) { } on PlatformException catch (e) {

@ -3531,6 +3531,17 @@ class TranslationBase {
String get low => localizedValues["low"][locale.languageCode]; String get low => localizedValues["low"][locale.languageCode];
String get verifyWithBiometric => localizedValues["verify-with-biometric"][locale.languageCode]; String get verifyWithBiometric => localizedValues["verify-with-biometric"][locale.languageCode];
String get medicationInstructions => localizedValues["medicationInstructions"][locale.languageCode]; String get medicationInstructions => localizedValues["medicationInstructions"][locale.languageCode];
String get servicePriceList => localizedValues["servicePriceList"][locale.languageCode];
String get servicePriceListDesc => localizedValues["servicePriceListDesc"][locale.languageCode];
String get servicePriceList1 => localizedValues["servicePriceList1"][locale.languageCode];
String get servicePriceList2 => localizedValues["servicePriceList2"][locale.languageCode];
String get servicePriceList3 => localizedValues["servicePriceList3"][locale.languageCode];
String get servicePriceList4 => localizedValues["servicePriceList4"][locale.languageCode];
String get servicePriceList5 => localizedValues["servicePriceList5"][locale.languageCode];
String get servicePriceList6 => localizedValues["servicePriceList6"][locale.languageCode];
String get servicePriceList7 => localizedValues["servicePriceList7"][locale.languageCode];
String get servicePriceListRights => localizedValues["servicePriceListRights"][locale.languageCode];
String getTranslation(String label) { String getTranslation(String label) {
switch (label) { switch (label) {

@ -71,7 +71,7 @@ class Utils {
{ {
"Desciption": "Sahafa Hospital", "Desciption": "Sahafa Hospital",
"DesciptionN": "مستشفى الصحافة", "DesciptionN": "مستشفى الصحافة",
"ID": 130, "ID": 1, // Campus ID
"LegalName": "Sahafa Hospital", "LegalName": "Sahafa Hospital",
"LegalNameN": "مستشفى الصحافة", "LegalNameN": "مستشفى الصحافة",
"Name": "Sahafa Hospital", "Name": "Sahafa Hospital",
@ -88,7 +88,28 @@ class Utils {
"MainProjectID": 130, "MainProjectID": 130,
"ProjectOutSA": false, "ProjectOutSA": false,
"UsingInDoctorApp": false "UsingInDoctorApp": false
} },
// {
// "Desciption": "Jeddah Fayhaa Hospital",
// "DesciptionN": "مستشفى جدة الفيحاء",
// "ID": 3, // Campus ID
// "LegalName": "Jeddah Fayhaa Hospital",
// "LegalNameN": "مستشفى جدة الفيحاء",
// "Name": "Jeddah Fayhaa Hospital",
// "NameN": "مستشفى جدة الفيحاء",
// "PhoneNumber": "+966115222222",
// "SetupID": "013311",
// "DistanceInKilometers": 0,
// "HasVida3": false,
// "IsActive": true,
// "IsHmg": true,
// "IsVidaPlus": false,
// "Latitude": "24.8113774",
// "Longitude": "46.6239813",
// "MainProjectID": 130,
// "ProjectOutSA": false,
// "UsingInDoctorApp": false
// }
]; ];
///show custom Error Toast ///show custom Error Toast

@ -134,8 +134,6 @@ class _LabItemState extends State<LabItem> {
} }
openFlowChart(BuildContext context, String procedure) { openFlowChart(BuildContext context, String procedure) {
print('openFlowChart: the bottom sheet is showing');
showModalBottomSheet( showModalBottomSheet(
backgroundColor: Colors.white, backgroundColor: Colors.white,
isScrollControlled: true, isScrollControlled: true,

@ -22,6 +22,7 @@ import 'package:hmg_patient_app/pages/DrawerPages/notifications/notifications_pa
import 'package:hmg_patient_app/pages/landing/landing_page.dart'; import 'package:hmg_patient_app/pages/landing/landing_page.dart';
import 'package:hmg_patient_app/pages/livecare/livecare_home.dart'; import 'package:hmg_patient_app/pages/livecare/livecare_home.dart';
import 'package:hmg_patient_app/pages/rateAppointment/rate_appointment_doctor.dart'; import 'package:hmg_patient_app/pages/rateAppointment/rate_appointment_doctor.dart';
import 'package:hmg_patient_app/pages/servicesPriceList/services_price_list.dart';
import 'package:hmg_patient_app/routes.dart'; import 'package:hmg_patient_app/routes.dart';
import 'package:hmg_patient_app/services/authentication/auth_provider.dart'; import 'package:hmg_patient_app/services/authentication/auth_provider.dart';
import 'package:hmg_patient_app/services/clinic_services/get_clinic_service.dart'; import 'package:hmg_patient_app/services/clinic_services/get_clinic_service.dart';
@ -467,6 +468,13 @@ class _AppDrawerState extends State<AppDrawer> {
login(); login();
}, },
), ),
projectProvider!.havePrivilege(113) ? InkWell(
child: DrawerItem(TranslationBase.of(context).servicePriceList, Icons.bookmark_added_sharp, letterSpacing: -0.84, fontSize: 14, bottomLine: false),
onTap: () {
Navigator.pop(context);
Navigator.of(context).push(FadePage(page: ServicesPriceList()));
},
) : SizedBox.shrink(),
InkWell( InkWell(
child: DrawerItem(TranslationBase.of(context).privacyPolicy, Icons.web, letterSpacing: -0.84, fontSize: 14, bottomLine: false), child: DrawerItem(TranslationBase.of(context).privacyPolicy, Icons.web, letterSpacing: -0.84, fontSize: 14, bottomLine: false),
onTap: () { onTap: () {
@ -481,7 +489,7 @@ class _AppDrawerState extends State<AppDrawer> {
onTap: () { onTap: () {
Navigator.of(context).push(FadePage(page: UserAgreementPage())); Navigator.of(context).push(FadePage(page: UserAgreementPage()));
}, },
) ),
], ],
)) ))
], ],
@ -781,35 +789,44 @@ class _AppDrawerState extends State<AppDrawer> {
checkIfIsInPatient(context); checkIfIsInPatient(context);
appointmentRateViewModel Navigator.pushAndRemoveUntil(
.getIsLastAppointmentRatedList(languageID) context,
.then((value) => { FadePage(
getToDoCount(), page: LandingPage(),
//Utils.hideProgressDialog(), ),
if (appointmentRateViewModel.isHaveAppointmentNotRate) (r) => false);
{
Navigator.pushAndRemoveUntil( // Commented as per the CR 18819
context,
FadePage( // appointmentRateViewModel
page: RateAppointmentDoctor(), // .getIsLastAppointmentRatedList(languageID)
), // .then((value) => {
(r) => false) // getToDoCount(),
} // //Utils.hideProgressDialog(),
else // if (appointmentRateViewModel.isHaveAppointmentNotRate)
{ // {
Navigator.pushAndRemoveUntil( // Navigator.pushAndRemoveUntil(
context, // context,
FadePage( // FadePage(
page: LandingPage(), // page: RateAppointmentDoctor(),
), // ),
(r) => false) // (r) => false)
} // }
}) // else
.catchError((err) { // {
print(err); // Navigator.pushAndRemoveUntil(
//Utils.hideProgressDialog(); // context,
// GifLoaderDialogUtils.hideDialog(context); // FadePage(
}); // page: LandingPage(),
// ),
// (r) => false)
// }
// })
// .catchError((err) {
// print(err);
// //Utils.hideProgressDialog();
// // GifLoaderDialogUtils.hideDialog(context);
// });
} }
openAppReviewDialog() async { openAppReviewDialog() async {

@ -38,7 +38,7 @@ class MyInAppBrowser extends InAppBrowser {
static String APPLE_PAY_PAYFORT_URL = 'https://hmgwebservices.com/PayFortWebLive/PayFortApi/MakeApplePayRequest'; // Payfort Payment Gateway URL LIVE static String APPLE_PAY_PAYFORT_URL = 'https://hmgwebservices.com/PayFortWebLive/PayFortApi/MakeApplePayRequest'; // Payfort Payment Gateway URL LIVE
// static String APPLE_PAY_PAYFORT_URL = 'https://hmgwebservices.com/PayFortWebLive/PayFortApi/MakeApplePayRequest'; // Payfort Payment Gateway URL UAT // static String APPLE_PAY_PAYFORT_URL = 'https://hmgwebservices.com/PayFortWebLive/PayFortApi/MakeApplePayRequest'; // Payfort Payment Gateway URL UAT
// static String SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort Payment Gateway URL UAT // static String SERVICE_URL = 'https://uat.hmgwebservices.com/HMGPayment/pages/SendPayFortRequest.aspx'; // Payfort Payment Gateway URL UAT
static String SERVICE_URL = 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort Payment Gateway URL LIVE static String SERVICE_URL = 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort Payment Gateway URL LIVE
@ -345,6 +345,7 @@ class MyInAppBrowser extends InAppBrowser {
form = form.replaceFirst('PAYMENT_OPTION_VALUE', paymentMethod); form = form.replaceFirst('PAYMENT_OPTION_VALUE', paymentMethod);
form = form.replaceFirst('LANG_VALUE', currentLanguageID); form = form.replaceFirst('LANG_VALUE', currentLanguageID);
form = form.replaceFirst('SERVICE_URL_VALUE', "https://mdlaboratories.com/tamaralive/Home/Checkout"); form = form.replaceFirst('SERVICE_URL_VALUE', "https://mdlaboratories.com/tamaralive/Home/Checkout");
// form = form.replaceFirst('SERVICE_URL_VALUE', "https://epharmacy.hmg.com/tamara/Home/Checkout");
form = form.replaceFirst('INSTALLMENTS_VALUE', installments); form = form.replaceFirst('INSTALLMENTS_VALUE', installments);
form = form.replaceFirst('CUSTNATIONALID_VALUE', authUser.patientIdentificationNo!); form = form.replaceFirst('CUSTNATIONALID_VALUE', authUser.patientIdentificationNo!);

@ -1,8 +1,8 @@
name: hmg_patient_app name: hmg_patient_app
description: A new Flutter application. description: A new Flutter application.
#version: 4.6.019+1 #version: 4.6.030+1
version: 4.6.0979+40500979 version: 4.6.0984+40500984
environment: environment:
# sdk: ">=3.0.0 <3.13.0" # sdk: ">=3.0.0 <3.13.0"
@ -225,9 +225,9 @@ flutter:
# - asset: assets/fonts/ar/Cairo-Light/Cairo-Light.eot # - asset: assets/fonts/ar/Cairo-Light/Cairo-Light.eot
# - asset: assets/fonts/ar/Cairo-Light/Cairo-Light.otf # - asset: assets/fonts/ar/Cairo-Light/Cairo-Light.otf
- asset: assets/fonts/ar/Cairo-Regular/Cairo-Regular.ttf - asset: assets/fonts/ar/Cairo-Regular/Cairo-Regular.ttf
# - asset: assets/fonts/ar/Cairo-Light/Cairo-Light.woff
weight: 400 weight: 400
- asset: assets/fonts/ar/Cairo-Regular/Cairo-Regular.ttf
weight: 500
- asset: assets/fonts/ar/Cairo-Bold/Cairo-Bold.eot - asset: assets/fonts/ar/Cairo-Bold/Cairo-Bold.eot
- asset: assets/fonts/ar/Cairo-Bold/Cairo-Bold.otf - asset: assets/fonts/ar/Cairo-Bold/Cairo-Bold.otf
- asset: assets/fonts/ar/Cairo-Bold/Cairo-Bold.ttf - asset: assets/fonts/ar/Cairo-Bold/Cairo-Bold.ttf

Loading…
Cancel
Save