Merge branch 'development_mirza' into 'main'

Development mirza

See merge request Cloud_Solution/hmg_nurses!6
main
Mirza Shafique 3 years ago
commit 3ca70dd9be

@ -26,7 +26,7 @@ apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion flutter.compileSdkVersion
compileSdkVersion 33
ndkVersion flutter.ndkVersion
compileOptions {
@ -44,10 +44,10 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.untitled1"
applicationId "com.hmg.hmgDr"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
minSdkVersion flutter.minSdkVersion
minSdkVersion 23
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
@ -69,3 +69,4 @@ flutter {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
apply plugin: 'com.google.gms.google-services'

@ -0,0 +1,82 @@
{
"project_info": {
"project_number": "934365232760",
"project_id": "hmg-dr-app",
"storage_bucket": "hmg-dr-app.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:934365232760:android:024b3569972f1c09f9778d",
"android_client_info": {
"package_name": "COM.HMG.HMGDR"
}
},
"oauth_client": [
{
"client_id": "934365232760-bobv1r1sn222le020jeni6u1bdbjdu1v.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyCpYwrmuntOBdZv6GV6KEnLj8nQRvEnZ6I"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "934365232760-bobv1r1sn222le020jeni6u1bdbjdu1v.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "934365232760-57v2ld1qqulc4nt4o5pgjfbpc47fj3qf.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "COM.HMG.HMGDR"
}
}
]
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:934365232760:android:e0e185e68c0d7690f9778d",
"android_client_info": {
"package_name": "com.hmg.hmgDr"
}
},
"oauth_client": [
{
"client_id": "934365232760-bobv1r1sn222le020jeni6u1bdbjdu1v.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyCpYwrmuntOBdZv6GV6KEnLj8nQRvEnZ6I"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "934365232760-bobv1r1sn222le020jeni6u1bdbjdu1v.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "934365232760-57v2ld1qqulc4nt4o5pgjfbpc47fj3qf.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "COM.HMG.HMGDR"
}
}
]
}
}
}
],
"configuration_version": "1"
}

@ -1,5 +1,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.untitled1">
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<application
android:label="untitled1"
android:name="${applicationName}"

@ -2,5 +2,16 @@ package com.example.untitled1
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
//class MainActivity: FlutterActivity() {
//}
import io.flutter.embedding.android.FlutterFragmentActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
class MainActivity: FlutterFragmentActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine)
}
}

@ -8,6 +8,7 @@ buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:7.1.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.3'
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="28.123" height="26.245" viewBox="0 0 28.123 26.245">
<path id="XMLID_219_" d="M28.984,15.637A2.077,2.077,0,0,1,27.025,17h-.716V27.309a.938.938,0,0,1-.937.937H19.748V21.685a4.687,4.687,0,0,0-9.374,0v6.562H4.749a.938.938,0,0,1-.937-.937V17H3.095a2.1,2.1,0,0,1-1.378-3.675L12.665,2.955a3.486,3.486,0,0,1,4.792,0L28.431,13.347A2.066,2.066,0,0,1,28.984,15.637Z" transform="translate(-0.999 -2.001)" fill="#2e303a"/>
</svg>

After

Width:  |  Height:  |  Size: 467 B

@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24.899" height="24.899" viewBox="0 0 24.899 24.899">
<g id="Layer_76" data-name="Layer 76" transform="translate(-2 -2)">
<path id="Path_4380" data-name="Path 4380" d="M3.245,11.96A1.245,1.245,0,0,0,4.49,10.715V5.735A1.245,1.245,0,0,1,5.735,4.49h4.98a1.245,1.245,0,1,0,0-2.49H5.735A3.735,3.735,0,0,0,2,5.735v4.98A1.245,1.245,0,0,0,3.245,11.96Z" transform="translate(0 0)" fill="#2e303a"/>
<path id="Path_4381" data-name="Path 4381" d="M20.225,2h-4.98a1.245,1.245,0,0,0,0,2.49h4.98A1.245,1.245,0,0,1,21.47,5.735v4.98a1.245,1.245,0,1,0,2.49,0V5.735A3.735,3.735,0,0,0,20.225,2Z" transform="translate(2.94 0)" fill="#2e303a"/>
<path id="Path_4382" data-name="Path 4382" d="M22.715,14a1.245,1.245,0,0,0-1.245,1.245v4.98a1.245,1.245,0,0,1-1.245,1.245h-4.98a1.245,1.245,0,0,0,0,2.49h4.98a3.735,3.735,0,0,0,3.735-3.735v-4.98A1.245,1.245,0,0,0,22.715,14Z" transform="translate(2.94 2.94)" fill="#2e303a"/>
<path id="Path_4383" data-name="Path 4383" d="M10.715,21.47H5.735A1.245,1.245,0,0,1,4.49,20.225v-4.98a1.245,1.245,0,0,0-2.49,0v4.98A3.735,3.735,0,0,0,5.735,23.96h4.98a1.245,1.245,0,1,0,0-2.49Z" transform="translate(0 2.94)" fill="#2e303a"/>
<rect id="Rectangle_17370" data-name="Rectangle 17370" width="15" height="15" rx="2" transform="translate(7 6.899)" fill="#2e303a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="26.552" height="20.755" viewBox="0 0 26.552 20.755">
<g id="mail-reply" transform="translate(0 -40.338)">
<path id="Path_4384" data-name="Path 4384" d="M21.236,51.705h.129a1.8,1.8,0,0,1,2.761-2.272l.788.788V42.437a2.1,2.1,0,0,0-2.1-2.1H2.1a2.1,2.1,0,0,0-2.1,2.1V56.921a2.1,2.1,0,0,0,2.1,2.1H16.575a5.14,5.14,0,0,1,4.66-7.314ZM5.213,43.167H19.7l-7.244,5.312Z" fill="#2e303a"/>
<path id="Path_4385" data-name="Path 4385" d="M245.767,175.159l-2.8-2.8a.9.9,0,1,0-1.27,1.27l1.265,1.265h-2.25a4.245,4.245,0,0,0,0,8.489.9.9,0,1,0,0-1.8,2.448,2.448,0,0,1,0-4.9h2.25l-1.265,1.265a.9.9,0,0,0,1.27,1.27l2.8-2.8a.9.9,0,0,0,0-1.27Z" transform="translate(-219.478 -122.292)" fill="#2e303a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 749 B

@ -0,0 +1,3 @@
<svg id="weekly-calendar-page-symbol" xmlns="http://www.w3.org/2000/svg" width="25.034" height="25.034" viewBox="0 0 25.034 25.034">
<path id="Path_4379" data-name="Path 4379" d="M22.53,0H2.5A2.511,2.511,0,0,0,0,2.5V22.53a2.512,2.512,0,0,0,2.5,2.5H22.53a2.512,2.512,0,0,0,2.5-2.5V2.5A2.511,2.511,0,0,0,22.53,0ZM6.756,22.031H2.921V18.62H6.756v3.411Zm0-4.555H2.921v-3.41H6.756v3.41ZM6.467,3.794A1.063,1.063,0,1,1,7.529,2.731,1.062,1.062,0,0,1,6.467,3.794Zm5.406,18.237H8.039V18.62h3.834Zm0-4.555H8.039v-3.41h3.834Zm0-4.552H8.039V9.514h3.834ZM11.455,2.731a1.062,1.062,0,1,1,1.062,1.062A1.062,1.062,0,0,1,11.455,2.731Zm5.54,14.745H13.159v-3.41H17v3.41Zm0-4.552H13.159V9.514H17v3.41ZM17.5,2.731a1.062,1.062,0,1,1,1.062,1.062A1.062,1.062,0,0,1,17.5,2.731Zm4.609,14.745H18.278v-3.41h3.835Zm0-4.552H18.278V9.514h3.835Z" fill="#2e303a"/>
</svg>

After

Width:  |  Height:  |  Size: 838 B

@ -0,0 +1,57 @@
<svg id="woman_2_" data-name="woman (2)" xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48">
<g id="Group_7145" data-name="Group 7145">
<g id="Group_7144" data-name="Group 7144">
<g id="Group_7143" data-name="Group 7143">
<g id="Group_7142" data-name="Group 7142">
<g id="XMLID_2114_">
<g id="XMLID_2115_">
<g id="XMLID_2116_">
<g id="XMLID_2117_">
<g id="XMLID_2118_">
<g id="XMLID_2119_">
<g id="XMLID_2120_">
<g id="XMLID_2121_">
<g id="XMLID_2122_">
<g id="XMLID_2123_">
<g id="XMLID_2124_">
<g id="XMLID_2125_">
<g id="XMLID_2126_">
<g id="XMLID_2127_">
<g id="Group_7141" data-name="Group 7141">
<path id="Path_4450" data-name="Path 4450" d="M48,24a23.928,23.928,0,0,1-6.947,16.887C36.7,45.279,30.669,42.776,24,42.776s-12.7,2.5-17.053-1.889A24,24,0,1,1,48,24Z" fill="#e2e2e2"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<path id="Path_4451" data-name="Path 4451" d="M48,24q0-1.087-.1-2.151L33.541,7.485,14.75,23.632,31.62,40.5l1.688,2.974c2.921.089,5.548-.37,7.745-2.589A23.928,23.928,0,0,0,48,24Z" fill="#c4c4c4"/>
<path id="Path_4452" data-name="Path 4452" d="M24,3.287C20.723,2.9,8.986,6.052,12.5,19.837c.924,3.622,4.646,5.913,6.284,6.51,2.5.913,2.742-.517,5.214-2.007,2.472,1.49,2.71,2.919,5.214,2.007,1.638-.6,5.36-2.888,6.284-6.51C39.014,6.052,27.277,2.9,24,3.287Z" fill="#515151"/>
<path id="Path_4453" data-name="Path 4453" d="M35.5,19.838c-.924,3.622-4.646,5.913-6.284,6.51-2.5.913-2.742-.517-5.213-2.007V3.287C27.277,2.9,39.014,6.052,35.5,19.837Z" fill="#3d3d3d"/>
<path id="Path_4454" data-name="Path 4454" d="M18.747,23.459H29.253V34.6H18.747Z" fill="#eaa678"/>
<path id="Path_4455" data-name="Path 4455" d="M24,23.46h5.253V34.6H24Z" fill="#d38c5b"/>
<path id="Path_4456" data-name="Path 4456" d="M18.747,30.452H29.253V41.593H18.747Z" fill="#ffc397"/>
<path id="Path_4457" data-name="Path 4457" d="M24,30.452h5.253V41.593H24Z" fill="#eaa678"/>
<path id="Path_4458" data-name="Path 4458" d="M41.053,35.918v4.969a24,24,0,0,1-34.106,0V35.918a5.466,5.466,0,0,1,5.466-5.467h6.335L24,37.18l5.253-6.728h6.335A5.466,5.466,0,0,1,41.053,35.918Z" fill="#d02127"/>
<path id="Path_4459" data-name="Path 4459" d="M41.053,35.918v4.969A23.925,23.925,0,0,1,24,48V37.18l5.253-6.728h6.335A5.466,5.466,0,0,1,41.053,35.918Z" fill="#aa191e"/>
<path id="Path_4460" data-name="Path 4460" d="M28.256,39.447a2.908,2.908,0,0,0-1.3,2.649c.172,1.751,2.3,3.292,2.3,3.292s3.4-3.062,2.069-5.94l-1.446-.556Z" fill="#3d3d3d"/>
<path id="Path_4461" data-name="Path 4461" d="M32.274,14.271C31.924,8.965,27.632,7,24,7s-7.924,1.961-8.274,7.267a2.285,2.285,0,0,0-1.5,2.409l.161,2.267a1.875,1.875,0,0,0,2.043,1.7l.175-.019c2.076,5.573,5.33,6.154,7.4,6.48,2.066-.326,5.321-.907,7.4-6.48l.175.019a1.875,1.875,0,0,0,2.043-1.7l.161-2.267A2.285,2.285,0,0,0,32.274,14.271Z" fill="#ffc397"/>
<path id="Path_4462" data-name="Path 4462" d="M33.775,16.681l-.161,2.267a1.875,1.875,0,0,1-2.043,1.7l-.175-.019a11.863,11.863,0,0,1-2.445,4.151A7.942,7.942,0,0,1,24,27.1V7c3.632,0,7.924,1.961,8.274,7.267a2.285,2.285,0,0,1,1.5,2.409Z" fill="#eaa678"/>
<path id="Path_4463" data-name="Path 4463" d="M24,4.977c-5.521-1.2-9.452,2.277-9.539,6.282a10.3,10.3,0,0,0,3.027,6.969c-.053-3.326,1-4.7,3.062-5.438A8.7,8.7,0,0,0,24,9.96a8.7,8.7,0,0,0,3.45,2.83c2.059.739,3.115,2.112,3.062,5.438a10.3,10.3,0,0,0,3.027-6.969C33.452,7.253,29.521,3.772,24,4.977Z" fill="#515151"/>
<path id="Path_4464" data-name="Path 4464" d="M33.539,11.259a10.305,10.305,0,0,1-3.027,6.968c.052-3.326-1-4.7-3.062-5.437A8.7,8.7,0,0,1,24,9.96V4.976C29.521,3.772,33.452,7.253,33.539,11.259Z" fill="#3d3d3d"/>
<path id="Path_4465" data-name="Path 4465" d="M33.389,27.8a6.76,6.76,0,0,0-.026-5.35l-3.618,2.514a2.626,2.626,0,0,0-.524.48,2.882,2.882,0,0,0-.2,3.919,3.365,3.365,0,0,0-.367.422,2.833,2.833,0,0,0,.006,3.69c-.043.042-.085.086-.124.132-2.549,2.97.917,5.083.917,5.083a5.421,5.421,0,0,0,3.554-6.78A6.03,6.03,0,0,0,33.389,27.8Z" fill="#3d3d3d"/>
<path id="Path_4466" data-name="Path 4466" d="M31.27,39.657H28.377a.7.7,0,0,1-.7-.7V37.87a.7.7,0,0,1,.7-.7H31.27a.7.7,0,0,1,.7.7v1.087A.7.7,0,0,1,31.27,39.657Z" fill="#d02127"/>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="12.179" height="12.188" viewBox="0 0 12.179 12.188">
<path id="Path_4406" data-name="Path 4406" d="M12.039,10.586c1.24-1.24,1.644-1.48,1.348-1.776L12.38,7.8a.3.3,0,0,0-.427,0L10.6,9.152l-.976-.976A4.378,4.378,0,1,0,8.2,9.615l.973.972c-1.24,1.24-1.644,1.48-1.348,1.776L8.828,13.37a.3.3,0,0,0,.427,0L10.6,12.022c1.457,1.457,1.679,1.847,1.977,1.55.97-.97,1.1-1.02,1.1-1.222s-.058-.183-1.638-1.764ZM5.892,8.77a2.9,2.9,0,1,1,2.9-2.9A2.9,2.9,0,0,1,5.892,8.77Z" transform="translate(-1.498 -1.476)" fill="#f0448d"/>
</svg>

After

Width:  |  Height:  |  Size: 565 B

@ -0,0 +1,4 @@
<svg id="hospital_3_" data-name="hospital (3)" xmlns="http://www.w3.org/2000/svg" width="20.5" height="20.5" viewBox="0 0 20.5 20.5">
<path id="Path_4585" data-name="Path 4585" d="M19.9,182.442a.6.6,0,0,0-.6.6v3H18a2.982,2.982,0,0,0-2.921-2.4H8.648v.578L7.413,184.2a3.059,3.059,0,0,0-2.577-.643,1.8,1.8,0,1,0-3.512-.652l-.123-.077V180.6a.6.6,0,0,0-1.2,0v12.092a.6.6,0,0,0,1.2,0v-3H19.3v3a.6.6,0,0,0,1.2,0v-9.649A.6.6,0,0,0,19.9,182.442Zm-18.7,3.6v-1.8l2.853,1.8Z" transform="translate(0 -172.793)" fill="#28323a"/>
<path id="Path_4586" data-name="Path 4586" d="M136.6,1.842h1.2v1.2h-.6a.6.6,0,0,0-.6.6v1.2a1.8,1.8,0,0,0,3.6,0v-1.2a.6.6,0,0,0-.6-.6H139v-1.2h2.4V9.649h1.2V.6a.6.6,0,1,0-1.2.04h-4.8a.6.6,0,0,0,0,1.2Z" transform="translate(-130.555)" fill="#28323a"/>
</svg>

After

Width:  |  Height:  |  Size: 776 B

@ -0,0 +1,56 @@
<svg id="man_5_" data-name="man (5)" xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48">
<g id="Group_7139" data-name="Group 7139">
<g id="Group_7138" data-name="Group 7138">
<g id="Group_7137" data-name="Group 7137">
<g id="Group_7136" data-name="Group 7136">
<g id="XMLID_2211_">
<g id="XMLID_2212_">
<g id="XMLID_2213_">
<g id="XMLID_2214_">
<g id="XMLID_2215_">
<g id="XMLID_2216_">
<g id="XMLID_2217_">
<g id="XMLID_2218_">
<g id="XMLID_2219_">
<g id="XMLID_2220_">
<g id="XMLID_2221_">
<g id="XMLID_2222_">
<g id="XMLID_2223_">
<g id="XMLID_2224_">
<g id="XMLID_2225_">
<path id="Path_4436" data-name="Path 4436" d="M0,24A24,24,0,1,1,42.887,38.81c-4.394,5.6-11.221,3.983-18.887,3.983S9.507,44.405,5.113,38.81A23.9,23.9,0,0,1,0,24Z" fill="#e2e2e2"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<path id="Path_4437" data-name="Path 4437" d="M42.887,38.81A23.9,23.9,0,0,0,48,24q0-.493-.02-.982L34.651,9.689C26.856,6.362,15.212,20.337,15.212,20.337l9.778,9.778,4.217,12.829C34.718,43.153,39.518,43.1,42.887,38.81Z" fill="#c4c4c4"/>
<g id="Group_7140" data-name="Group 7140">
<path id="Path_4438" data-name="Path 4438" d="M18.747,23.459H29.253V34.6H18.747Z" fill="#eaa678"/>
<path id="Path_4439" data-name="Path 4439" d="M24,23.46h5.253V34.6H24Z" fill="#d38c5b"/>
<path id="Path_4440" data-name="Path 4440" d="M32.43,46.477a23.683,23.683,0,0,1-3.177.946,24.178,24.178,0,0,1-10.506,0,23.683,23.683,0,0,1-3.177-.946l3.177-16.024L24,33.857l5.253-3.4Z" fill="#d02127"/>
<path id="Path_4441" data-name="Path 4441" d="M32.43,46.477a23.683,23.683,0,0,1-3.177.946A24,24,0,0,1,24,48V33.857l5.253-3.4Z" fill="#aa191e"/>
<path id="Path_4442" data-name="Path 4442" d="M18.747,30.452V47.423A24,24,0,0,1,5.113,38.81V35.741A5.289,5.289,0,0,1,10.4,30.452Z" fill="#2b353e"/>
<path id="Path_4443" data-name="Path 4443" d="M42.887,35.741V38.81a24,24,0,0,1-13.634,8.613V30.452H37.6A5.289,5.289,0,0,1,42.887,35.741Z" fill="#2b353e"/>
<path id="Path_4444" data-name="Path 4444" d="M13.7,39.923v5.761a23.726,23.726,0,0,1-3.023-1.717V39.923Z" fill="#989898"/>
<path id="Path_4445" data-name="Path 4445" d="M37.362,39.923v4.016a23.888,23.888,0,0,1-3.023,1.725V39.923Z" fill="#989898"/>
<path id="Path_4446" data-name="Path 4446" d="M32.274,14.271C31.924,8.965,27.632,7,24,7s-7.924,1.961-8.274,7.267a2.285,2.285,0,0,0-1.5,2.409l.161,2.267a1.875,1.875,0,0,0,2.043,1.7l.175-.019c2.075,5.573,5.33,6.154,7.4,6.48,2.066-.326,5.321-.907,7.4-6.48l.175.019a1.875,1.875,0,0,0,2.043-1.7l.161-2.267A2.285,2.285,0,0,0,32.274,14.271Z" fill="#ffc397"/>
<path id="Path_4447" data-name="Path 4447" d="M33.775,16.681l-.161,2.267a1.875,1.875,0,0,1-2.043,1.7l-.175-.019a11.863,11.863,0,0,1-2.445,4.151A7.942,7.942,0,0,1,24,27.1V7c3.632,0,7.924,1.961,8.274,7.267a2.285,2.285,0,0,1,1.5,2.409Z" fill="#eaa678"/>
<path id="Path_4448" data-name="Path 4448" d="M34.651,9.689A13.957,13.957,0,0,0,24,4.41a8.424,8.424,0,0,0-4.772,1.436c-.026,0-3.178-.265-4.44,1.943s-.107,6.613,1.16,8.619L17.426,17.7l.68-4.473a17.48,17.48,0,0,0,11.514-.762l.8,5.234,1.478-1.294A12.875,12.875,0,0,0,33.6,10.422C34.277,9.986,34.651,9.689,34.651,9.689Z" fill="#515151"/>
<path id="Path_4449" data-name="Path 4449" d="M29.619,12.467l.8,5.234,1.478-1.294A12.875,12.875,0,0,0,33.6,10.422c.677-.436,1.051-.733,1.051-.733A13.956,13.956,0,0,0,24,4.41v9.415A19.77,19.77,0,0,0,29.619,12.467Z" fill="#3d3d3d"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

@ -0,0 +1,3 @@
<svg id="_14._Men_sign" data-name="14. Men sign" xmlns="http://www.w3.org/2000/svg" width="12.739" height="12.739" viewBox="0 0 12.739 12.739">
<path id="Path_4403" data-name="Path 4403" d="M13.928,1.5H8.757a.313.313,0,0,0-.313.313V3.2a.313.313,0,0,0,.313.313h1.988l-2.3,2.3A4.553,4.553,0,1,0,9.93,7.3l2.3-2.3V6.984a.313.313,0,0,0,.313.313h1.383a.313.313,0,0,0,.313-.313V1.813a.313.313,0,0,0-.313-.313ZM6.057,12.687a3,3,0,1,1,3-3,3,3,0,0,1-3,3Z" transform="translate(-1.502 -1.5)" fill="#1474d5"/>
</svg>

After

Width:  |  Height:  |  Size: 507 B

@ -0,0 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" width="22.631" height="6.466" viewBox="0 0 22.631 6.466">
<g id="more_1_" data-name="more (1)" transform="translate(0 -170.666)">
<g id="Group_7031" data-name="Group 7031" transform="translate(0 170.666)">
<g id="Group_7030" data-name="Group 7030" transform="translate(0 0)">
<circle id="Ellipse_145" data-name="Ellipse 145" cx="3.233" cy="3.233" r="3.233"/>
</g>
</g>
<g id="Group_7033" data-name="Group 7033" transform="translate(8.082 170.666)">
<g id="Group_7032" data-name="Group 7032" transform="translate(0 0)">
<circle id="Ellipse_146" data-name="Ellipse 146" cx="3.233" cy="3.233" r="3.233"/>
</g>
</g>
<g id="Group_7035" data-name="Group 7035" transform="translate(16.165 170.666)">
<g id="Group_7034" data-name="Group 7034" transform="translate(0 0)">
<circle id="Ellipse_147" data-name="Ellipse 147" cx="3.233" cy="3.233" r="3.233"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 996 B

@ -0,0 +1,69 @@
<svg xmlns="http://www.w3.org/2000/svg" width="118.141" height="107.644" viewBox="0 0 118.141 107.644">
<g id="content" transform="translate(0 -22.748)">
<g id="Group_7442" data-name="Group 7442" transform="translate(1.731 28.436)">
<g id="Group_7439" data-name="Group 7439" transform="translate(0 8.932)">
<g id="Group_7438" data-name="Group 7438">
<g id="Group_7434" data-name="Group 7434" transform="translate(0 21.014)">
<g id="Group_7430" data-name="Group 7430" transform="translate(63.164)">
<g id="Group_7429" data-name="Group 7429">
<path id="Path_4552" data-name="Path 4552" d="M332.756,179.321v66a2.139,2.139,0,0,1-2.141,2.139H283.381a2.141,2.141,0,0,1-2.141-2.139v-66a2.143,2.143,0,0,1,2.141-2.141h47.233a2.141,2.141,0,0,1,2.141,2.141Z" transform="translate(-281.24 -177.18)" fill="#fff"/>
<g id="Group_7428" data-name="Group 7428">
<path id="Path_4553" data-name="Path 4553" d="M304.644,177.18v63.254a2.475,2.475,0,0,1-2.476,2.476H281.24V179.321a2.143,2.143,0,0,1,2.141-2.141Z" transform="translate(-281.24 -177.18)" fill="#dbdbdb"/>
<path id="Path_4554" data-name="Path 4554" d="M332.758,195.96V179.322a2.141,2.141,0,0,0-2.141-2.141H283.384a2.141,2.141,0,0,0-2.141,2.141V195.96Z" transform="translate(-281.242 -177.18)" fill="#dbdbdb"/>
<path id="Path_4555" data-name="Path 4555" d="M473.157,179.319v66a2.14,2.14,0,0,1-2.141,2.141h-7.26a2.14,2.14,0,0,0,2.141-2.141v-66a2.141,2.141,0,0,0-2.141-2.141h7.26A2.141,2.141,0,0,1,473.157,179.319Z" transform="translate(-421.642 -177.178)" fill="#dbdbdb"/>
</g>
<path id="Path_4556" data-name="Path 4556" d="M332.756,179.321V189.4H281.24V179.321a2.143,2.143,0,0,1,2.141-2.141h47.233A2.141,2.141,0,0,1,332.756,179.321Z" transform="translate(-281.24 -177.18)" fill="#d02127"/>
<path id="Path_4557" data-name="Path 4557" d="M371.453,179.57a6.171,6.171,0,1,1-11.863-2.391h11.383A6.141,6.141,0,0,1,371.453,179.57Z" transform="translate(-341.142 -177.18)" fill="#d02127"/>
<path id="Path_4558" data-name="Path 4558" d="M473.157,179.319v10.075H465.9V179.319a2.141,2.141,0,0,0-2.141-2.141h7.26A2.141,2.141,0,0,1,473.157,179.319Z" transform="translate(-421.642 -177.178)" fill="#d02127"/>
</g>
</g>
<g id="Group_7433" data-name="Group 7433">
<g id="Group_7432" data-name="Group 7432">
<path id="Path_4559" data-name="Path 4559" d="M59.016,179.321v66a2.141,2.141,0,0,1-2.141,2.139H9.641A2.139,2.139,0,0,1,7.5,245.319v-66a2.141,2.141,0,0,1,2.141-2.141H56.875a2.143,2.143,0,0,1,2.141,2.141Z" transform="translate(-7.5 -177.18)" fill="#fff"/>
<g id="Group_7431" data-name="Group 7431" transform="translate(0)">
<path id="Path_4560" data-name="Path 4560" d="M148.988,179.321V242.91H126.936a2.476,2.476,0,0,1-2.476-2.476V177.18h22.387a2.143,2.143,0,0,1,2.141,2.141Z" transform="translate(-97.472 -177.18)" fill="#dbdbdb"/>
<path id="Path_4561" data-name="Path 4561" d="M59.015,195.96V179.322a2.141,2.141,0,0,0-2.141-2.141H9.641A2.141,2.141,0,0,0,7.5,179.322V195.96Z" transform="translate(-7.5 -177.18)" fill="#dbdbdb"/>
<path id="Path_4562" data-name="Path 4562" d="M199.413,179.319v66a2.14,2.14,0,0,1-2.141,2.141h-7.26a2.14,2.14,0,0,0,2.141-2.141v-66a2.141,2.141,0,0,0-2.141-2.141h7.26A2.141,2.141,0,0,1,199.413,179.319Z" transform="translate(-147.898 -177.178)" fill="#dbdbdb"/>
</g>
<path id="Path_4563" data-name="Path 4563" d="M59.015,189.4H7.5V179.323a2.141,2.141,0,0,1,2.141-2.141H56.875a2.141,2.141,0,0,1,2.141,2.141Z" transform="translate(-7.5 -177.181)" fill="#d02127"/>
<path id="Path_4564" data-name="Path 4564" d="M199.413,179.319v10.075h-7.26V179.319a2.141,2.141,0,0,0-2.141-2.141h7.26A2.141,2.141,0,0,1,199.413,179.319Z" transform="translate(-147.898 -177.178)" fill="#20bfd5"/>
</g>
</g>
</g>
<g id="Group_7437" data-name="Group 7437" transform="translate(26.988)">
<g id="Group_7436" data-name="Group 7436">
<path id="Path_4565" data-name="Path 4565" d="M181.569,167.391H126.94a2.476,2.476,0,0,1-2.476-2.476V88.586a2.476,2.476,0,0,1,2.476-2.476h54.629a2.476,2.476,0,0,1,2.476,2.476v76.329A2.476,2.476,0,0,1,181.569,167.391Z" transform="translate(-124.463 -86.109)" fill="#fff"/>
<path id="Path_4566" data-name="Path 4566" d="M184.044,106.725V88.586a2.476,2.476,0,0,0-2.476-2.476H126.94a2.476,2.476,0,0,0-2.476,2.476v18.14Z" transform="translate(-124.463 -86.109)" fill="#dbdbdb"/>
<path id="Path_4567" data-name="Path 4567" d="M346.423,88.582v76.33a2.475,2.475,0,0,1-2.476,2.476h-8.4a2.475,2.475,0,0,0,2.476-2.476V88.582a2.476,2.476,0,0,0-2.476-2.476h8.4A2.476,2.476,0,0,1,346.423,88.582Z" transform="translate(-286.842 -86.106)" fill="#dbdbdb"/>
<path id="Path_4568" data-name="Path 4568" d="M184.041,88.586v11.653H124.46V88.586a2.476,2.476,0,0,1,2.476-2.476h54.629A2.475,2.475,0,0,1,184.041,88.586Z" transform="translate(-124.46 -86.109)" fill="#d02127"/>
<g id="Group_7435" data-name="Group 7435" transform="translate(37.747)">
<path id="Path_4569" data-name="Path 4569" d="M299.01,88.138a5.48,5.48,0,1,1-10.57-2.028h10.18A5.435,5.435,0,0,1,299.01,88.138Z" transform="translate(-288.05 -86.109)" fill="#d02127"/>
<path id="Path_4570" data-name="Path 4570" d="M346.423,88.582v11.653h-8.4V88.582a2.476,2.476,0,0,0-2.476-2.476h8.4A2.476,2.476,0,0,1,346.423,88.582Z" transform="translate(-324.59 -86.106)" fill="#d02127"/>
</g>
</g>
</g>
</g>
</g>
<g id="Group_7440" data-name="Group 7440" transform="translate(81.132 21.147)">
<path id="Path_4571" data-name="Path 4571" d="M359.11,145.215a6.171,6.171,0,1,1,6.171,6.171,6.171,6.171,0,0,1-6.171-6.171" transform="translate(-359.11 -139.044)" fill="#d02127"/>
<path id="Path_4572" data-name="Path 4572" d="M372.29,150.533a5.46,5.46,0,0,0,0-10.638,6.173,6.173,0,1,1,0,10.638" transform="translate(-369.249 -139.044)" fill="#d02127"/>
</g>
<g id="Group_7441" data-name="Group 7441" transform="translate(64.735)">
<path id="Path_4573" data-name="Path 4573" d="M288.05,52.878a5.48,5.48,0,1,1,5.48,5.48,5.48,5.48,0,0,1-5.48-5.48" transform="translate(-288.05 -47.398)" fill="#d02127"/>
<path id="Path_4574" data-name="Path 4574" d="M299.754,57.6a4.849,4.849,0,0,0,0-9.446,5.481,5.481,0,1,1,0,9.446" transform="translate(-297.053 -47.397)" fill="#d02127"/>
</g>
</g>
<g id="Group_7443" data-name="Group 7443" transform="translate(0 22.748)">
<path id="Path_4575" data-name="Path 4575" d="M114.27,69.844H96.883a7.887,7.887,0,0,0-6.853-8.735V53.036a4.211,4.211,0,0,0-4.206-4.206H78.948a7.211,7.211,0,1,0-14,0H31.2a4.211,4.211,0,0,0-4.206,4.206V69.844H21.93a1.731,1.731,0,0,0,0,3.461h5.058V82.06H3.461V73.716a.411.411,0,0,1,.41-.41h9.515a1.731,1.731,0,0,0,0-3.461H3.871A3.876,3.876,0,0,0,0,73.716v66a3.876,3.876,0,0,0,3.871,3.871H51.105a3.876,3.876,0,0,0,3.871-3.871v-6.14h8.188v6.14a3.876,3.876,0,0,0,3.871,3.871H81.123a1.731,1.731,0,0,0,0-3.461H67.036a.41.41,0,0,1-.41-.41v-6.14h19.2a4.211,4.211,0,0,0,4.206-4.206V85.521h24.65v54.191a.41.41,0,0,1-.41.41h-24.6a1.731,1.731,0,0,0,0,3.461h24.6a3.876,3.876,0,0,0,3.871-3.871v-66a3.876,3.876,0,0,0-3.871-3.871Zm-20.8-.9a4.441,4.441,0,1,1-4.441-4.441A4.446,4.446,0,0,1,93.475,68.946ZM71.946,43.358a3.75,3.75,0,1,1-3.75,3.75A3.754,3.754,0,0,1,71.946,43.358ZM31.2,52.291H66.941a7.192,7.192,0,0,0,10.011,0h8.873a.746.746,0,0,1,.745.745v8.4a7.9,7.9,0,0,0-2.683,1.519H30.45V53.036a.746.746,0,0,1,.745-.745Zm54.629,77.82H31.2a.746.746,0,0,1-.745-.745V109.979a1.731,1.731,0,0,0-3.461,0v19.386a4.211,4.211,0,0,0,4.206,4.206h20.32v6.14a.41.41,0,0,1-.41.41H3.871a.41.41,0,0,1-.41-.41V85.521H26.989v15.915a1.731,1.731,0,1,0,3.461,0V66.419h51.1a7.895,7.895,0,0,0,5.021,10.033v52.913A.746.746,0,0,1,85.824,130.111ZM90.03,82.06V76.783a7.909,7.909,0,0,0,5.59-3.478h18.65a.41.41,0,0,1,.41.41V82.06H90.03Z" transform="translate(0 -35.94)" fill="#2e303a"/>
<path id="Path_4576" data-name="Path 4576" d="M238.224,296.64a8.143,8.143,0,0,0-5.276-1.877h-.027a8.138,8.138,0,0,0-5.261,1.846,1.73,1.73,0,1,0,2.231,2.646,4.746,4.746,0,0,1,3.03-1.03h.015a4.75,4.75,0,0,1,3.04,1.048,1.731,1.731,0,0,0,2.247-2.633Z" transform="translate(-174.656 -231.997)"/>
<path id="Path_4577" data-name="Path 4577" d="M288.664,267.015l-.045,0h-.03a1.73,1.73,0,0,0-.156,3.452l.039,0c.042,0,.085.007.128.007h.01a1.73,1.73,0,0,0,.054-3.459Z" transform="translate(-220.675 -210.65)"/>
<path id="Path_4578" data-name="Path 4578" d="M207.009,267.012h-.03a1.731,1.731,0,0,0,.011,3.461H207a1.731,1.731,0,0,0,.009-3.461Z" transform="translate(-157.897 -210.65)"/>
<path id="Path_4579" data-name="Path 4579" d="M156.674,112.612h.009c.038,0,.077,0,.115.006l.062,0h.009a1.73,1.73,0,0,0,.346-3.426h-.007c-.053-.011-.108-.019-.162-.025-.02,0-.04,0-.06,0-.036,0-.072-.006-.109-.006h-.031a1.721,1.721,0,0,0-1.722,1.731,1.738,1.738,0,0,0,1.549,1.719Z" transform="translate(-119.331 -89.223)"/>
<path id="Path_4580" data-name="Path 4580" d="M179.553,112.623a1.731,1.731,0,0,0,0-3.461h-.021a1.722,1.722,0,0,0-1.72,1.731A1.74,1.74,0,0,0,179.553,112.623Z" transform="translate(-136.783 -89.223)"/>
<path id="Path_4581" data-name="Path 4581" d="M202.243,112.623a1.731,1.731,0,0,0,0-3.461h-.021a1.722,1.722,0,0,0-1.72,1.731A1.74,1.74,0,0,0,202.243,112.623Z" transform="translate(-154.237 -89.223)"/>
<path id="Path_4582" data-name="Path 4582" d="M53.4,116.408a1.73,1.73,0,0,0,2.447,0l.922-.922.922.922a1.73,1.73,0,0,0,2.447-2.447l-.922-.922.922-.922A1.73,1.73,0,0,0,57.7,109.67l-.922.922-.922-.922a1.73,1.73,0,0,0-2.447,2.447l.922.922-.922.922A1.73,1.73,0,0,0,53.4,116.408Z" transform="translate(-40.692 -89.223)"/>
<path id="Path_4583" data-name="Path 4583" d="M428.867,107.109a1.73,1.73,0,0,0,2.447,0l.922-.922.922.922a1.73,1.73,0,0,0,2.447-2.447l-.922-.922.922-.922a1.73,1.73,0,0,0-2.447-2.447l-.922.922-.922-.922a1.73,1.73,0,1,0-2.447,2.447l.922.922-.922.922A1.73,1.73,0,0,0,428.867,107.109Z" transform="translate(-329.518 -82.07)"/>
<path id="Path_4584" data-name="Path 4584" d="M237.941,29.993a1.73,1.73,0,0,0,2.447,0l.922-.922.922.922a1.73,1.73,0,0,0,2.447-2.447l-.922-.922.922-.922a1.73,1.73,0,0,0-2.447-2.447l-.922.922-.922-.922a1.73,1.73,0,1,0-2.447,2.447l.922.922-.922.922A1.73,1.73,0,0,0,237.941,29.993Z" transform="translate(-182.648 -22.748)"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="25.347" height="25.347" viewBox="0 0 25.347 25.347">
<path id="ekg-monitor" d="M.878,0H24.471a.878.878,0,0,1,.877.877V11.77l-7.647,0a.906.906,0,0,0-.845.582l-1.678,4.393L10.98,5.741a.9.9,0,0,0-.846-.583h0a.9.9,0,0,0-.846.582L6.982,11.774,0,11.77V.878A.878.878,0,0,1,.878,0ZM24.471,25.348a.878.878,0,0,0,.877-.877V13.58l-7.023,0-2.3,6.026a.905.905,0,0,1-1.692,0L10.133,8.6,8.451,13a.906.906,0,0,1-.846.582h0l-7.6,0V24.471a.878.878,0,0,0,.877.877H24.471Z" transform="translate(-0.001 -0.001)" fill="#28323a" fill-rule="evenodd"/>
</svg>

After

Width:  |  Height:  |  Size: 584 B

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="33.043" height="27.106" viewBox="0 0 33.043 27.106">
<path id="process" d="M28.2,19.555,27.042,21.1l1.549,1.162H25.1a3.868,3.868,0,0,0-3.735-2.9H11.681a3.868,3.868,0,0,0-3.735,2.9H5.808a3.872,3.872,0,0,1,0-7.744H7.946a3.868,3.868,0,0,0,3.735,2.9h9.681a3.868,3.868,0,0,0,3.735-2.9h2.138a5.808,5.808,0,1,0,0-11.617H25.1A3.868,3.868,0,0,0,21.362,0H11.681A3.868,3.868,0,0,0,7.946,2.9H7.1L3.485.194,2.324,1.742,3.872,2.9H0V4.84H3.872L2.324,6,3.485,7.551,7.1,4.84h.847a3.868,3.868,0,0,0,3.735,2.9h9.681A3.868,3.868,0,0,0,25.1,4.84h2.138a3.872,3.872,0,1,1,0,7.744H25.1a3.868,3.868,0,0,0-3.735-2.9H11.681a3.868,3.868,0,0,0-3.735,2.9H5.808a5.808,5.808,0,1,0,0,11.617H7.946a3.868,3.868,0,0,0,3.735,2.9h9.681A3.868,3.868,0,0,0,25.1,24.2h3.494l-1.549,1.162L28.2,26.912l4.84-3.678Zm0,0" fill="#28323a"/>
</svg>

After

Width:  |  Height:  |  Size: 847 B

@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" width="31.83" height="27.976" viewBox="0 0 31.83 27.976">
<g id="sticky-note" transform="translate(0 -31.001)">
<g id="Group_7171" data-name="Group 7171" transform="translate(11.19 31.001)">
<path id="Path_4476" data-name="Path 4476" d="M180,38.461V31.934a.933.933,0,0,1,1.865,0v6.528Z" transform="translate(-180 -31.001)" fill="#28323a"/>
</g>
<g id="Group_7172" data-name="Group 7172" transform="translate(0 46.403)">
<path id="Path_4477" data-name="Path 4477" d="M8.393,289.46a2.779,2.779,0,0,1-1.978-.819A28.3,28.3,0,0,1,0,278.751v11.641a.933.933,0,0,0,.933.933H23.313a.933.933,0,0,0,.933-.933v-.933Z" transform="translate(0 -278.751)" fill="#28323a"/>
</g>
<g id="Group_7173" data-name="Group 7173" transform="translate(0 34.731)">
<path id="Path_4478" data-name="Path 4478" d="M31.557,109.924a24.777,24.777,0,0,1-7.312-17.351v-.64A.933.933,0,0,0,23.313,91H14.92v4.663a.933.933,0,0,1-.933.933h-3.73a.933.933,0,0,1-.933-.933V91H.933A.933.933,0,0,0,0,91.934v.64a26.393,26.393,0,0,0,7.733,18.67.934.934,0,0,0,.66.273H30.9a.933.933,0,0,0,.66-1.592ZM12.123,98.461h7.46a.933.933,0,0,1,0,1.865h-7.46a.933.933,0,0,1,0-1.865Zm7.46,9.325H10.258a.933.933,0,0,1,0-1.865h9.325a.933.933,0,0,1,0,1.865Zm1.865-3.73H8.393a.933.933,0,1,1,0-1.865H21.448a.933.933,0,1,1,0,1.865Z" transform="translate(0 -91.001)" fill="#28323a"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="35.842" height="28.675" viewBox="0 0 35.842 28.675">
<path id="Path_4336" data-name="Path 4336" d="M38.948,34.883H29.987V31.3c5.825,0,5.771.134,6.12-.4l1.559-2.285A2.688,2.688,0,0,0,38,23.422a5.377,5.377,0,0,0-5.323-4.669H28.956A12.545,12.545,0,0,0,16.545,8C4.3,8-.668,23.843,9.377,30.823v4.059H6.688a.9.9,0,1,0,0,1.792H38.948a.9.9,0,1,0,0-1.792ZM8.561,21.656a8.065,8.065,0,0,1,14.92-5.224,7.832,7.832,0,0,1,.9,2.321c-2.1,0-1.577.806-1.792.054.161.484.09.224-.367.627a3.584,3.584,0,0,0-6.066,3.8,2.689,2.689,0,0,0,.134,5.377,8.065,8.065,0,0,1-7.724-6.954Zm28.594,3.369a.9.9,0,0,1,.618,1.532c-.367.385,1.174.26-21.228.26a.9.9,0,0,1-.618-1.532C16.286,24.9,14.825,25.026,37.155,25.026Zm-16.542,4.48-.6-.9h4.749a2.841,2.841,0,0,0-.152.9Zm-3.172-8.065a1.792,1.792,0,1,1,1.792,1.792A1.792,1.792,0,0,1,17.442,21.441ZM23.714,31.3h.9v3.584h-.9Zm11.165-1.792H29.987a2.688,2.688,0,0,0-.152-.9H35.48Zm1.263-6.273c-12.993,0-12.249.09-12.706-.215a1.335,1.335,0,0,1-.224-2.079c.5-.565.547-.394,9.463-.394a3.584,3.584,0,0,1,3.468,2.688ZM15.649,32.194h1.792v2.688H15.649Z" transform="translate(-4.002 -8)" fill="#28323a"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30">
<path id="Path_4487" data-name="Path 4487" d="M15.879,1.8V0H14.121V1.8C6.047,2.2,0,8.143,0,15.879V17.3l1.27-.629a8.69,8.69,0,0,1,3.182-.787,5.156,5.156,0,0,1,2.9,1.5l.621.615.62-.615a5.156,5.156,0,0,1,2.9-1.5,4.774,4.774,0,0,1,2.637,1.267V27.363a2.637,2.637,0,0,0,5.273,0V25.605H17.637v1.758a.879.879,0,0,1-1.758,0V17.146a4.774,4.774,0,0,1,2.637-1.267,5.156,5.156,0,0,1,2.9,1.5l.621.615.62-.615a5.344,5.344,0,0,1,2.954-1.5,8.222,8.222,0,0,1,3.123.787L30,17.3V15.879C30,8.143,23.953,2.2,15.879,1.8Z" fill="#28323a"/>
</svg>

After

Width:  |  Height:  |  Size: 609 B

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" width="33.112" height="30.051" viewBox="0 0 33.112 30.051">
<g id="reception" transform="translate(0 -23.667)">
<path id="Path_4479" data-name="Path 4479" d="M0,313.745H33.112V301.673H0Zm15.586-9.318h1.94v2.183h2.183v1.94H17.526v2.183h-1.94V308.55H13.4v-1.94h2.183Z" transform="translate(0 -260.027)" fill="#28323a"/>
<path id="Path_4480" data-name="Path 4480" d="M30,236.668H59.234v2.264H30Z" transform="translate(-28.062 -199.226)" fill="#28323a"/>
<path id="Path_4481" data-name="Path 4481" d="M108.058,103.919c0-.057,0-.113-.005-.169h-6.1c0,.056-.005.112-.005.169a3.057,3.057,0,0,0,2.717,3.034h.672A3.057,3.057,0,0,0,108.058,103.919Z" transform="translate(-95.358 -74.904)" fill="#28323a"/>
<path id="Path_4482" data-name="Path 4482" d="M65.158,153.293h-.911a3.888,3.888,0,0,0-3.86,3.452h4.771v-3.452Z" transform="translate(-56.482 -121.243)" fill="#28323a"/>
<path id="Path_4483" data-name="Path 4483" d="M165.076,153.293h-.911v3.452h4.771a3.888,3.888,0,0,0-3.86-3.452Z" transform="translate(-153.548 -121.243)" fill="#28323a"/>
<path id="Path_4484" data-name="Path 4484" d="M98.828,26.906,99.4,24.35a10.351,10.351,0,0,0-7.394,0l.569,2.556Z" transform="translate(-86.054)" fill="#28323a"/>
<path id="Path_4485" data-name="Path 4485" d="M296.991,135.98h10.025v4.572H296.991Z" transform="translate(-277.784 -105.049)" fill="#28323a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="17.016" height="15.893" viewBox="0 0 17.016 15.893">
<g id="Layer_2" data-name="Layer 2" transform="translate(-1 -1.98)">
<path id="Path_4511" data-name="Path 4511" d="M15.429,21.777H3.586A2.592,2.592,0,0,1,1,19.2V11H18.016v8.2a2.592,2.592,0,0,1-2.586,2.581ZM2.134,12.134V19.2a1.458,1.458,0,0,0,1.452,1.446H15.429A1.458,1.458,0,0,0,16.881,19.2V12.134Z" transform="translate(0 -3.904)" fill="#28323a"/>
<path id="Path_4512" data-name="Path 4512" d="M18.016,9.1H1V6.6A2.592,2.592,0,0,1,3.586,4H15.429a2.592,2.592,0,0,1,2.586,2.6ZM2.134,7.97H16.881V6.6a1.458,1.458,0,0,0-1.452-1.463H3.586A1.458,1.458,0,0,0,2.134,6.6Z" transform="translate(0 -0.874)" fill="#28323a"/>
<rect id="Rectangle_17397" data-name="Rectangle 17397" width="1.134" height="3.437" rx="0.567" transform="translate(4.369 1.98)" fill="#28323a"/>
<rect id="Rectangle_17398" data-name="Rectangle 17398" width="1.134" height="3.437" rx="0.567" transform="translate(13.512 1.98)" fill="#28323a"/>
<rect id="Rectangle_17399" data-name="Rectangle 17399" width="1.134" height="3.437" rx="0.567" transform="translate(8.941 1.98)" fill="#28323a"/>
<path id="Path_4513" data-name="Path 4513" d="M2.31,12v9.217H17.732V12Zm4.929,5.717a.567.567,0,1,1,.567-.567A.567.567,0,0,1,7.239,17.717Zm2.836,0a.567.567,0,1,1,.567-.567A.567.567,0,0,1,10.075,17.717Zm2.836,0a.567.567,0,1,1,.567-.567A.567.567,0,0,1,12.911,17.717Z" transform="translate(-0.567 -4.337)" fill="#28323a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -0,0 +1,4 @@
<svg id="add_3_" data-name="add (3)" xmlns="http://www.w3.org/2000/svg" width="25.027" height="25.027" viewBox="0 0 25.027 25.027">
<path id="Path_4468" data-name="Path 4468" d="M20.668,2.086A3.128,3.128,0,0,0,17.728,0H3.128A3.138,3.138,0,0,0,0,3.128v14.6a3.128,3.128,0,0,0,2.086,2.941V7.3A5.214,5.214,0,0,1,7.3,2.086Z" fill="#fff"/>
<path id="Path_4469" data-name="Path 4469" d="M21.728,4H7.128A3.138,3.138,0,0,0,4,7.128v14.6a3.138,3.138,0,0,0,3.128,3.128h14.6a3.138,3.138,0,0,0,3.128-3.128V7.128A3.138,3.138,0,0,0,21.728,4ZM18.6,15.471H15.471V18.6a1.043,1.043,0,0,1-2.086,0V15.471H10.257a1.043,1.043,0,1,1,0-2.086h3.128V10.257a1.043,1.043,0,1,1,2.086,0v3.128H18.6a1.043,1.043,0,0,1,0,2.086Z" transform="translate(0.171 0.171)" fill="#fff"/>
</svg>

After

Width:  |  Height:  |  Size: 754 B

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="18.824" height="29.092" viewBox="0 0 18.824 29.092">
<g id="sugar-blood-level_1_" data-name="sugar-blood-level (1)" transform="translate(-90)">
<path id="Path_4645" data-name="Path 4645" d="M106.257,0H92.567A2.57,2.57,0,0,0,90,2.567V12.835h18.824V2.567A2.57,2.57,0,0,0,106.257,0ZM99.412,11.123a2.57,2.57,0,0,1-2.567-2.567,5.241,5.241,0,0,1,.971-2.5c.44-.758.873-1.387.892-1.414l.7-1.019.7,1.019c.018.026.452.656.892,1.414a5.241,5.241,0,0,1,.971,2.5,2.57,2.57,0,0,1-2.567,2.567Z" fill="#28323a"/>
<path id="Path_4646" data-name="Path 4646" d="M240,119.644a.856.856,0,0,0,1.711,0,6.4,6.4,0,0,0-.856-1.837,6.393,6.393,0,0,0-.856,1.837Z" transform="translate(-141.444 -111.087)" fill="#28323a"/>
<path id="Path_4647" data-name="Path 4647" d="M195,315h6.845v2.567H195Z" transform="translate(-99.01 -297.031)" fill="#28323a"/>
<path id="Path_4648" data-name="Path 4648" d="M223,390h3.537v1.711H223Z" transform="translate(-125.413 -367.753)" fill="#28323a"/>
<path id="Path_4649" data-name="Path 4649" d="M90,256.711a5.142,5.142,0,0,0,4.278,5.062v-5.062h10.268v5.062a5.142,5.142,0,0,0,4.278-5.062V255H90Z" transform="translate(0 -240.454)" fill="#28323a"/>
<path id="Path_4650" data-name="Path 4650" d="M223,450h3.537v3.423H223Z" transform="translate(-125.413 -424.331)" fill="#28323a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="25.47" height="29.309" viewBox="0 0 25.47 29.309">
<path id="diagnose" d="M59.073,10.053a.6.6,0,0,1,.174.123L63.268,14.2a.6.6,0,0,1,.123.174H59.669a.6.6,0,0,1-.6-.6V10.053ZM55.566,20.885A6.3,6.3,0,0,1,60.6,30.972l1.51,1.51a.811.811,0,0,1,.976.128l4.371,4.371a.81.81,0,0,1,0,1.143l-.951.951a.81.81,0,0,1-1.143,0L60.992,34.7a.811.811,0,0,1-.128-.976l-1.51-1.51a6.3,6.3,0,1,1-3.788-11.332Zm0,1.749a4.55,4.55,0,1,0,4.55,4.55A4.55,4.55,0,0,0,55.566,22.634Zm5.91,14.239-1.327-1.327a1.993,1.993,0,0,1-.584-1.433l-.373-.373a7.487,7.487,0,1,1,2.93-2.93l.373.373a2,2,0,0,1,.948.227V15.562H59.669a1.789,1.789,0,0,1-1.787-1.787V10H42.818a.6.6,0,0,0-.6.6v25.68a.6.6,0,0,0,.6.6H61.476ZM49.529,13.8a.3.3,0,0,1,.3.3v1.67H51.5a.3.3,0,0,1,.3.3V18.09a.3.3,0,0,1-.3.3h-1.67v1.67a.3.3,0,0,1-.3.3H47.508a.3.3,0,0,1-.3-.3v-1.67H45.54a.3.3,0,0,1-.3-.3V16.069a.3.3,0,0,1,.3-.3h1.67V14.1a.3.3,0,0,1,.3-.3Z" transform="translate(-42.222 -10.001)" fill="#28323a" fill-rule="evenodd"/>
</svg>

After

Width:  |  Height:  |  Size: 1013 B

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="27" height="27.001" viewBox="0 0 27 27.001">
<g id="direction_1_" data-name="direction (1)" transform="translate(-0.007 0)">
<g id="Group_7454" data-name="Group 7454" transform="translate(0.007 0)">
<path id="Path_4587" data-name="Path 4587" d="M26.606,12.545h0L14.456.395a1.344,1.344,0,0,0-1.9,0L.4,12.545a1.353,1.353,0,0,0,0,1.91L12.552,26.6v.007a1.353,1.353,0,0,0,1.91,0l12.15-12.15A1.347,1.347,0,0,0,26.606,12.545ZM16.2,16.872V13.5H10.8v4.05H8.1v-5.4a1.345,1.345,0,0,1,1.35-1.35H16.2V7.422l4.725,4.725Z" transform="translate(-0.007 0)" fill="#28323a"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 639 B

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="26.278" height="28.04" viewBox="0 0 26.278 28.04">
<g id="report_4_" data-name="report (4)" transform="translate(0.918)">
<path id="Path_4470" data-name="Path 4470" d="M19.105,70.875H3.19A2.721,2.721,0,0,1,.412,68.217V46.281A1.766,1.766,0,0,0-.918,47.911V70.394A1.753,1.753,0,0,0,.895,72.084H17.363A1.774,1.774,0,0,0,19.105,70.875Zm0,0" transform="translate(0 -44.044)" fill="#28323a"/>
<path id="Path_4471" data-name="Path 4471" d="M66.516,24.173V12.207H52.852l-.007.748c0,.007,0-.023,0,.038h5.816a.483.483,0,1,1,0,.967h-5.87a.9.9,0,0,1-.626-.282,1.066,1.066,0,0,1-.289-.745l.007-.725H50.863a.473.473,0,0,1-.483-.473v-.071H48.927a.483.483,0,0,1-.483-.479l-.015-2.1a.5.5,0,0,1,.483-.5h0l1.464.029V8.548a.506.506,0,0,1,.482-.511H66.516V5.862H62.423a1.577,1.577,0,0,1-1.588-1.586V0H48.2a1.769,1.769,0,0,0-1.821,1.629.471.471,0,0,1,.013.063c0,.025,0,.05,0,.075V24.173A1.754,1.754,0,0,0,48.2,25.864H64.672A1.783,1.783,0,0,0,66.516,24.173ZM48.933,15.228h7.948a.483.483,0,1,1,0,.967H48.933a.483.483,0,0,1,0-.967Zm13.833,8.037H48.933a.483.483,0,0,1,0-.967H62.766a.483.483,0,0,1,0,.967Zm0-2.357H48.933a.483.483,0,0,1,0-.967H62.766a.483.483,0,1,1,0,.967Zm0-2.357H48.933a.483.483,0,0,1,0-.967H62.766a.483.483,0,1,1,0,.967Zm0,0" transform="translate(-45.014)" fill="#28323a"/>
<path id="Path_4472" data-name="Path 4472" d="M369.314,20.14l-3.983-4.12v3.5a.61.61,0,0,0,.621.619Zm0,0" transform="translate(-348.543 -15.245)" fill="#28323a"/>
<path id="Path_4473" data-name="Path 4473" d="M520.332,195.25v1.4l1.079-.7Zm0,0" transform="translate(-496.051 -185.811)" fill="#28323a"/>
<path id="Path_4474" data-name="Path 4474" d="M149.082,186.25h16.981v2.236H149.082Zm0,0" transform="translate(-142.748 -177.246)" fill="#28323a"/>
<path id="Path_4475" data-name="Path 4475" d="M109.77,198.986v-1.12l-.981-.011.008,1.131Zm0,0" transform="translate(-104.403 -188.29)" fill="#28323a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="23.812" height="29.735" viewBox="0 0 23.812 29.735">
<g id="insurance_4_" data-name="insurance (4)" transform="translate(-51)">
<path id="Path_4536" data-name="Path 4536" d="M64.94,5.227H60.871a11.918,11.918,0,0,1-4.644,3.251v5.33a11.389,11.389,0,0,0,6.679,10.4,11.389,11.389,0,0,0,6.679-10.4V8.479A11.909,11.909,0,0,1,64.94,5.227Zm2.647,7.494-5.421,5.42a.87.87,0,0,1-1.232,0l-2.71-2.71A.871.871,0,0,1,59.457,14.2l2.094,2.094,4.8-4.8a.871.871,0,0,1,1.232,1.232Zm6.348-8.655a6.734,6.734,0,0,1-5.97-3.6A.871.871,0,0,0,67.195,0H58.617a.872.872,0,0,0-.771.465,6.734,6.734,0,0,1-5.975,3.6A.871.871,0,0,0,51,4.937v8.871A16.66,16.66,0,0,0,62.643,29.695a.868.868,0,0,0,.525,0A16.66,16.66,0,0,0,74.812,13.808V4.937a.876.876,0,0,0-.876-.871Zm-2.608,9.7a13.128,13.128,0,0,1-8.086,12.154.874.874,0,0,1-.67,0,13.128,13.128,0,0,1-8.086-12.154V7.826a.871.871,0,0,1,.6-.828,10.18,10.18,0,0,0,4.709-3.233.871.871,0,0,1,.675-.32h4.876a1.072,1.072,0,0,1,.675.32A10.18,10.18,0,0,0,70.727,7a.869.869,0,0,1,.542.518l0,.008a.881.881,0,0,1,.047.187c0,.006,0,.013,0,.02a.855.855,0,0,1,.006.1Z" fill="#28323a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="27.217" height="28.675" viewBox="0 0 27.217 28.675">
<path id="path2299" d="M18.879,280.47l-2.477.665-.665,2.477,1.812,1.813,2.477-.665c.229-.823.444-1.649.665-2.474Zm-12.249.576v.968h.962c.012,2.559,0,5.112,0,7.667-.06.132-4.81,10.572-6.755,16.407a2.947,2.947,0,0,0,.057,1.826,2.166,2.166,0,0,0,.462.815,1.276,1.276,0,0,0,.912.415h16.46a1.276,1.276,0,0,0,.912-.415,2.165,2.165,0,0,0,.462-.815,2.947,2.947,0,0,0,.057-1.826c-1.945-5.835-6.7-16.274-6.755-16.407.01-2.556.007-5.111.007-7.667h.969v-.968Zm17.457.918-2.477.661-.662,2.478,1.813,1.816,2.477-.665c.217-.827.442-1.652.665-2.478Zm-11.65.05v4.844l-3.875.011,0-4.841Zm7.9,3.531-2.477.665-.665,2.477,1.816,1.813,2.477-.665q.331-1.239.661-2.478Zm.819,6.152v.968h.968v12.106a10.237,10.237,0,0,0,.183,2.884,2.009,2.009,0,0,0,.754,1.084,2.554,2.554,0,0,0,1.484.389,2.552,2.552,0,0,0,1.483-.389,2,2,0,0,0,.751-1.084,10.232,10.232,0,0,0,.185-2.884V292.666h.968V291.7Zm1.933.968H26v3.875H23.09Zm-9.053,5.342a1.321,1.321,0,0,1-.883,1.654,1.305,1.305,0,0,1-.484.05l-.532,1.228a1.877,1.877,0,0,1,.595,1.923l1.211.682a1.3,1.3,0,0,1,.43-.229,1.328,1.328,0,1,1-.886,1.655,1.3,1.3,0,0,1-.034-.591l-1.193-.672a1.908,1.908,0,0,1-.832.526,1.936,1.936,0,0,1-2.408-1.285,1.912,1.912,0,0,1-.009-1.072l-.831-.468a1.3,1.3,0,0,1-.5.29,1.326,1.326,0,1,1,.882-1.655,1.3,1.3,0,0,1,.049.5l.887.5a1.843,1.843,0,0,1,1.769-.531l.528-1.216a1.3,1.3,0,0,1-.3-.51,1.4,1.4,0,0,1,1.226-1.692,1.236,1.236,0,0,1,1.315.919Z" transform="translate(-0.716 -280.47)" fill="#28323a"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -0,0 +1,10 @@
<svg id="Group_765" data-name="Group 765" xmlns="http://www.w3.org/2000/svg" width="24.871" height="13.655" viewBox="0 0 24.871 13.655">
<g id="Group_767" data-name="Group 767">
<path id="Subtraction_64" data-name="Subtraction 64" d="M805.3,951.152h-2.162a2.708,2.708,0,0,1-1.066-.217,2.775,2.775,0,0,1-1.464-1.462,2.692,2.692,0,0,1-.217-1.063v-8.171a2.7,2.7,0,0,1,.217-1.065,2.772,2.772,0,0,1,1.462-1.46,2.7,2.7,0,0,1,1.063-.216h10.134a2.7,2.7,0,0,1,1.065.217,2.771,2.771,0,0,1,1.46,1.462A2.7,2.7,0,0,1,816,940.24v2.015a2.26,2.26,0,0,0,0,4.229v1.922a2.708,2.708,0,0,1-.213,1.066,2.762,2.762,0,0,1-1.459,1.464,2.7,2.7,0,0,1-1.064.217H810.9a7.147,7.147,0,0,0,.772-.766.713.713,0,0,0,.157-.564,10.413,10.413,0,0,0,1.47-2.765,10.044,10.044,0,0,0,.4-1.457,7.294,7.294,0,0,0,.139-1.367,4.83,4.83,0,0,0-.216-1.582,2.067,2.067,0,0,0-.623-.93,2.962,2.962,0,0,0-.991-.518c-.39-.132-.841-.235-1.318-.344h0l0,0a.737.737,0,0,0-.66-.419.749.749,0,1,0,0,1.5.72.72,0,0,0,.441-.165l.018.006h0l.012,0c.477.11.853.2,1.166.3a2.039,2.039,0,0,1,.743.379,1.27,1.27,0,0,1,.385.654,4.37,4.37,0,0,1,.11,1.126,6.294,6.294,0,0,1-.129,1.211,9.1,9.1,0,0,1-.365,1.3,10.147,10.147,0,0,1-.57,1.293,8.958,8.958,0,0,1-.743,1.183.716.716,0,0,0-.493.239,5.065,5.065,0,0,1-1.066.952,2.451,2.451,0,0,1-2.873,0,5.025,5.025,0,0,1-1.065-.947.715.715,0,0,0-.492-.239,9,9,0,0,1-.745-1.186,10.2,10.2,0,0,1-.571-1.3,9.07,9.07,0,0,1-.366-1.3,6.325,6.325,0,0,1-.129-1.213,4.42,4.42,0,0,1,.109-1.127,1.266,1.266,0,0,1,.384-.654,2.032,2.032,0,0,1,.743-.379c.316-.1.714-.193,1.174-.3l.01,0h0l.007-.006a.739.739,0,0,0,.45.166.748.748,0,1,0,0-1.5.725.725,0,0,0-.4.118.813.813,0,0,0-.272.3h0l-.009,0c-1.961.453-3.145.726-3.145,3.377a7.293,7.293,0,0,0,.14,1.369,10.075,10.075,0,0,0,.4,1.459,10.343,10.343,0,0,0,1.481,2.77.71.71,0,0,0,.158.563,7.234,7.234,0,0,0,.763.757h0Zm19.5-1.428h-1.109a.956.956,0,0,1-.5-.144l-4.614-2.912a.456.456,0,0,1-.213-.384V946a2.257,2.257,0,0,0,0-3.252v-.512a.456.456,0,0,1,.213-.384l4.614-2.912a.913.913,0,0,1,.5-.144h1.11a.457.457,0,0,1,.459.453v10.028a.449.449,0,0,1-.133.32.458.458,0,0,1-.325.132Z" transform="translate(-800.388 -937.498)" fill="#d02127"/>
<g id="Group_766" data-name="Group 766" transform="translate(5.809 5.879)">
<path id="Path_673" data-name="Path 673" d="M495.37,3.328h.237l.741,0c.088,0,.162-.094.166-.23V2.482c0-.132.059-.235.151-.241l.227,0c.092.006.155.11.155.241V3.1c0,.136.066.224.155.224l1,0,0-.766c0-.132-.063-.234-.155-.24l-.4,0c-.089,0-.158-.094-.162-.23l0-.207c0-.136.074-.229.163-.229h.4c.092-.006.151-.114.151-.245V.457a.407.407,0,0,1-.309.193h-.678c-.088,0-.162.1-.166.232V1.5c0,.136-.073.231-.162.231l-.2,0c-.089,0-.16-.093-.164-.228V.877c0-.136-.074-.227-.163-.227h-.984v.763c0,.132.062.237.154.244l.4,0c.091.006.156.115.156.246v.177c0,.132-.062.237-.154.243h-.4c-.092.006-.154.111-.154.242ZM498.758.4V3.595a.406.406,0,0,1-.41.386H495.2a.4.4,0,0,1-.408-.386V.4A.406.406,0,0,1,495.2.01h3.147A.413.413,0,0,1,498.758.4Z" transform="translate(-494.79 -0.01)" fill="#fff"/>
<path id="Path_929" data-name="Path 929" d="M502.5,8.838h.237l.741,0c.088,0,.162-.094.166-.23V7.992c0-.132.059-.235.151-.241l.227,0c.091.006.154.11.154.241v.623c0,.136.066.224.155.224l1,0,0-.766c0-.132-.063-.234-.155-.24l-.4,0c-.089,0-.158-.094-.162-.23l0-.207c0-.136.074-.229.163-.229h.4c.092-.006.151-.114.151-.245V5.967a.407.407,0,0,1-.309.193h-.678c-.088,0-.162.1-.166.232v.614c0,.136-.074.231-.162.231l-.205,0c-.089,0-.16-.093-.164-.228v-.62c0-.136-.074-.227-.163-.227H502.5v.763c0,.132.062.237.154.244l.4,0c.091.006.156.115.156.246v.177c0,.132-.062.237-.154.243h-.4c-.092.006-.154.111-.154.242Z" transform="translate(-501.917 -5.52)" fill="#d02127"/>
</g>
<path id="Path_663" data-name="Path 663" d="M969.6,998.3a1.313,1.313,0,1,1-1.312,1.313h0A1.313,1.313,0,0,1,969.6,998.3Z" transform="translate(-953.186 -992.832)" fill="#d02127"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="23.272" height="28.26" viewBox="0 0 23.272 28.26">
<path id="Subtraction_2" data-name="Subtraction 2" d="M20.261-4078.007H.314a1.665,1.665,0,0,1-1.662-1.663V-4104.6a1.664,1.664,0,0,1,1.662-1.663H20.261a1.664,1.664,0,0,1,1.662,1.663v24.934A1.665,1.665,0,0,1,20.261-4078.007ZM16.1-4086.74a3.183,3.183,0,0,0-3.179,3.179,3.183,3.183,0,0,0,3.179,3.179,3.183,3.183,0,0,0,3.179-3.179v-.212H16.309v-2.967Zm.665-.877v3.392h3.39v-.212a3.183,3.183,0,0,0-3.179-3.179Zm-13.123-6.857a.833.833,0,0,0-.832.832.833.833,0,0,0,.832.832h13.3a.832.832,0,0,0,.831-.832.832.832,0,0,0-.831-.832Zm0-3.986a.832.832,0,0,0-.832.831.833.833,0,0,0,.832.832h13.3a.832.832,0,0,0,.831-.832.832.832,0,0,0-.831-.831Zm0-3.649a.832.832,0,0,0-.832.831.833.833,0,0,0,.832.832H9.456a.833.833,0,0,0,.832-.832.832.832,0,0,0-.832-.831Z" transform="translate(1.348 4106.266)" fill="#2e303a"/>
</svg>

After

Width:  |  Height:  |  Size: 905 B

@ -0,0 +1,4 @@
<svg id="add_3_" data-name="add (3)" xmlns="http://www.w3.org/2000/svg" width="25.029" height="25.028" viewBox="0 0 25.029 25.028">
<path id="Path_4468" data-name="Path 4468" d="M20.668,2.086A3.128,3.128,0,0,0,17.728,0H3.128A3.138,3.138,0,0,0,0,3.128v14.6a3.128,3.128,0,0,0,2.086,2.941V7.3A5.214,5.214,0,0,1,7.3,2.086Z" fill="#fff"/>
<path id="Subtraction_1" data-name="Subtraction 1" d="M-11473.738-3740.409h-14.6a3.148,3.148,0,0,1-3.129-3.129v-14.6a3.147,3.147,0,0,1,3.129-3.129h14.6a3.146,3.146,0,0,1,3.129,3.129v14.6A3.146,3.146,0,0,1-11473.738-3740.409Zm-5.609-14.3h0l-7.017,7.017a.549.549,0,0,0-.136.219l-.8,2.385a.558.558,0,0,0,.136.574.566.566,0,0,0,.4.164.536.536,0,0,0,.179-.029l2.382-.793a.563.563,0,0,0,.219-.135l7.018-7.02-2.383-2.382Zm2.384-1.994a.935.935,0,0,0-.662.273l-.926.928,2.383,2.382.926-.926a.929.929,0,0,0,.274-.665.921.921,0,0,0-.274-.659l-1.059-1.061A.935.935,0,0,0-11476.964-3756.7Z" transform="translate(11495.638 3765.437)" fill="#fff"/>
</svg>

After

Width:  |  Height:  |  Size: 979 B

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="21.561" height="28.306" viewBox="0 0 21.561 28.306">
<g id="medical-report" transform="translate(-61)">
<path id="Path_4648" data-name="Path 4648" d="M325,12.236a.277.277,0,0,0,.276.276h6.32a3.033,3.033,0,0,0-.581-.759L325.684,6.71A3.047,3.047,0,0,0,325,6.222Z" transform="translate(-249.405 -5.878)" fill="#28323a"/>
<path id="Path_4649" data-name="Path 4649" d="M75.872,8.293a1.937,1.937,0,0,1-1.935-1.935V0h-9.9A3.044,3.044,0,0,0,61,3.041V25.265a3.044,3.044,0,0,0,3.041,3.041h15.48a3.044,3.044,0,0,0,3.041-3.041V8.293ZM70.122,5.8a.829.829,0,1,1,0,1.659H68.464V9.122a.829.829,0,1,1-1.659,0V7.464H65.146a.829.829,0,1,1,0-1.659H66.8V4.146a.829.829,0,1,1,1.659,0V5.8ZM65.533,18.8a.829.829,0,1,1,0-1.659H77.7a.829.829,0,0,1,0,1.659Zm4.85,3.594a.829.829,0,0,1-.829.829h-4.02a.829.829,0,1,1,0-1.659h4.02A.829.829,0,0,1,70.383,22.391ZM77.7,12.716a.829.829,0,0,1,0,1.659H65.533a.829.829,0,1,1,0-1.659Z" fill="#28323a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 985 B

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="23.92" height="35.546" viewBox="0 0 23.92 35.546">
<g id="prescription_4_" data-name="prescription (4)" transform="translate(0 0)">
<path id="Path_4337" data-name="Path 4337" d="M213.666,6.838a1.025,1.025,0,0,0-.279-.7L207.917.323A1.027,1.027,0,0,0,207.17,0h-.342V7.18h6.838Zm0,0" transform="translate(-192.469)" fill="#28323a"/>
<path id="Path_4338" data-name="Path 4338" d="M20.161,20.171a5.859,5.859,0,0,1,1.036.093V9.231H13.334a1.026,1.026,0,0,1-1.026-1.026V0H1.026A1.026,1.026,0,0,0,0,1.026V27.351a1.026,1.026,0,0,0,1.026,1.026H9.652a5.817,5.817,0,0,1,.6-.7l5.8-5.8A5.774,5.774,0,0,1,20.161,20.171ZM8.547,11.966H9.573V10.94a1.026,1.026,0,1,1,2.051,0v1.026H12.65a1.026,1.026,0,1,1,0,2.051H11.624v1.026a1.026,1.026,0,0,1-2.051,0V14.017H8.547a1.026,1.026,0,0,1,0-2.051ZM5.128,18.12h10.94a1.026,1.026,0,1,1,0,2.051H5.128a1.026,1.026,0,0,1,0-2.051Zm6.838,6.154H5.128a1.026,1.026,0,1,1,0-2.051h6.838a1.026,1.026,0,1,1,0,2.051Zm0,0" transform="translate(0 0)" fill="#28323a"/>
<path id="Path_4339" data-name="Path 4339" d="M153.782,390.363a3.761,3.761,0,1,0,5.319,5.318l2.176-2.176-5.318-5.319Zm0,0" transform="translate(-142.083 -361.237)" fill="#28323a"/>
<path id="Path_4340" data-name="Path 4340" d="M228.252,321.191a3.76,3.76,0,0,0-5.318,0l-2.176,2.176,5.318,5.318,2.176-2.176A3.765,3.765,0,0,0,228.252,321.191Zm0,0" transform="translate(-205.432 -297.867)" fill="#28323a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="21.098" height="29.309" viewBox="0 0 21.098 29.309">
<path id="google-sheets" d="M49.083,29.309a.645.645,0,0,0,.645-.645V8.8H42.307a1.954,1.954,0,0,1-1.951-1.952V0H29.275a.645.645,0,0,0-.645.645V28.664a.645.645,0,0,0,.645.645ZM32.109,12.566h14.3V24.039h-14.3Zm7.724,8.079h5.429v2.247H39.833Zm-6.576-3.537h5.429V19.5H33.257Zm0,3.537h5.429v2.247H33.257Zm6.576-6.931h5.429v2.247H39.833Zm0,3.394h5.429V19.5H39.833Zm-6.576-3.394h5.429v2.247H33.257ZM41.79,6.846V1.491l6.282,5.873H42.307A.518.518,0,0,1,41.79,6.846Z" transform="translate(-28.63)" fill="#28323a"/>
</svg>

After

Width:  |  Height:  |  Size: 613 B

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="21.879" height="28.906" viewBox="0 0 21.879 28.906">
<g id="medical-report_9_" data-name="medical-report (9)" transform="translate(-5.834 0)">
<path id="Path_4486" data-name="Path 4486" d="M25.038,0H8.511A2.68,2.68,0,0,0,5.834,2.677V26.23a2.679,2.679,0,0,0,2.677,2.676H25.037a2.679,2.679,0,0,0,2.676-2.676V2.677A2.679,2.679,0,0,0,25.038,0ZM9.266,4.849l1.666-2.868a.6.6,0,1,1,1.042.6l-1.14,1.964H22.827l-.911-2.019a.6.6,0,1,1,1.1-.5L24.308,4.9a.6.6,0,0,1-.548.85H9.787a.6.6,0,0,1-.521-.9Zm15.2,12.742h-4.4a.6.6,0,0,1-.568-.4l-.416-1.174-1,7.5a.6.6,0,0,1-.58.522h-.017a.6.6,0,0,1-.59-.488L14.866,13.068l-1.328,4.451a.6.6,0,0,1-.576.431H9.081a.6.6,0,1,1,0-1.2h3.432l1.9-6.377a.6.6,0,0,1,1.168.058l1.79,9.276.845-6.317a.6.6,0,0,1,.534-.519.615.615,0,0,1,.631.4l1.108,3.122h3.976a.6.6,0,1,1,0,1.2Z" fill="#28323a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 878 B

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="28.196" height="28.306" viewBox="0 0 28.196 28.306">
<g id="file_1_" data-name="file (1)" transform="translate(-1)">
<path id="Path_4645" data-name="Path 4645" d="M411,8.782v5.043h5.043Z" transform="translate(-387.333 -8.296)" fill="#28323a"/>
<path id="Path_4646" data-name="Path 4646" d="M136.2,7.187a.829.829,0,0,1-.829-.829V0H123.488A2.491,2.491,0,0,0,121,2.488v9.271c.273-.025.55-.038.829-.038a9.107,9.107,0,0,1,7.032,3.317h9a.829.829,0,0,1,0,1.659h-7.909a9.053,9.053,0,0,1,.96,3.317h6.949a.829.829,0,0,1,0,1.659h-6.949a9.125,9.125,0,0,1-3.845,6.634h13.005a2.491,2.491,0,0,0,2.488-2.488V7.187Zm1.659,4.533H125.7a.829.829,0,1,1,0-1.659h12.163a.829.829,0,0,1,0,1.659Z" transform="translate(-113.366)" fill="#28323a"/>
<path id="Path_4647" data-name="Path 4647" d="M8.464,242a7.464,7.464,0,1,0,7.464,7.464A7.472,7.472,0,0,0,8.464,242Zm2.211,8.293H8.464a.829.829,0,0,1-.829-.829v-3.317a.829.829,0,0,1,1.659,0v2.488h1.382a.829.829,0,1,1,0,1.659Z" transform="translate(0 -228.621)" fill="#28323a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="27.838" height="27.821" viewBox="0 0 27.838 27.821">
<g id="referral_4_" data-name="referral (4)" transform="translate(-3 -3)">
<path id="Path_4361" data-name="Path 4361" d="M10.356,21.547l2.427,3.034L10.43,26.935,9.358,21.577c.2-.017.4-.03.6-.03Zm4.946,0L13.819,23.4l-1.483-1.854Zm1.98,0h.4c.2,0,.4.013.6.03l-1.072,5.358-2.354-2.354Zm3.492-6.182h-.046a6.9,6.9,0,0,0,.046-.773V12.274a1.546,1.546,0,0,1,0,3.091ZM6.864,7.637A4.641,4.641,0,0,1,11.5,3h4.637a4.641,4.641,0,0,1,4.637,4.637v3.091H17.683a1.547,1.547,0,0,1-1.546-1.546V6.091H14.592v.773a3.868,3.868,0,0,1-3.864,3.864H6.864Zm0,7.728a1.546,1.546,0,1,1,0-3.091v2.318a6.9,6.9,0,0,0,.046.773Zm1.546-.773V12.274h2.318a5.4,5.4,0,0,0,4.105-1.9,3.1,3.1,0,0,0,2.85,1.9h1.546v2.318a5.41,5.41,0,0,1-10.819,0ZM24.638,30.821H3V28.5a6.966,6.966,0,0,1,4.842-6.624L9.2,28.654a.773.773,0,0,0,.534.588.789.789,0,0,0,.223.032.774.774,0,0,0,.546-.226l3.318-3.318,3.318,3.318a.773.773,0,0,0,1.3-.395L19.8,21.877A6.968,6.968,0,0,1,24.638,28.5Z" fill="#2e303a"/>
<path id="Path_4362" data-name="Path 4362" d="M16.135,48.835a.612.612,0,0,1,.612-.612h.971L14.91,45.414,12.1,48.223h.971a.612.612,0,0,1,.613.612,7.35,7.35,0,0,1-3.271,6.112A6.133,6.133,0,0,0,16.135,48.835Z" transform="translate(13.119 -42.414)" fill="#2e303a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="21.425" height="28.306" viewBox="0 0 21.425 28.306">
<g id="medical-report_1_" data-name="medical-report (1)" transform="translate(-5.834)">
<path id="Path_4650" data-name="Path 4650" d="M24.639,0H8.455A2.624,2.624,0,0,0,5.834,2.621V25.685a2.624,2.624,0,0,0,2.621,2.621H24.639a2.623,2.623,0,0,0,2.62-2.621V2.621A2.623,2.623,0,0,0,24.639,0ZM9.195,4.748,10.826,1.94a.59.59,0,0,1,1.02.592L10.73,4.455H22.474l-.892-1.977a.589.589,0,1,1,1.074-.485L23.924,4.8a.589.589,0,0,1-.537.833H9.7a.591.591,0,0,1-.51-.886ZM24.08,17.225H19.771a.59.59,0,0,1-.556-.392l-.407-1.15-.984,7.347a.59.59,0,0,1-.568.511h-.017a.588.588,0,0,1-.578-.478L14.678,12.8l-1.3,4.359a.589.589,0,0,1-.564.422h-3.8a.59.59,0,1,1,0-1.179h3.361l1.863-6.244a.59.59,0,0,1,1.144.057l1.753,9.083.827-6.185a.589.589,0,0,1,.523-.508.6.6,0,0,1,.617.389l1.085,3.057h3.893a.59.59,0,1,1,0,1.179Z" transform="translate(0)" fill="#28323a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 955 B

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32.909" height="25.379" viewBox="0 0 32.909 25.379">
<g id="heart-beat_1_" data-name="heart-beat (1)" transform="translate(0 -58.573)">
<path id="Path_4341" data-name="Path 4341" d="M0,268.681v1.928H5.221A17.508,17.508,0,0,1,3.7,268.681Z" transform="translate(0 -196.604)" fill="#28323a"/>
<path id="Path_4342" data-name="Path 4342" d="M432.3,268.681a17.515,17.515,0,0,1-1.522,1.928H436v-1.928Z" transform="translate(-403.09 -196.604)" fill="#28323a"/>
<path id="Path_4343" data-name="Path 4343" d="M39.677,64.208l3.184,9.551,1.12-1.682h2.766L49.365,65.8l2.826,6.281h6.026A9.29,9.29,0,0,0,59.924,66.8a8.075,8.075,0,0,0-6.254-8.1c-3.246-.636-6.216,1.044-8.208,4.54-1.989-3.484-4.945-5.153-8.186-4.526A8.178,8.178,0,0,0,31,66.8a9.29,9.29,0,0,0,1.706,5.274h4.348Z" transform="translate(-29.007 0)" fill="#28323a"/>
<path id="Path_4344" data-name="Path 4344" d="M96.427,241.453l-1.4,3.36H92.008l-2.736,4.1-2.6-7.8-1.233,3.7H81.222a69.042,69.042,0,0,0,7.116,6.47c1.1.915,4.118,3.476,4.118,3.476s3.02-2.561,4.118-3.476a69.048,69.048,0,0,0,7.116-6.47h-5.75Z" transform="translate(-76.001 -170.808)" fill="#28323a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="12.288" height="25" viewBox="0 0 12.288 25">
<g id="walking_1_" data-name="walking (1)" transform="translate(-17 -3)">
<path id="Path_4507" data-name="Path 4507" d="M28.966,5.966h.847a1.26,1.26,0,0,0,.729,1.144,2.541,2.541,0,1,0-2,.975,2.5,2.5,0,0,0,1.331-.377A2.129,2.129,0,0,1,28.966,5.966Z" transform="translate(-5.186)" fill="#28323a"/>
<path id="Path_4508" data-name="Path 4508" d="M22.353,40.722l-.811,3.508L19,48.043l2.119,1.695,3.39-4.661.507-1.685-2.585-2.585c-.028-.027-.051-.057-.078-.085Z" transform="translate(-1.153 -21.738)" fill="#28323a"/>
<path id="Path_4509" data-name="Path 4509" d="M19.707,29.337a5.951,5.951,0,0,1-.164-1.369V25.717L17,28.8,18.695,30.5Z" transform="translate(0 -13.091)" fill="#28323a"/>
<path id="Path_4510" data-name="Path 4510" d="M31.2,24.513l-3.894-2.127L25.5,18.309l.775-.343,1.695,3.814L30.932,23.4l1.695.924L33.9,22.2l-2.966-1.78V16.695A1.694,1.694,0,0,0,29.237,15H26.695A1.694,1.694,0,0,0,25,16.695v5.1a5.08,5.08,0,0,0,1.487,3.593l3.6,3.6,1.271,5.508H33.9l-1.271-6.78Z" transform="translate(-4.61 -6.915)" fill="#28323a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1,7 @@
<svg id="Group_7426" data-name="Group 7426" xmlns="http://www.w3.org/2000/svg" width="38.595" height="38.024" viewBox="0 0 38.595 38.024">
<path id="Path_4539" data-name="Path 4539" d="M38.892,0H33.378A1.379,1.379,0,0,0,32,1.378v8.27a1.378,1.378,0,0,0,2.757,0V2.757h4.135a1.378,1.378,0,1,0,0-2.757Z" transform="translate(-32)" fill="#28323a"/>
<path id="Path_4540" data-name="Path 4540" d="M38.892,200.27H34.757v-6.892a1.378,1.378,0,1,0-2.757,0v8.27a1.379,1.379,0,0,0,1.378,1.378h5.514a1.378,1.378,0,1,0,0-2.757Z" transform="translate(-32 -165.003)" fill="#28323a"/>
<path id="Path_4541" data-name="Path 4541" d="M390.892,0h-5.514a1.378,1.378,0,0,0,0,2.757h4.135V9.649a1.378,1.378,0,0,0,2.757,0V1.378A1.379,1.379,0,0,0,390.892,0Z" transform="translate(-353.676)" fill="#28323a"/>
<path id="Path_4542" data-name="Path 4542" d="M390.892,192a1.379,1.379,0,0,0-1.378,1.378v6.892h-4.135a1.378,1.378,0,0,0,0,2.757h5.514a1.379,1.379,0,0,0,1.378-1.378v-8.27A1.379,1.379,0,0,0,390.892,192Z" transform="translate(-353.676 -165.003)" fill="#28323a"/>
<path id="Path_4551" data-name="Path 4551" d="M13.343,0A13.343,13.343,0,1,0,26.686,13.343,13.343,13.343,0,0,0,13.343,0Zm4.924,8.9a1.911,1.911,0,1,1-1.911,1.911A1.912,1.912,0,0,1,18.267,8.9Zm-9.849,0a1.911,1.911,0,1,1-1.911,1.911A1.912,1.912,0,0,1,8.418,8.9Zm12.124,9.083a8.733,8.733,0,0,1-14.4,0A1.169,1.169,0,1,1,8.07,16.657a6.4,6.4,0,0,0,10.55,0,1.168,1.168,0,1,1,1.923,1.325Z" transform="translate(5.954 5.509)" fill="#28323a"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" width="38.595" height="38.024" viewBox="0 0 38.595 38.024">
<g id="fingerprint-scan" transform="translate(0.342 0.655)">
<path id="Path_4535" data-name="Path 4535" d="M24,0H2.909A2.913,2.913,0,0,0,0,2.909V24a2.913,2.913,0,0,0,2.909,2.909H24A2.913,2.913,0,0,0,26.913,24V2.909A2.913,2.913,0,0,0,24,0ZM5,5.182c5.592-4.061,11.49-4.018,17,.072a.789.789,0,0,1-.47,1.422c-.894,0-6.986-6.478-15.607-.218A.788.788,0,0,1,5,5.182Zm7.349,20.277a.788.788,0,0,1-1.1-.2c-1.111-1.606-3.634-3.4-3.634-6.757a6.063,6.063,0,0,1,5.835-6.255A6.063,6.063,0,0,1,19.291,18.5v.841a.788.788,0,0,1-1.577,0V18.5a4.488,4.488,0,0,0-4.258-4.678A4.488,4.488,0,0,0,9.2,18.5C9.2,22.3,14.037,24.294,12.353,25.459Zm9.8-4.08a4.132,4.132,0,0,1-7.8-2.035c0-3.4-2.327-2.255-1.811-.191a.788.788,0,0,1-1.53.383c-1.074-4.295,4.917-6.037,4.917-.191A2.544,2.544,0,0,0,17.9,21.971c3.65.861,4.733-5.161,1.093-9.037-5.033-5.363-13.16-1.227-13.16,5.148A6.378,6.378,0,0,0,6.95,22.25a.788.788,0,0,1-1.284.916,8.033,8.033,0,0,1-1.408-5.084,9.351,9.351,0,0,1,9.2-9.2c6.8,0,11.128,7.628,8.7,12.5Zm.527-9.761a.788.788,0,0,1-1.075-.293C20.033,8.578,16.234,7.1,13.457,7.1a11.282,11.282,0,0,0-8.175,4.275A.788.788,0,0,1,3.97,10.5a12.781,12.781,0,0,1,9.487-4.977c5.841,0,11.056,5.05,9.222,6.1Z" transform="translate(5.793 4.943)" fill="#28323a"/>
<path id="Path_4539" data-name="Path 4539" d="M38.892,0H33.378A1.379,1.379,0,0,0,32,1.378v8.27a1.378,1.378,0,0,0,2.757,0V2.757h4.135a1.378,1.378,0,1,0,0-2.757Z" transform="translate(-32.342 -0.655)" fill="#28323a"/>
<path id="Path_4540" data-name="Path 4540" d="M38.892,200.27H34.757v-6.892a1.378,1.378,0,1,0-2.757,0v8.27a1.379,1.379,0,0,0,1.378,1.378h5.514a1.378,1.378,0,1,0,0-2.757Z" transform="translate(-32.342 -165.658)" fill="#28323a"/>
<path id="Path_4541" data-name="Path 4541" d="M390.892,0h-5.514a1.378,1.378,0,0,0,0,2.757h4.135V9.649a1.378,1.378,0,0,0,2.757,0V1.378A1.379,1.379,0,0,0,390.892,0Z" transform="translate(-354.018 -0.655)" fill="#28323a"/>
<path id="Path_4542" data-name="Path 4542" d="M390.892,192a1.379,1.379,0,0,0-1.378,1.378v6.892h-4.135a1.378,1.378,0,0,0,0,2.757h5.514a1.379,1.379,0,0,0,1.378-1.378v-8.27A1.379,1.379,0,0,0,390.892,192Z" transform="translate(-354.018 -165.658)" fill="#28323a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" width="38.595" height="38.024" viewBox="0 0 38.595 38.024">
<g id="sms-speech-bubble" transform="translate(-1 1.645)">
<g id="textsms">
<path id="Path_4529" data-name="Path 4529" d="M21.992,0H2.444A2.451,2.451,0,0,0,0,2.444V24.436l4.887-4.887h17.1A2.451,2.451,0,0,0,24.436,17.1V2.444A2.451,2.451,0,0,0,21.992,0ZM8.552,11H6.109V8.552H8.552Zm4.887,0H11V8.552H13.44Zm4.887,0H15.883V8.552h2.444Z" transform="translate(8.144 5.013)" fill="#28323a"/>
<path id="Path_4543" data-name="Path 4543" d="M38.892,0H33.378A1.379,1.379,0,0,0,32,1.378v8.27a1.378,1.378,0,0,0,2.757,0V2.757h4.135a1.378,1.378,0,1,0,0-2.757Z" transform="translate(-31 -1.645)" fill="#28323a"/>
<path id="Path_4544" data-name="Path 4544" d="M38.892,200.27H34.757v-6.892a1.378,1.378,0,1,0-2.757,0v8.27a1.379,1.379,0,0,0,1.378,1.378h5.514a1.378,1.378,0,1,0,0-2.757Z" transform="translate(-31 -166.648)" fill="#28323a"/>
<path id="Path_4545" data-name="Path 4545" d="M390.892,0h-5.514a1.378,1.378,0,0,0,0,2.757h4.135V9.649a1.378,1.378,0,0,0,2.757,0V1.378A1.379,1.379,0,0,0,390.892,0Z" transform="translate(-352.676 -1.645)" fill="#28323a"/>
<path id="Path_4546" data-name="Path 4546" d="M390.892,192a1.379,1.379,0,0,0-1.378,1.378v6.892h-4.135a1.378,1.378,0,0,0,0,2.757h5.514a1.379,1.379,0,0,0,1.378-1.378v-8.27A1.379,1.379,0,0,0,390.892,192Z" transform="translate(-352.676 -166.648)" fill="#28323a"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" width="38.595" height="38.024" viewBox="0 0 38.595 38.024">
<g id="whatsapp_1_" data-name="whatsapp (1)" transform="translate(0.233 -4.309)">
<g id="Group_7424" data-name="Group 7424" transform="translate(4.808 8.729)">
<path id="Path_4537" data-name="Path 4537" d="M0,28.186l2.424-7.271a13.848,13.848,0,1,1,5.468,5.195Z" fill="#2cb742"/>
<path id="Path_4538" data-name="Path 4538" d="M29.341,23.6c-.64-1.209-3-2.591-3-2.591-.534-.3-1.177-.338-1.482.2a12.215,12.215,0,0,1-.961,1.051,1.791,1.791,0,0,1-2.547-.253l-1.935-1.935-1.935-1.935A1.791,1.791,0,0,1,17.23,15.6a12.216,12.216,0,0,1,1.051-.961c.542-.3.508-.948.2-1.482,0,0-1.382-2.358-2.591-3a1.325,1.325,0,0,0-1.557.234l-.854.854c-2.71,2.71-1.376,5.77,1.334,8.48L17.3,22.2l2.477,2.477c2.71,2.71,5.77,4.045,8.48,1.334l.854-.854A1.326,1.326,0,0,0,29.341,23.6Z" transform="translate(-6.169 -5.141)" fill="#fff"/>
</g>
<path id="Path_4547" data-name="Path 4547" d="M38.892,0H33.378A1.379,1.379,0,0,0,32,1.378v8.27a1.378,1.378,0,0,0,2.757,0V2.757h4.135a1.378,1.378,0,1,0,0-2.757Z" transform="translate(-32.233 4.309)" fill="#28323a"/>
<path id="Path_4548" data-name="Path 4548" d="M38.892,200.27H34.757v-6.892a1.378,1.378,0,1,0-2.757,0v8.27a1.379,1.379,0,0,0,1.378,1.378h5.514a1.378,1.378,0,1,0,0-2.757Z" transform="translate(-32.233 -160.693)" fill="#28323a"/>
<path id="Path_4549" data-name="Path 4549" d="M390.892,0h-5.514a1.378,1.378,0,0,0,0,2.757h4.135V9.649a1.378,1.378,0,0,0,2.757,0V1.378A1.379,1.379,0,0,0,390.892,0Z" transform="translate(-353.909 4.309)" fill="#28323a"/>
<path id="Path_4550" data-name="Path 4550" d="M390.892,192a1.379,1.379,0,0,0-1.378,1.378v6.892h-4.135a1.378,1.378,0,0,0,0,2.757h5.514a1.379,1.379,0,0,0,1.378-1.378v-8.27A1.379,1.379,0,0,0,390.892,192Z" transform="translate(-353.909 -160.693)" fill="#28323a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -47,6 +47,12 @@
"verification": "تَحَقّق",
"resend": "إعادة إرسال",
"codeExpire": "انتهت صلاحية رمز التحقق",
"moreVerificationOpts" :"المزيد من خيارات التحقق"
"moreVerificationOpts": "المزيد من خيارات التحقق",
"select": "Select",
"days": "أيام",
"hr": "س",
"min": "د",
"years": "سنة",
"months": "أشهر",
"userOtherAccount": "مستخدم حساب آخر"
}

@ -47,5 +47,12 @@
"verification": "Verification",
"resend": "Resend",
"codeExpire": "The verification code has been expired",
"moreVerificationOpts" :"More verification options"
"moreVerificationOpts" :"More verification options",
"select": "Select",
"days": "Days",
"hr": "Hr",
"min": "Min",
"years": "Years",
"months": "Months",
"userOtherAccount": "User Another Account"
}

@ -1,27 +0,0 @@
import 'dart:async';
import 'package:hmg_nurses/api/api_client.dart';
import 'package:hmg_nurses/app_state/app_state.dart';
import 'package:hmg_nurses/classes/consts.dart';
class LoginApiClient {
static final LoginApiClient _instance = LoginApiClient._internal();
LoginApiClient._internal();
factory LoginApiClient() => _instance;
// Future<GetMobileLoginInfoListModel?> getMobileLoginInfoNEW(String deviceToken, String deviceType) async {
// String url = "${ApiConsts.erpRest}Mohemm_GetMobileLoginInfo_NEW";
// Map<String, dynamic> postParams = {};
// postParams["DeviceToken"] = deviceToken;
// postParams["DeviceType"] = deviceType;
// return await ApiClient().postJsonForObject((json) {
// GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
// return (responseData.mohemmGetMobileLoginInfoList?.length ?? 0) > 0 ? (responseData.mohemmGetMobileLoginInfoList!.first) : null;
// }, url, postParams);
// }
}

File diff suppressed because one or more lines are too long

@ -9,7 +9,7 @@ class MyColors {
static const Color gradiantStartColor = Color(0xff33c0a5);
static const Color gradiantEndColor = Color(0xff259db7);
static const Color textMixColor = Color(0xff2BB8A6);
static const Color backgroundColor = Color(0xffF8F8F8);
static const Color backgroundColor = Color(0xffEDEDED);
static const Color grey41Color = Color(0xff414141);
static const Color grey57Color = Color(0xff575757);
static const Color grey67Color = Color(0xff676767);
@ -40,6 +40,7 @@ class MyColors {
static const Color borderColor = Color(0xffE8E8E8);
static const Color borderE3Color = Color(0xffE3E3E3);
static const Color borderCEColor = Color(0xffCECECE);
//static const Color grey67Color = Color(0xff676767);
static const Color whiteColor = Color(0xFFEEEEEE);
static const Color greenColor = Color(0xff1FA269);

@ -1,22 +1,21 @@
class ApiConsts {
static const MAX_SMALL_SCREEN = 660;
//static String baseUrl = "http://10.200.204.20:2801/"; // Local server
static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server
// static String baseUrl = "https://hmgwebservices.com"; // Live server
static String baseUrlServices = baseUrl + "/Services/"; // server
static String baseUrl = 'https://hmgwebservices.com/';
// static String baseUrl = 'https://uat.hmgwebservices.com/';
static String baseUrlServices = baseUrl + "Services/"; // server
// static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server
static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/";
static String erpRest = baseUrlServices + "ERP.svc/REST/";
static String swpRest = baseUrlServices + "SWP.svc/REST/";
static String user = baseUrlServices + "api/User/";
static String user = baseUrlServices + "api_repo/User/";
static String cocRest = baseUrlServices + "COCWS.svc/REST/";
//Chat
static String chatServerBaseUrl = "https://apiderichat.hmg.com";
static String chatServerBaseApiUrl = "https://apiderichat.hmg.com/api/";
static String chatServerBaseApiUrl = "https://apiderichat.hmg.com/api_repo/";
static String chatHubConnectionUrl = chatServerBaseUrl + "/ConnectionChatHub";
static String chatSearchMember = "user/getUserWithStatusAndFavAsync/";
static String chatRecentUrl = "UserChatHistory/getchathistorybyuserid"; //For a Mem
@ -27,14 +26,15 @@ class ApiConsts {
class SharedPrefsConsts {
static String isRememberMe = "remember_me";
static String username = "username";
static String username = "doctorId";
static String password = "password";
static String privilegeList = "privilegeList";
static String firebaseToken = "firebaseToken";
static String memberInformation = "memberInformation";
static String welcomeVideoUrl = "welcomeVideoUrl";
static String doNotShowWelcomeVideo = "doNotShowWelcomeVideo";
static String mohemmWifiSSID = "mohemmWifiSSID";
static String mohemmWifiPassword = "mohemmWifiPassword";
static String editItemForSale = "editItemForSale";
static String logInTokenID = "logInTokenID";
static String vidaAuthTokenID = "vidaAuthTokenID";
static String vidaRefreshTokenID = "vidaRefreshTokenID";
static String authenticationTokenID = "authenticationTokenID";
static String projectID = "projectID";
static String clinicId = "clinicId";
static String lastLoginDate = "lastLoginDate";
static String lastLoginTime = "lastLoginTime";
static String memberModel = "memberModel";
}

@ -0,0 +1,415 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:hmg_nurses/generated/locale_keys.g.dart';
import 'package:intl/intl.dart';
class AppDateUtils {
static String convertDateToFormat(DateTime dateTime, String dateFormat) {
return DateFormat(dateFormat).format(dateTime);
}
static DateTime convertISOStringToDateTime(String date) {
DateTime newDate;
newDate = DateTime.parse(date);
return newDate;
}
static String convertStringToDateFormat(String date, String dateFormat) {
DateTime dateTime;
if (date.contains("/Date"))
dateTime = getDateTimeFromServerFormat(date);
else
dateTime = DateTime.parse(date);
return convertDateToFormat(dateTime, dateFormat);
}
static String convertToServerFormat(String date, String dateFormat) {
return '/Date(${DateFormat(dateFormat).parse(date).millisecondsSinceEpoch})/';
}
static String convertDateToServerFormat(DateTime date) {
return '/Date(${date.millisecondsSinceEpoch})/';
}
static convertDateFromServerFormat(String str, dateFormat) {
var date = getDateTimeFromServerFormat(str);
return DateFormat(dateFormat).format(date);
}
static DateTime getDateTimeFromServerFormat(String str) {
DateTime date = DateTime.now();
if (str != null) {
const start = "/Date(";
const end = "+0300)";
if (str.contains("/Date")) {
final startIndex = str.indexOf(start);
final endIndex = str.indexOf(end, startIndex + start.length);
date = new DateTime.fromMillisecondsSinceEpoch(int.parse(str.substring(startIndex + start.length, endIndex)));
} else {
date = DateTime.now();
}
} else {
date = DateTime.parse(str);
}
return date;
}
static String differenceBetweenDateAndCurrentInYearMonthDay(DateTime firstDate, BuildContext context) {
DateTime now = DateTime.now();
// now = now.add(Duration(days: 400, minutes: 0));
var difference = firstDate.difference(now);
int years = now.year - firstDate.year;
int months = now.month - firstDate.month;
int days = now.day - firstDate.day;
if (months < 0 || (months == 0 && days < 0)) {
years--;
months += (days < 0 ? 11 : 12);
}
if (days < 0) {
final monthAgo = new DateTime(now.year, now.month - 1, firstDate.day);
days = now.difference(monthAgo).inDays + 1;
}
return "$days ${LocaleKeys.days.tr()}, $months ${LocaleKeys.months.tr()}, $years ${LocaleKeys.years.tr()}";
}
static String differenceBetweenDateAndCurrent(DateTime firstDate, BuildContext context, {bool isShowSecond = false, bool isShowDays = true}) {
DateTime now = DateTime.now();
var difference = now.difference(firstDate);
int minutesInDays = difference.inMinutes;
int secondInDays = difference.inSeconds;
int hoursInDays = minutesInDays ~/ 60; // ~/ : truncating division to make the result int
int second = secondInDays % 60;
int minutes = minutesInDays % 60;
int days = hoursInDays ~/ 24;
int hours = hoursInDays % 24;
double hoursInOneDay = difference.inHours / difference.inDays;
return (isShowDays ? (days > 0 ? "$days ${LocaleKeys.days.tr()}," : '') : "") +
(hours > 0 ? "$hours ${LocaleKeys.hr.tr()}," : "") +
" $minutes ${LocaleKeys.min.tr()}" +
(isShowSecond ? ", $second Sec" : "");
}
static String differenceBetweenServerDateAndCurrent(String str, BuildContext context) {
const start = "/Date(";
const end = "+0300)";
final startIndex = str.indexOf(start);
final endIndex = str.indexOf(end, startIndex + start.length);
var date = new DateTime.fromMillisecondsSinceEpoch(int.parse(str.substring(startIndex + start.length, endIndex)));
return differenceBetweenDateAndCurrent(date, context);
}
/// get month by
/// [weekDay] convert week day in int to week day name
static getWeekDay(int weekDay) {
switch (weekDay) {
case 1:
return "Monday";
case 2:
return "Tuesday";
case 3:
return "Wednesday";
case 4:
return "Thursday";
case 5:
return "Friday";
case 6:
return "Saturday ";
case 7:
return "Sunday";
}
}
/// get month by
/// [weekDay] convert week day in int to week day name arabic
static getWeekDayArabic(int weekDay) {
switch (weekDay) {
case 1:
return "الاثنين";
case 2:
return "الثلاثاء";
case 3:
return "الاربعاء";
case 4:
return "الخميس";
case 5:
return "الجمعه";
case 6:
return "السبت ";
case 7:
return "الاحد";
}
}
/// get month by
/// [month] convert month number in to month name
static getMonth(int month) {
switch (month) {
case 1:
return "January";
case 2:
return "February";
case 3:
return "March";
case 4:
return "April";
case 5:
return "May";
case 6:
return "June";
case 7:
return "July";
case 8:
return "August";
case 9:
return "September";
case 10:
return "October";
case 11:
return "November";
case 12:
return "December";
}
}
/// get month by
/// [month] convert month number in to month name in Arabic
static getMonthArabic(int month) {
switch (month) {
case 1:
return "يناير";
case 2:
return " فبراير";
case 3:
return "مارس";
case 4:
return "أبريل";
case 5:
return "مايو";
case 6:
return "يونيو";
case 7:
return "يوليو";
case 8:
return "أغسطس";
case 9:
return "سبتمبر";
case 10:
return " اكتوبر";
case 11:
return " نوفمبر";
case 12:
return "ديسمبر";
}
}
static getMonthByName(String month) {
switch (month.toLowerCase()) {
case 'january':
return 1;
case 'february':
return 2;
case 'march':
return 3;
case 'april':
return 4;
case 'may':
return 5;
case 'june':
return 6;
case 'july':
return 7;
case 'august':
return 8;
case 'september':
return 9;
case 'october':
return 10;
case 'november':
return 11;
case 'december':
return 12;
}
}
static DateTime convertStringToDate(String date) {
// /Date(1585774800000+0300)/
if (date != null) {
const start = "/Date(";
const end = "+0300)";
final startIndex = date.indexOf(start);
final endIndex = date.indexOf(end, startIndex + start.length);
DateTime newDate = DateTime.fromMillisecondsSinceEpoch(
int.parse(
date.substring(startIndex + start.length, endIndex),
),
);
return newDate;
} else
return DateTime.now();
}
/// get data formatted like Apr 26,2020
/// [dateTime] convert DateTime to data formatted Arabic
static String getMonthDayYearDateFormattedAr(DateTime dateTime) {
if (dateTime != null)
return getMonthArabic(dateTime.month) + " " + dateTime.day.toString() + ", " + dateTime.year.toString();
else
return "";
}
/// get data formatted like Apr 26,2020
/// [dateTime] convert DateTime to data formatted
static String getMonthDayYearDateFormatted(DateTime dateTime, {bool isArabic = false}) {
if (dateTime != null)
return isArabic ? getMonthArabic(dateTime.month) : getMonth(dateTime.month) + " " + dateTime.day.toString() + ", " + dateTime.year.toString();
else
return "";
}
/// get data formatted like 26 Apr 2020
/// [dateTime] convert DateTime to data formatted
static String getDayMonthYearDateFormatted(DateTime dateTime, {bool isArabic = false, bool isMonthShort = true}) {
if (dateTime != null)
return dateTime.day.toString() +
" " +
"${isArabic ? getMonthArabic(dateTime.month) : isMonthShort ? getMonth(dateTime.month).toString().substring(0, 3) : getMonth(dateTime.month)}" +
" " +
dateTime.year.toString();
else
return "";
}
/// get data formatted like 26/4/2020
/// [dateTime] convert DateTime to data formatted
static String getDayMonthYearDate(DateTime dateTime, {bool isArabic = false}) {
if (dateTime != null)
return dateTime.day.toString() + "/" + "${dateTime.month}" + "/" + dateTime.year.toString();
else
return "";
}
/// get data formatted like 10:45 PM
/// [dateTime] convert DateTime to data formatted
static String getHour(DateTime dateTime) {
return DateFormat('hh:mm a').format(dateTime);
}
static String getAgeByBirthday(String birthOfDate, BuildContext context, {bool isServerFormat = true}) {
// https://leechy.dev/calculate-dates-diff-in-dart
DateTime birthDate;
if (birthOfDate.contains("/Date")) {
birthDate = AppDateUtils.getDateTimeFromServerFormat(birthOfDate);
} else {
birthDate = DateTime.parse(birthOfDate);
}
final now = DateTime.now();
int years = now.year - birthDate.year;
int months = now.month - birthDate.month;
int days = now.day - birthDate.day;
if (months < 0 || (months == 0 && days < 0)) {
years--;
months += (days < 0 ? 11 : 12);
}
if (days < 0) {
final monthAgo = new DateTime(now.year, now.month - 1, birthDate.day);
days = now.difference(monthAgo).inDays + 1;
}
return "$years ${LocaleKeys.years.tr()} $months ${LocaleKeys.months.tr()} $days ${LocaleKeys.days.tr()}";
}
static bool isToday(DateTime dateTime) {
DateTime todayDate = DateTime.now().toUtc();
if (dateTime.day == todayDate.day && dateTime.month == todayDate.month && dateTime.year == todayDate.year) {
return true;
}
return false;
}
static String getDate(DateTime dateTime) {
print(dateTime);
if (dateTime != null)
return getMonth(dateTime.month) + " " + dateTime.day.toString() + "," + dateTime.year.toString();
else
return "";
}
static String getDateFormatted(DateTime dateTime) {
print(dateTime);
if (dateTime != null)
return dateTime.day.toString() + "/" + dateTime.month.toString() + "/" + dateTime.year.toString();
else
return "";
}
static String getTimeHHMMA(DateTime dateTime) {
return DateFormat('hh:mm a').format(dateTime);
}
static String getTimeHHMMA2(DateTime dateTime) {
return DateFormat('hh:mm').format(dateTime);
}
static String getStartTime(String dateTime) {
String time = dateTime;
if (dateTime.length > 7) time = dateTime.substring(0, 5);
return time;
}
static String getTimeFormated(DateTime dateTime) {
print(dateTime);
if (dateTime != null)
return dateTime.hour.toString() + ":" + dateTime.minute.toString();
else
return "";
}
// handel date like "09/05/2021 17:00"
static DateTime getDateTimeFromString(String str) {
List<String> array = str.split('/');
int day = int.parse(array[0]);
int month = int.parse(array[1]);
List<String> array2 = array[2].split(' ');
int year = int.parse(array2[0]);
String hour = array2[1];
List<String> hourList = hour.split(":");
DateTime date = DateTime(year, month, day, int.parse(hourList[0]), int.parse(hourList[1]));
return date;
}
static convertDateFormatImproved(String str) {
String newDate = "";
const start = "/Date(";
if (str.isNotEmpty) {
const end = "+0300)";
final startIndex = str.indexOf(start);
final endIndex = str.indexOf(end, startIndex + start.length);
var date = new DateTime.fromMillisecondsSinceEpoch(int.parse(str.substring(startIndex + start.length, endIndex)));
newDate = date.year.toString() + "/" + date.month.toString().padLeft(2, '0') + "/" + date.day.toString().padLeft(2, '0');
}
return newDate;
}
}

@ -1,3 +1,29 @@
enum APPSTATUS { loading, unAuthenticated, authenticated, unverified }
enum AuthMethodTypes { sms, whatsApp, fingerPrint, faceID, moreOptions }
enum ViewState { idle, busy, error, busyLocal, errorLocal }
// enum APPSTATUS {
// loading,
// unAuthenticated,
// authenticated,
// unverified,
// }
enum AuthMethodTypes {
sms,
whatsApp,
fingerPrint,
faceID,
moreOptions,
}
enum ViewState {
hide,
idle,
busy,
error,
busyLocal,
errorLocal,
}
enum LoginType {
FROM_LOGIN,
SILENT_LOGIN,
SILENT_WITH_OTP,
}

@ -7,7 +7,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:hmg_nurses/app_state/app_state.dart';
import 'package:hmg_nurses/config/app_state.dart';
import 'package:hmg_nurses/classes/colors.dart';
import 'package:hmg_nurses/config/routes.dart';
import 'package:hmg_nurses/exceptions/api_exception.dart';
@ -56,25 +56,45 @@ class Utils {
return await Future.delayed(Duration(milliseconds: millis));
}
static void showLoading() {
static void showLoading({bool isNeedBinding = true}) {
if (isNeedBinding) {
WidgetsBinding.instance.addPostFrameCallback((_) {
showLoadingDialog();
});
} else {
showLoadingDialog();
}
}
static void showLoadingDialog() {
_isLoadingVisible = true;
showDialog(
context: navigatorKey.currentState!.overlay!.context,
context: navigatorKey.currentContext!,
barrierColor: Colors.black.withOpacity(0.5),
builder: (BuildContext context) => LoadingDialog(),
).then((value) {
_isLoadingVisible = false;
});
});
}).catchError((e) {
print("--------------catchError---------------");
print(e);
}).onError(
(error, stackTrace) {
print("--------------onError---------------");
print(error);
},
);
}
static void hideLoading(BuildContext context) {
static void hideLoading() {
try {
if (_isLoadingVisible) {
_isLoadingVisible = false;
Navigator.of(context).pop();
Navigator.of(navigatorKey.currentContext!).pop();
}
_isLoadingVisible = false;
} catch (e) {
print("exp_while_hide_dialog: " + e.toString());
}
}
static Future<String> getStringFromPrefs(String key) async {
@ -87,6 +107,24 @@ class Utils {
return await prefs.setString(key, value);
}
static Future<int> getIntFromPrefs(String key) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getInt(key) ?? 0;
}
static Future<bool> saveIntFromPrefs(String key, int value) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return await prefs.setInt(key, value);
}
static String capitalize(str) {
if (str != "") {
return "${str[0].toUpperCase()}${str.substring(1).toLowerCase()}";
} else {
return str;
}
}
static void handleException(dynamic exception, cxt, Function(String)? onErrorMessage) {
String errorMessage;
if (exception is APIException) {

@ -0,0 +1,89 @@
import 'dart:io';
import 'package:easy_localization/easy_localization.dart';
import 'package:hmg_nurses/main.dart';
import 'package:hmg_nurses/model/base/generic_response_model2.dart';
import 'package:hmg_nurses/model/base/post_params_model.dart';
import 'package:hmg_nurses/model/login/imei_details_model.dart';
import 'package:hmg_nurses/model/login/list_doctors_clinic_model.dart';
import 'package:hmg_nurses/model/login/member_login_model.dart';
class AppState {
// static final AppState _instance = AppState._internal();
//
// AppState._internal();
//
// factory AppState() => _instance;
//Tokens
String? imei, logInTokenID, vidaAuthTokenID, vidaRefreshTokenID, authenticationTokenID;
int projectID = 0;
int clinicId = 0;
//TODO: Must be -1 before login or logout
int lastLoginTyp = -1;
int? doctorUserId;
int? employeeId;
String? password;
String? lastLoginDate;
GetIMEIDetailsModel? lastLoginImeiDate;
List<ListDoctorsClinicModel>? listDoctorsClinic;
int setupId=91877;
GenericResponseModel2? doctorProfile;
bool isAuthenticated = false;
set setIsAuthenticated(v) => isAuthenticated = v;
bool isLogged = false;
PostParamsModel _postParamsInitConfig = PostParamsModel(
tokenID: "",
languageID: 2,
stamp: "",
iPAdress: "9.9.9.9",
versionID: 9,
channel: 9,
sessionID: "BlUSkYymTt",
isLoginForDoctorApp: true,
patientOutSA: false,
vidaAuthTokenID: null,
vidaRefreshTokenID: null,
deviceTypeID: 1,
generalID: 'Cs2020@2016\$2958',
);
void setPostParamsInitConfig() {
isAuthenticated = false;
isLogged = false;
_postParams = _postParamsInitConfig;
}
PostParamsModel? _postParams;
PostParamsModel? get postParamsObject => _postParams;
// Map<String, dynamic> get postParamsJson => isLogged ? (_postParams?.toJsonAfterLogin() ?? {}) : (_postParams?.toJson() ?? {});
Map<String, dynamic> get postParamsJson {
_postParams!.stamp = DateTime.now().toIso8601String();
_postParams?.vidaAuthTokenID = vidaAuthTokenID;
_postParams?.vidaRefreshTokenID = vidaRefreshTokenID;
_postParams?.imei = imei;
if(isLogged)
_postParams?.tokenID=authenticationTokenID;
return isLogged ? _postParams?.toJsonLogged() ?? {} : _postParams?.toJson() ?? {};
}
void setPostParamsModel(PostParamsModel _postParams) {
this._postParams = _postParams;
}
bool isArabic() => EasyLocalization.of(navigatorKey.currentContext!)?.locale.languageCode == "ar";
int getLanguageID(context) => EasyLocalization.of(context)?.locale.languageCode == "ar" ? 1 : 2;
MemberLoginModel? memberBeforeLogin;
}

@ -0,0 +1,27 @@
// import 'package:firebase_crashlytics/firebase_crashlytics.dart';
// import 'package:flutter/material.dart';
import 'package:hmg_nurses/config/app_state.dart';
import 'package:hmg_nurses/services/api_client.dart';
import 'package:hmg_nurses/services/api_repo/dashboard_api_repo.dart';
import 'package:hmg_nurses/services/api_repo/login_api_repo.dart';
import 'package:hmg_nurses/services/api_repo/patient_api_repo.dart';
import 'package:hmg_nurses/services/firebase_service.dart';
import 'package:injector/injector.dart';
class AppDependencies {
static void addDependencies() {
Injector injector = Injector.appInstance;
//add dependencies as needed
//services
injector.registerSingleton<AppState>(() => AppState());
injector.registerSingleton<IApiClient>(() => ApiClient());
injector.registerSingleton<IFirebaseService>(() => FirebaseService());
//repos
injector.registerSingleton<ILoginApiRepo>(() => LoginApiRepo());
injector.registerSingleton<IDashboardApiRepo>(() => DashboardApiRepo());
injector.registerSingleton<IPatientApiRepo>(() => PatientApiRepo());
}
}

@ -1,17 +1,40 @@
import 'package:flutter/material.dart';
import 'package:hmg_nurses/ui/dashboard/dashbaord_page.dart';
import 'package:hmg_nurses/ui/login/login_method_page.dart';
import 'package:hmg_nurses/ui/login/login_page.dart';
import 'package:hmg_nurses/ui/login/splash_page.dart';
import 'package:hmg_nurses/ui/patient/profile/patient_profile_page.dart';
import 'package:hmg_nurses/ui/patient/profile/vital/vital_signs_page.dart';
import 'package:hmg_nurses/ui/patient/search_patient_page.dart';
import 'package:hmg_nurses/ui/patient/searched_patient_list_page.dart';
class AppRoutes {
static const String initialPage = login;
//Login
static const String splash = "/splash";
static const String registerSelection = "/registerSelection";
static const String loginMethodsPage = "/loginMethodsPage";
static const String login = "/login";
//Dashboard
static const String dashboard = "/dashboard";
static const String searchPatient = "/searchPatient";
static const String searchedFor = "/searchedFor";
static const String patientProfile = "/patientProfile";
static const String vitalSigns = "/vitalSigns";
static final Map<String, WidgetBuilder> routes = {
//Login
login: (BuildContext context) => const LoginPage(),
splash: (BuildContext context) => SplashPage(),
login: (BuildContext context) => LoginPage(),
loginMethodsPage: (BuildContext context) => const LoginMethodsPage(),
//Dashboard
dashboard: (BuildContext context) => DashboardPage(),
searchPatient: (BuildContext context) => SearchPatientPage(),
searchedFor: (BuildContext context) => SearchedPatientListPage(),
patientProfile: (BuildContext context) => PatientProfilePage(),
vitalSigns: (BuildContext context) => VitalSignsPage(),
};
}

@ -1,18 +0,0 @@
import 'package:get_it/get_it.dart';
import 'package:hmg_nurses/ui/login/login_vm.dart';
GetIt getIt = GetIt.instance;
void initDependencies () {
// TODO; WE WILL REGISTER ALL THE SERVICES HERE AS LAZY SINGLETON
//TODO: WE WILL REGISTER ALL THE VIEW MODELS AS FACTORY HERE
/// View Model
getIt.registerFactory(() => LoginViewModel());
}

@ -1,6 +1,6 @@
import 'dart:convert';
import 'package:hmg_nurses/api/api_client.dart';
import 'package:hmg_nurses/services/api_client.dart';
class APIException implements Exception {
static const String BAD_REQUEST = 'api_common_bad_request';

@ -17,10 +17,17 @@ extension CapExtension on String {
extension EmailValidator on String {
Widget get toWidget => Text(this);
Widget toText10({Color? color, bool isBold = false, int? maxlines, FontStyle? fontStyle}) => Text(
Widget toText10({Color? color, bool isBold = false, int? maxlines, FontStyle? fontStyle, TextOverflow? textOverflow}) => Text(
this,
maxLines: maxlines,
style: TextStyle(fontSize: 10.sp, fontStyle: fontStyle ?? FontStyle.normal, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4),
overflow: textOverflow,
style: TextStyle(
fontSize: 10.sp,
fontStyle: fontStyle ?? FontStyle.normal,
fontWeight: isBold ? FontWeight.bold : FontWeight.w600,
color: color ?? MyColors.darkTextColor,
letterSpacing: -0.4,
),
);
Widget toText11({Color? color, FontWeight? weight, bool isUnderLine = false, bool isBold = false}) => Text(
@ -70,15 +77,20 @@ extension EmailValidator on String {
double fontSize = 12,
double letterSpacing = -0.72,
double height = 1,
TextOverflow? textOverflow,
FontWeight? fontWeight,
}) =>
AutoSizeText(
this,
textAlign: isCenter ? TextAlign.center : null,
maxLines: (maxLine > 0) ? maxLine : null,
minFontSize: 5,
overflow: textOverflow,
style: TextStyle(
fontSize: fontSize,
fontWeight: isBold ? FontWeight.bold : FontWeight.w600,
fontWeight: fontWeight ?? (isBold
? FontWeight.bold
: FontWeight.w600),
color: color ?? MyColors.darkTextColor,
letterSpacing: letterSpacing,
decoration: isUnderLine ? TextDecoration.underline : null,
@ -101,9 +113,17 @@ extension EmailValidator on String {
decoration: isUnderLine ? TextDecoration.underline : null),
);
Widget toText16({Color? color, bool isUnderLine = false, bool isBold = false, int? maxlines}) => Text(
Widget toText16({
Color? color,
bool isUnderLine = false,
bool isBold = false,
int? maxlines,
TextAlign? textAlign,
}) =>
Text(
this,
maxLines: maxlines,
textAlign: textAlign,
style: TextStyle(
color: color ?? MyColors.darkTextColor,
fontSize: 16.sp,
@ -232,4 +252,12 @@ extension EmailValidator on String {
return "";
}
}
String truncate(int max, {String suffix = ''}) {
try {
return length <= max ? this : '${substring(0, max - suffix.length)}$suffix';
} catch (e) {
return this;
}
}
}

@ -15,6 +15,7 @@ extension WidgetExtensions on Widget {
Widget circle(double _value) => ClipRRect(borderRadius: BorderRadius.circular(_value), child: this);
Widget paddingAll(double _value) => Padding(padding: EdgeInsets.all(_value), child: this);
Widget paddingSymmetrical(double horizontal, double vertical) => Padding(padding: EdgeInsets.symmetric(horizontal: horizontal, vertical: vertical), child: this);

@ -63,7 +63,13 @@ class CodegenLoader extends AssetLoader{
"verification": "تَحَقّق",
"resend": "إعادة إرسال",
"codeExpire": "انتهت صلاحية رمز التحقق",
"moreVerificationOpts": "المزيد من خيارات التحقق"
"moreVerificationOpts": "المزيد من خيارات التحقق",
"select": "Select",
"days": "أيام",
"hr": "س",
"min": "د",
"years": "سنة",
"months": "أشهر"
};
static const Map<String,dynamic> en_US = {
"mohemm": "Mohemm",
@ -114,7 +120,13 @@ static const Map<String,dynamic> en_US = {
"verification": "Verification",
"resend": "Resend",
"codeExpire": "The verification code has been expired",
"moreVerificationOpts": "More verification options"
"moreVerificationOpts": "More verification options",
"select": "Select",
"days": "Days",
"hr": "Hr",
"min": "Min",
"years": "Years",
"months": "Months"
};
static const Map<String, Map<String,dynamic>> mapLocales = {"ar_SA": ar_SA, "en_US": en_US};
}

@ -1,20 +1,27 @@
import 'dart:io';
import 'package:easy_localization/easy_localization.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:hmg_nurses/classes/size_config.dart';
import 'package:hmg_nurses/config/app_state.dart';
import 'package:hmg_nurses/config/dependencies.dart';
import 'package:hmg_nurses/config/routes.dart';
import 'package:hmg_nurses/provider/dashboard_provider_model.dart';
import 'package:hmg_nurses/provider/login_provider_model.dart';
import 'package:hmg_nurses/theme/app_theme.dart';
import 'package:hmg_nurses/ui/login/login_vm.dart';
import 'package:injector/injector.dart';
import 'package:logger/logger.dart';
import 'package:provider/provider.dart';
import 'package:provider/single_child_widget.dart';
import 'package:sizer/sizer.dart';
import 'generated/codegen_loader.g.dart';
import 'provider/patient_provider_model.dart';
GlobalKey<NavigatorState> navigatorKey = GlobalKey();
late AppState appState;
final navigatorKey = GlobalKey<NavigatorState>();
Logger logger = Logger(
// filter: null, // Use the default LogFilter (-> only log in debug mode)
@ -36,6 +43,7 @@ Future<void> main() async {
await EasyLocalization.ensureInitialized();
// AppState().setPostParamsInitConfig();
HttpOverrides.global = MyHttpOverrides();
await Firebase.initializeApp();
runApp(
EasyLocalization(
supportedLocales: const <Locale>[
@ -46,10 +54,20 @@ Future<void> main() async {
assetLoader: const CodegenLoader(),
child: MultiProvider(
providers: <SingleChildWidget>[
ChangeNotifierProvider<DashboardProviderModel>(create: (_) => DashboardProviderModel()),
ChangeNotifierProvider<LoginViewModel>(create: (_) => LoginViewModel())
ChangeNotifierProvider<DashboardProviderModel>(
create: (_) => DashboardProviderModel(),
),
ChangeNotifierProvider<LoginProviderModel>(
create: (_) => LoginProviderModel(),
),
ChangeNotifierProvider<DashboardProviderModel>(
create: (_) => DashboardProviderModel(),
),
ChangeNotifierProvider<PatientProviderModel>(
create: (_) => PatientProviderModel(),
)
],
child: const MyApp(),
child: MyApp(),
),
),
);
@ -62,19 +80,26 @@ Future<void> main() async {
// command to generate languages data from json
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
MyApp({super.key}) {
AppDependencies.addDependencies();
appState = Injector.appInstance.get<AppState>();
appState.setPostParamsInitConfig();
}
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (context, constraints) {
return LayoutBuilder(builder: (context, constraints) {
return Sizer(
builder: (BuildContext context, Orientation orientation, DeviceType deviceType) {
builder: (
BuildContext context,
Orientation orientation,
DeviceType deviceType,
) {
SizeConfig().init(constraints, orientation);
List<LocalizationsDelegate<dynamic>> delegates = context.localizationDelegates;
return MaterialApp(
key: navigatorKey,
// key: navigatorKey,
navigatorKey: navigatorKey,
theme: AppTheme.getTheme(
EasyLocalization.of(context)?.locale.languageCode == "ar",
),
@ -82,12 +107,11 @@ class MyApp extends StatelessWidget {
localizationsDelegates: delegates,
supportedLocales: context.supportedLocales,
locale: context.locale,
initialRoute: AppRoutes.login,
initialRoute: AppRoutes.initialPage,
routes: AppRoutes.routes,
);
},
);
},
);
});
}
}

@ -0,0 +1,758 @@
// To parse this JSON data, do
//
// final genericResponseModel = genericResponseModelFromJson(jsonString);
import 'dart:convert';
import 'package:hmg_nurses/model/login/imei_details_model.dart';
import 'package:hmg_nurses/model/login/list_doctors_clinic_model.dart';
import 'package:hmg_nurses/model/login/member_information_model.dart';
import 'package:hmg_nurses/model/patient/list_doctor_patient_vital_sign.dart';
import 'package:hmg_nurses/model/patient/patient_file_information_prm_list.dart';
import '../login/project_info_model.dart';
GenericResponseModel genericResponseModelFromJson(String str) => GenericResponseModel.fromJson(json.decode(str));
String genericResponseModelToJson(GenericResponseModel data) => json.encode(data.toJson());
class GenericResponseModel {
GenericResponseModel({
this.date,
this.languageId,
this.serviceName,
this.time,
this.androidLink,
this.authenticationTokenId,
this.data,
this.dataw,
this.dietType,
this.dietTypeId,
this.errorCode,
this.errorEndUserMessage,
this.errorEndUserMessageN,
this.errorMessage,
this.errorType,
this.foodCategory,
this.iosLink,
this.isAuthenticated,
this.mealOrderStatus,
this.mealType,
this.messageStatus,
this.numberOfResultRecords,
this.patientBlodType,
this.successMsg,
this.successMsgN,
this.vidaUpdatedResponse,
this.admissionDiagnosisList,
this.admissionMasterList,
this.admissionProcedureList,
this.admissionRequestList,
this.appointmentDate,
this.appointmentId,
this.assessmentList,
this.boxQuantity,
this.chkStatusUpdated,
this.chiefComplaintAuditLogList,
this.clinicId,
this.created,
this.dietTypeList,
this.doctorDetails,
this.doctorHaveOneClinic,
this.doctorId,
this.doctorNotRepliedCounts,
this.doctorSesId,
this.doctorTokId,
this.drugToDrugResponse,
this.erlcInsertPatientInHisgenxList,
this.erlcIsInserted,
this.erlcRequestList,
this.endTime,
this.episodeId,
this.getErAppointmentFeesList,
this.getEpisodeNo,
this.getPatientErSessionStatusList,
this.getVcStatusBySessionIdList,
this.hasAppointment,
this.hasVirtualClinic,
this.httpStatusCode,
this.icdCodesList,
this.isAccepted,
this.isChangePassword,
this.isLogout,
this.isPatientErRequestVcSessionAndTokenUpdated,
this.isPatientSessionStatusInserted,
this.isPatientSessionStatusUpdated,
this.isSent,
this.labResultType,
this.listSickLeavesToExtent,
this.listAdmissionOrders,
this.listAllergies,
this.listApprovalMainInPatient,
this.listChiefComplaint,
this.listClinicAll,
this.listDiabeticChartValues,
this.listDiagnosisForInPatient,
this.listDischargeSummary,
this.listDoctorDeviceDetails,
this.listDoctorProfile,
this.listDoctorProgressNote,
this.listDoctorsClinic,
this.listDoctorsAll,
this.listDrugToDrugTherapy,
this.listGetLabNormal,
this.listGetLabOreders,
this.listGetLabSpecial,
this.listGetMedicationForInpatient,
this.listGetPatientVitalSign,
this.listGetPregressNoteForInPatient,
this.listGetRadOreders,
this.listGtMyPatientsQuestions,
this.listHistory,
this.listIcdCodes,
this.listInterventionHistory,
this.listInterventionMedications,
this.listMyDischargePatient,
this.listMyDischargeReferralPatient,
this.listMyDischargeReferredPatient,
this.listMyInPatient,
this.listMyOutPatient,
this.listMyOutPatientReferral,
this.listMyReferralPatient,
this.listMyReferredOutPatient,
this.listMyReferredPatient,
this.listMyTomorrowPatient,
this.listNursingProgressNote,
this.listOtReservationDetails,
this.listOperationDetails,
this.listPendingDischargeSummary,
this.listPendingOrders,
this.listPendingPatientAdminList,
this.listPendingPatientList,
this.listPrescriptionAuditLogInfo,
this.listPrescriptionReportByPatientId,
this.listPrescriptionReportForInPatient,
this.listRxAuditLogInfo,
this.listStpMasterList,
this.listSpecialClinicalCareList,
this.listSpecialClinicalCareMappingList,
this.logInTokenId,
this.masterLookUpList,
this.medicationList,
this.memberId,
this.orderedProcedureList,
this.patientDetails,
this.patientFileList,
this.patientInfoList,
this.patientInforBySearchCriteriaHisgenxList,
this.patientInforBySearchCriteriaList,
this.patientOutSa,
this.patientsFileInfoList,
this.pendingReferralList,
this.physicalExamAuditLogList,
this.physicalExamList,
this.prescriptionList,
this.procedureList,
this.progressNoteList,
this.progressNotesAuditLogList,
this.projectId,
this.projectInfo,
this.referralList,
this.requestCompleted,
this.requisitionResponse,
this.returnValue,
this.rowCount,
this.smsCode,
this.searchAdmissionList,
this.searchCriteriaKindList,
this.sickLeaveStatistics,
this.sickLeavesList,
this.sserviceId,
this.startTime,
this.statusMessage,
this.strAppointmentDate,
this.totalUnUsedCount,
this.ucafResponse,
this.validateProcedureList,
this.validationErrors,
this.verificationCode,
this.vidaAuthTokenId,
this.vidaRefreshTokenId,
this.vitalSignsHistory,
this.vitalSignsList,
this.admissionResponse,
this.coveringDoctorList,
this.isActiveCode,
this.isSmsSent,
this.listCategories,
this.listClinics,
this.listDoctorDashboarKpi,
this.listItemByMedicineCode,
this.listKeywords,
this.listProcedureCategories,
this.listProcedureResult,
this.memberInformation,
this.patientArrivalList,
this.requisitionList,
this.requisitionScheduleList,
this.requisitionStatusList,
this.resultValue,
this.specialAuthenticate,
this.getPatientFileInformationPrmList,
this.listDoctorPatientVitalSign,
});
final dynamic date;
final int? languageId;
final int? serviceName;
final dynamic time;
final dynamic androidLink;
final dynamic authenticationTokenId;
final dynamic data;
final bool? dataw;
final int? dietType;
final int? dietTypeId;
final dynamic errorCode;
final dynamic errorEndUserMessage;
final dynamic errorEndUserMessageN;
final dynamic errorMessage;
final int? errorType;
final int? foodCategory;
final dynamic iosLink;
final bool? isAuthenticated;
final int? mealOrderStatus;
final int? mealType;
final int? messageStatus;
final int? numberOfResultRecords;
final dynamic patientBlodType;
final dynamic successMsg;
final dynamic successMsgN;
final dynamic vidaUpdatedResponse;
final dynamic admissionDiagnosisList;
final dynamic admissionMasterList;
final dynamic admissionProcedureList;
final dynamic admissionRequestList;
final dynamic appointmentDate;
final dynamic appointmentId;
final dynamic assessmentList;
final int? boxQuantity;
final int? chkStatusUpdated;
final dynamic chiefComplaintAuditLogList;
final int? clinicId;
final bool? created;
final dynamic dietTypeList;
final dynamic doctorDetails;
final bool? doctorHaveOneClinic;
final int? doctorId;
final int? doctorNotRepliedCounts;
final dynamic doctorSesId;
final dynamic doctorTokId;
final dynamic drugToDrugResponse;
final dynamic erlcInsertPatientInHisgenxList;
final int? erlcIsInserted;
final dynamic erlcRequestList;
final dynamic endTime;
final int? episodeId;
final dynamic getErAppointmentFeesList;
final int? getEpisodeNo;
final dynamic getPatientErSessionStatusList;
final dynamic getVcStatusBySessionIdList;
final bool? hasAppointment;
final dynamic hasVirtualClinic;
final dynamic httpStatusCode;
final dynamic icdCodesList;
final bool? isAccepted;
final bool? isChangePassword;
final bool? isLogout;
final bool? isPatientErRequestVcSessionAndTokenUpdated;
final bool? isPatientSessionStatusInserted;
final bool? isPatientSessionStatusUpdated;
final bool? isSent;
final int? labResultType;
final dynamic listSickLeavesToExtent;
final dynamic listAdmissionOrders;
final dynamic listAllergies;
final dynamic listApprovalMainInPatient;
final dynamic listChiefComplaint;
final dynamic listClinicAll;
final dynamic listDiabeticChartValues;
final dynamic listDiagnosisForInPatient;
final dynamic listDischargeSummary;
final List<GetIMEIDetailsModel>? listDoctorDeviceDetails;
final dynamic listDoctorProfile;
final dynamic listDoctorProgressNote;
final List<ListDoctorsClinicModel>? listDoctorsClinic;
final dynamic listDoctorsAll;
final dynamic listDrugToDrugTherapy;
final dynamic listGetLabNormal;
final dynamic listGetLabOreders;
final dynamic listGetLabSpecial;
final dynamic listGetMedicationForInpatient;
final dynamic listGetPatientVitalSign;
final dynamic listGetPregressNoteForInPatient;
final dynamic listGetRadOreders;
final dynamic listGtMyPatientsQuestions;
final dynamic listHistory;
final dynamic listIcdCodes;
final dynamic listInterventionHistory;
final dynamic listInterventionMedications;
final dynamic listMyDischargePatient;
final dynamic listMyDischargeReferralPatient;
final dynamic listMyDischargeReferredPatient;
final dynamic listMyInPatient;
final dynamic listMyOutPatient;
final dynamic listMyOutPatientReferral;
final dynamic listMyReferralPatient;
final dynamic listMyReferredOutPatient;
final dynamic listMyReferredPatient;
final dynamic listMyTomorrowPatient;
final dynamic listNursingProgressNote;
final dynamic listOtReservationDetails;
final dynamic listOperationDetails;
final dynamic listPendingDischargeSummary;
final dynamic listPendingOrders;
final dynamic listPendingPatientAdminList;
final dynamic listPendingPatientList;
final dynamic listPrescriptionAuditLogInfo;
final dynamic listPrescriptionReportByPatientId;
final dynamic listPrescriptionReportForInPatient;
final dynamic listRxAuditLogInfo;
final dynamic listStpMasterList;
final dynamic listSpecialClinicalCareList;
final dynamic listSpecialClinicalCareMappingList;
final dynamic logInTokenId;
final dynamic masterLookUpList;
final dynamic medicationList;
final int? memberId;
final dynamic orderedProcedureList;
final dynamic patientDetails;
final dynamic patientFileList;
final dynamic patientInfoList;
final dynamic patientInforBySearchCriteriaHisgenxList;
final dynamic patientInforBySearchCriteriaList;
final bool? patientOutSa;
final dynamic patientsFileInfoList;
final dynamic pendingReferralList;
final dynamic physicalExamAuditLogList;
final dynamic physicalExamList;
final dynamic prescriptionList;
final dynamic procedureList;
final dynamic progressNoteList;
final dynamic progressNotesAuditLogList;
final int? projectId;
final List<ProjectInfoModel>? projectInfo;
final dynamic referralList;
final bool? requestCompleted;
final dynamic requisitionResponse;
final int? returnValue;
final int? rowCount;
final dynamic smsCode;
final dynamic searchAdmissionList;
final dynamic searchCriteriaKindList;
final dynamic sickLeaveStatistics;
final dynamic sickLeavesList;
final dynamic sserviceId;
final dynamic startTime;
final dynamic statusMessage;
final dynamic strAppointmentDate;
final int? totalUnUsedCount;
final dynamic ucafResponse;
final dynamic validateProcedureList;
final dynamic validationErrors;
final dynamic verificationCode;
final dynamic vidaAuthTokenId;
final dynamic vidaRefreshTokenId;
final dynamic vitalSignsHistory;
final dynamic vitalSignsList;
final dynamic admissionResponse;
final dynamic coveringDoctorList;
final bool? isActiveCode;
final bool? isSmsSent;
final dynamic listCategories;
final dynamic listClinics;
final dynamic listDoctorDashboarKpi;
final dynamic listItemByMedicineCode;
final dynamic listKeywords;
final dynamic listProcedureCategories;
final dynamic listProcedureResult;
final MemberInformation? memberInformation;
final dynamic patientArrivalList;
final dynamic requisitionList;
final dynamic requisitionScheduleList;
final dynamic requisitionStatusList;
final int? resultValue;
final bool? specialAuthenticate;
final List<GetPatientFileInformationPrmList>? getPatientFileInformationPrmList;
final List<ListDoctorPatientVitalSign>? listDoctorPatientVitalSign;
factory GenericResponseModel.fromJson(Map<String, dynamic> json) => GenericResponseModel(
date: json["Date"],
languageId: json["LanguageID"] == null ? null : json["LanguageID"],
serviceName: json["ServiceName"] == null ? null : json["ServiceName"],
time: json["Time"],
androidLink: json["AndroidLink"],
authenticationTokenId: json["AuthenticationTokenID"],
data: json["Data"],
dataw: json["Dataw"] == null ? null : json["Dataw"],
dietType: json["DietType"] == null ? null : json["DietType"],
dietTypeId: json["DietTypeID"] == null ? null : json["DietTypeID"],
errorCode: json["ErrorCode"],
errorEndUserMessage: json["ErrorEndUserMessage"],
errorEndUserMessageN: json["ErrorEndUserMessageN"],
errorMessage: json["ErrorMessage"],
errorType: json["ErrorType"] == null ? null : json["ErrorType"],
foodCategory: json["FoodCategory"] == null ? null : json["FoodCategory"],
iosLink: json["IOSLink"],
isAuthenticated: json["IsAuthenticated"] == null ? null : json["IsAuthenticated"],
mealOrderStatus: json["MealOrderStatus"] == null ? null : json["MealOrderStatus"],
mealType: json["MealType"] == null ? null : json["MealType"],
messageStatus: json["MessageStatus"] == null ? null : json["MessageStatus"],
numberOfResultRecords: json["NumberOfResultRecords"] == null ? null : json["NumberOfResultRecords"],
patientBlodType: json["PatientBlodType"],
successMsg: json["SuccessMsg"],
successMsgN: json["SuccessMsgN"],
vidaUpdatedResponse: json["VidaUpdatedResponse"],
admissionDiagnosisList: json["AdmissionDiagnosisList"],
admissionMasterList: json["AdmissionMasterList"],
admissionProcedureList: json["AdmissionProcedureList"],
admissionRequestList: json["AdmissionRequestList"],
appointmentDate: json["AppointmentDate"],
appointmentId: json["AppointmentID"],
assessmentList: json["AssessmentList"],
boxQuantity: json["BoxQuantity"] == null ? null : json["BoxQuantity"],
chkStatusUpdated: json["CHK_StatusUpdated"] == null ? null : json["CHK_StatusUpdated"],
chiefComplaintAuditLogList: json["ChiefComplaintAuditLogList"],
clinicId: json["ClinicID"] == null ? null : json["ClinicID"],
created: json["Created"] == null ? null : json["Created"],
dietTypeList: json["DietTypeList"],
doctorDetails: json["DoctorDetails"],
doctorHaveOneClinic: json["DoctorHaveOneClinic"] == null ? null : json["DoctorHaveOneClinic"],
doctorId: json["DoctorID"] == null ? null : json["DoctorID"],
doctorNotRepliedCounts: json["DoctorNotRepliedCounts"] == null ? null : json["DoctorNotRepliedCounts"],
doctorSesId: json["DoctorSesID"],
doctorTokId: json["DoctorTokID"],
drugToDrugResponse: json["DrugToDrugResponse"],
erlcInsertPatientInHisgenxList: json["ERLC_InsertPatientInHISGENXList"],
erlcIsInserted: json["ERLC_IsInserted"] == null ? null : json["ERLC_IsInserted"],
erlcRequestList: json["ERLC_RequestList"],
endTime: json["EndTime"],
episodeId: json["EpisodeID"] == null ? null : json["EpisodeID"],
getErAppointmentFeesList: json["GetERAppointmentFeesList"],
getEpisodeNo: json["GetEpisodeNo"] == null ? null : json["GetEpisodeNo"],
getPatientErSessionStatusList: json["GetPatientERSessionStatusList"],
getVcStatusBySessionIdList: json["GetVCStatusBySessionIDList"],
hasAppointment: json["HasAppointment"] == null ? null : json["HasAppointment"],
hasVirtualClinic: json["HasVirtualClinic"],
httpStatusCode: json["HttpStatusCode"],
icdCodesList: json["ICDCodesList"],
isAccepted: json["IsAccepted"] == null ? null : json["IsAccepted"],
isChangePassword: json["IsChangePassword"] == null ? null : json["IsChangePassword"],
isLogout: json["IsLogout"] == null ? null : json["IsLogout"],
isPatientErRequestVcSessionAndTokenUpdated: json["IsPatientERRequestVCSessionAndTokenUpdated"] == null ? null : json["IsPatientERRequestVCSessionAndTokenUpdated"],
isPatientSessionStatusInserted: json["IsPatientSessionStatusInserted"] == null ? null : json["IsPatientSessionStatusInserted"],
isPatientSessionStatusUpdated: json["IsPatientSessionStatusUpdated"] == null ? null : json["IsPatientSessionStatusUpdated"],
isSent: json["IsSent"] == null ? null : json["IsSent"],
labResultType: json["LabResultType"] == null ? null : json["LabResultType"],
listSickLeavesToExtent: json["ListSickLeavesToExtent"],
listAdmissionOrders: json["List_AdmissionOrders"],
listAllergies: json["List_Allergies"],
listApprovalMainInPatient: json["List_ApprovalMain_InPatient"],
listChiefComplaint: json["List_ChiefComplaint"],
listClinicAll: json["List_Clinic_All"],
listDiabeticChartValues: json["List_DiabeticChartValues"],
listDiagnosisForInPatient: json["List_DiagnosisForInPatient"],
listDischargeSummary: json["List_DischargeSummary"],
listDoctorDeviceDetails: json["List_DoctorDeviceDetails"] == null ? null : List<GetIMEIDetailsModel>.from(json["List_DoctorDeviceDetails"].map((x) => GetIMEIDetailsModel.fromJson(x))),
listDoctorProfile: json["List_DoctorProfile"],
listDoctorProgressNote: json["List_DoctorProgressNote"],
listDoctorsClinic: json["List_DoctorsClinic"] == null ? null : List<ListDoctorsClinicModel>.from(json["List_DoctorsClinic"].map((x) => ListDoctorsClinicModel.fromJson(x))),
listDoctorsAll: json["List_Doctors_All"],
listDrugToDrugTherapy: json["List_DrugToDrugTherapy"],
listGetLabNormal: json["List_GetLabNormal"],
listGetLabOreders: json["List_GetLabOreders"],
listGetLabSpecial: json["List_GetLabSpecial"],
listGetMedicationForInpatient: json["List_GetMedicationForInpatient"],
listGetPatientVitalSign: json["List_GetPatientVitalSign"],
listGetPregressNoteForInPatient: json["List_GetPregressNoteForInPatient"],
listGetRadOreders: json["List_GetRadOreders"],
listGtMyPatientsQuestions: json["List_GtMyPatientsQuestions"],
listHistory: json["List_History"],
listIcdCodes: json["List_ICDCodes"],
listInterventionHistory: json["List_InterventionHistory"],
listInterventionMedications: json["List_InterventionMedications"],
listMyDischargePatient: json["List_MyDischargePatient"],
listMyDischargeReferralPatient: json["List_MyDischargeReferralPatient"],
listMyDischargeReferredPatient: json["List_MyDischargeReferredPatient"],
listMyInPatient: json["List_MyInPatient"],
listMyOutPatient: json["List_MyOutPatient"],
listMyOutPatientReferral: json["List_MyOutPatientReferral"],
listMyReferralPatient: json["List_MyReferralPatient"],
listMyReferredOutPatient: json["List_MyReferredOutPatient"],
listMyReferredPatient: json["List_MyReferredPatient"],
listMyTomorrowPatient: json["List_MyTomorrowPatient"],
listNursingProgressNote: json["List_NursingProgressNote"],
listOtReservationDetails: json["List_OTReservationDetails"],
listOperationDetails: json["List_OperationDetails"],
listPendingDischargeSummary: json["List_PendingDischargeSummary"],
listPendingOrders: json["List_PendingOrders"],
listPendingPatientAdminList: json["List_PendingPatientAdminList"],
listPendingPatientList: json["List_PendingPatientList"],
listPrescriptionAuditLogInfo: json["List_PrescriptionAuditLogInfo"],
listPrescriptionReportByPatientId: json["List_PrescriptionReportByPatientID"],
listPrescriptionReportForInPatient: json["List_PrescriptionReportForInPatient"],
listRxAuditLogInfo: json["List_RxAuditLogInfo"],
listStpMasterList: json["List_STPMasterList"],
listSpecialClinicalCareList: json["List_SpecialClinicalCareList"],
listSpecialClinicalCareMappingList: json["List_SpecialClinicalCareMappingList"],
logInTokenId: json["LogInTokenID"],
masterLookUpList: json["MasterLookUpList"],
medicationList: json["MedicationList"],
memberId: json["MemberID"] == null ? null : json["MemberID"],
orderedProcedureList: json["OrderedProcedureList"],
patientDetails: json["PatientDetails"],
patientFileList: json["PatientFileList"],
patientInfoList: json["PatientInfo_List"],
patientInforBySearchCriteriaHisgenxList: json["PatientInforBySearchCriteriaHISGENX_List"],
patientInforBySearchCriteriaList: json["PatientInforBySearchCriteria_List"],
patientOutSa: json["PatientOutSA"] == null ? null : json["PatientOutSA"],
patientsFileInfoList: json["PatientsFileInfo_List"],
pendingReferralList: json["PendingReferralList"],
physicalExamAuditLogList: json["PhysicalExamAuditLogList"],
physicalExamList: json["PhysicalExamList"],
prescriptionList: json["PrescriptionList"],
procedureList: json["ProcedureList"],
progressNoteList: json["ProgressNoteList"],
progressNotesAuditLogList: json["ProgressNotesAuditLogList"],
projectId: json["ProjectID"] == null ? null : json["ProjectID"],
projectInfo: json["ProjectInfo"] == null ? null : List<ProjectInfoModel>.from(json["ProjectInfo"].map((x) => ProjectInfoModel.fromJson(x))),
referralList: json["ReferralList"],
requestCompleted: json["RequestCompleted"] == null ? null : json["RequestCompleted"],
requisitionResponse: json["RequisitionResponse"],
returnValue: json["ReturnValue"] == null ? null : json["ReturnValue"],
rowCount: json["RowCount"] == null ? null : json["RowCount"],
smsCode: json["SMSCode"],
searchAdmissionList: json["SearchAdmissionList"],
searchCriteriaKindList: json["SearchCriteriaKindList"],
sickLeaveStatistics: json["SickLeaveStatistics"],
sickLeavesList: json["SickLeavesList"],
sserviceId: json["SserviceID"],
startTime: json["StartTime"],
statusMessage: json["StatusMessage"],
strAppointmentDate: json["StrAppointmentDate"],
totalUnUsedCount: json["TotalUnUsedCount"] == null ? null : json["TotalUnUsedCount"],
ucafResponse: json["UcafResponse"],
validateProcedureList: json["ValidateProcedureList"],
validationErrors: json["ValidationErrors"],
verificationCode: json["VerificationCode"],
vidaAuthTokenId: json["VidaAuthTokenID"],
vidaRefreshTokenId: json["VidaRefreshTokenID"],
vitalSignsHistory: json["VitalSignsHistory"],
vitalSignsList: json["VitalSignsList"],
admissionResponse: json["admissionResponse"],
coveringDoctorList: json["coveringDoctorList"],
isActiveCode: json["isActiveCode"] == null ? null : json["isActiveCode"],
isSmsSent: json["isSMSSent"] == null ? null : json["isSMSSent"],
listCategories: json["listCategories"],
listClinics: json["listClinics"],
listDoctorDashboarKpi: json["listDoctorDashboarKPI"],
listItemByMedicineCode: json["listItemByMedicineCode"],
listKeywords: json["listKeywords"],
listProcedureCategories: json["listProcedureCategories"],
listProcedureResult: json["listProcedureResult"],
memberInformation: json["memberInformation"] == null ? null : MemberInformation.fromJson(json["memberInformation"]),
patientArrivalList: json["patientArrivalList"],
requisitionList: json["requisitionList"],
requisitionScheduleList: json["requisitionScheduleList"],
requisitionStatusList: json["requisitionStatusList"],
resultValue: json["resultValue"] == null ? null : json["resultValue"],
specialAuthenticate: json["specialAuthenticate"] == null ? null : json["specialAuthenticate"],
getPatientFileInformationPrmList: json["GetPatientFileInformation_PRMList"] == null
? null
: List<GetPatientFileInformationPrmList>.from(json["GetPatientFileInformation_PRMList"].map((x) => GetPatientFileInformationPrmList.fromJson(x))),
listDoctorPatientVitalSign:
json["List_DoctorPatientVitalSign"] == null ? null : List<ListDoctorPatientVitalSign>.from(json["List_DoctorPatientVitalSign"].map((x) => ListDoctorPatientVitalSign.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"Date": date,
"LanguageID": languageId == null ? null : languageId,
"ServiceName": serviceName == null ? null : serviceName,
"Time": time,
"AndroidLink": androidLink,
"AuthenticationTokenID": authenticationTokenId,
"Data": data,
"Dataw": dataw == null ? null : dataw,
"DietType": dietType == null ? null : dietType,
"DietTypeID": dietTypeId == null ? null : dietTypeId,
"ErrorCode": errorCode,
"ErrorEndUserMessage": errorEndUserMessage,
"ErrorEndUserMessageN": errorEndUserMessageN,
"ErrorMessage": errorMessage,
"ErrorType": errorType == null ? null : errorType,
"FoodCategory": foodCategory == null ? null : foodCategory,
"IOSLink": iosLink,
"IsAuthenticated": isAuthenticated == null ? null : isAuthenticated,
"MealOrderStatus": mealOrderStatus == null ? null : mealOrderStatus,
"MealType": mealType == null ? null : mealType,
"MessageStatus": messageStatus == null ? null : messageStatus,
"NumberOfResultRecords": numberOfResultRecords == null ? null : numberOfResultRecords,
"PatientBlodType": patientBlodType,
"SuccessMsg": successMsg,
"SuccessMsgN": successMsgN,
"VidaUpdatedResponse": vidaUpdatedResponse,
"AdmissionDiagnosisList": admissionDiagnosisList,
"AdmissionMasterList": admissionMasterList,
"AdmissionProcedureList": admissionProcedureList,
"AdmissionRequestList": admissionRequestList,
"AppointmentDate": appointmentDate,
"AppointmentID": appointmentId,
"AssessmentList": assessmentList,
"BoxQuantity": boxQuantity == null ? null : boxQuantity,
"CHK_StatusUpdated": chkStatusUpdated == null ? null : chkStatusUpdated,
"ChiefComplaintAuditLogList": chiefComplaintAuditLogList,
"ClinicID": clinicId == null ? null : clinicId,
"Created": created == null ? null : created,
"DietTypeList": dietTypeList,
"DoctorDetails": doctorDetails,
"DoctorHaveOneClinic": doctorHaveOneClinic == null ? null : doctorHaveOneClinic,
"DoctorID": doctorId == null ? null : doctorId,
"DoctorNotRepliedCounts": doctorNotRepliedCounts == null ? null : doctorNotRepliedCounts,
"DoctorSesID": doctorSesId,
"DoctorTokID": doctorTokId,
"DrugToDrugResponse": drugToDrugResponse,
"ERLC_InsertPatientInHISGENXList": erlcInsertPatientInHisgenxList,
"ERLC_IsInserted": erlcIsInserted == null ? null : erlcIsInserted,
"ERLC_RequestList": erlcRequestList,
"EndTime": endTime,
"EpisodeID": episodeId == null ? null : episodeId,
"GetERAppointmentFeesList": getErAppointmentFeesList,
"GetEpisodeNo": getEpisodeNo == null ? null : getEpisodeNo,
"GetPatientERSessionStatusList": getPatientErSessionStatusList,
"GetVCStatusBySessionIDList": getVcStatusBySessionIdList,
"HasAppointment": hasAppointment == null ? null : hasAppointment,
"HasVirtualClinic": hasVirtualClinic,
"HttpStatusCode": httpStatusCode,
"ICDCodesList": icdCodesList,
"IsAccepted": isAccepted == null ? null : isAccepted,
"IsChangePassword": isChangePassword == null ? null : isChangePassword,
"IsLogout": isLogout == null ? null : isLogout,
"IsPatientERRequestVCSessionAndTokenUpdated": isPatientErRequestVcSessionAndTokenUpdated == null ? null : isPatientErRequestVcSessionAndTokenUpdated,
"IsPatientSessionStatusInserted": isPatientSessionStatusInserted == null ? null : isPatientSessionStatusInserted,
"IsPatientSessionStatusUpdated": isPatientSessionStatusUpdated == null ? null : isPatientSessionStatusUpdated,
"IsSent": isSent == null ? null : isSent,
"LabResultType": labResultType == null ? null : labResultType,
"ListSickLeavesToExtent": listSickLeavesToExtent,
"List_AdmissionOrders": listAdmissionOrders,
"List_Allergies": listAllergies,
"List_ApprovalMain_InPatient": listApprovalMainInPatient,
"List_ChiefComplaint": listChiefComplaint,
"List_Clinic_All": listClinicAll,
"List_DiabeticChartValues": listDiabeticChartValues,
"List_DiagnosisForInPatient": listDiagnosisForInPatient,
"List_DischargeSummary": listDischargeSummary,
"List_DoctorDeviceDetails": listDoctorDeviceDetails == null ? null : List<dynamic>.from(listDoctorDeviceDetails!.map((x) => x)),
"List_DoctorProfile": listDoctorProfile,
"List_DoctorProgressNote": listDoctorProgressNote,
"List_DoctorsClinic": listDoctorsClinic == null ? null : List<dynamic>.from(listDoctorsClinic!.map((x) => x.toJson())),
"List_Doctors_All": listDoctorsAll,
"List_DrugToDrugTherapy": listDrugToDrugTherapy,
"List_GetLabNormal": listGetLabNormal,
"List_GetLabOreders": listGetLabOreders,
"List_GetLabSpecial": listGetLabSpecial,
"List_GetMedicationForInpatient": listGetMedicationForInpatient,
"List_GetPatientVitalSign": listGetPatientVitalSign,
"List_GetPregressNoteForInPatient": listGetPregressNoteForInPatient,
"List_GetRadOreders": listGetRadOreders,
"List_GtMyPatientsQuestions": listGtMyPatientsQuestions,
"List_History": listHistory,
"List_ICDCodes": listIcdCodes,
"List_InterventionHistory": listInterventionHistory,
"List_InterventionMedications": listInterventionMedications,
"List_MyDischargePatient": listMyDischargePatient,
"List_MyDischargeReferralPatient": listMyDischargeReferralPatient,
"List_MyDischargeReferredPatient": listMyDischargeReferredPatient,
"List_MyInPatient": listMyInPatient,
"List_MyOutPatient": listMyOutPatient,
"List_MyOutPatientReferral": listMyOutPatientReferral,
"List_MyReferralPatient": listMyReferralPatient,
"List_MyReferredOutPatient": listMyReferredOutPatient,
"List_MyReferredPatient": listMyReferredPatient,
"List_MyTomorrowPatient": listMyTomorrowPatient,
"List_NursingProgressNote": listNursingProgressNote,
"List_OTReservationDetails": listOtReservationDetails,
"List_OperationDetails": listOperationDetails,
"List_PendingDischargeSummary": listPendingDischargeSummary,
"List_PendingOrders": listPendingOrders,
"List_PendingPatientAdminList": listPendingPatientAdminList,
"List_PendingPatientList": listPendingPatientList,
"List_PrescriptionAuditLogInfo": listPrescriptionAuditLogInfo,
"List_PrescriptionReportByPatientID": listPrescriptionReportByPatientId,
"List_PrescriptionReportForInPatient": listPrescriptionReportForInPatient,
"List_RxAuditLogInfo": listRxAuditLogInfo,
"List_STPMasterList": listStpMasterList,
"List_SpecialClinicalCareList": listSpecialClinicalCareList,
"List_SpecialClinicalCareMappingList": listSpecialClinicalCareMappingList,
"LogInTokenID": logInTokenId,
"MasterLookUpList": masterLookUpList,
"MedicationList": medicationList,
"MemberID": memberId == null ? null : memberId,
"OrderedProcedureList": orderedProcedureList,
"PatientDetails": patientDetails,
"PatientFileList": patientFileList,
"PatientInfo_List": patientInfoList,
"PatientInforBySearchCriteriaHISGENX_List": patientInforBySearchCriteriaHisgenxList,
"PatientInforBySearchCriteria_List": patientInforBySearchCriteriaList,
"PatientOutSA": patientOutSa == null ? null : patientOutSa,
"PatientsFileInfo_List": patientsFileInfoList,
"PendingReferralList": pendingReferralList,
"PhysicalExamAuditLogList": physicalExamAuditLogList,
"PhysicalExamList": physicalExamList,
"PrescriptionList": prescriptionList,
"ProcedureList": procedureList,
"ProgressNoteList": progressNoteList,
"ProgressNotesAuditLogList": progressNotesAuditLogList,
"ProjectID": projectId == null ? null : projectId,
"ProjectInfo": projectInfo,
"ReferralList": referralList,
"RequestCompleted": requestCompleted == null ? null : requestCompleted,
"RequisitionResponse": requisitionResponse,
"ReturnValue": returnValue == null ? null : returnValue,
"RowCount": rowCount == null ? null : rowCount,
"SMSCode": smsCode,
"SearchAdmissionList": searchAdmissionList,
"SearchCriteriaKindList": searchCriteriaKindList,
"SickLeaveStatistics": sickLeaveStatistics,
"SickLeavesList": sickLeavesList,
"SserviceID": sserviceId,
"StartTime": startTime,
"StatusMessage": statusMessage,
"StrAppointmentDate": strAppointmentDate,
"TotalUnUsedCount": totalUnUsedCount == null ? null : totalUnUsedCount,
"UcafResponse": ucafResponse,
"ValidateProcedureList": validateProcedureList,
"ValidationErrors": validationErrors,
"VerificationCode": verificationCode,
"VidaAuthTokenID": vidaAuthTokenId,
"VidaRefreshTokenID": vidaRefreshTokenId,
"VitalSignsHistory": vitalSignsHistory,
"VitalSignsList": vitalSignsList,
"admissionResponse": admissionResponse,
"coveringDoctorList": coveringDoctorList,
"isActiveCode": isActiveCode == null ? null : isActiveCode,
"isSMSSent": isSmsSent == null ? null : isSmsSent,
"listCategories": listCategories,
"listClinics": listClinics,
"listDoctorDashboarKPI": listDoctorDashboarKpi,
"listItemByMedicineCode": listItemByMedicineCode,
"listKeywords": listKeywords,
"listProcedureCategories": listProcedureCategories,
"listProcedureResult": listProcedureResult,
"memberInformation": memberInformation == null ? null : memberInformation!.toJson(),
"patientArrivalList": patientArrivalList,
"requisitionList": requisitionList,
"requisitionScheduleList": requisitionScheduleList,
"requisitionStatusList": requisitionStatusList,
"resultValue": resultValue == null ? null : resultValue,
"specialAuthenticate": specialAuthenticate == null ? null : specialAuthenticate,
};
}

@ -0,0 +1,911 @@
// To parse this JSON data, do
//
// final genericResponseModel2 = genericResponseModel2FromJson(jsonString);
import 'dart:convert';
import 'package:hmg_nurses/model/login/doctor_profile_model.dart';
GenericResponseModel2 genericResponseModel2FromJson(String str) => GenericResponseModel2.fromJson(json.decode(str));
String genericResponseModel2ToJson(GenericResponseModel2 data) => json.encode(data.toJson());
class GenericResponseModel2 {
GenericResponseModel2({
this.date,
this.languageId,
this.serviceName,
this.time,
this.androidLink,
this.authenticationTokenId,
this.data,
this.dataw,
this.dietType,
this.dietTypeId,
this.errorCode,
this.errorEndUserMessage,
this.errorEndUserMessageN,
this.errorMessage,
this.errorType,
this.foodCategory,
this.iosLink,
this.isAuthenticated,
this.mealOrderStatus,
this.mealType,
this.messageStatus,
this.numberOfResultRecords,
this.patientBlodType,
this.successMsg,
this.successMsgN,
this.vidaUpdatedResponse,
this.ageError,
this.allowedBooking,
this.ancillaryOrderInvoiceList,
this.ancillaryOrderList,
this.ancillaryOrderListCount,
this.ancillaryOrderProcList,
this.appoimentAllHistoryResultList,
this.appoimentAllResultList,
this.appointmentActiveNumber,
this.appointmentNo,
this.appointmentQr,
this.avgDoctorRatingList,
this.covid19AppointmentResponse,
this.covid19FreeTimeSlots,
this.covid19InvoiceResponse,
this.covid19PatientShare,
this.covid19TestProceduresList,
this.clinicCategoryList,
this.clinicInsertedId,
this.clinicsHaveScheduleList,
this.continueBookAppointment,
this.dappTemplateGetList,
this.decimalDoctorRate,
this.dentalProcedure,
this.dentalProcedureName,
this.diseasesByClinicList,
this.doctorBasicScheduleList,
this.doctorByClinicIdList,
this.doctorByDiseaseList,
this.doctorCalenderList,
this.doctorInformationAsHtml,
this.doctorInformationRaw,
this.doctorList,
this.doctorPrePostImagesList,
this.doctorProfileList,
this.doctorRate,
this.doctorRatingDetailsList,
this.doctorScheduleMappingInsert,
this.doctorSchedulesByClinicList,
this.doctorscheduleslotInsert,
this.doctorscheduleslotSelectList,
this.erAppointmentFeesObject,
this.erAdvancePaymentResponse,
this.erOnlinePaymentDetailsResponse,
this.erPatientShare,
this.erTriageQuestionsList,
this.errCode,
this.errorSearchMsg,
this.formId,
this.freeTimeSlots,
this.genderError,
this.getDoctorMobileNo,
this.getPatientInfoByPatientIdList,
this.getPatientMedicalStatus,
this.hisGetAllAppoimentHistoryList,
this.hisGetDoctorOffDaysList,
this.hisObgyneUltrasoundDoctorsList,
this.hisProcedureTemplateDetailsList,
this.hisProcedureTemplateList,
this.hisWaitingCheckDoctorAvailableForWaitingAppointmentList,
this.hisObGyneProcedureGetResponse,
this.hisPrmGetApprovalRemarkList,
this.hoursDiff,
this.isDentalplan,
this.isMobileAppDentalAllow,
this.initialSlotDuration,
this.isAllowToBookWaitingAppointment,
this.isAllowVClinic,
this.isAllowWaitList,
this.isAppointmentAllowed,
this.isClinicEnabledForIcdCodes,
this.isDoctorExist,
this.isInsertOrUpdate,
this.isLastAppoitmentRatedList,
this.isShowInsuranceUpdateModule,
this.isSlotAvailable,
this.lcGetClinicScheduleList,
this.listHoursDiff,
this.listReqTypes,
this.listAllClinicRate,
this.listAllDoctorRate,
this.listAllProjectRate,
this.listCovid19DoctorsByClinicAndProject,
this.listCovid19ProjectDriveThroughTestingCenter,
this.listCalculationTable,
this.listDdAdminMembers,
this.listDentalChiefComplain,
this.listDentalDdDetails,
this.listDentalDoctorChiefComplaintMapping,
this.listDentalPediatricDoctor,
this.listDoctorAll,
this.listDoctorByIpAddressCheckIn,
this.listDoctorByProjectClinicAr,
this.listDoctorByProjectClinicEn,
this.listDoctorCases,
this.listDoctorClinics,
this.listDoctorDetailsList,
this.listDoctorDetailsListAr,
this.listDoctorLanguages,
this.listDoctorMappinsgs,
this.listDoctorPatientVitalSign,
this.listDoctorProcedureMapping,
this.listDoctorProfileImage,
this.listDoctorProject,
this.listDoctorQualifications,
this.listDoctorSlotFirstVisit,
this.listDoctorSpeciality,
this.listDoctorSpecializations,
this.listDoctorWorkingHoursTable,
this.listDoctorblacklistModel,
this.listDoctorinfo,
this.listEnglish,
this.listGetAllCancelAppointmentReasons,
this.listGetAllClinicsRoomNo,
this.listGetAllDoctorsOnProject,
this.listGetAllDoctorsbyProject,
this.listGetAppForCancel,
this.listGetClinicsInfobyProject,
this.listGetClinicsbyProject,
this.listGetDoctorsbyProject,
this.listGetIpAddressForDd,
this.listGetIpAddressForDentalDd,
this.listGetInfoForDentalClinicsDd,
this.listGetLoginDetails,
this.listGetPatientCancelAppointment,
this.listHisDoctorProject,
this.listHisGetContactLensPerscription,
this.listHisGetGlassPerscription,
this.listHmgPartTimeDoctor,
this.listInvoiceDetails,
this.listIsPatientHasOnGoingEstimation,
this.listLaserDoctors,
this.listLaserProcedures,
this.listMedicalReportByAppointment,
this.listNonAdminProjectMapping,
this.listPatientErAdminServiceModel,
this.listPatientErDoctorBlackListModel,
this.listPhysioDoctors,
this.listProjectErpMapping,
this.listRecordByIpAddress,
this.listRecordByIpAddressNew,
this.listRecordByIpAddressNewCheckIn,
this.listRecordByIpAddressNewForDubai,
this.listRescahdualOnlineModel,
this.message,
this.notesDoctorRatingForCocList,
this.notesDoctorRatingList,
this.onlineCheckInAppointments,
this.onlineCheckinBeforeHour,
this.prmAdmissionInfoList,
this.prmDentalEstimationDetailList,
this.prmDentalEstimationList,
this.prmDoctorsForRadiologyList,
this.prmGetErToOpdRequestStatusList,
this.prmGetDoctorRatingList,
this.prmGetProceureAndPackagesList,
this.prmHisAppointmentqueuegetList,
this.prmHisCheckDoctorIsFullyBookedList,
this.prmHisGetDentalEstimationPlanList,
this.prmHisGetDischargeInfoList,
this.prmHisGetUpcomingConfirmedAppoimentList,
this.prmHisQueueErToOpList,
this.prmQueueERreferralHistoryGetList,
this.prmSpecialClinicalCareMappingList,
this.patientDoctorAppointmentResultExit,
this.patientDoctorAppointmentResultList,
this.patientErDoctorFreeSlots,
this.patientErGetAllClinicsList,
this.patientErGetDoctorClincByServiceIdList,
this.patientErGetServiceList,
this.patientErLogininsert,
this.patientErPrescriptionLogin,
this.patientErSelectAdmin,
this.patientErSelectRole2,
this.patientErUpdateLiveCareStatus,
this.patientErInsert,
this.patientInformationList,
this.patientNumber,
this.paymentModes,
this.physioIsPatientHasApproval,
this.physiotherapyError,
this.procedureNeedeTime,
this.riskScore,
this.rowCount,
this.sameClinicApptList,
this.searchDoctorsByTimeIsVoiceCommandList,
this.slotDuration,
this.statusCode,
this.tamaraIntegrationLogsInsertResponse,
this.tamaraIntegrationLogsUpdateResponse,
this.transactionNo,
this.userDentalPlanMessage,
this.waitingAppointmentNoPerDay,
this.age,
this.erpDoctorDetails,
this.returnValue,
});
final dynamic date;
final int? languageId;
final int? serviceName;
final dynamic time;
final dynamic androidLink;
final dynamic authenticationTokenId;
final dynamic data;
final bool? dataw;
final int? dietType;
final int? dietTypeId;
final dynamic errorCode;
final dynamic errorEndUserMessage;
final dynamic errorEndUserMessageN;
final dynamic errorMessage;
final int? errorType;
final int? foodCategory;
final dynamic iosLink;
final bool? isAuthenticated;
final int? mealOrderStatus;
final int? mealType;
final int? messageStatus;
final int? numberOfResultRecords;
final dynamic patientBlodType;
final dynamic successMsg;
final dynamic successMsgN;
final dynamic vidaUpdatedResponse;
final bool? ageError;
final bool? allowedBooking;
final dynamic ancillaryOrderInvoiceList;
final dynamic ancillaryOrderList;
final int? ancillaryOrderListCount;
final dynamic ancillaryOrderProcList;
final dynamic appoimentAllHistoryResultList;
final dynamic appoimentAllResultList;
final int? appointmentActiveNumber;
final dynamic appointmentNo;
final dynamic appointmentQr;
final dynamic avgDoctorRatingList;
final dynamic covid19AppointmentResponse;
final dynamic covid19FreeTimeSlots;
final dynamic covid19InvoiceResponse;
final dynamic covid19PatientShare;
final dynamic covid19TestProceduresList;
final dynamic clinicCategoryList;
final int? clinicInsertedId;
final dynamic clinicsHaveScheduleList;
final bool? continueBookAppointment;
final dynamic dappTemplateGetList;
final int? decimalDoctorRate;
final dynamic dentalProcedure;
final dynamic dentalProcedureName;
final dynamic diseasesByClinicList;
final dynamic doctorBasicScheduleList;
final dynamic doctorByClinicIdList;
final dynamic doctorByDiseaseList;
final dynamic doctorCalenderList;
final dynamic doctorInformationAsHtml;
final dynamic doctorInformationRaw;
final dynamic doctorList;
final dynamic doctorPrePostImagesList;
final List<DoctorProfileListModel>? doctorProfileList;
final int? doctorRate;
final dynamic doctorRatingDetailsList;
final int? doctorScheduleMappingInsert;
final dynamic doctorSchedulesByClinicList;
final int? doctorscheduleslotInsert;
final dynamic doctorscheduleslotSelectList;
final dynamic erAppointmentFeesObject;
final dynamic erAdvancePaymentResponse;
final dynamic erOnlinePaymentDetailsResponse;
final dynamic erPatientShare;
final dynamic erTriageQuestionsList;
final dynamic errCode;
final dynamic errorSearchMsg;
final int? formId;
final dynamic freeTimeSlots;
final bool? genderError;
final dynamic getDoctorMobileNo;
final dynamic getPatientInfoByPatientIdList;
final dynamic getPatientMedicalStatus;
final dynamic hisGetAllAppoimentHistoryList;
final dynamic hisGetDoctorOffDaysList;
final dynamic hisObgyneUltrasoundDoctorsList;
final dynamic hisProcedureTemplateDetailsList;
final dynamic hisProcedureTemplateList;
final dynamic hisWaitingCheckDoctorAvailableForWaitingAppointmentList;
final dynamic hisObGyneProcedureGetResponse;
final dynamic hisPrmGetApprovalRemarkList;
final int? hoursDiff;
final bool? isDentalplan;
final bool? isMobileAppDentalAllow;
final int? initialSlotDuration;
final bool? isAllowToBookWaitingAppointment;
final bool? isAllowVClinic;
final bool? isAllowWaitList;
final bool? isAppointmentAllowed;
final bool? isClinicEnabledForIcdCodes;
final bool? isDoctorExist;
final int? isInsertOrUpdate;
final dynamic isLastAppoitmentRatedList;
final bool? isShowInsuranceUpdateModule;
final int? isSlotAvailable;
final dynamic lcGetClinicScheduleList;
final dynamic listHoursDiff;
final dynamic listReqTypes;
final dynamic listAllClinicRate;
final dynamic listAllDoctorRate;
final dynamic listAllProjectRate;
final dynamic listCovid19DoctorsByClinicAndProject;
final dynamic listCovid19ProjectDriveThroughTestingCenter;
final dynamic listCalculationTable;
final dynamic listDdAdminMembers;
final dynamic listDentalChiefComplain;
final dynamic listDentalDdDetails;
final dynamic listDentalDoctorChiefComplaintMapping;
final dynamic listDentalPediatricDoctor;
final dynamic listDoctorAll;
final dynamic listDoctorByIpAddressCheckIn;
final dynamic listDoctorByProjectClinicAr;
final dynamic listDoctorByProjectClinicEn;
final dynamic listDoctorCases;
final dynamic listDoctorClinics;
final dynamic listDoctorDetailsList;
final dynamic listDoctorDetailsListAr;
final dynamic listDoctorLanguages;
final dynamic listDoctorMappinsgs;
final dynamic listDoctorPatientVitalSign;
final dynamic listDoctorProcedureMapping;
final dynamic listDoctorProfileImage;
final dynamic listDoctorProject;
final dynamic listDoctorQualifications;
final dynamic listDoctorSlotFirstVisit;
final dynamic listDoctorSpeciality;
final dynamic listDoctorSpecializations;
final dynamic listDoctorWorkingHoursTable;
final dynamic listDoctorblacklistModel;
final dynamic listDoctorinfo;
final dynamic listEnglish;
final dynamic listGetAllCancelAppointmentReasons;
final dynamic listGetAllClinicsRoomNo;
final dynamic listGetAllDoctorsOnProject;
final dynamic listGetAllDoctorsbyProject;
final dynamic listGetAppForCancel;
final dynamic listGetClinicsInfobyProject;
final dynamic listGetClinicsbyProject;
final dynamic listGetDoctorsbyProject;
final dynamic listGetIpAddressForDd;
final dynamic listGetIpAddressForDentalDd;
final dynamic listGetInfoForDentalClinicsDd;
final dynamic listGetLoginDetails;
final dynamic listGetPatientCancelAppointment;
final dynamic listHisDoctorProject;
final dynamic listHisGetContactLensPerscription;
final dynamic listHisGetGlassPerscription;
final dynamic listHmgPartTimeDoctor;
final dynamic listInvoiceDetails;
final dynamic listIsPatientHasOnGoingEstimation;
final dynamic listLaserDoctors;
final dynamic listLaserProcedures;
final dynamic listMedicalReportByAppointment;
final dynamic listNonAdminProjectMapping;
final dynamic listPatientErAdminServiceModel;
final dynamic listPatientErDoctorBlackListModel;
final dynamic listPhysioDoctors;
final dynamic listProjectErpMapping;
final dynamic listRecordByIpAddress;
final dynamic listRecordByIpAddressNew;
final dynamic listRecordByIpAddressNewCheckIn;
final dynamic listRecordByIpAddressNewForDubai;
final dynamic listRescahdualOnlineModel;
final dynamic message;
final dynamic notesDoctorRatingForCocList;
final dynamic notesDoctorRatingList;
final dynamic onlineCheckInAppointments;
final int? onlineCheckinBeforeHour;
final dynamic prmAdmissionInfoList;
final dynamic prmDentalEstimationDetailList;
final dynamic prmDentalEstimationList;
final dynamic prmDoctorsForRadiologyList;
final dynamic prmGetErToOpdRequestStatusList;
final dynamic prmGetDoctorRatingList;
final dynamic prmGetProceureAndPackagesList;
final dynamic prmHisAppointmentqueuegetList;
final dynamic prmHisCheckDoctorIsFullyBookedList;
final dynamic prmHisGetDentalEstimationPlanList;
final dynamic prmHisGetDischargeInfoList;
final dynamic prmHisGetUpcomingConfirmedAppoimentList;
final dynamic prmHisQueueErToOpList;
final dynamic prmQueueERreferralHistoryGetList;
final dynamic prmSpecialClinicalCareMappingList;
final bool? patientDoctorAppointmentResultExit;
final dynamic patientDoctorAppointmentResultList;
final dynamic patientErDoctorFreeSlots;
final dynamic patientErGetAllClinicsList;
final dynamic patientErGetDoctorClincByServiceIdList;
final dynamic patientErGetServiceList;
final int? patientErLogininsert;
final dynamic patientErPrescriptionLogin;
final dynamic patientErSelectAdmin;
final dynamic patientErSelectRole2;
final int? patientErUpdateLiveCareStatus;
final int? patientErInsert;
final dynamic patientInformationList;
final int? patientNumber;
final dynamic paymentModes;
final bool? physioIsPatientHasApproval;
final int? physiotherapyError;
final dynamic procedureNeedeTime;
final int? riskScore;
final int? rowCount;
final dynamic sameClinicApptList;
final dynamic searchDoctorsByTimeIsVoiceCommandList;
final int? slotDuration;
final int? statusCode;
final int? tamaraIntegrationLogsInsertResponse;
final int? tamaraIntegrationLogsUpdateResponse;
final dynamic transactionNo;
final dynamic userDentalPlanMessage;
final int? waitingAppointmentNoPerDay;
final int? age;
final dynamic erpDoctorDetails;
final int? returnValue;
factory GenericResponseModel2.fromJson(Map<String, dynamic> json) => GenericResponseModel2(
date: json["Date"],
languageId: json["LanguageID"] == null ? null : json["LanguageID"],
serviceName: json["ServiceName"] == null ? null : json["ServiceName"],
time: json["Time"],
androidLink: json["AndroidLink"],
authenticationTokenId: json["AuthenticationTokenID"],
data: json["Data"],
dataw: json["Dataw"] == null ? null : json["Dataw"],
dietType: json["DietType"] == null ? null : json["DietType"],
dietTypeId: json["DietTypeID"] == null ? null : json["DietTypeID"],
errorCode: json["ErrorCode"],
errorEndUserMessage: json["ErrorEndUserMessage"],
errorEndUserMessageN: json["ErrorEndUserMessageN"],
errorMessage: json["ErrorMessage"],
errorType: json["ErrorType"] == null ? null : json["ErrorType"],
foodCategory: json["FoodCategory"] == null ? null : json["FoodCategory"],
iosLink: json["IOSLink"],
isAuthenticated: json["IsAuthenticated"] == null ? null : json["IsAuthenticated"],
mealOrderStatus: json["MealOrderStatus"] == null ? null : json["MealOrderStatus"],
mealType: json["MealType"] == null ? null : json["MealType"],
messageStatus: json["MessageStatus"] == null ? null : json["MessageStatus"],
numberOfResultRecords: json["NumberOfResultRecords"] == null ? null : json["NumberOfResultRecords"],
patientBlodType: json["PatientBlodType"],
successMsg: json["SuccessMsg"],
successMsgN: json["SuccessMsgN"],
vidaUpdatedResponse: json["VidaUpdatedResponse"],
ageError: json["AgeError"] == null ? null : json["AgeError"],
allowedBooking: json["AllowedBooking"] == null ? null : json["AllowedBooking"],
ancillaryOrderInvoiceList: json["AncillaryOrderInvoiceList"],
ancillaryOrderList: json["AncillaryOrderList"],
ancillaryOrderListCount: json["AncillaryOrderListCount"] == null ? null : json["AncillaryOrderListCount"],
ancillaryOrderProcList: json["AncillaryOrderProcList"],
appoimentAllHistoryResultList: json["AppoimentAllHistoryResultList"],
appoimentAllResultList: json["AppoimentAllResultList"],
appointmentActiveNumber: json["AppointmentActiveNumber"] == null ? null : json["AppointmentActiveNumber"],
appointmentNo: json["AppointmentNo"],
appointmentQr: json["AppointmentQR"],
avgDoctorRatingList: json["AvgDoctorRatingList"],
covid19AppointmentResponse: json["COVID19_AppointmentResponse"],
covid19FreeTimeSlots: json["COVID19_FreeTimeSlots"],
covid19InvoiceResponse: json["COVID19_InvoiceResponse"],
covid19PatientShare: json["COVID19_PatientShare"],
covid19TestProceduresList: json["COVID19_TestProceduresList"],
clinicCategoryList: json["ClinicCategoryList"],
clinicInsertedId: json["ClinicInsertedID"] == null ? null : json["ClinicInsertedID"],
clinicsHaveScheduleList: json["ClinicsHaveScheduleList"],
continueBookAppointment: json["ContinueBookAppointment"] == null ? null : json["ContinueBookAppointment"],
dappTemplateGetList: json["DAPP_TemplateGetList"],
decimalDoctorRate: json["DecimalDoctorRate"] == null ? null : json["DecimalDoctorRate"],
dentalProcedure: json["DentalProcedure"],
dentalProcedureName: json["DentalProcedureName"],
diseasesByClinicList: json["DiseasesByClinicList"],
doctorBasicScheduleList: json["DoctorBasicScheduleList"],
doctorByClinicIdList: json["DoctorByClinicIDList"],
doctorByDiseaseList: json["DoctorByDiseaseList"],
doctorCalenderList: json["DoctorCalenderList"],
doctorInformationAsHtml: json["DoctorInformationAsHTML"],
doctorInformationRaw: json["DoctorInformationRAW"],
doctorList: json["DoctorList"],
doctorPrePostImagesList: json["DoctorPrePostImagesList"],
doctorProfileList: json["DoctorProfileList"] == null ? null : List<DoctorProfileListModel>.from(json["DoctorProfileList"].map((x) => DoctorProfileListModel.fromJson(x))),
doctorRate: json["DoctorRate"] == null ? null : json["DoctorRate"],
doctorRatingDetailsList: json["DoctorRatingDetailsList"],
doctorScheduleMappingInsert: json["DoctorScheduleMapping_Insert"] == null ? null : json["DoctorScheduleMapping_Insert"],
doctorSchedulesByClinicList: json["DoctorSchedulesByClinicList"],
doctorscheduleslotInsert: json["Doctorscheduleslot_Insert"] == null ? null : json["Doctorscheduleslot_Insert"],
doctorscheduleslotSelectList: json["Doctorscheduleslot_SelectList"],
erAppointmentFeesObject: json["ERAppointmentFeesObject"],
erAdvancePaymentResponse: json["ER_AdvancePaymentResponse"],
erOnlinePaymentDetailsResponse: json["ER_OnlinePaymentDetailsResponse"],
erPatientShare: json["ER_PatientShare"],
erTriageQuestionsList: json["ER_TriageQuestionsList"],
errCode: json["ErrCode"],
errorSearchMsg: json["ErrorSearchMsg"],
formId: json["FormID"] == null ? null : json["FormID"],
freeTimeSlots: json["FreeTimeSlots"],
genderError: json["GenderError"] == null ? null : json["GenderError"],
getDoctorMobileNo: json["GetDoctorMobileNo"],
getPatientInfoByPatientIdList: json["GetPatientInfoByPatientIDList"],
getPatientMedicalStatus: json["GetPatientMedicalStatus"],
hisGetAllAppoimentHistoryList: json["HIS_GetAllAppoimentHistoryList"],
hisGetDoctorOffDaysList: json["HIS_GetDoctorOffDaysList"],
hisObgyneUltrasoundDoctorsList: json["HIS_ObgyneUltrasoundDoctorsList"],
hisProcedureTemplateDetailsList: json["HIS_ProcedureTemplateDetailsList"],
hisProcedureTemplateList: json["HIS_ProcedureTemplateList"],
hisWaitingCheckDoctorAvailableForWaitingAppointmentList: json["HIS_Waiting_CheckDoctorAvailableForWaitingAppointment_List"],
hisObGyneProcedureGetResponse: json["His_ObGyneProcedureGet_Response"],
hisPrmGetApprovalRemarkList: json["His_PRM_GetApprovalRemarkList"],
hoursDiff: json["HoursDiff"] == null ? null : json["HoursDiff"],
isDentalplan: json["ISDentalplan"] == null ? null : json["ISDentalplan"],
isMobileAppDentalAllow: json["ISMobileAppDentalAllow"] == null ? null : json["ISMobileAppDentalAllow"],
initialSlotDuration: json["InitialSlotDuration"] == null ? null : json["InitialSlotDuration"],
isAllowToBookWaitingAppointment: json["IsAllowToBookWaitingAppointment"] == null ? null : json["IsAllowToBookWaitingAppointment"],
isAllowVClinic: json["IsAllowVClinic"] == null ? null : json["IsAllowVClinic"],
isAllowWaitList: json["IsAllowWaitList"] == null ? null : json["IsAllowWaitList"],
isAppointmentAllowed: json["IsAppointmentAllowed"] == null ? null : json["IsAppointmentAllowed"],
isClinicEnabledForIcdCodes: json["IsClinicEnabledForICDCodes"] == null ? null : json["IsClinicEnabledForICDCodes"],
isDoctorExist: json["IsDoctorExist"] == null ? null : json["IsDoctorExist"],
isInsertOrUpdate: json["IsInsertOrUpdate"] == null ? null : json["IsInsertOrUpdate"],
isLastAppoitmentRatedList: json["IsLastAppoitmentRatedList"],
isShowInsuranceUpdateModule: json["IsShowInsuranceUpdateModule"] == null ? null : json["IsShowInsuranceUpdateModule"],
isSlotAvailable: json["IsSlotAvailable"] == null ? null : json["IsSlotAvailable"],
lcGetClinicScheduleList: json["LC_GetClinicScheduleList"],
listHoursDiff: json["ListHoursDiff"],
listReqTypes: json["ListReqTypes"],
listAllClinicRate: json["List_AllClinicRate"],
listAllDoctorRate: json["List_AllDoctorRate"],
listAllProjectRate: json["List_AllProjectRate"],
listCovid19DoctorsByClinicAndProject: json["List_COVID19_DoctorsByClinicAndProject"],
listCovid19ProjectDriveThroughTestingCenter: json["List_COVID19_ProjectDriveThroughTestingCenter"],
listCalculationTable: json["List_CalculationTable"],
listDdAdminMembers: json["List_DDAdmin_Members"],
listDentalChiefComplain: json["List_DentalChiefComplain"],
listDentalDdDetails: json["List_DentalDDDetails"],
listDentalDoctorChiefComplaintMapping: json["List_DentalDoctorChiefComplaintMapping"],
listDentalPediatricDoctor: json["List_DentalPediatricDoctor"],
listDoctorAll: json["List_DoctorAll"],
listDoctorByIpAddressCheckIn: json["List_DoctorByIPAddressCheckIn"],
listDoctorByProjectClinicAr: json["List_DoctorByProjectClinicAr"],
listDoctorByProjectClinicEn: json["List_DoctorByProjectClinicEn"],
listDoctorCases: json["List_DoctorCases"],
listDoctorClinics: json["List_DoctorClinics"],
listDoctorDetailsList: json["List_DoctorDetailsList"],
listDoctorDetailsListAr: json["List_DoctorDetailsListAr"],
listDoctorLanguages: json["List_DoctorLanguages"],
listDoctorMappinsgs: json["List_DoctorMappinsgs"],
listDoctorPatientVitalSign: json["List_DoctorPatientVitalSign"],
listDoctorProcedureMapping: json["List_DoctorProcedureMapping"],
listDoctorProfileImage: json["List_DoctorProfileImage"],
listDoctorProject: json["List_DoctorProject"],
listDoctorQualifications: json["List_DoctorQualifications"],
listDoctorSlotFirstVisit: json["List_DoctorSlotFirstVisit"],
listDoctorSpeciality: json["List_DoctorSpeciality"],
listDoctorSpecializations: json["List_DoctorSpecializations"],
listDoctorWorkingHoursTable: json["List_DoctorWorkingHoursTable"],
listDoctorblacklistModel: json["List_DoctorblacklistModel"],
listDoctorinfo: json["List_Doctorinfo"],
listEnglish: json["List_English"],
listGetAllCancelAppointmentReasons: json["List_GetAllCancelAppointmentReasons"],
listGetAllClinicsRoomNo: json["List_GetAllClinicsRoomNo"],
listGetAllDoctorsOnProject: json["List_GetAllDoctorsOnProject"],
listGetAllDoctorsbyProject: json["List_GetAllDoctorsbyProject"],
listGetAppForCancel: json["List_GetAppForCancel"],
listGetClinicsInfobyProject: json["List_GetClinicsInfobyProject"],
listGetClinicsbyProject: json["List_GetClinicsbyProject"],
listGetDoctorsbyProject: json["List_GetDoctorsbyProject"],
listGetIpAddressForDd: json["List_GetIPAddressForDD"],
listGetIpAddressForDentalDd: json["List_GetIPAddressForDentalDD"],
listGetInfoForDentalClinicsDd: json["List_GetInfoForDentalClinicsDD"],
listGetLoginDetails: json["List_GetLoginDetails"],
listGetPatientCancelAppointment: json["List_GetPatientCancelAppointment"],
listHisDoctorProject: json["List_HISDoctorProject"],
listHisGetContactLensPerscription: json["List_HIS_GetContactLensPerscription"],
listHisGetGlassPerscription: json["List_HIS_GetGlassPerscription"],
listHmgPartTimeDoctor: json["List_HmgPartTimeDoctor"],
listInvoiceDetails: json["List_InvoiceDetails"],
listIsPatientHasOnGoingEstimation: json["List_IsPatientHasOnGoingEstimation"],
listLaserDoctors: json["List_LaserDoctors"],
listLaserProcedures: json["List_LaserProcedures"],
listMedicalReportByAppointment: json["List_MedicalReportByAppointment"],
listNonAdminProjectMapping: json["List_NonAdminProjectMapping"],
listPatientErAdminServiceModel: json["List_PatientER_AdminServiceModel"],
listPatientErDoctorBlackListModel: json["List_PatientER_DoctorBlackListModel"],
listPhysioDoctors: json["List_PhysioDoctors"],
listProjectErpMapping: json["List_ProjectERPMapping"],
listRecordByIpAddress: json["List_RecordByIPAddress"],
listRecordByIpAddressNew: json["List_RecordByIPAddressNew"],
listRecordByIpAddressNewCheckIn: json["List_RecordByIPAddressNewCheckIn"],
listRecordByIpAddressNewForDubai: json["List_RecordByIPAddressNewForDubai"],
listRescahdualOnlineModel: json["List_RescahdualOnlineModel"],
message: json["Message"],
notesDoctorRatingForCocList: json["NotesDoctorRatingForCOC_List"],
notesDoctorRatingList: json["NotesDoctorRatingList"],
onlineCheckInAppointments: json["OnlineCheckInAppointments"],
onlineCheckinBeforeHour: json["OnlineCheckinBeforeHour"] == null ? null : json["OnlineCheckinBeforeHour"],
prmAdmissionInfoList: json["PRM_AdmissionInfoList"],
prmDentalEstimationDetailList: json["PRM_DentalEstimationDetailList"],
prmDentalEstimationList: json["PRM_DentalEstimationList"],
prmDoctorsForRadiologyList: json["PRM_DoctorsForRadiologyList"],
prmGetErToOpdRequestStatusList: json["PRM_GET_ERToOPDRequestStatusList"],
prmGetDoctorRatingList: json["PRM_GetDoctorRatingList"],
prmGetProceureAndPackagesList: json["PRM_GetProceureAndPackagesList"],
prmHisAppointmentqueuegetList: json["PRM_HIS_AppointmentqueuegetList"],
prmHisCheckDoctorIsFullyBookedList: json["PRM_HIS_CheckDoctorIsFullyBookedList"],
prmHisGetDentalEstimationPlanList: json["PRM_HIS_GetDentalEstimationPlan_List"],
prmHisGetDischargeInfoList: json["PRM_HIS_GetDischargeInfo_List"],
prmHisGetUpcomingConfirmedAppoimentList: json["PRM_HIS_GetUpcomingConfirmedAppoimentList"],
prmHisQueueErToOpList: json["PRM_HIS_QueueERToOP_List"],
prmQueueERreferralHistoryGetList: json["PRM_QueueERreferralHistory_getList"],
prmSpecialClinicalCareMappingList: json["PRM_SpecialClinicalCareMapping_List"],
patientDoctorAppointmentResultExit: json["PatientDoctorAppointmentResultExit"] == null ? null : json["PatientDoctorAppointmentResultExit"],
patientDoctorAppointmentResultList: json["PatientDoctorAppointmentResultList"],
patientErDoctorFreeSlots: json["PatientER_DoctorFreeSlots"],
patientErGetAllClinicsList: json["PatientER_GetAllClinics_List"],
patientErGetDoctorClincByServiceIdList: json["PatientER_GetDoctorClincByServiceID_List"],
patientErGetServiceList: json["PatientER_GetServiceList"],
patientErLogininsert: json["PatientER_Logininsert"] == null ? null : json["PatientER_Logininsert"],
patientErPrescriptionLogin: json["PatientER_PrescriptionLogin"],
patientErSelectAdmin: json["PatientER_SelectAdmin"],
patientErSelectRole2: json["PatientER_SelectRole2"],
patientErUpdateLiveCareStatus: json["PatientER_UpdateLiveCareStatus"] == null ? null : json["PatientER_UpdateLiveCareStatus"],
patientErInsert: json["PatientER_insert"] == null ? null : json["PatientER_insert"],
patientInformationList: json["PatientInformationList"],
patientNumber: json["PatientNumber"] == null ? null : json["PatientNumber"],
paymentModes: json["PaymentModes"],
physioIsPatientHasApproval: json["Physio_IsPatientHasApproval"] == null ? null : json["Physio_IsPatientHasApproval"],
physiotherapyError: json["PhysiotherapyError"] == null ? null : json["PhysiotherapyError"],
procedureNeedeTime: json["ProcedureNeedeTime"],
riskScore: json["RiskScore"] == null ? null : json["RiskScore"],
rowCount: json["RowCount"] == null ? null : json["RowCount"],
sameClinicApptList: json["SameClinicApptList"],
searchDoctorsByTimeIsVoiceCommandList: json["SearchDoctorsByTime_IsVoiceCommandList"],
slotDuration: json["SlotDuration"] == null ? null : json["SlotDuration"],
statusCode: json["StatusCode"] == null ? null : json["StatusCode"],
tamaraIntegrationLogsInsertResponse: json["Tamara_IntegrationLogsInsert_Response"] == null ? null : json["Tamara_IntegrationLogsInsert_Response"],
tamaraIntegrationLogsUpdateResponse: json["Tamara_IntegrationLogsUpdate_Response"] == null ? null : json["Tamara_IntegrationLogsUpdate_Response"],
transactionNo: json["TransactionNo"],
userDentalPlanMessage: json["UserDentalPlanMessage"],
waitingAppointmentNoPerDay: json["WaitingAppointmentNoPerDay"] == null ? null : json["WaitingAppointmentNoPerDay"],
age: json["age"] == null ? null : json["age"],
erpDoctorDetails: json["erpDoctorDetails"],
returnValue: json["returnValue"] == null ? null : json["returnValue"],
);
Map<String, dynamic> toJson() => {
"Date": date,
"LanguageID": languageId == null ? null : languageId,
"ServiceName": serviceName == null ? null : serviceName,
"Time": time,
"AndroidLink": androidLink,
"AuthenticationTokenID": authenticationTokenId,
"Data": data,
"Dataw": dataw == null ? null : dataw,
"DietType": dietType == null ? null : dietType,
"DietTypeID": dietTypeId == null ? null : dietTypeId,
"ErrorCode": errorCode,
"ErrorEndUserMessage": errorEndUserMessage,
"ErrorEndUserMessageN": errorEndUserMessageN,
"ErrorMessage": errorMessage,
"ErrorType": errorType == null ? null : errorType,
"FoodCategory": foodCategory == null ? null : foodCategory,
"IOSLink": iosLink,
"IsAuthenticated": isAuthenticated == null ? null : isAuthenticated,
"MealOrderStatus": mealOrderStatus == null ? null : mealOrderStatus,
"MealType": mealType == null ? null : mealType,
"MessageStatus": messageStatus == null ? null : messageStatus,
"NumberOfResultRecords": numberOfResultRecords == null ? null : numberOfResultRecords,
"PatientBlodType": patientBlodType,
"SuccessMsg": successMsg,
"SuccessMsgN": successMsgN,
"VidaUpdatedResponse": vidaUpdatedResponse,
"AgeError": ageError == null ? null : ageError,
"AllowedBooking": allowedBooking == null ? null : allowedBooking,
"AncillaryOrderInvoiceList": ancillaryOrderInvoiceList,
"AncillaryOrderList": ancillaryOrderList,
"AncillaryOrderListCount": ancillaryOrderListCount == null ? null : ancillaryOrderListCount,
"AncillaryOrderProcList": ancillaryOrderProcList,
"AppoimentAllHistoryResultList": appoimentAllHistoryResultList,
"AppoimentAllResultList": appoimentAllResultList,
"AppointmentActiveNumber": appointmentActiveNumber == null ? null : appointmentActiveNumber,
"AppointmentNo": appointmentNo,
"AppointmentQR": appointmentQr,
"AvgDoctorRatingList": avgDoctorRatingList,
"COVID19_AppointmentResponse": covid19AppointmentResponse,
"COVID19_FreeTimeSlots": covid19FreeTimeSlots,
"COVID19_InvoiceResponse": covid19InvoiceResponse,
"COVID19_PatientShare": covid19PatientShare,
"COVID19_TestProceduresList": covid19TestProceduresList,
"ClinicCategoryList": clinicCategoryList,
"ClinicInsertedID": clinicInsertedId == null ? null : clinicInsertedId,
"ClinicsHaveScheduleList": clinicsHaveScheduleList,
"ContinueBookAppointment": continueBookAppointment == null ? null : continueBookAppointment,
"DAPP_TemplateGetList": dappTemplateGetList,
"DecimalDoctorRate": decimalDoctorRate == null ? null : decimalDoctorRate,
"DentalProcedure": dentalProcedure,
"DentalProcedureName": dentalProcedureName,
"DiseasesByClinicList": diseasesByClinicList,
"DoctorBasicScheduleList": doctorBasicScheduleList,
"DoctorByClinicIDList": doctorByClinicIdList,
"DoctorByDiseaseList": doctorByDiseaseList,
"DoctorCalenderList": doctorCalenderList,
"DoctorInformationAsHTML": doctorInformationAsHtml,
"DoctorInformationRAW": doctorInformationRaw,
"DoctorList": doctorList,
"DoctorPrePostImagesList": doctorPrePostImagesList,
"DoctorProfileList": doctorProfileList == null ? null : List<dynamic>.from(doctorProfileList!.map((x) => x.toJson())),
"DoctorRate": doctorRate == null ? null : doctorRate,
"DoctorRatingDetailsList": doctorRatingDetailsList,
"DoctorScheduleMapping_Insert": doctorScheduleMappingInsert == null ? null : doctorScheduleMappingInsert,
"DoctorSchedulesByClinicList": doctorSchedulesByClinicList,
"Doctorscheduleslot_Insert": doctorscheduleslotInsert == null ? null : doctorscheduleslotInsert,
"Doctorscheduleslot_SelectList": doctorscheduleslotSelectList,
"ERAppointmentFeesObject": erAppointmentFeesObject,
"ER_AdvancePaymentResponse": erAdvancePaymentResponse,
"ER_OnlinePaymentDetailsResponse": erOnlinePaymentDetailsResponse,
"ER_PatientShare": erPatientShare,
"ER_TriageQuestionsList": erTriageQuestionsList,
"ErrCode": errCode,
"ErrorSearchMsg": errorSearchMsg,
"FormID": formId == null ? null : formId,
"FreeTimeSlots": freeTimeSlots,
"GenderError": genderError == null ? null : genderError,
"GetDoctorMobileNo": getDoctorMobileNo,
"GetPatientInfoByPatientIDList": getPatientInfoByPatientIdList,
"GetPatientMedicalStatus": getPatientMedicalStatus,
"HIS_GetAllAppoimentHistoryList": hisGetAllAppoimentHistoryList,
"HIS_GetDoctorOffDaysList": hisGetDoctorOffDaysList,
"HIS_ObgyneUltrasoundDoctorsList": hisObgyneUltrasoundDoctorsList,
"HIS_ProcedureTemplateDetailsList": hisProcedureTemplateDetailsList,
"HIS_ProcedureTemplateList": hisProcedureTemplateList,
"HIS_Waiting_CheckDoctorAvailableForWaitingAppointment_List": hisWaitingCheckDoctorAvailableForWaitingAppointmentList,
"His_ObGyneProcedureGet_Response": hisObGyneProcedureGetResponse,
"His_PRM_GetApprovalRemarkList": hisPrmGetApprovalRemarkList,
"HoursDiff": hoursDiff == null ? null : hoursDiff,
"ISDentalplan": isDentalplan == null ? null : isDentalplan,
"ISMobileAppDentalAllow": isMobileAppDentalAllow == null ? null : isMobileAppDentalAllow,
"InitialSlotDuration": initialSlotDuration == null ? null : initialSlotDuration,
"IsAllowToBookWaitingAppointment": isAllowToBookWaitingAppointment == null ? null : isAllowToBookWaitingAppointment,
"IsAllowVClinic": isAllowVClinic == null ? null : isAllowVClinic,
"IsAllowWaitList": isAllowWaitList == null ? null : isAllowWaitList,
"IsAppointmentAllowed": isAppointmentAllowed == null ? null : isAppointmentAllowed,
"IsClinicEnabledForICDCodes": isClinicEnabledForIcdCodes == null ? null : isClinicEnabledForIcdCodes,
"IsDoctorExist": isDoctorExist == null ? null : isDoctorExist,
"IsInsertOrUpdate": isInsertOrUpdate == null ? null : isInsertOrUpdate,
"IsLastAppoitmentRatedList": isLastAppoitmentRatedList,
"IsShowInsuranceUpdateModule": isShowInsuranceUpdateModule == null ? null : isShowInsuranceUpdateModule,
"IsSlotAvailable": isSlotAvailable == null ? null : isSlotAvailable,
"LC_GetClinicScheduleList": lcGetClinicScheduleList,
"ListHoursDiff": listHoursDiff,
"ListReqTypes": listReqTypes,
"List_AllClinicRate": listAllClinicRate,
"List_AllDoctorRate": listAllDoctorRate,
"List_AllProjectRate": listAllProjectRate,
"List_COVID19_DoctorsByClinicAndProject": listCovid19DoctorsByClinicAndProject,
"List_COVID19_ProjectDriveThroughTestingCenter": listCovid19ProjectDriveThroughTestingCenter,
"List_CalculationTable": listCalculationTable,
"List_DDAdmin_Members": listDdAdminMembers,
"List_DentalChiefComplain": listDentalChiefComplain,
"List_DentalDDDetails": listDentalDdDetails,
"List_DentalDoctorChiefComplaintMapping": listDentalDoctorChiefComplaintMapping,
"List_DentalPediatricDoctor": listDentalPediatricDoctor,
"List_DoctorAll": listDoctorAll,
"List_DoctorByIPAddressCheckIn": listDoctorByIpAddressCheckIn,
"List_DoctorByProjectClinicAr": listDoctorByProjectClinicAr,
"List_DoctorByProjectClinicEn": listDoctorByProjectClinicEn,
"List_DoctorCases": listDoctorCases,
"List_DoctorClinics": listDoctorClinics,
"List_DoctorDetailsList": listDoctorDetailsList,
"List_DoctorDetailsListAr": listDoctorDetailsListAr,
"List_DoctorLanguages": listDoctorLanguages,
"List_DoctorMappinsgs": listDoctorMappinsgs,
"List_DoctorPatientVitalSign": listDoctorPatientVitalSign,
"List_DoctorProcedureMapping": listDoctorProcedureMapping,
"List_DoctorProfileImage": listDoctorProfileImage,
"List_DoctorProject": listDoctorProject,
"List_DoctorQualifications": listDoctorQualifications,
"List_DoctorSlotFirstVisit": listDoctorSlotFirstVisit,
"List_DoctorSpeciality": listDoctorSpeciality,
"List_DoctorSpecializations": listDoctorSpecializations,
"List_DoctorWorkingHoursTable": listDoctorWorkingHoursTable,
"List_DoctorblacklistModel": listDoctorblacklistModel,
"List_Doctorinfo": listDoctorinfo,
"List_English": listEnglish,
"List_GetAllCancelAppointmentReasons": listGetAllCancelAppointmentReasons,
"List_GetAllClinicsRoomNo": listGetAllClinicsRoomNo,
"List_GetAllDoctorsOnProject": listGetAllDoctorsOnProject,
"List_GetAllDoctorsbyProject": listGetAllDoctorsbyProject,
"List_GetAppForCancel": listGetAppForCancel,
"List_GetClinicsInfobyProject": listGetClinicsInfobyProject,
"List_GetClinicsbyProject": listGetClinicsbyProject,
"List_GetDoctorsbyProject": listGetDoctorsbyProject,
"List_GetIPAddressForDD": listGetIpAddressForDd,
"List_GetIPAddressForDentalDD": listGetIpAddressForDentalDd,
"List_GetInfoForDentalClinicsDD": listGetInfoForDentalClinicsDd,
"List_GetLoginDetails": listGetLoginDetails,
"List_GetPatientCancelAppointment": listGetPatientCancelAppointment,
"List_HISDoctorProject": listHisDoctorProject,
"List_HIS_GetContactLensPerscription": listHisGetContactLensPerscription,
"List_HIS_GetGlassPerscription": listHisGetGlassPerscription,
"List_HmgPartTimeDoctor": listHmgPartTimeDoctor,
"List_InvoiceDetails": listInvoiceDetails,
"List_IsPatientHasOnGoingEstimation": listIsPatientHasOnGoingEstimation,
"List_LaserDoctors": listLaserDoctors,
"List_LaserProcedures": listLaserProcedures,
"List_MedicalReportByAppointment": listMedicalReportByAppointment,
"List_NonAdminProjectMapping": listNonAdminProjectMapping,
"List_PatientER_AdminServiceModel": listPatientErAdminServiceModel,
"List_PatientER_DoctorBlackListModel": listPatientErDoctorBlackListModel,
"List_PhysioDoctors": listPhysioDoctors,
"List_ProjectERPMapping": listProjectErpMapping,
"List_RecordByIPAddress": listRecordByIpAddress,
"List_RecordByIPAddressNew": listRecordByIpAddressNew,
"List_RecordByIPAddressNewCheckIn": listRecordByIpAddressNewCheckIn,
"List_RecordByIPAddressNewForDubai": listRecordByIpAddressNewForDubai,
"List_RescahdualOnlineModel": listRescahdualOnlineModel,
"Message": message,
"NotesDoctorRatingForCOC_List": notesDoctorRatingForCocList,
"NotesDoctorRatingList": notesDoctorRatingList,
"OnlineCheckInAppointments": onlineCheckInAppointments,
"OnlineCheckinBeforeHour": onlineCheckinBeforeHour == null ? null : onlineCheckinBeforeHour,
"PRM_AdmissionInfoList": prmAdmissionInfoList,
"PRM_DentalEstimationDetailList": prmDentalEstimationDetailList,
"PRM_DentalEstimationList": prmDentalEstimationList,
"PRM_DoctorsForRadiologyList": prmDoctorsForRadiologyList,
"PRM_GET_ERToOPDRequestStatusList": prmGetErToOpdRequestStatusList,
"PRM_GetDoctorRatingList": prmGetDoctorRatingList,
"PRM_GetProceureAndPackagesList": prmGetProceureAndPackagesList,
"PRM_HIS_AppointmentqueuegetList": prmHisAppointmentqueuegetList,
"PRM_HIS_CheckDoctorIsFullyBookedList": prmHisCheckDoctorIsFullyBookedList,
"PRM_HIS_GetDentalEstimationPlan_List": prmHisGetDentalEstimationPlanList,
"PRM_HIS_GetDischargeInfo_List": prmHisGetDischargeInfoList,
"PRM_HIS_GetUpcomingConfirmedAppoimentList": prmHisGetUpcomingConfirmedAppoimentList,
"PRM_HIS_QueueERToOP_List": prmHisQueueErToOpList,
"PRM_QueueERreferralHistory_getList": prmQueueERreferralHistoryGetList,
"PRM_SpecialClinicalCareMapping_List": prmSpecialClinicalCareMappingList,
"PatientDoctorAppointmentResultExit": patientDoctorAppointmentResultExit == null ? null : patientDoctorAppointmentResultExit,
"PatientDoctorAppointmentResultList": patientDoctorAppointmentResultList,
"PatientER_DoctorFreeSlots": patientErDoctorFreeSlots,
"PatientER_GetAllClinics_List": patientErGetAllClinicsList,
"PatientER_GetDoctorClincByServiceID_List": patientErGetDoctorClincByServiceIdList,
"PatientER_GetServiceList": patientErGetServiceList,
"PatientER_Logininsert": patientErLogininsert == null ? null : patientErLogininsert,
"PatientER_PrescriptionLogin": patientErPrescriptionLogin,
"PatientER_SelectAdmin": patientErSelectAdmin,
"PatientER_SelectRole2": patientErSelectRole2,
"PatientER_UpdateLiveCareStatus": patientErUpdateLiveCareStatus == null ? null : patientErUpdateLiveCareStatus,
"PatientER_insert": patientErInsert == null ? null : patientErInsert,
"PatientInformationList": patientInformationList,
"PatientNumber": patientNumber == null ? null : patientNumber,
"PaymentModes": paymentModes,
"Physio_IsPatientHasApproval": physioIsPatientHasApproval == null ? null : physioIsPatientHasApproval,
"PhysiotherapyError": physiotherapyError == null ? null : physiotherapyError,
"ProcedureNeedeTime": procedureNeedeTime,
"RiskScore": riskScore == null ? null : riskScore,
"RowCount": rowCount == null ? null : rowCount,
"SameClinicApptList": sameClinicApptList,
"SearchDoctorsByTime_IsVoiceCommandList": searchDoctorsByTimeIsVoiceCommandList,
"SlotDuration": slotDuration == null ? null : slotDuration,
"StatusCode": statusCode == null ? null : statusCode,
"Tamara_IntegrationLogsInsert_Response": tamaraIntegrationLogsInsertResponse == null ? null : tamaraIntegrationLogsInsertResponse,
"Tamara_IntegrationLogsUpdate_Response": tamaraIntegrationLogsUpdateResponse == null ? null : tamaraIntegrationLogsUpdateResponse,
"TransactionNo": transactionNo,
"UserDentalPlanMessage": userDentalPlanMessage,
"WaitingAppointmentNoPerDay": waitingAppointmentNoPerDay == null ? null : waitingAppointmentNoPerDay,
"age": age == null ? null : age,
"erpDoctorDetails": erpDoctorDetails,
"returnValue": returnValue == null ? null : returnValue,
};
}

@ -0,0 +1,139 @@
class PostParamsModel {
String? imei;
String? tokenID;
int? languageID;
String? stamp;
String? iPAdress;
double? versionID;
int? channel;
String? sessionID;
bool? isLoginForDoctorApp;
bool? patientOutSA;
String? vidaAuthTokenID;
String? vidaRefreshTokenID;
int? deviceTypeID;
String? generalID;
//After Login
int? doctorId;
int? editedBy;
int? projectId;
int? clinicId;
PostParamsModel({
this.imei,
this.tokenID,
this.languageID,
this.stamp,
this.iPAdress,
this.versionID,
this.channel,
this.sessionID,
this.isLoginForDoctorApp,
this.patientOutSA,
this.vidaAuthTokenID,
this.vidaRefreshTokenID,
this.deviceTypeID,
this.generalID,
this.doctorId,
this.editedBy,
this.projectId,
this.clinicId,
});
PostParamsModel.fromJson(Map<String, dynamic> json) {
imei = json['IMEI'];
tokenID = json['TokenID'];
languageID = json['LanguageID'];
stamp = json['stamp'];
iPAdress = json['IPAdress'];
versionID = json['VersionID'];
channel = json['Channel'];
sessionID = json['SessionID'];
isLoginForDoctorApp = json['IsLoginForDoctorApp'];
patientOutSA = json['PatientOutSA'];
vidaAuthTokenID = json['VidaAuthTokenID'];
vidaRefreshTokenID = json['VidaRefreshTokenID'];
deviceTypeID = json['DeviceTypeID'];
deviceTypeID = json['generalid'];
}
Map<String, dynamic> toJson() {
Map<String, dynamic> data = new Map<String, dynamic>();
data['TokenID'] = this.tokenID;
data['LanguageID'] = this.languageID;
data['stamp'] = this.stamp;
data['IPAdress'] = this.iPAdress;
data['VersionID'] = this.versionID;
data['Channel'] = this.channel;
data['SessionID'] = this.sessionID;
data['IsLoginForDoctorApp'] = this.isLoginForDoctorApp;
data['PatientOutSA'] = this.patientOutSA;
data['VidaAuthTokenID'] = this.vidaAuthTokenID;
data['VidaRefreshTokenID'] = this.vidaRefreshTokenID;
data['DeviceTypeID'] = this.deviceTypeID;
data['generalid'] = this.generalID;
return data;
}
Map<String, dynamic> toJsonLogged() {
Map<String, dynamic> data = new Map<String, dynamic>();
data['TokenID'] = this.tokenID;
data['LanguageID'] = this.languageID;
data['stamp'] = this.stamp;
data['IPAdress'] = this.iPAdress;
data['VersionID'] = this.versionID;
data['Channel'] = this.channel;
data['SessionID'] = this.sessionID;
data['IsLoginForDoctorApp'] = this.isLoginForDoctorApp;
data['PatientOutSA'] = this.patientOutSA;
data['VidaAuthTokenID'] = this.vidaAuthTokenID;
data['VidaRefreshTokenID'] = this.vidaRefreshTokenID;
data['DeviceTypeID'] = this.deviceTypeID;
data['generalid'] = this.generalID;
data['DoctorID'] = this.doctorId;
data['EditedBy'] = this.editedBy;
data['ProjectID'] = this.projectId;
data['ClinicID'] = this.clinicId;
return data;
}
// Map<String, dynamic> toJsonAfterLogin() {
// Map<String, dynamic> data = new Map<String, dynamic>();
// data['VersionID'] = this.versionID;
// data['Channel'] = this.channel;
// data['LanguageID'] = this.languageID;
// data['MobileType'] = this.mobileType;
// data['LogInTokenID'] = this.logInTokenID;
// data['TokenID'] = this.tokenID;
// data['MobileNumber'] = this.mobileNumber;
// data['UserName'] = this.userName;
// data['P_EMAIL_ADDRESS'] = this.pEmailAddress;
// data['P_SESSION_ID'] = this.pSessionId;
// data['PayrollCodeStr'] = this.payrollCodeStr;
// data['LegislationCodeStr'] = this.pLegislationCode;
// data['P_SELECTED_EMPLOYEE_NUMBER'] = this.pSelectedEmployeeNumber;
// data['P_USER_NAME'] = this.pUserName;
// return data;
// }
//
// set setLogInTokenID(String? token) => logInTokenID = token;
//
// set setTokenID(String? token) => tokenID = token;
//
// set setMobileNumer(String? v) => mobileNumber = v;
//
// set setUserName(String? v) => userName = v;
//
// set setPEmailAddress(String? v) => pEmailAddress = v;
//
// set setPSessionId(int? v) => pSessionId = v;
//
// set setPUserName(String? v) => pUserName = v;
//
// set setPSelectedEmployeeNumber(String? v) => pSelectedEmployeeNumber = v;
//
// set setPLegislationCode(String? v) => pLegislationCode = v;
//
// set setPayrollCodeStr(String? v) => payrollCodeStr = v;
}

@ -0,0 +1,195 @@
class DoctorProfileListModel {
DoctorProfileListModel({
this.doctorId,
this.doctorName,
this.doctorNameN,
this.clinicId,
this.clinicDescription,
this.clinicDescriptionN,
this.licenseExpiry,
this.employmentType,
this.setupId,
this.projectId,
this.projectName,
this.nationalityId,
this.nationalityName,
this.nationalityNameN,
this.gender,
this.genderDescription,
this.genderDescriptionN,
this.doctorTitle,
this.projectNameN,
this.isAllowWaitList,
this.titleDescription,
this.titleDescriptionN,
this.isRegistered,
this.isDoctorDummy,
this.isActive,
this.isDoctorAppointmentDisplayed,
this.doctorClinicActive,
this.isbookingAllowed,
this.doctorCases,
this.doctorPicture,
this.doctorProfileInfo,
this.specialty,
this.actualDoctorRate,
this.consultationFee,
this.decimalDoctorRate,
this.doctorImageUrl,
this.doctorMobileNumber,
this.doctorRate,
this.doctorStarsRate,
this.doctorTitleForProfile,
this.isAppointmentAllowed,
this.isDoctorHasPrePostImages,
this.nationalityFlagUrl,
this.noOfPatientsRate,
this.qr,
this.serviceId,
});
final int? doctorId;
final String? doctorName;
final dynamic doctorNameN;
final int? clinicId;
final String? clinicDescription;
final dynamic clinicDescriptionN;
final dynamic licenseExpiry;
final int? employmentType;
final dynamic setupId;
final int? projectId;
final String? projectName;
final String? nationalityId;
final String? nationalityName;
final dynamic nationalityNameN;
final int? gender;
final String? genderDescription;
final dynamic genderDescriptionN;
final dynamic doctorTitle;
final dynamic projectNameN;
final bool? isAllowWaitList;
final String? titleDescription;
final dynamic titleDescriptionN;
final dynamic isRegistered;
final dynamic isDoctorDummy;
final bool? isActive;
final dynamic isDoctorAppointmentDisplayed;
final bool? doctorClinicActive;
final dynamic isbookingAllowed;
final String? doctorCases;
final dynamic doctorPicture;
final String? doctorProfileInfo;
final List<String>? specialty;
final int? actualDoctorRate;
final String? consultationFee;
final double? decimalDoctorRate;
final String? doctorImageUrl;
final String? doctorMobileNumber;
final int? doctorRate;
final int? doctorStarsRate;
final String? doctorTitleForProfile;
final bool? isAppointmentAllowed;
final bool? isDoctorHasPrePostImages;
final String? nationalityFlagUrl;
final int? noOfPatientsRate;
final String? qr;
final int? serviceId;
factory DoctorProfileListModel.fromJson(Map<String, dynamic> json) => DoctorProfileListModel(
doctorId: json["DoctorID"] == null ? null : json["DoctorID"],
doctorName: json["DoctorName"] == null ? null : json["DoctorName"],
doctorNameN: json["DoctorNameN"],
clinicId: json["ClinicID"] == null ? null : json["ClinicID"],
clinicDescription: json["ClinicDescription"] == null ? null : json["ClinicDescription"],
clinicDescriptionN: json["ClinicDescriptionN"],
licenseExpiry: json["LicenseExpiry"],
employmentType: json["EmploymentType"] == null ? null : json["EmploymentType"],
setupId: json["SetupID"],
projectId: json["ProjectID"] == null ? null : json["ProjectID"],
projectName: json["ProjectName"] == null ? null : json["ProjectName"],
nationalityId: json["NationalityID"] == null ? null : json["NationalityID"],
nationalityName: json["NationalityName"] == null ? null : json["NationalityName"],
nationalityNameN: json["NationalityNameN"],
gender: json["Gender"] == null ? null : json["Gender"],
genderDescription: json["Gender_Description"] == null ? null : json["Gender_Description"],
genderDescriptionN: json["Gender_DescriptionN"],
doctorTitle: json["DoctorTitle"],
projectNameN: json["ProjectNameN"],
isAllowWaitList: json["IsAllowWaitList"] == null ? null : json["IsAllowWaitList"],
titleDescription: json["Title_Description"] == null ? null : json["Title_Description"],
titleDescriptionN: json["Title_DescriptionN"],
isRegistered: json["IsRegistered"],
isDoctorDummy: json["IsDoctorDummy"],
isActive: json["IsActive"] == null ? null : json["IsActive"],
isDoctorAppointmentDisplayed: json["IsDoctorAppointmentDisplayed"],
doctorClinicActive: json["DoctorClinicActive"] == null ? null : json["DoctorClinicActive"],
isbookingAllowed: json["IsbookingAllowed"],
doctorCases: json["DoctorCases"] == null ? null : json["DoctorCases"],
doctorPicture: json["DoctorPicture"],
doctorProfileInfo: json["DoctorProfileInfo"] == null ? null : json["DoctorProfileInfo"],
specialty: json["Specialty"] == null ? null : List<String>.from(json["Specialty"].map((x) => x)),
actualDoctorRate: json["ActualDoctorRate"] == null ? null : json["ActualDoctorRate"],
consultationFee: json["ConsultationFee"] == null ? null : json["ConsultationFee"],
decimalDoctorRate: json["DecimalDoctorRate"] == null ? null : json["DecimalDoctorRate"].toDouble(),
doctorImageUrl: json["DoctorImageURL"] == null ? null : json["DoctorImageURL"],
doctorMobileNumber: json["DoctorMobileNumber"] == null ? null : json["DoctorMobileNumber"],
doctorRate: json["DoctorRate"] == null ? null : json["DoctorRate"],
doctorStarsRate: json["DoctorStarsRate"] == null ? null : json["DoctorStarsRate"],
doctorTitleForProfile: json["DoctorTitleForProfile"] == null ? null : json["DoctorTitleForProfile"],
isAppointmentAllowed: json["IsAppointmentAllowed"] == null ? null : json["IsAppointmentAllowed"],
isDoctorHasPrePostImages: json["IsDoctorHasPrePostImages"] == null ? null : json["IsDoctorHasPrePostImages"],
nationalityFlagUrl: json["NationalityFlagURL"] == null ? null : json["NationalityFlagURL"],
noOfPatientsRate: json["NoOfPatientsRate"] == null ? null : json["NoOfPatientsRate"],
qr: json["QR"] == null ? null : json["QR"],
serviceId: json["ServiceID"] == null ? null : json["ServiceID"],
);
Map<String, dynamic> toJson() => {
"DoctorID": doctorId == null ? null : doctorId,
"DoctorName": doctorName == null ? null : doctorName,
"DoctorNameN": doctorNameN,
"ClinicID": clinicId == null ? null : clinicId,
"ClinicDescription": clinicDescription == null ? null : clinicDescription,
"ClinicDescriptionN": clinicDescriptionN,
"LicenseExpiry": licenseExpiry,
"EmploymentType": employmentType == null ? null : employmentType,
"SetupID": setupId,
"ProjectID": projectId == null ? null : projectId,
"ProjectName": projectName == null ? null : projectName,
"NationalityID": nationalityId == null ? null : nationalityId,
"NationalityName": nationalityName == null ? null : nationalityName,
"NationalityNameN": nationalityNameN,
"Gender": gender == null ? null : gender,
"Gender_Description": genderDescription == null ? null : genderDescription,
"Gender_DescriptionN": genderDescriptionN,
"DoctorTitle": doctorTitle,
"ProjectNameN": projectNameN,
"IsAllowWaitList": isAllowWaitList == null ? null : isAllowWaitList,
"Title_Description": titleDescription == null ? null : titleDescription,
"Title_DescriptionN": titleDescriptionN,
"IsRegistered": isRegistered,
"IsDoctorDummy": isDoctorDummy,
"IsActive": isActive == null ? null : isActive,
"IsDoctorAppointmentDisplayed": isDoctorAppointmentDisplayed,
"DoctorClinicActive": doctorClinicActive == null ? null : doctorClinicActive,
"IsbookingAllowed": isbookingAllowed,
"DoctorCases": doctorCases == null ? null : doctorCases,
"DoctorPicture": doctorPicture,
"DoctorProfileInfo": doctorProfileInfo == null ? null : doctorProfileInfo,
"Specialty": specialty == null ? null : List<dynamic>.from(specialty!.map((x) => x)),
"ActualDoctorRate": actualDoctorRate == null ? null : actualDoctorRate,
"ConsultationFee": consultationFee == null ? null : consultationFee,
"DecimalDoctorRate": decimalDoctorRate == null ? null : decimalDoctorRate,
"DoctorImageURL": doctorImageUrl == null ? null : doctorImageUrl,
"DoctorMobileNumber": doctorMobileNumber == null ? null : doctorMobileNumber,
"DoctorRate": doctorRate == null ? null : doctorRate,
"DoctorStarsRate": doctorStarsRate == null ? null : doctorStarsRate,
"DoctorTitleForProfile": doctorTitleForProfile == null ? null : doctorTitleForProfile,
"IsAppointmentAllowed": isAppointmentAllowed == null ? null : isAppointmentAllowed,
"IsDoctorHasPrePostImages": isDoctorHasPrePostImages == null ? null : isDoctorHasPrePostImages,
"NationalityFlagURL": nationalityFlagUrl == null ? null : nationalityFlagUrl,
"NoOfPatientsRate": noOfPatientsRate == null ? null : noOfPatientsRate,
"QR": qr == null ? null : qr,
"ServiceID": serviceId == null ? null : serviceId,
};
}

@ -0,0 +1,128 @@
class GetIMEIDetailsModel {
int? iD;
String? iMEI;
int? logInTypeID;
bool? outSA;
String? mobile;
dynamic identificationNo;
int? doctorID;
String? doctorName;
String? doctorNameN;
int? clinicID;
String? clinicDescription;
dynamic clinicDescriptionN;
int? projectID;
String? projectName;
String? genderDescription;
dynamic genderDescriptionN;
String? titleDescription;
dynamic titleDescriptionN;
dynamic zipCode;
String? createdOn;
dynamic createdBy;
String? editedOn;
dynamic editedBy;
bool? biometricEnabled;
dynamic preferredLanguage;
bool? isActive;
String? vidaAuthTokenID;
String? vidaRefreshTokenID;
String? password;
GetIMEIDetailsModel(
{this.iD,
this.iMEI,
this.logInTypeID,
this.outSA,
this.mobile,
this.identificationNo,
this.doctorID,
this.doctorName,
this.doctorNameN,
this.clinicID,
this.clinicDescription,
this.clinicDescriptionN,
this.projectID,
this.projectName,
this.genderDescription,
this.genderDescriptionN,
this.titleDescription,
this.titleDescriptionN,
this.zipCode,
this.createdOn,
this.createdBy,
this.editedOn,
this.editedBy,
this.biometricEnabled,
this.preferredLanguage,
this.isActive,
this.vidaAuthTokenID,
this.vidaRefreshTokenID,
this.password});
GetIMEIDetailsModel.fromJson(Map<String, dynamic> json) {
iD = json['ID'];
iMEI = json['IMEI'];
logInTypeID = json['LogInTypeID'];
outSA = json['OutSA'];
mobile = json['Mobile'];
identificationNo = json['IdentificationNo'];
doctorID = json['DoctorID'];
doctorName = json['DoctorName'];
doctorNameN = json['DoctorNameN'];
clinicID = json['ClinicID'];
clinicDescription = json['ClinicDescription'];
clinicDescriptionN = json['ClinicDescriptionN'];
projectID = json['ProjectID'];
projectName = json['ProjectName'];
genderDescription = json['Gender_Description'];
genderDescriptionN = json['Gender_DescriptionN'];
titleDescription = json['Title_Description'];
titleDescriptionN = json['Title_DescriptionN'];
zipCode = json['ZipCode'];
createdOn = json['CreatedOn'];
createdBy = json['CreatedBy'];
editedOn = json['EditedOn'];
editedBy = json['EditedBy'];
biometricEnabled = json['BiometricEnabled'];
preferredLanguage = json['PreferredLanguage'];
isActive = json['IsActive'];
vidaAuthTokenID = json['VidaAuthTokenID'];
vidaRefreshTokenID = json['VidaRefreshTokenID'];
password = json['Password'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ID'] = this.iD;
data['IMEI'] = this.iMEI;
data['LogInTypeID'] = this.logInTypeID;
data['OutSA'] = this.outSA;
data['Mobile'] = this.mobile;
data['IdentificationNo'] = this.identificationNo;
data['DoctorID'] = this.doctorID;
data['DoctorName'] = this.doctorName;
data['DoctorNameN'] = this.doctorNameN;
data['ClinicID'] = this.clinicID;
data['ClinicDescription'] = this.clinicDescription;
data['ClinicDescriptionN'] = this.clinicDescriptionN;
data['ProjectID'] = this.projectID;
data['ProjectName'] = this.projectName;
data['Gender_Description'] = this.genderDescription;
data['Gender_DescriptionN'] = this.genderDescriptionN;
data['Title_Description'] = this.titleDescription;
data['Title_DescriptionN'] = this.titleDescriptionN;
data['ZipCode'] = this.zipCode;
data['CreatedOn'] = this.createdOn;
data['CreatedBy'] = this.createdBy;
data['EditedOn'] = this.editedOn;
data['EditedBy'] = this.editedBy;
data['BiometricEnabled'] = this.biometricEnabled;
data['PreferredLanguage'] = this.preferredLanguage;
data['IsActive'] = this.isActive;
data['VidaAuthTokenID'] = this.vidaAuthTokenID;
data['VidaRefreshTokenID'] = this.vidaRefreshTokenID;
data['Password'] = this.password;
return data;
}
}

@ -0,0 +1,35 @@
class ListDoctorsClinicModel {
ListDoctorsClinicModel({
this.setupId,
this.projectId,
this.doctorId,
this.clinicId,
this.isActive,
this.clinicName,
});
final dynamic setupId;
final int? projectId;
final int? doctorId;
final int? clinicId;
final bool? isActive;
final String? clinicName;
factory ListDoctorsClinicModel.fromJson(Map<String, dynamic> json) => ListDoctorsClinicModel(
setupId: json["SetupID"],
projectId: json["ProjectID"] == null ? null : json["ProjectID"],
doctorId: json["DoctorID"] == null ? null : json["DoctorID"],
clinicId: json["ClinicID"] == null ? null : json["ClinicID"],
isActive: json["IsActive"] == null ? null : json["IsActive"],
clinicName: json["ClinicName"] == null ? null : json["ClinicName"],
);
Map<String, dynamic> toJson() => {
"SetupID": setupId,
"ProjectID": projectId == null ? null : projectId,
"DoctorID": doctorId == null ? null : doctorId,
"ClinicID": clinicId == null ? null : clinicId,
"IsActive": isActive == null ? null : isActive,
"ClinicName": clinicName == null ? null : clinicName,
};
}

@ -0,0 +1,92 @@
class MemberInformation {
MemberInformation({
this.clinics,
this.doctorId,
this.email,
this.employeeId,
this.memberId,
this.memberName,
this.memberNameArabic,
this.preferredLanguage,
this.roles,
});
final List<Clinic>? clinics;
final int? doctorId;
final String? email;
final int? employeeId;
final int? memberId;
final dynamic memberName;
final dynamic memberNameArabic;
final String? preferredLanguage;
final List<Role>? roles;
factory MemberInformation.fromJson(Map<String, dynamic> json) => MemberInformation(
clinics: json["clinics"] == null ? null : List<Clinic>.from(json["clinics"].map((x) => Clinic.fromJson(x))),
doctorId: json["doctorId"] == null ? null : json["doctorId"],
email: json["email"] == null ? null : json["email"],
employeeId: json["employeeId"] == null ? null : json["employeeId"],
memberId: json["memberId"] == null ? null : json["memberId"],
memberName: json["memberName"],
memberNameArabic: json["memberNameArabic"],
preferredLanguage: json["preferredLanguage"] == null ? null : json["preferredLanguage"],
roles: json["roles"] == null ? null : List<Role>.from(json["roles"].map((x) => Role.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"clinics": clinics == null ? null : List<dynamic>.from(clinics!.map((x) => x.toJson())),
"doctorId": doctorId == null ? null : doctorId,
"email": email == null ? null : email,
"employeeId": employeeId == null ? null : employeeId,
"memberId": memberId == null ? null : memberId,
"memberName": memberName,
"memberNameArabic": memberNameArabic,
"preferredLanguage": preferredLanguage == null ? null : preferredLanguage,
"roles": roles == null ? null : List<dynamic>.from(roles!.map((x) => x.toJson())),
};
}
class Clinic {
Clinic({
this.defaultClinic,
this.id,
this.name,
});
final bool? defaultClinic;
final int? id;
final String? name;
factory Clinic.fromJson(Map<String, dynamic> json) => Clinic(
defaultClinic: json["defaultClinic"] == null ? null : json["defaultClinic"],
id: json["id"] == null ? null : json["id"],
name: json["name"] == null ? null : json["name"],
);
Map<String, dynamic> toJson() => {
"defaultClinic": defaultClinic == null ? null : defaultClinic,
"id": id == null ? null : id,
"name": name == null ? null : name,
};
}
class Role {
Role({
this.name,
this.roleId,
});
final String? name;
final int? roleId;
factory Role.fromJson(Map<String, dynamic> json) => Role(
name: json["name"] == null ? null : json["name"],
roleId: json["roleId"] == null ? null : json["roleId"],
);
Map<String, dynamic> toJson() => {
"name": name == null ? null : name,
"roleId": roleId == null ? null : roleId,
};
}

@ -0,0 +1,259 @@
// To parse this JSON data, do
//
// final memberLoginModel = memberLoginModelFromJson(jsonString);
import 'dart:convert';
import 'package:hmg_nurses/classes/consts.dart';
import 'package:shared_preferences/shared_preferences.dart';
MemberLoginModel memberLoginModelFromJson(String str) => MemberLoginModel.fromJson(json.decode(str));
String memberLoginModelToJson(MemberLoginModel data) => json.encode(data.toJson());
class MemberLoginModel {
MemberLoginModel({
this.date,
this.languageId,
this.serviceName,
this.time,
this.androidLink,
this.authenticationTokenId,
this.data,
this.dataw,
this.dietType,
this.dietTypeId,
this.errorCode,
this.errorEndUserMessage,
this.errorEndUserMessageN,
this.errorMessage,
this.errorType,
this.foodCategory,
this.iosLink,
this.isAuthenticated,
this.mealOrderStatus,
this.mealType,
this.messageStatus,
this.numberOfResultRecords,
this.patientBlodType,
this.successMsg,
this.successMsgN,
this.vidaUpdatedResponse,
this.doctorHaveOneClinic,
this.doctorId,
this.erpSessionId,
this.listConsentMember,
this.listConsentMemberNew,
this.listDoctorProfile,
this.listDoctorsClinic,
this.listMemberInformation,
this.listModelDbConnect,
this.logInTokenId,
this.mobileNumber,
this.selectDeviceImeIbyImeiList,
this.userId,
this.zipCode,
this.isActiveCode,
this.isSmsSent,
});
final dynamic date;
final int? languageId;
final int? serviceName;
final dynamic time;
final dynamic androidLink;
final dynamic authenticationTokenId;
final dynamic data;
final bool? dataw;
final int? dietType;
final int? dietTypeId;
final dynamic errorCode;
final dynamic errorEndUserMessage;
final dynamic errorEndUserMessageN;
final dynamic errorMessage;
final int? errorType;
final int? foodCategory;
final dynamic iosLink;
final bool? isAuthenticated;
final int? mealOrderStatus;
final int? mealType;
final int? messageStatus;
final int? numberOfResultRecords;
final dynamic patientBlodType;
final dynamic successMsg;
final dynamic successMsgN;
final dynamic vidaUpdatedResponse;
final bool? doctorHaveOneClinic;
final int? doctorId;
final dynamic erpSessionId;
final dynamic listConsentMember;
final dynamic listConsentMemberNew;
final dynamic listDoctorProfile;
final dynamic listDoctorsClinic;
final List<ListMemberInformation>? listMemberInformation;
final dynamic listModelDbConnect;
final String? logInTokenId;
final String? mobileNumber;
final dynamic selectDeviceImeIbyImeiList;
final int? userId;
final String? zipCode;
final bool? isActiveCode;
final bool? isSmsSent;
factory MemberLoginModel.fromJson(Map<String, dynamic> json) => MemberLoginModel(
date: json["Date"],
languageId: json["LanguageID"] == null ? null : json["LanguageID"],
serviceName: json["ServiceName"] == null ? null : json["ServiceName"],
time: json["Time"],
androidLink: json["AndroidLink"],
authenticationTokenId: json["AuthenticationTokenID"],
data: json["Data"],
dataw: json["Dataw"] == null ? null : json["Dataw"],
dietType: json["DietType"] == null ? null : json["DietType"],
dietTypeId: json["DietTypeID"] == null ? null : json["DietTypeID"],
errorCode: json["ErrorCode"],
errorEndUserMessage: json["ErrorEndUserMessage"],
errorEndUserMessageN: json["ErrorEndUserMessageN"],
errorMessage: json["ErrorMessage"],
errorType: json["ErrorType"] == null ? null : json["ErrorType"],
foodCategory: json["FoodCategory"] == null ? null : json["FoodCategory"],
iosLink: json["IOSLink"],
isAuthenticated: json["IsAuthenticated"] == null ? null : json["IsAuthenticated"],
mealOrderStatus: json["MealOrderStatus"] == null ? null : json["MealOrderStatus"],
mealType: json["MealType"] == null ? null : json["MealType"],
messageStatus: json["MessageStatus"] == null ? null : json["MessageStatus"],
numberOfResultRecords: json["NumberOfResultRecords"] == null ? null : json["NumberOfResultRecords"],
patientBlodType: json["PatientBlodType"],
successMsg: json["SuccessMsg"],
successMsgN: json["SuccessMsgN"],
vidaUpdatedResponse: json["VidaUpdatedResponse"],
doctorHaveOneClinic: json["DoctorHaveOneClinic"] == null ? null : json["DoctorHaveOneClinic"],
doctorId: json["DoctorID"] == null ? null : json["DoctorID"],
erpSessionId: json["ERP_SessionID"],
listConsentMember: json["List_Consent_Member"],
listConsentMemberNew: json["List_Consent_MemberNew"],
listDoctorProfile: json["List_DoctorProfile"],
listDoctorsClinic: json["List_DoctorsClinic"],
listMemberInformation: json["List_MemberInformation"] == null ? null : List<ListMemberInformation>.from(json["List_MemberInformation"].map((x) => ListMemberInformation.fromJson(x))),
listModelDbConnect: json["List_Model_DB_Connect"],
logInTokenId: json["LogInTokenID"] == null ? null : json["LogInTokenID"],
mobileNumber: json["MobileNumber"] == null ? null : json["MobileNumber"],
selectDeviceImeIbyImeiList: json["SELECTDeviceIMEIbyIMEI_List"],
userId: json["UserID"] == null ? null : json["UserID"],
zipCode: json["ZipCode"] == null ? null : json["ZipCode"],
isActiveCode: json["isActiveCode"] == null ? null : json["isActiveCode"],
isSmsSent: json["isSMSSent"] == null ? null : json["isSMSSent"],
);
Map<String, dynamic> toJson() => {
"Date": date,
"LanguageID": languageId == null ? null : languageId,
"ServiceName": serviceName == null ? null : serviceName,
"Time": time,
"AndroidLink": androidLink,
"AuthenticationTokenID": authenticationTokenId,
"Data": data,
"Dataw": dataw == null ? null : dataw,
"DietType": dietType == null ? null : dietType,
"DietTypeID": dietTypeId == null ? null : dietTypeId,
"ErrorCode": errorCode,
"ErrorEndUserMessage": errorEndUserMessage,
"ErrorEndUserMessageN": errorEndUserMessageN,
"ErrorMessage": errorMessage,
"ErrorType": errorType == null ? null : errorType,
"FoodCategory": foodCategory == null ? null : foodCategory,
"IOSLink": iosLink,
"IsAuthenticated": isAuthenticated == null ? null : isAuthenticated,
"MealOrderStatus": mealOrderStatus == null ? null : mealOrderStatus,
"MealType": mealType == null ? null : mealType,
"MessageStatus": messageStatus == null ? null : messageStatus,
"NumberOfResultRecords": numberOfResultRecords == null ? null : numberOfResultRecords,
"PatientBlodType": patientBlodType,
"SuccessMsg": successMsg,
"SuccessMsgN": successMsgN,
"VidaUpdatedResponse": vidaUpdatedResponse,
"DoctorHaveOneClinic": doctorHaveOneClinic == null ? null : doctorHaveOneClinic,
"DoctorID": doctorId == null ? null : doctorId,
"ERP_SessionID": erpSessionId,
"List_Consent_Member": listConsentMember,
"List_Consent_MemberNew": listConsentMemberNew,
"List_DoctorProfile": listDoctorProfile,
"List_DoctorsClinic": listDoctorsClinic,
"List_MemberInformation": listMemberInformation == null ? null : List<dynamic>.from(listMemberInformation!.map((x) => x.toJson())),
"List_Model_DB_Connect": listModelDbConnect,
"LogInTokenID": logInTokenId == null ? null : logInTokenId,
"MobileNumber": mobileNumber == null ? null : mobileNumber,
"SELECTDeviceIMEIbyIMEI_List": selectDeviceImeIbyImeiList,
"UserID": userId == null ? null : userId,
"ZipCode": zipCode == null ? null : zipCode,
"isActiveCode": isActiveCode == null ? null : isActiveCode,
"isSMSSent": isSmsSent == null ? null : isSmsSent,
};
static Future<MemberLoginModel> getFromPrefs() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String decodedJson = prefs.getString(SharedPrefsConsts.memberModel) ?? "";
return MemberLoginModel.fromJson(jsonDecode(decodedJson));
}
static void saveToPrefs(String json) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString(SharedPrefsConsts.memberModel, json);
}
}
class ListMemberInformation {
ListMemberInformation({
this.setupId,
this.memberId,
this.memberName,
this.memberNameN,
this.preferredLang,
this.pin,
this.saltHash,
this.referenceId,
this.employeeId,
this.roleId,
this.projectid,
});
final dynamic setupId;
final int? memberId;
final String? memberName;
final dynamic memberNameN;
final String? preferredLang;
final dynamic pin;
final dynamic saltHash;
final int? referenceId;
final int? employeeId;
final int? roleId;
final int? projectid;
factory ListMemberInformation.fromJson(Map<String, dynamic> json) => ListMemberInformation(
setupId: json["SetupID"],
memberId: json["MemberID"] == null ? null : json["MemberID"],
memberName: json["MemberName"] == null ? null : json["MemberName"],
memberNameN: json["MemberNameN"],
preferredLang: json["PreferredLang"] == null ? null : json["PreferredLang"],
pin: json["PIN"],
saltHash: json["SaltHash"],
referenceId: json["ReferenceID"] == null ? null : json["ReferenceID"],
employeeId: json["EmployeeID"] == null ? null : json["EmployeeID"],
roleId: json["RoleID"] == null ? null : json["RoleID"],
projectid: json["projectid"] == null ? null : json["projectid"],
);
Map<String, dynamic> toJson() => {
"SetupID": setupId,
"MemberID": memberId == null ? null : memberId,
"MemberName": memberName == null ? null : memberName,
"MemberNameN": memberNameN,
"PreferredLang": preferredLang == null ? null : preferredLang,
"PIN": pin,
"SaltHash": saltHash,
"ReferenceID": referenceId == null ? null : referenceId,
"EmployeeID": employeeId == null ? null : employeeId,
"RoleID": roleId == null ? null : roleId,
"projectid": projectid == null ? null : projectid,
};
}

@ -0,0 +1,23 @@
class ProjectInfoModel {
ProjectInfoModel({
this.facilityGroupId,
this.facilityId,
this.facilityName,
});
final String? facilityGroupId;
final int? facilityId;
final String? facilityName;
factory ProjectInfoModel.fromJson(Map<String, dynamic> json) => ProjectInfoModel(
facilityGroupId: json["facilityGroupId"] == null ? null : json["facilityGroupId"],
facilityId: json["facilityId"] == null ? null : json["facilityId"],
facilityName: json["facilityName"] == null ? null : json["facilityName"],
);
Map<String, dynamic> toJson() => {
"facilityGroupId": facilityGroupId == null ? null : facilityGroupId,
"facilityId": facilityId == null ? null : facilityId,
"facilityName": facilityName == null ? null : facilityName,
};
}

@ -0,0 +1,191 @@
class ListDoctorPatientVitalSign {
ListDoctorPatientVitalSign({
this.transNo,
this.projectId,
this.weightKg,
this.heightCm,
this.temperatureCelcius,
this.pulseBeatPerMinute,
this.respirationBeatPerMinute,
this.bloodPressureLower,
this.bloodPressureHigher,
this.sao2,
this.fio2,
this.painScore,
this.bodyMassIndex,
this.headCircumCm,
this.leanBodyWeightLbs,
this.idealBodyWeightLbs,
this.temperatureCelciusMethod,
this.pulseRhythm,
this.respirationPattern,
this.bloodPressureCuffLocation,
this.bloodPressureCuffSize,
this.bloodPressurePatientPosition,
this.painLocation,
this.painDuration,
this.painCharacter,
this.painFrequency,
this.isPainManagementDone,
this.status,
this.isVitalsRequired,
this.patientId,
this.createdOn,
this.doctorId,
this.clinicId,
this.triageCategory,
this.gcScore,
this.lineItemNo,
this.vitalSignDate,
this.actualTimeTaken,
this.sugarLevel,
this.fbs,
this.rbs,
this.observationType,
this.heartRate,
this.muscleTone,
this.reflexIrritability,
this.bodyColor,
this.isFirstAssessment,
this.dateofBirth,
this.timeOfBirth,
this.bloodPressure,
this.bloodPressureCuffLocationDesc,
this.bloodPressureCuffSizeDesc,
this.bloodPressurePatientPositionDesc,
this.clinicName,
this.doctorImageUrl,
this.doctorName,
this.painScoreDesc,
this.pulseRhythmDesc,
this.respirationPatternDesc,
this.temperatureCelciusMethodDesc,
this.time,
});
final int? transNo;
final dynamic projectId;
final double? weightKg;
final double? heightCm;
final double? temperatureCelcius;
final int? pulseBeatPerMinute;
final int? respirationBeatPerMinute;
final int? bloodPressureLower;
final int? bloodPressureHigher;
final int? sao2;
final int? fio2;
final dynamic painScore;
final double? bodyMassIndex;
final int? headCircumCm;
final int? leanBodyWeightLbs;
final int? idealBodyWeightLbs;
final int? temperatureCelciusMethod;
final int? pulseRhythm;
final int? respirationPattern;
final dynamic bloodPressureCuffLocation;
final dynamic bloodPressureCuffSize;
final dynamic bloodPressurePatientPosition;
final String? painLocation;
final String? painDuration;
final String? painCharacter;
final String? painFrequency;
final bool? isPainManagementDone;
final int? status;
final bool? isVitalsRequired;
final int? patientId;
final String? createdOn;
final int? doctorId;
final int? clinicId;
final dynamic triageCategory;
final dynamic gcScore;
final dynamic lineItemNo;
final dynamic vitalSignDate;
final dynamic actualTimeTaken;
final dynamic sugarLevel;
final dynamic fbs;
final dynamic rbs;
final dynamic observationType;
final dynamic heartRate;
final dynamic muscleTone;
final dynamic reflexIrritability;
final dynamic bodyColor;
final dynamic isFirstAssessment;
final dynamic dateofBirth;
final dynamic timeOfBirth;
final String? bloodPressure;
final String? bloodPressureCuffLocationDesc;
final String? bloodPressureCuffSizeDesc;
final String? bloodPressurePatientPositionDesc;
final String? clinicName;
final String? doctorImageUrl;
final String? doctorName;
final String? painScoreDesc;
final String? pulseRhythmDesc;
final String? respirationPatternDesc;
final String? temperatureCelciusMethodDesc;
final dynamic time;
factory ListDoctorPatientVitalSign.fromJson(Map<String, dynamic> json) => ListDoctorPatientVitalSign(
transNo: json["TransNo"] == null ? null : json["TransNo"],
projectId: json["ProjectID"],
weightKg: json["WeightKg"] == null ? null : json["WeightKg"].toDouble(),
heightCm: json["HeightCm"] == null ? null : json["HeightCm"].toDouble(),
temperatureCelcius: json["TemperatureCelcius"] == null ? null : json["TemperatureCelcius"].toDouble(),
pulseBeatPerMinute: json["PulseBeatPerMinute"] == null ? null : json["PulseBeatPerMinute"],
respirationBeatPerMinute: json["RespirationBeatPerMinute"] == null ? null : json["RespirationBeatPerMinute"],
bloodPressureLower: json["BloodPressureLower"] == null ? null : json["BloodPressureLower"],
bloodPressureHigher: json["BloodPressureHigher"] == null ? null : json["BloodPressureHigher"],
sao2: json["SAO2"] == null ? null : json["SAO2"],
fio2: json["FIO2"] == null ? null : json["FIO2"],
painScore: json["PainScore"],
bodyMassIndex: json["BodyMassIndex"] == null ? null : json["BodyMassIndex"].toDouble(),
headCircumCm: json["HeadCircumCm"] == null ? null : json["HeadCircumCm"],
leanBodyWeightLbs: json["LeanBodyWeightLbs"] == null ? null : json["LeanBodyWeightLbs"],
idealBodyWeightLbs: json["IdealBodyWeightLbs"] == null ? null : json["IdealBodyWeightLbs"],
temperatureCelciusMethod: json["TemperatureCelciusMethod"] == null ? null : json["TemperatureCelciusMethod"],
pulseRhythm: json["PulseRhythm"] == null ? null : json["PulseRhythm"],
respirationPattern: json["RespirationPattern"] == null ? null : json["RespirationPattern"],
bloodPressureCuffLocation: json["BloodPressureCuffLocation"],
bloodPressureCuffSize: json["BloodPressureCuffSize"],
bloodPressurePatientPosition: json["BloodPressurePatientPosition"],
painLocation: json["PainLocation"] == null ? null : json["PainLocation"],
painDuration: json["PainDuration"] == null ? null : json["PainDuration"],
painCharacter: json["PainCharacter"] == null ? null : json["PainCharacter"],
painFrequency: json["PainFrequency"] == null ? null : json["PainFrequency"],
isPainManagementDone: json["IsPainManagementDone"] == null ? null : json["IsPainManagementDone"],
status: json["Status"] == null ? null : json["Status"],
isVitalsRequired: json["IsVitalsRequired"] == null ? null : json["IsVitalsRequired"],
patientId: json["PatientID"] == null ? null : json["PatientID"],
createdOn: json["CreatedOn"] == null ? null : json["CreatedOn"],
doctorId: json["DoctorID"] == null ? null : json["DoctorID"],
clinicId: json["ClinicID"] == null ? null : json["ClinicID"],
triageCategory: json["TriageCategory"],
gcScore: json["GCScore"],
lineItemNo: json["LineItemNo"],
vitalSignDate: json["VitalSignDate"],
actualTimeTaken: json["ActualTimeTaken"],
sugarLevel: json["SugarLevel"],
fbs: json["FBS"],
rbs: json["RBS"],
observationType: json["ObservationType"],
heartRate: json["HeartRate"],
muscleTone: json["MuscleTone"],
reflexIrritability: json["ReflexIrritability"],
bodyColor: json["BodyColor"],
isFirstAssessment: json["IsFirstAssessment"],
dateofBirth: json["DateofBirth"],
timeOfBirth: json["TimeOfBirth"],
bloodPressure: json["BloodPressure"] == null ? null : json["BloodPressure"],
bloodPressureCuffLocationDesc: json["BloodPressureCuffLocationDesc"] == null ? null : json["BloodPressureCuffLocationDesc"],
bloodPressureCuffSizeDesc: json["BloodPressureCuffSizeDesc"] == null ? null : json["BloodPressureCuffSizeDesc"],
bloodPressurePatientPositionDesc: json["BloodPressurePatientPositionDesc"] == null ? null : json["BloodPressurePatientPositionDesc"],
clinicName: json["ClinicName"] == null ? null : json["ClinicName"],
doctorImageUrl: json["DoctorImageURL"] == null ? null : json["DoctorImageURL"],
doctorName: json["DoctorName"] == null ? null : json["DoctorName"],
painScoreDesc: json["PainScoreDesc"] == null ? null : json["PainScoreDesc"],
pulseRhythmDesc: json["PulseRhythmDesc"] == null ? null : json["PulseRhythmDesc"],
respirationPatternDesc: json["RespirationPatternDesc"] == null ? null : json["RespirationPatternDesc"],
temperatureCelciusMethodDesc: json["TemperatureCelciusMethodDesc"] == null ? null : json["TemperatureCelciusMethodDesc"],
time: json["Time"],
);
}

@ -0,0 +1,242 @@
class GetPatientFileInformationPrmList {
GetPatientFileInformationPrmList({
this.patientId,
this.setupId,
this.patientType,
this.firstName,
this.middleName,
this.lastName,
this.firstNameN,
this.middleNameN,
this.lastNameN,
this.gender,
this.dateofBirth,
this.dateofBirthN,
this.nationalityId,
this.phoneResi,
this.phoneOffice,
this.mobileNumber,
this.faxNumber,
this.emailAddress,
this.isEmailAlertRequired,
this.isSmsAlertRequired,
this.preferredLanguage,
this.emergencyContactName,
this.emergencyContactNo,
this.patientIdentificationType,
this.patientIdentificationNo,
this.projectId,
this.receiveHealthSummaryReport,
this.noShowCount,
this.isPatientHasMobileDeviceToken,
this.editedBy,
this.isIvrStopped,
this.crsClientIdentifierId,
this.crsVerificationStatus,
this.crsVerifiedBy,
this.crsVerificationStatusDesc,
this.crsVerificationStatusDescN,
this.numberPosition,
this.status,
this.isPrivilegedMember,
this.address,
this.age,
this.emaiLAddress,
this.genderDescription,
this.genderImage,
this.isPatientDataVerified,
this.isPatientPrivilegedMember,
this.nationalityDescription,
this.nationalityFlagUrl,
this.poBox,
this.patientDataVerified,
this.patientName,
this.patientTypeDescription,
this.patientTypeDescriptionN,
this.statusDscription,
this.tempAddress,
this.upcomingAppointmentsNumber,
this.zipCode,
this.patientStatusType,
});
final int? patientId;
final String? setupId;
final int? patientType;
final String? firstName;
final String? middleName;
final String? lastName;
final String? firstNameN;
final String? middleNameN;
final String? lastNameN;
final int? gender;
final String? dateofBirth;
final String? dateofBirthN;
final String? nationalityId;
final String? phoneResi;
final String? phoneOffice;
final String? mobileNumber;
final String? faxNumber;
final String? emailAddress;
final bool? isEmailAlertRequired;
final bool? isSmsAlertRequired;
final String? preferredLanguage;
final String? emergencyContactName;
final String? emergencyContactNo;
final int? patientIdentificationType;
final String? patientIdentificationNo;
final int? projectId;
final bool? receiveHealthSummaryReport;
final int? noShowCount;
final bool? isPatientHasMobileDeviceToken;
final int? editedBy;
final dynamic isIvrStopped;
final dynamic crsClientIdentifierId;
final dynamic crsVerificationStatus;
final dynamic crsVerifiedBy;
final dynamic crsVerificationStatusDesc;
final dynamic crsVerificationStatusDescN;
final int? numberPosition;
final int? status;
final dynamic isPrivilegedMember;
final dynamic address;
final int? age;
final String? emaiLAddress;
final String? genderDescription;
final String? genderImage;
final bool? isPatientDataVerified;
final bool? isPatientPrivilegedMember;
final String? nationalityDescription;
final String? nationalityFlagUrl;
final dynamic poBox;
final int? patientDataVerified;
final String? patientName;
final String? patientTypeDescription;
final dynamic patientTypeDescriptionN;
final String? statusDscription;
final dynamic tempAddress;
final int? upcomingAppointmentsNumber;
final String? zipCode;
final int? patientStatusType;
factory GetPatientFileInformationPrmList.fromJson(Map<String, dynamic> json) => GetPatientFileInformationPrmList(
patientId: json["PatientID"] == null ? null : json["PatientID"],
setupId: json["SetupID"] == null ? null : json["SetupID"],
patientType: json["PatientType"] == null ? null : json["PatientType"],
firstName: json["FirstName"] == null ? null : json["FirstName"],
middleName: json["MiddleName"] == null ? null : json["MiddleName"],
lastName: json["LastName"] == null ? null : json["LastName"],
firstNameN: json["FirstNameN"] == null ? null : json["FirstNameN"],
middleNameN: json["MiddleNameN"] == null ? null : json["MiddleNameN"],
lastNameN: json["LastNameN"] == null ? null : json["LastNameN"],
gender: json["Gender"] == null ? null : json["Gender"],
dateofBirth: json["DateofBirth"] == null ? null : json["DateofBirth"],
dateofBirthN: json["DateofBirthN"] == null ? null : json["DateofBirthN"],
nationalityId: json["NationalityID"] == null ? null : json["NationalityID"],
phoneResi: json["PhoneResi"] == null ? null : json["PhoneResi"],
phoneOffice: json["PhoneOffice"] == null ? null : json["PhoneOffice"],
mobileNumber: json["MobileNumber"] == null ? null : json["MobileNumber"],
faxNumber: json["FaxNumber"] == null ? null : json["FaxNumber"],
emailAddress: json["EmailAddress"] == null ? null : json["EmailAddress"],
isEmailAlertRequired: json["IsEmailAlertRequired"] == null ? null : json["IsEmailAlertRequired"],
isSmsAlertRequired: json["IsSMSAlertRequired"] == null ? null : json["IsSMSAlertRequired"],
preferredLanguage: json["PreferredLanguage"] == null ? null : json["PreferredLanguage"],
emergencyContactName: json["EmergencyContactName"] == null ? null : json["EmergencyContactName"],
emergencyContactNo: json["EmergencyContactNo"] == null ? null : json["EmergencyContactNo"],
patientIdentificationType: json["PatientIdentificationType"] == null ? null : json["PatientIdentificationType"],
patientIdentificationNo: json["PatientIdentificationNo"] == null ? null : json["PatientIdentificationNo"],
projectId: json["ProjectID"] == null ? null : json["ProjectID"],
receiveHealthSummaryReport: json["ReceiveHealthSummaryReport"] == null ? null : json["ReceiveHealthSummaryReport"],
noShowCount: json["NoShowCount"] == null ? null : json["NoShowCount"],
isPatientHasMobileDeviceToken: json["IsPatientHasMobileDeviceToken"] == null ? null : json["IsPatientHasMobileDeviceToken"],
editedBy: json["EditedBy"] == null ? null : json["EditedBy"],
isIvrStopped: json["IsIVRStopped"],
crsClientIdentifierId: json["CRSClientIdentifierID"],
crsVerificationStatus: json["CRSVerificationStatus"],
crsVerifiedBy: json["CRSVerifiedBy"],
crsVerificationStatusDesc: json["CRSVerificationStatusDesc"],
crsVerificationStatusDescN: json["CRSVerificationStatusDescN"],
numberPosition: json["NumberPosition"] == null ? null : json["NumberPosition"],
status: json["Status"] == null ? null : json["Status"],
isPrivilegedMember: json["IsPrivilegedMember"],
address: json["Address"],
age: json["Age"] == null ? null : json["Age"],
emaiLAddress: json["EmaiLAddress"] == null ? null : json["EmaiLAddress"],
genderDescription: json["GenderDescription"] == null ? null : json["GenderDescription"],
genderImage: json["GenderImage"] == null ? null : json["GenderImage"],
isPatientDataVerified: json["IsPatientDataVerified"] == null ? null : json["IsPatientDataVerified"],
isPatientPrivilegedMember: json["IsPatientPrivilegedMember"] == null ? null : json["IsPatientPrivilegedMember"],
nationalityDescription: json["NationalityDescription"] == null ? null : json["NationalityDescription"],
nationalityFlagUrl: json["NationalityFlagURL"] == null ? null : json["NationalityFlagURL"],
poBox: json["POBox"],
patientDataVerified: json["PatientDataVerified"] == null ? null : json["PatientDataVerified"],
patientName: json["PatientName"] == null ? null : json["PatientName"],
patientTypeDescription: json["PatientTypeDescription"] == null ? null : json["PatientTypeDescription"],
patientTypeDescriptionN: json["PatientTypeDescriptionN"],
statusDscription: json["StatusDscription"] == null ? null : json["StatusDscription"],
tempAddress: json["TempAddress"],
upcomingAppointmentsNumber: json["UpcomingAppointmentsNumber"] == null ? null : json["UpcomingAppointmentsNumber"],
zipCode: json["ZipCode"] == null ? null : json["ZipCode"],
patientStatusType: json["patientStatusType"] ?? json["PatientStatusType"],
);
Map<String, dynamic> toJson() => {
"PatientID": patientId == null ? null : patientId,
"SetupID": setupId == null ? null : setupId,
"PatientType": patientType == null ? null : patientType,
"FirstName": firstName == null ? null : firstName,
"MiddleName": middleName == null ? null : middleName,
"LastName": lastName == null ? null : lastName,
"FirstNameN": firstNameN == null ? null : firstNameN,
"MiddleNameN": middleNameN == null ? null : middleNameN,
"LastNameN": lastNameN == null ? null : lastNameN,
"Gender": gender == null ? null : gender,
"DateofBirth": dateofBirth == null ? null : dateofBirth,
"DateofBirthN": dateofBirthN == null ? null : dateofBirthN,
"NationalityID": nationalityId == null ? null : nationalityId,
"PhoneResi": phoneResi == null ? null : phoneResi,
"PhoneOffice": phoneOffice == null ? null : phoneOffice,
"MobileNumber": mobileNumber == null ? null : mobileNumber,
"FaxNumber": faxNumber == null ? null : faxNumber,
"EmailAddress": emailAddress == null ? null : emailAddress,
"IsEmailAlertRequired": isEmailAlertRequired == null ? null : isEmailAlertRequired,
"IsSMSAlertRequired": isSmsAlertRequired == null ? null : isSmsAlertRequired,
"PreferredLanguage": preferredLanguage == null ? null : preferredLanguage,
"EmergencyContactName": emergencyContactName == null ? null : emergencyContactName,
"EmergencyContactNo": emergencyContactNo == null ? null : emergencyContactNo,
"PatientIdentificationType": patientIdentificationType == null ? null : patientIdentificationType,
"PatientIdentificationNo": patientIdentificationNo == null ? null : patientIdentificationNo,
"ProjectID": projectId == null ? null : projectId,
"ReceiveHealthSummaryReport": receiveHealthSummaryReport == null ? null : receiveHealthSummaryReport,
"NoShowCount": noShowCount == null ? null : noShowCount,
"IsPatientHasMobileDeviceToken": isPatientHasMobileDeviceToken == null ? null : isPatientHasMobileDeviceToken,
"EditedBy": editedBy == null ? null : editedBy,
"IsIVRStopped": isIvrStopped,
"CRSClientIdentifierID": crsClientIdentifierId,
"CRSVerificationStatus": crsVerificationStatus,
"CRSVerifiedBy": crsVerifiedBy,
"CRSVerificationStatusDesc": crsVerificationStatusDesc,
"CRSVerificationStatusDescN": crsVerificationStatusDescN,
"NumberPosition": numberPosition == null ? null : numberPosition,
"Status": status == null ? null : status,
"IsPrivilegedMember": isPrivilegedMember,
"Address": address,
"Age": age == null ? null : age,
"EmaiLAddress": emaiLAddress == null ? null : emaiLAddress,
"GenderDescription": genderDescription == null ? null : genderDescription,
"GenderImage": genderImage == null ? null : genderImage,
"IsPatientDataVerified": isPatientDataVerified == null ? null : isPatientDataVerified,
"IsPatientPrivilegedMember": isPatientPrivilegedMember == null ? null : isPatientPrivilegedMember,
"NationalityDescription": nationalityDescription == null ? null : nationalityDescription,
"NationalityFlagURL": nationalityFlagUrl == null ? null : nationalityFlagUrl,
"POBox": poBox,
"PatientDataVerified": patientDataVerified == null ? null : patientDataVerified,
"PatientName": patientName == null ? null : patientName,
"PatientTypeDescription": patientTypeDescription == null ? null : patientTypeDescription,
"PatientTypeDescriptionN": patientTypeDescriptionN,
"StatusDscription": statusDscription == null ? null : statusDscription,
"TempAddress": tempAddress,
"UpcomingAppointmentsNumber": upcomingAppointmentsNumber == null ? null : upcomingAppointmentsNumber,
"ZipCode": zipCode == null ? null : zipCode,
};
}

@ -0,0 +1,33 @@
import 'package:flutter/material.dart';
class PatientProfileCardModel {
final String nameLine1;
final String nameLine2;
final dynamic route;
final String icon;
final bool isInPatient;
final bool isDisable;
final bool isLoading;
final Function? onTap;
final bool isDischargedPatient;
final bool isSelectInpatient;
final bool isDartIcon;
final IconData? dartIcon;
final Color? color;
PatientProfileCardModel(
this.nameLine1,
this.nameLine2,
this.route,
this.icon, {
this.isInPatient = false,
this.isDisable = false,
this.isLoading = false,
this.onTap,
this.isDischargedPatient = false,
this.isSelectInpatient = false,
this.isDartIcon = false,
this.dartIcon,
this.color,
});
}

@ -12,10 +12,12 @@ class BaseViewModel extends ChangeNotifier {
String error = "";
//TODO add the user login model when we need it
void setOnlyState(ViewState viewState) {
_state = viewState;
}
void setState(ViewState viewState) {
_state = viewState;
notifyListeners();
}

@ -1,16 +1,35 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:hmg_nurses/model/base/generic_response_model2.dart';
import 'package:hmg_nurses/provider/base_vm.dart';
import 'package:hmg_nurses/services/api_repo/dashboard_api_repo.dart';
import 'package:injector/injector.dart';
import '../classes/utils.dart';
import '../main.dart';
/// Mix-in [DiagnosticableTreeMixin] to have access to [debugFillProperties] for the devtool
// ignore: prefer_mixin
class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
//Attendance Tracking
bool isAttendanceTrackingLoading = true;
int endTime = 0, isTimeRemainingInSeconds = 0;
double progress = 0.0;
class DashboardProviderModel extends BaseViewModel {
final IDashboardApiRepo _loginApiRepo = Injector.appInstance.get<IDashboardApiRepo>();
Future<GenericResponseModel2?> getDocProfile() async {
try {
Utils.showLoading();
void notify() {
notifyListeners();
// Utils.showToast(deviceInfo.length.toString());
GenericResponseModel2 docProfileModel = await _loginApiRepo.getDoctorProfile();
appState.doctorProfile = docProfileModel;
await _loginApiRepo.insertDoctorProfile();
Utils.hideLoading();
return docProfileModel;
} catch (e) {
Utils.hideLoading();
Utils.handleException(e, navigatorKey.currentContext!, (msg) {
Utils.confirmDialog(navigatorKey.currentContext!, msg);
});
}
return null;
}
}

@ -0,0 +1,46 @@
import 'package:flutter/widgets.dart';
enum _Action {
increment,
decrement,
}
class MyStore extends ValueNotifier<int> {
MyStore() : super(0);
void increment() => value++;
void decrement() => value--;
}
class Bar {}
class Initial implements Bar {}
class Loading implements Bar {}
class Error implements Bar {
Error(this.err);
final Object err;
}
class Loaded implements Bar {
Loaded(this.value);
final int value;
}
class Foo extends ValueNotifier<Bar> {
Foo() : super(Initial());
Future<void> fetch() async {
value = Loading();
try {
final result = await Future<int>.delayed(Duration(seconds: 1));
value = Loaded(result);
} catch (err) {
value = Error(err);
}
}
}

@ -0,0 +1,289 @@
import 'dart:convert';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:hmg_nurses/classes/consts.dart';
import 'package:hmg_nurses/classes/enums.dart';
import 'package:hmg_nurses/classes/utils.dart';
import 'package:hmg_nurses/config/routes.dart';
import 'package:hmg_nurses/generated/locale_keys.g.dart';
import 'package:hmg_nurses/main.dart';
import 'package:hmg_nurses/model/base/generic_response_model.dart';
import 'package:hmg_nurses/model/base/generic_response_model2.dart';
import 'package:hmg_nurses/model/base/post_params_model.dart';
import 'package:hmg_nurses/model/login/imei_details_model.dart';
import 'package:hmg_nurses/model/login/member_login_model.dart';
import 'package:hmg_nurses/model/login/project_info_model.dart';
import 'package:hmg_nurses/provider/base_vm.dart';
import 'package:hmg_nurses/services/api_repo/login_api_repo.dart';
import 'package:hmg_nurses/widgets/dialogs/otp_dialog.dart';
import 'package:http/http.dart';
import 'package:injector/injector.dart';
import 'package:local_auth/auth_strings.dart';
import 'package:local_auth/local_auth.dart';
class LoginProviderModel extends BaseViewModel {
//UI variables
late LocalAuthentication auth;
late bool isFaceBioAvailable, isFingerBioAvailable;
late List<BiometricType> _availableBiometrics;
//API's variables
late List<ProjectInfoModel> assignedBranches;
final ILoginApiRepo _loginApiRepo = Injector.appInstance.get<ILoginApiRepo>();
LoginProviderModel() {
setOnlyState(ViewState.hide);
checkBiosAvailblity();
}
checkBiosAvailblity() async {
auth = LocalAuthentication();
await _getAvailableBiometrics();
isFaceBioAvailable = checkBiometricIsAvailable(BiometricType.face);
isFingerBioAvailable = checkBiometricIsAvailable(BiometricType.fingerprint);
}
/// check specific biometric if it available or not
bool checkBiometricIsAvailable(BiometricType biometricType) {
bool isAvailable = false;
for (int i = 0; i < _availableBiometrics.length; i++) {
if (biometricType == _availableBiometrics[i]) {
isAvailable = true;
break;
}
}
return isAvailable;
}
/// get all available biometric on the device for local Auth service
Future<void> _getAvailableBiometrics() async {
try {
_availableBiometrics = await auth.getAvailableBiometrics();
print(_availableBiometrics);
} on PlatformException catch (e) {
// AppToast.showErrorToast(message: e.message);
print("_getAvailableBiometrics");
print(e);
}
}
Future<bool> loginWithFaceIDAndBiometrics() async {
IOSAuthMessages iosStrings =
const IOSAuthMessages(cancelButton: 'cancel', goToSettingsButton: 'settings', goToSettingsDescription: 'Please set up your Touch ID.', lockOut: 'Please re-enable your Touch ID');
bool authenticated = false;
try {
authenticated = await auth.authenticate(localizedReason: 'Scan your fingerprint to authenticate', useErrorDialogs: true, stickyAuth: true, biometricOnly: true, iOSAuthStrings: iosStrings);
} on PlatformException catch (e) {
print(e);
Utils.showToast("Please enable your Touch or Face ID");
}
return authenticated;
}
int getLoginMethodId(AuthMethodTypes authMethodTypes) {
switch (authMethodTypes) {
case AuthMethodTypes.sms:
return 1;
case AuthMethodTypes.whatsApp:
return 2;
case AuthMethodTypes.fingerPrint:
return 3;
case AuthMethodTypes.faceID:
return 4;
default:
return 1;
}
}
String getType(type) {
switch (type) {
case 1:
return LocaleKeys.sms.tr();
case 3:
return LocaleKeys.fingerPrint.tr();
case 4:
return LocaleKeys.face.tr();
case 2:
return LocaleKeys.whatsapp.tr();
default:
return LocaleKeys.sms.tr();
}
}
// LoginType getDirectLoginType(type) {
// switch (type) {
// case 1:
// return LoginType.DIRECT_LOGIN;
// case 3:
// return LocaleKeys.fingerPrint.tr();
// case 4:
// return LocaleKeys.face.tr();
// case 2:
// return LocaleKeys.whatsapp.tr();
// default:
// return LocaleKeys.sms.tr();
// }
// }
//API Calls
checkLastSession() async {
try {
Utils.showLoading();
List<GetIMEIDetailsModel> deviceInfo = await _loginApiRepo.getDeviceInfoByIMEI();
if (deviceInfo.isNotEmpty) getSession(deviceInfo.first);
Utils.showToast(deviceInfo.length.toString());
Utils.hideLoading();
} catch (e) {
Utils.hideLoading();
}
}
getAssignedBranches(String userId) async {
setState(ViewState.busy);
assignedBranches = await _loginApiRepo.getProjectInfo(userId);
print(assignedBranches.length);
setState(ViewState.idle);
}
Future<bool> performLogin(String userID, String password, int branchId) async {
try {
Utils.showLoading();
MemberLoginModel memberLogin = await _loginApiRepo.memberLogin(userID, password, branchId);
// Utils.showToast(deviceInfo.length.toString());
appState.memberBeforeLogin = memberLogin;
appState.projectID = branchId;
appState.logInTokenID = memberLogin.logInTokenId;
appState.lastLoginTyp = -1;
Utils.hideLoading();
Navigator.pushReplacementNamed(navigatorKey.currentContext!, AppRoutes.loginMethodsPage, arguments: LoginType.FROM_LOGIN);
return true;
} catch (e) {
Utils.hideLoading();
Utils.handleException(e, navigatorKey.currentContext!, (msg) {
Utils.confirmDialog(navigatorKey.currentContext!, msg);
});
return false;
}
}
Future<GenericResponseModel?> sendActivationCode(MemberLoginModel memberLoginModel, int facilityID, int sendOtpType, LoginType loginType, {bool isNeedBinding = true}) async {
try {
Utils.showLoading(isNeedBinding: isNeedBinding);
GenericResponseModel memberLogin;
if (loginType == LoginType.FROM_LOGIN) {
memberLogin = await _loginApiRepo.sendActivationCode(memberLoginModel, facilityID, sendOtpType);
appState.logInTokenID = memberLogin.logInTokenId.toString();
Utils.hideLoading();
startSMSService(sendOtpType, false);
} else {
if (loginType == LoginType.SILENT_LOGIN) {
memberLogin = await _loginApiRepo.sendActivationCodeForSlientLogin(memberLoginModel, facilityID, sendOtpType);
appState.logInTokenID = memberLogin.logInTokenId.toString();
checkActivationCode("0000", sendOtpType, true);
} else {
memberLogin = await _loginApiRepo.sendActivationCodeForSlientLogin(memberLoginModel, facilityID, sendOtpType);
appState.logInTokenID = memberLogin.logInTokenId.toString();
Utils.hideLoading();
startSMSService(sendOtpType, true);
}
}
return memberLogin;
} catch (e) {
Utils.hideLoading();
Utils.handleException(e, navigatorKey.currentContext!, (msg) {
Utils.confirmDialog(navigatorKey.currentContext!, msg);
});
}
return null;
}
Future<GenericResponseModel?> checkActivationCode(String activationCode, int sendOtpType, bool isFromSilentLogin) async {
try {
if (!isFromSilentLogin) Utils.showLoading();
GenericResponseModel memberLogin = await _loginApiRepo.checkActivationCode(activationCode, sendOtpType, isFromSilentLogin);
Utils.hideLoading();
setSession(memberLogin);
Navigator.pushReplacementNamed(navigatorKey.currentContext!, AppRoutes.dashboard);
return memberLogin;
} catch (e) {
Utils.hideLoading();
Utils.handleException(e, navigatorKey.currentContext!, (msg) {
Utils.confirmDialog(navigatorKey.currentContext!, msg);
});
}
return null;
}
startSMSService(int sendOtpType, bool isFromSilentLogin) {
OtpDialog(
type: sendOtpType,
mobileNo: appState.memberBeforeLogin!.mobileNumber,
onSuccess: (String otpCode, TextEditingController pinPut) {
Navigator.pop(navigatorKey.currentContext!);
Utils.showLoading();
checkActivationCode(otpCode, sendOtpType, isFromSilentLogin);
Utils.hideLoading();
},
onFailure: () => Navigator.pop(navigatorKey.currentContext!),
onResendCode: () {},
).displayDialog(navigatorKey.currentContext!);
}
setSession(GenericResponseModel response) {
appState.vidaAuthTokenID = response.vidaAuthTokenId;
appState.vidaRefreshTokenID = response.vidaRefreshTokenId;
appState.authenticationTokenID = response.authenticationTokenId;
appState.listDoctorsClinic = response.listDoctorsClinic;
appState.projectID = response.listDoctorsClinic!.first.projectId!;
appState.clinicId = response.listDoctorsClinic!.first.clinicId!;
appState.employeeId = response.memberInformation!.employeeId;
appState.isLogged = true;
PostParamsModel? paramsModel = appState.postParamsObject;
paramsModel!.doctorId = appState.employeeId;
paramsModel.editedBy = appState.employeeId;
paramsModel.projectId = appState.projectID;
paramsModel.clinicId = appState.clinicId;
MemberLoginModel.saveToPrefs(jsonEncode(appState.memberBeforeLogin!.toJson()));
Utils.saveIntFromPrefs(SharedPrefsConsts.username, appState.doctorUserId ?? 0);
Utils.saveStringFromPrefs(SharedPrefsConsts.password, appState.password ?? "");
Utils.saveStringFromPrefs(SharedPrefsConsts.logInTokenID, appState.logInTokenID ?? "");
Utils.saveStringFromPrefs(SharedPrefsConsts.vidaAuthTokenID, appState.vidaAuthTokenID ?? "");
Utils.saveStringFromPrefs(SharedPrefsConsts.vidaRefreshTokenID, appState.vidaRefreshTokenID ?? "");
Utils.saveStringFromPrefs(SharedPrefsConsts.authenticationTokenID, appState.authenticationTokenID ?? "");
Utils.saveIntFromPrefs(SharedPrefsConsts.projectID, appState.projectID);
Utils.saveIntFromPrefs(SharedPrefsConsts.clinicId, appState.clinicId);
Utils.saveStringFromPrefs(SharedPrefsConsts.lastLoginDate, Utils.getMonthNamedFormat(DateTime.now()));
}
getSession(GetIMEIDetailsModel model) async {
int doctorUserId = await Utils.getIntFromPrefs(SharedPrefsConsts.username);
if (model.doctorID == doctorUserId) {
String password = await Utils.getStringFromPrefs(SharedPrefsConsts.password);
String logInTokenID = await Utils.getStringFromPrefs(SharedPrefsConsts.logInTokenID);
String authenticationTokenID = await Utils.getStringFromPrefs(SharedPrefsConsts.authenticationTokenID);
int clinicId = await Utils.getIntFromPrefs(SharedPrefsConsts.clinicId);
String lastLoginDate = await Utils.getStringFromPrefs(SharedPrefsConsts.lastLoginDate);
appState.memberBeforeLogin = await MemberLoginModel.getFromPrefs();
// print(appState.memberBeforeLogin!.toJson());
appState.lastLoginTyp = -1;
appState.doctorUserId = doctorUserId;
appState.employeeId = appState.memberBeforeLogin!.listMemberInformation!.first.employeeId;
appState.password = password;
appState.logInTokenID = logInTokenID;
appState.vidaAuthTokenID = model.vidaAuthTokenID;
appState.vidaRefreshTokenID = model.vidaRefreshTokenID;
appState.authenticationTokenID = authenticationTokenID;
appState.projectID = model.projectID ?? 0;
appState.clinicId = clinicId;
appState.lastLoginImeiDate = model;
appState.lastLoginDate = lastLoginDate;
Navigator.pushReplacementNamed(navigatorKey.currentContext!, AppRoutes.loginMethodsPage, arguments: LoginType.SILENT_LOGIN);
}
}
}

@ -0,0 +1,80 @@
import 'package:flutter/material.dart';
import 'package:hmg_nurses/classes/utils.dart';
import 'package:hmg_nurses/config/app_state.dart';
import 'package:hmg_nurses/config/routes.dart';
import 'package:hmg_nurses/main.dart';
import 'package:hmg_nurses/model/base/generic_response_model.dart';
import 'package:hmg_nurses/model/patient/patient_file_information_prm_list.dart';
import 'package:hmg_nurses/provider/base_vm.dart';
import 'package:hmg_nurses/services/api_repo/patient_api_repo.dart';
import 'package:injector/injector.dart';
class PatientProviderModel extends BaseViewModel {
final IPatientApiRepo _patientApiRepo = Injector.appInstance.get<IPatientApiRepo>();
late GenericResponseModel searchedPatient;
late GenericResponseModel vitalSignHistory;
List<GetPatientFileInformationPrmList> filteredPatientsList = [];
searchPatient(int patientId) async {
try {
Utils.showLoading();
searchedPatient = await _patientApiRepo.getPatientInfo(patientId);
Utils.showToast(searchedPatient.getPatientFileInformationPrmList!.length.toString());
filteredPatientsList.addAll(searchedPatient.getPatientFileInformationPrmList!);
Utils.hideLoading();
Navigator.pushNamed(navigatorKey.currentContext!, AppRoutes.searchedFor, arguments: patientId);
return true;
} catch (e) {
Utils.hideLoading();
Utils.handleException(e, navigatorKey.currentContext!, (msg) {
Utils.confirmDialog(navigatorKey.currentContext!, msg);
});
return false;
}
}
filterPatient(String str) {
var strExist = str.length > 0 ? true : false;
if (strExist) {
filteredPatientsList = [];
for (var i = 0; i < searchedPatient.getPatientFileInformationPrmList!.length; i++) {
String firstName = searchedPatient.getPatientFileInformationPrmList![i].firstName!.toUpperCase();
String lastName = searchedPatient.getPatientFileInformationPrmList![i].lastName!.toUpperCase();
String mobile = searchedPatient.getPatientFileInformationPrmList![i].mobileNumber!.toUpperCase();
String patientID = searchedPatient.getPatientFileInformationPrmList![i].patientId.toString();
if (firstName.contains(str.toUpperCase()) || lastName.contains(str.toUpperCase()) || mobile.contains(str) || patientID.contains(str)) {
filteredPatientsList.add(searchedPatient.getPatientFileInformationPrmList![i]);
}
}
notifyListeners();
} else {
filteredPatientsList = searchedPatient.getPatientFileInformationPrmList!;
notifyListeners();
}
}
fetchVitalSignsHistory(GetPatientFileInformationPrmList patient) async {
try {
Utils.showLoading();
vitalSignHistory = await _patientApiRepo.getVitalSigns(
patientID: patient.patientId,
patientTypeID: patient.patientType,
inOutPatientType: 0,
isDentalAllowedBackend: false,
doctorID: appState.employeeId,
setupID: appState.setupId,
patientType: patient.patientType);
Utils.showToast(vitalSignHistory.listDoctorPatientVitalSign!.length.toString());
Utils.hideLoading();
// Navigator.pushNamed(navigatorKey.currentContext!, AppRoutes.searchedFor, arguments: patientId);
return true;
} catch (e) {
Utils.hideLoading();
Utils.handleException(e, navigatorKey.currentContext!, (msg) {
Utils.confirmDialog(navigatorKey.currentContext!, msg);
});
return false;
}
}
}

@ -5,7 +5,7 @@ import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart';
import 'package:http/io_client.dart';
import 'package:hmg_nurses/app_state/app_state.dart';
import 'package:hmg_nurses/config/app_state.dart';
import 'package:hmg_nurses/exceptions/api_exception.dart';
import 'package:hmg_nurses/main.dart';
// ignore_for_file: avoid_annotating_with_dynamic
@ -18,8 +18,7 @@ class APIError {
APIError(this.errorCode, this.errorMessage);
Map<String, dynamic> toJson() =>
{'errorCode': errorCode, 'errorMessage': errorMessage};
Map<String, dynamic> toJson() => {'errorCode': errorCode, 'errorMessage': errorMessage};
@override
String toString() {
@ -54,27 +53,33 @@ APIException _throwAPIException(Response response) {
return APIException(APIException.INTERNAL_SERVER_ERROR);
case 444:
var downloadUrl = response.headers["location"];
return APIException(APIException.UPGRADE_REQUIRED,
arguments: downloadUrl);
return APIException(APIException.UPGRADE_REQUIRED, arguments: downloadUrl);
default:
return APIException(APIException.OTHER);
}
}
class ApiClient {
static final ApiClient _instance = ApiClient._internal();
abstract class IApiClient {
Future<U> postJsonForObject<T, U>(FactoryConstructor<U> factoryConstructor, String url, T jsonObject,
{String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0, bool isFormData = false});
ApiClient._internal();
Future<Response> postJsonForResponse<T>(String url, T jsonObject, {String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0, bool isFormData = false});
factory ApiClient() => _instance;
Future<Response> getJsonForResponse<T>(String url, {String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0});
Future<U> postJsonForObject<T, U>(
FactoryConstructor<U> factoryConstructor, String url, T jsonObject,
{String? token,
Map<String, dynamic>? queryParameters,
Map<String, String>? headers,
int retryTimes = 0,
bool isFormData = false}) async {
void setHomeUrl(String url);
}
class ApiClient implements IApiClient {
// static final ApiClient _instance = ApiClient._internal();
// ApiClient._internal();
// factory ApiClient() => _instance;
@override
Future<U> postJsonForObject<T, U>(FactoryConstructor<U> factoryConstructor, String url, T jsonObject,
{String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0, bool isFormData = false}) async {
var _headers = {'Accept': 'application/json'};
if (headers != null && headers.isNotEmpty) {
_headers.addAll(headers);
@ -84,12 +89,7 @@ class ApiClient {
var bodyJson = json.encode(jsonObject);
print("body:$bodyJson");
}
var response = await postJsonForResponse(url, jsonObject,
token: token,
queryParameters: queryParameters,
headers: _headers,
retryTimes: retryTimes,
isFormData: isFormData);
var response = await postJsonForResponse(url, jsonObject, token: token, queryParameters: queryParameters, headers: _headers, retryTimes: retryTimes, isFormData: isFormData);
// try {
if (!kReleaseMode) {
logger.i("res: " + response.body);
@ -102,8 +102,7 @@ class ApiClient {
return factoryConstructor(jsonData);
} else {
APIError? apiError;
apiError =
APIError(jsonData['ErrorCode'], jsonData['ErrorEndUserMessage']);
apiError = APIError(jsonData['ErrorCode'], jsonData['ErrorEndUserMessage']);
throw APIException(APIException.BAD_REQUEST, error: apiError);
}
// } catch (ex) {
@ -115,12 +114,9 @@ class ApiClient {
// }
}
@override
Future<Response> postJsonForResponse<T>(String url, T jsonObject,
{String? token,
Map<String, dynamic>? queryParameters,
Map<String, String>? headers,
int retryTimes = 0,
bool isFormData = false}) async {
{String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0, bool isFormData = false}) async {
String? requestBody;
late Map<String, String> stringObj;
if (jsonObject != null) {
@ -134,22 +130,13 @@ class ApiClient {
if (isFormData) {
headers = {'Content-Type': 'application/x-www-form-urlencoded'};
stringObj = ((jsonObject ?? {}) as Map<String, dynamic>)
.map((key, value) => MapEntry(key, value?.toString() ?? ""));
stringObj = ((jsonObject ?? {}) as Map<String, dynamic>).map((key, value) => MapEntry(key, value?.toString() ?? ""));
}
return await _postForResponse(url, isFormData ? stringObj : requestBody,
token: token,
queryParameters: queryParameters,
headers: headers,
retryTimes: retryTimes);
return await _postForResponse(url, isFormData ? stringObj : requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes);
}
Future<Response> _postForResponse(String url, requestBody,
{String? token,
Map<String, dynamic>? queryParameters,
Map<String, String>? headers,
int retryTimes = 0}) async {
Future<Response> _postForResponse(String url, requestBody, {String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0}) async {
try {
var _headers = <String, String>{};
if (token != null) {
@ -164,9 +151,7 @@ class ApiClient {
var queryString = new Uri(queryParameters: queryParameters).query;
url = url + '?' + queryString;
}
var response =
await _post(Uri.parse(url), body: requestBody, headers: _headers)
.timeout(Duration(seconds: 120));
var response = await _post(Uri.parse(url), body: requestBody, headers: _headers).timeout(Duration(seconds: 120));
if (response.statusCode >= 200 && response.statusCode < 300) {
return response;
@ -177,11 +162,7 @@ class ApiClient {
if (retryTimes > 0) {
print('will retry after 3 seconds...');
await Future.delayed(Duration(seconds: 3));
return await _postForResponse(url, requestBody,
token: token,
queryParameters: queryParameters,
headers: headers,
retryTimes: retryTimes - 1);
return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1);
} else {
throw APIException(APIException.OTHER, arguments: e);
}
@ -189,11 +170,7 @@ class ApiClient {
if (retryTimes > 0) {
print('will retry after 3 seconds...');
await Future.delayed(Duration(seconds: 3));
return await _postForResponse(url, requestBody,
token: token,
queryParameters: queryParameters,
headers: headers,
retryTimes: retryTimes - 1);
return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1);
} else {
throw APIException(APIException.OTHER, arguments: e);
}
@ -203,39 +180,24 @@ class ApiClient {
if (retryTimes > 0) {
print('will retry after 3 seconds...');
await Future.delayed(Duration(seconds: 3));
return await _postForResponse(url, requestBody,
token: token,
queryParameters: queryParameters,
headers: headers,
retryTimes: retryTimes - 1);
return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1);
} else {
throw APIException(APIException.OTHER, arguments: e);
}
}
}
Future<Response> getJsonForResponse<T>(String url,
{String? token,
Map<String, dynamic>? queryParameters,
Map<String, String>? headers,
int retryTimes = 0}) async {
@override
Future<Response> getJsonForResponse<T>(String url, {String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0}) async {
if (headers == null) {
headers = {'Content-Type': 'application/json'};
} else {
headers['Content-Type'] = 'application/json';
}
return await _getForResponse(url,
token: token,
queryParameters: queryParameters,
headers: headers,
retryTimes: retryTimes);
return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes);
}
Future<Response> _getForResponse(String url,
{String? token,
Map<String, dynamic>? queryParameters,
Map<String, String>? headers,
int retryTimes = 0}) async {
Future<Response> _getForResponse(String url, {String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0}) async {
try {
var _headers = <String, String>{};
if (token != null) {
@ -250,8 +212,7 @@ class ApiClient {
var queryString = new Uri(queryParameters: queryParameters).query;
url = url + '?' + queryString;
}
var response = await _get(Uri.parse(url), headers: _headers)
.timeout(Duration(seconds: 60));
var response = await _get(Uri.parse(url), headers: _headers).timeout(Duration(seconds: 60));
if (response.statusCode >= 200 && response.statusCode < 300) {
return response;
@ -262,11 +223,7 @@ class ApiClient {
if (retryTimes > 0) {
print('will retry after 3 seconds...');
await Future.delayed(Duration(seconds: 3));
return await _getForResponse(url,
token: token,
queryParameters: queryParameters,
headers: headers,
retryTimes: retryTimes - 1);
return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1);
} else {
throw APIException(APIException.OTHER, arguments: e);
}
@ -274,11 +231,7 @@ class ApiClient {
if (retryTimes > 0) {
print('will retry after 3 seconds...');
await Future.delayed(Duration(seconds: 3));
return await _getForResponse(url,
token: token,
queryParameters: queryParameters,
headers: headers,
retryTimes: retryTimes - 1);
return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1);
} else {
throw APIException(APIException.OTHER, arguments: e);
}
@ -288,19 +241,14 @@ class ApiClient {
if (retryTimes > 0) {
print('will retry after 3 seconds...');
await Future.delayed(Duration(seconds: 3));
return await _getForResponse(url,
token: token,
queryParameters: queryParameters,
headers: headers,
retryTimes: retryTimes - 1);
return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1);
} else {
throw APIException(APIException.OTHER, arguments: e);
}
}
}
Future<Response> _get(url, {Map<String, String>? headers}) =>
_withClient((client) => client.get(url, headers: headers));
Future<Response> _get(url, {Map<String, String>? headers}) => _withClient((client) => client.get(url, headers: headers));
bool _certificateCheck(X509Certificate cert, String host, int port) => true;
@ -314,8 +262,10 @@ class ApiClient {
}
}
Future<Response> _post(url,
{Map<String, String>? headers, body, Encoding? encoding}) =>
_withClient((client) =>
client.post(url, headers: headers, body: body, encoding: encoding));
Future<Response> _post(url, {Map<String, String>? headers, body, Encoding? encoding}) => _withClient((client) => client.post(url, headers: headers, body: body, encoding: encoding));
@override
void setHomeUrl(String url) {
// TODO: implement setHomeUrl
}
}

@ -0,0 +1,121 @@
import 'dart:convert';
import 'package:hmg_nurses/exceptions/api_exception.dart';
import 'package:hmg_nurses/main.dart';
import 'package:hmg_nurses/model/base/generic_response_model2.dart';
import 'package:hmg_nurses/model/login/member_login_model.dart';
import 'package:hmg_nurses/model/login/project_info_model.dart';
import 'package:hmg_nurses/services/api_client.dart';
import 'package:hmg_nurses/classes/consts.dart';
import 'package:hmg_nurses/model/base/generic_response_model.dart';
import 'package:hmg_nurses/model/login/imei_details_model.dart';
import 'package:hmg_nurses/services/firebase_service.dart';
import 'package:injector/injector.dart';
abstract class IDashboardApiRepo {
Future<GenericResponseModel2> getDoctorProfile();
Future insertDoctorProfile();
}
class DashboardApiRepo implements IDashboardApiRepo {
@override
Future<GenericResponseModel2> getDoctorProfile() async {
String url = "${ApiConsts.baseUrlServices}Doctors.svc/REST/GetDocProfiles";
Map<String, dynamic> postParams = {};
postParams.addAll(appState.postParamsJson);
postParams["ProjectID"] = appState.projectID;
postParams["ClinicID"] = appState.clinicId;
postParams["doctorID"] = appState.memberBeforeLogin!.doctorId;
postParams["IsRegistered"] = true;
postParams["License"] = true;
postParams["TokenID"] = appState.authenticationTokenID;
postParams["DoctorID"] = appState.memberBeforeLogin!.doctorId;
postParams["PatientOutSA"] = false;
GenericResponseModel2 response;
try {
response = await Injector.appInstance.get<IApiClient>().postJsonForObject((json) => GenericResponseModel2.fromJson(json), url, postParams);
} catch (e) {
rethrow;
}
return response;
}
@override
Future insertDoctorProfile() async {
String url = "${ApiConsts.baseUrlServices}DoctorApplication.svc/REST/DoctorApp_InsertOrUpdateDeviceDetails";
Map<String, dynamic> postParams = {};
postParams.addAll(appState.postParamsJson);
postParams["IMEI"] = appState.imei;
postParams["LogInTypeID"] = appState.lastLoginTyp;
postParams["OutSA"] = null;
postParams["MobileNo"] = appState.doctorProfile!.doctorProfileList!.first.doctorMobileNumber;
postParams["IdentificationNo"] = null;
postParams["DoctorID"] = appState.doctorUserId;
postParams["DoctorName"] = appState.doctorProfile!.doctorProfileList!.first.doctorName;
postParams["DoctorNameN"] = appState.doctorProfile!.doctorProfileList!.first.doctorNameN;
postParams["ClinicID"] = appState.doctorProfile!.doctorProfileList!.first.clinicId;
postParams["ClinicDescription"] = appState.doctorProfile!.doctorProfileList!.first.clinicDescription;
postParams["ClinicDescriptionN"] = appState.doctorProfile!.doctorProfileList!.first.clinicDescriptionN;
postParams["ProjectName"] = appState.doctorProfile!.doctorProfileList!.first.projectName;
postParams["GenderDescription"] = appState.doctorProfile!.doctorProfileList!.first.genderDescription;
postParams["GenderDescriptionN"] = appState.doctorProfile!.doctorProfileList!.first.genderDescriptionN;
postParams["TitleDescription"] = appState.doctorProfile!.doctorProfileList!.first.titleDescription;
postParams["Title_DescriptionN"] = appState.doctorProfile!.doctorProfileList!.first.titleDescriptionN;
postParams["BioMetricEnabled"] = true;
postParams["PreferredLanguage"] = null;
postParams["IsActive"] = appState.doctorProfile!.doctorProfileList!.first.isActive;
postParams["EditedBy"] = appState.doctorProfile!.doctorProfileList!.first.doctorId;
postParams["ProjectID"] = appState.doctorProfile!.doctorProfileList!.first.projectId;
postParams["TokenID"] = appState.authenticationTokenID;
postParams["LoginDoctorID"] = appState.doctorProfile!.doctorProfileList!.first.doctorId;
postParams["Password"] = appState.password;
logger.d(jsonEncode(postParams));
GenericResponseModel response;
try {
response = await Injector.appInstance.get<IApiClient>().postJsonForObject((json) => GenericResponseModel.fromJson(json), url, postParams);
} catch (e) {
rethrow;
}
return null;
}
}
// {
// "IMEI": "es6V9NcpSzCXR665uSDWGo:APA91bGF_FjdOf8ZOZmw5FU7pkDfzNOvkz-IsSBRrJE6OR0ZE2lyeTxzFtvjZEajUEC_ssD6ytKNEm74lm30KpZEvPdrNgSRR8idlGrRqJ6qK2Lp2lrLtgA1OLMjkkQS1bcpvXcdnEg_",
// "LogInTypeID": 1,
// "OutSA": null,
// "MobileNo": "0553755378",
// "IdentificationNo": null,
// "DoctorID": 13777,
// "DoctorName": "EYAD ISMAIL ABU-JAYAB",
// "DoctorNameN": null,
// "ClinicID": 1,
// "ClinicDescription": "INTERNAL MEDICINE CLINIC",
// "ClinicDescriptionN": null,
// "ProjectName": "Olaya Hospital",
// "GenderDescription": "Male",
// "GenderDescriptionN": null,
// "TitleDescription": "Dr.",
// "Title_DescriptionN": null,
// "BioMetricEnabled": true,
// "PreferredLanguage": null,
// "IsActive": false,
// "EditedBy": 2477,
// "ProjectID": 12,
// "TokenID": "W7qObFELE0+VAtKJoTeq+w==",
// "LanguageID": 2,
// "stamp": "2022-11-27T10:50:25.345098",
// "IPAdress": "9.9.9.9",
// "VersionID": 9,
// "Channel": 9,
// "SessionID": "BlUSkYymTt",
// "IsLoginForDoctorApp": true,
// "PatientOutSA": false,
// "VidaAuthTokenID": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMzc3NyIsImp0aSI6IjNiM2U5MTU4LTJhNmEtNGM4MS04OTk5LWU3ZTRhYzUzMmFiOCIsImVtYWlsIjoiUndhaWQuQWxtYWxsYWhAY2xvdWRzb2x1dGlvbnMuY29tLnNhIiwiaWQiOiIxMzc3NyIsIk5hbWUiOiJSd2FpZCBGb3VkIEhhc3NhbiBBbE1hbGxhaCIsIkVtcGxveWVlSWQiOiIyNDc3IiwiRmFjaWxpdHlHcm91cElkIjoiOTE4NzciLCJGYWNpbGl0eUlkIjoiMTIiLCJQaGFyYW1jeUZhY2lsaXR5SWQiOiI1NiIsIklTX1BIQVJNQUNZX0NPTk5FQ1RFRCI6IlRydWUiLCJEb2N0b3JJZCI6IjI0NzciLCJTRVNTSU9OSUQiOiIyMDYzNDY2OCIsIkNsaW5pY0lkIjoiMSIsIm5iZiI6MTY2OTUzNTQxMSwiZXhwIjoxNjcwMzk5NDExLCJpYXQiOjE2Njk1MzU0MTF9.LkZMiDAt9F4yjbuNyMSIcZYIgct6VuPed7uPOw0PTVw",
// "VidaRefreshTokenID": "sm30FcA2iL0lJmSCAVlNJJ8e0AbfYzHxg+wMGTBSoP9VM9do55BRxjATjBtOJyo60u8tLRk9LHrmmH8Xn+B25A==",
// "Password": "Rr123456",
// "LoginDoctorID": 2477,
// "DeviceTypeID": 1
// }

@ -0,0 +1,169 @@
import 'dart:convert';
import 'package:hmg_nurses/classes/utils.dart';
import 'package:hmg_nurses/exceptions/api_exception.dart';
import 'package:hmg_nurses/main.dart';
import 'package:hmg_nurses/model/base/generic_response_model2.dart';
import 'package:hmg_nurses/model/login/member_login_model.dart';
import 'package:hmg_nurses/model/login/project_info_model.dart';
import 'package:hmg_nurses/services/api_client.dart';
import 'package:hmg_nurses/classes/consts.dart';
import 'package:hmg_nurses/model/base/generic_response_model.dart';
import 'package:hmg_nurses/model/login/imei_details_model.dart';
import 'package:hmg_nurses/services/firebase_service.dart';
import 'package:injector/injector.dart';
abstract class ILoginApiRepo {
Future<List<GetIMEIDetailsModel>> getDeviceInfoByIMEI();
Future<List<ProjectInfoModel>> getProjectInfo(String userId);
Future<MemberLoginModel> memberLogin(String userId, String password, int projectId);
Future<GenericResponseModel> sendActivationCode(MemberLoginModel memberLoginModel, int facilityID, int sendOtpType);
Future<GenericResponseModel> sendActivationCodeForSlientLogin(MemberLoginModel memberLoginModel, int facilityID, int sendOtpType);
Future<GenericResponseModel> checkActivationCode(String activationCode, int sendOtpType, bool isFromSilentLogin);
}
class LoginApiRepo implements ILoginApiRepo {
final IFirebaseService _firebaseService = Injector.appInstance.get<IFirebaseService>();
@override
Future<List<GetIMEIDetailsModel>> getDeviceInfoByIMEI() async {
String url = "${ApiConsts.baseUrlServices}DoctorApplication.svc/REST/DoctorApp_GetDeviceDetailsByIMEI";
String token = await _firebaseService.getFirebaseToke();
logger.d("firebase_token: " + token);
appState.imei = token;
Map<String, dynamic> postParams = {};
postParams.addAll(appState.postParamsJson);
postParams["stamp"] = DateTime.now().toIso8601String();
postParams["IMEI"] = appState.imei;
GenericResponseModel response;
try {
response = await Injector.appInstance.get<IApiClient>().postJsonForObject((json) => GenericResponseModel.fromJson(json), url, postParams);
} catch (e) {
rethrow;
}
return response.listDoctorDeviceDetails ?? [];
}
@override
Future<List<ProjectInfoModel>> getProjectInfo(String userId) async {
String url = "${ApiConsts.baseUrlServices}DoctorApplication.svc/REST/GetProjectInfo";
Map<String, dynamic> postParams = {};
postParams.addAll(appState.postParamsJson);
postParams["MemberID"] = "13777";
GenericResponseModel response;
try {
response = await Injector.appInstance.get<IApiClient>().postJsonForObject((json) => GenericResponseModel.fromJson(json), url, postParams);
} catch (e) {
rethrow;
}
return response.projectInfo ?? [];
}
@override
Future<MemberLoginModel> memberLogin(String userId, String password, int projectId) async {
String url = "${ApiConsts.baseUrlServices}Sentry.svc/REST/MemberLogIN_New";
Map<String, dynamic> postParams = {};
postParams.addAll(appState.postParamsJson);
postParams["UserID"] = userId;
postParams["Password"] = password;
postParams["ProjectID"] = projectId;
MemberLoginModel response;
try {
response = await Injector.appInstance.get<IApiClient>().postJsonForObject((json) => MemberLoginModel.fromJson(json), url, postParams);
} catch (e) {
rethrow;
}
return response;
}
@override
Future<GenericResponseModel> sendActivationCode(MemberLoginModel memberLoginModel, int facilityID, int sendOtpType) async {
String url = "${ApiConsts.baseUrlServices}DoctorApplication.svc/REST/SendActivationCodeForDoctorApp";
Map<String, dynamic> postParams = {};
postParams.addAll(appState.postParamsJson);
postParams["MemberID"] = memberLoginModel.listMemberInformation!.first.memberId;
postParams["facilityId"] = facilityID;
postParams["OTP_SendType"] = sendOtpType.toString();
postParams["LoginDoctorID"] = memberLoginModel.doctorId;
postParams["DoctorID"] = memberLoginModel.doctorId;
postParams["TokenID"] = appState.logInTokenID;
GenericResponseModel response;
print(jsonEncode(postParams));
// return GenericResponseModel();
try {
response = await Injector.appInstance.get<IApiClient>().postJsonForObject((json) => GenericResponseModel.fromJson(json), url, postParams);
} catch (e) {
rethrow;
}
return response;
}
@override
Future<GenericResponseModel> sendActivationCodeForSlientLogin(MemberLoginModel memberLoginModel, int facilityID, int sendOtpType) async {
String url = "${ApiConsts.baseUrlServices}DoctorApplication.svc/REST/SendVerificationCode";
Map<String, dynamic> postParams = {};
postParams.addAll(appState.postParamsJson);
postParams["MobileNumber"] = memberLoginModel.mobileNumber;
postParams["ZipCode"] = memberLoginModel.zipCode;
postParams["IsMobileFingerPrint"] = 1;
postParams["IMEI"] = appState.imei;
postParams["LoginDoctorID"] = memberLoginModel.doctorId;
postParams["DoctorID"] = memberLoginModel.doctorId;
postParams["MemberID"] = memberLoginModel.listMemberInformation!.first.memberId;
postParams["facilityId"] = facilityID;
postParams["OTP_SendType"] = sendOtpType;
postParams["LoginDoctorID"] = memberLoginModel.doctorId;
postParams["DoctorID"] = memberLoginModel.doctorId;
postParams["TokenID"] = appState.logInTokenID;
GenericResponseModel response;
print(jsonEncode(postParams));
// return GenericResponseModel();
try {
response = await Injector.appInstance.get<IApiClient>().postJsonForObject((json) => GenericResponseModel.fromJson(json), url, postParams);
} catch (e) {
rethrow;
}
return response;
}
@override
Future<GenericResponseModel> checkActivationCode(String activationCode, int sendOtpType, bool isFromSilentLogin) async {
String url = "${ApiConsts.baseUrlServices}DoctorApplication.svc/REST/CheckActivationCodeForDoctorApp";
Map<String, dynamic> postParams = {};
MemberLoginModel memberLoginModel = appState.memberBeforeLogin ?? MemberLoginModel();
postParams.addAll(appState.postParamsJson);
postParams["MobileNumber"] = memberLoginModel.mobileNumber;
postParams["ProjectID"] = appState.projectID;
postParams["LogInTokenID"] = appState.logInTokenID;
postParams["activationCode"] = activationCode;
postParams["OTP_SendType"] = sendOtpType;
postParams["facilityId"] = appState.projectID;
postParams["MemberID"] = appState.memberBeforeLogin!.listMemberInformation!.first.memberId;
postParams["Password"] = appState.password;
postParams["IsForSilentLogin"] = isFromSilentLogin;
postParams["LoginDoctorID"] = appState.memberBeforeLogin?.doctorId;
postParams["DoctorID"] = appState.memberBeforeLogin?.doctorId;
postParams["IMEI"] = appState.imei;
postParams["ZipCode"] = appState.memberBeforeLogin?.zipCode;
postParams["TokenID"] = appState.logInTokenID;
GenericResponseModel response;
try {
response = await Injector.appInstance.get<IApiClient>().postJsonForObject((json) => GenericResponseModel.fromJson(json), url, postParams);
} catch (e) {
rethrow;
}
return response;
}
}

@ -0,0 +1,80 @@
import 'dart:convert';
import 'package:hmg_nurses/classes/consts.dart';
import 'package:hmg_nurses/main.dart';
import 'package:hmg_nurses/model/base/generic_response_model.dart';
import 'package:hmg_nurses/services/api_client.dart';
import 'package:injector/injector.dart';
abstract class IPatientApiRepo {
Future<GenericResponseModel> getPatientInfo(int patientID);
Future<GenericResponseModel> getVitalSigns({int? patientID, int? patientTypeID, int? inOutPatientType, bool isDentalAllowedBackend, int? doctorID, int setupID, int? patientType});
}
class PatientApiRepo implements IPatientApiRepo {
@override
Future<GenericResponseModel> getPatientInfo(int patientID) async {
String url = "${ApiConsts.baseUrlServices}Patients.svc/REST/GetPatientInformation_PRM";
Map<String, dynamic> postParams = {};
postParams.addAll(appState.postParamsJson);
postParams["FirstName"] = "0";
postParams["MiddleName"] = "0";
postParams["LastName"] = "0";
postParams["PatientMobileNumber"] = "0";
postParams["PatientIdentificationID"] = "0";
postParams["PatientID"] = patientID;
postParams["From"] = "0";
postParams["To"] = "0";
postParams["SearchType"] = 1;
postParams["MobileNo"] = "";
postParams["IdentificationNo"] = "0";
postParams["NursingStationID"] = "0";
GenericResponseModel response;
print(jsonEncode(postParams));
// return GenericResponseModel();
try {
response = await Injector.appInstance.get<IApiClient>().postJsonForObject((json) => GenericResponseModel.fromJson(json), url, postParams);
} catch (e) {
rethrow;
}
return response;
}
@override
Future<GenericResponseModel> getVitalSigns({int? patientID, int? patientTypeID, int? inOutPatientType, bool? isDentalAllowedBackend, int? doctorID, int? setupID, int? patientType}) async {
String url = "${ApiConsts.baseUrlServices}Doctors.svc/REST/Doctor_GetPatientVitalSign";
Map<String, dynamic> postParams = {};
// {
// "PatientID": 12,
// "PatientTypeID": 1,
// "InOutPatientType": 0,
// "isDentalAllowedBackend": false,
// "DoctorID": 2477,
// "SetupID": "91877",
// "PatientType": 1,
// }
postParams.addAll(appState.postParamsJson);
postParams["PatientID"] = patientID;
postParams["PatientTypeID"] = patientTypeID;
postParams["InOutPatientType"] = inOutPatientType;
postParams["isDentalAllowedBackend"] = isDentalAllowedBackend;
postParams["DoctorID"] = doctorID;
postParams["SetupID"] = setupID;
postParams["PatientType"] = patientType;
postParams.remove("ProjectID");
postParams.remove("ClinicID");
GenericResponseModel response;
// return GenericResponseModel();
try {
response = await Injector.appInstance.get<IApiClient>().postJsonForObject((json) => GenericResponseModel.fromJson(json), url, postParams);
} catch (e) {
rethrow;
}
return response;
}
}

@ -0,0 +1,24 @@
import 'dart:io';
import 'package:firebase_messaging/firebase_messaging.dart';
abstract class IFirebaseService {
Future<String> getFirebaseToke();
}
class FirebaseService implements IFirebaseService {
final FirebaseMessaging? _firebaseMessaging = FirebaseMessaging.instance;
FirebaseService() {
_firebaseMessaging!.setAutoInitEnabled(true);
if (Platform.isIOS) {
_firebaseMessaging!.requestPermission();
}
}
@override
Future<String> getFirebaseToke() async {
var token = await _firebaseMessaging!.getToken();
return token ?? "";
}
}

@ -0,0 +1,79 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:hmg_nurses/config/routes.dart';
import 'package:hmg_nurses/main.dart';
import 'package:hmg_nurses/provider/dashboard_provider_model.dart';
import 'package:hmg_nurses/ui/dashboard/widgets/home_patient_card.dart';
import 'package:hmg_nurses/widgets/icons_app/doctor_app_icons.dart';
import 'package:provider/provider.dart';
class DashboardPage extends StatefulWidget {
@override
State<DashboardPage> createState() => _DashboardPageState();
}
class _DashboardPageState extends State<DashboardPage> {
late DashboardProviderModel provider;
@override
void initState() {
super.initState();
provider = Provider.of<DashboardProviderModel>(navigatorKey.currentContext!);
provider.getDocProfile();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
actions: [
IconButton(
onPressed: () {
appState.isLogged = false;
Navigator.pushReplacementNamed(context, AppRoutes.login, arguments: false);
},
icon: const Icon(
Icons.logout,
color: Colors.white,
),
)
],
),
body: Container(
width: double.infinity,
height: double.infinity,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
showHomeButton(),
],
),
),
);
}
Widget showHomeButton() {
return Container(
width: 120,
height: 120,
child: HomePatientCard(
gradient: const LinearGradient(
begin: Alignment(-1.0, -2.0),
end: Alignment(1.0, 2.0),
colors: [
Colors.red,
Color(0xFFAD3B3B),
],
),
backgroundIconColor: Colors.white12,
cardIcon: DoctorApp.search,
textColor: Colors.white,
text: "Search Patient",
onTap: () {
Navigator.pushNamed(context, AppRoutes.searchPatient);
},
),
);
}
}

@ -0,0 +1,48 @@
import 'package:flutter/material.dart';
class HomePageCard extends StatelessWidget {
const HomePageCard(
{this.hasBorder = false,
required this.imageName,
required this.child,
required this.onTap,
required this.color,
this.opacity = 0.4,
required this.margin,
required this.width,
required this.gradient});
final bool hasBorder;
final String imageName;
final Widget child;
final GestureTapCallback onTap;
final Color color;
final double opacity;
final double width;
final EdgeInsets margin;
final LinearGradient gradient;
@override
Widget build(BuildContext context) {
return InkWell(
onTap: onTap,
child: Container(
width: width,
margin: this.margin,
decoration: BoxDecoration(
gradient: gradient,
borderRadius: BorderRadius.circular(20.0),
border: hasBorder ? Border.all(width: 1.0, color: const Color(0xffcccccc)) : Border.all(width: 0.0, color: Colors.transparent),
image: imageName != null
? DecorationImage(
image: AssetImage('assets/images/patient/ucaf.png'),
fit: BoxFit.cover,
colorFilter: new ColorFilter.mode(Colors.black.withOpacity(0.2), BlendMode.dstIn),
)
: null,
),
child: child,
),
);
}
}

@ -0,0 +1,118 @@
import 'package:flutter/material.dart';
import 'package:hmg_nurses/classes/size_config.dart';
import 'package:hmg_nurses/ui/dashboard/widgets/home_page_card.dart';
class HomePatientCard extends StatelessWidget {
final Color? backgroundColor;
final IconData? cardIcon;
final String? cardIconImage;
final Color? backgroundIconColor;
final String? text;
final Color? textColor;
final VoidCallback? onTap;
final double iconSize;
final LinearGradient? gradient;
HomePatientCard({
this.backgroundColor,
this.backgroundIconColor,
this.cardIcon,
this.cardIconImage,
this.text,
this.textColor,
this.onTap,
this.iconSize = 30,
this.gradient,
});
@override
Widget build(BuildContext context) {
double width = SizeConfig.heightMultiplier! *
(SizeConfig.isHeightVeryShort
? 16
: SizeConfig.isHeightLarge
? 15
: 13);
return HomePageCard(
color: backgroundColor??Colors.black,
width: width,
gradient: gradient??LinearGradient(colors: []),
margin: EdgeInsets.all(SizeConfig.widthMultiplier! * 1.121),
child: Container(
padding: EdgeInsets.all(8),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Stack(
children: [
Container(
margin: EdgeInsets.only(top: 18, left: 10),
color: Colors.transparent,
child: cardIcon != null
? Icon(
cardIcon,
size: iconSize * 2,
color: backgroundIconColor,
)
: IconButton(
icon: Image.asset(
'assets/images/patient/ucaf.png',
width: iconSize * 2,
height: iconSize * 2,
fit: BoxFit.fill,
),
iconSize: iconSize * 2,
color: backgroundIconColor,
onPressed: () => null,
),
),
Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
cardIcon != null
? Icon(
cardIcon,
size: SizeConfig.getWidthMultiplier(width: width) * 30,
color: textColor,
)
: Image.asset(
cardIconImage!,
height: iconSize,
width: iconSize,
),
SizedBox(
height: 4,
),
],
),
),
],
),
),
Expanded(
child: Container(
child: Text(
text!,
textAlign: TextAlign.start,
style: TextStyle(
color: textColor,
letterSpacing: -0.33,
fontWeight: FontWeight.w600,
fontSize: SizeConfig.getTextMultiplierBasedOnWidth(width: width) * (SizeConfig.isHeightVeryShort ? 11 : 10),
),
),
),
),
],
),
),
hasBorder: false,
onTap: onTap!,
imageName: '',
);
}
}

@ -2,14 +2,19 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:hmg_nurses/classes/colors.dart';
import 'package:hmg_nurses/classes/date-utils.dart';
import 'package:hmg_nurses/classes/enums.dart';
import 'package:hmg_nurses/config/routes.dart';
import 'package:hmg_nurses/extensions/int_extensions.dart';
import 'package:hmg_nurses/extensions/string_extensions.dart';
import 'package:hmg_nurses/extensions/util_extensions.dart';
import 'package:hmg_nurses/extensions/widget_extensions.dart';
import 'package:hmg_nurses/generated/locale_keys.g.dart';
import 'package:hmg_nurses/ui/login/login_vm.dart';
import 'package:hmg_nurses/main.dart';
import 'package:hmg_nurses/provider/login_provider_model.dart';
import 'package:hmg_nurses/ui/login/widgets/verification_method_card.dart';
import 'package:hmg_nurses/widgets/button/default_button.dart';
import 'package:local_auth/local_auth.dart';
import 'package:provider/provider.dart';
import 'package:sizer/sizer.dart';
@ -28,49 +33,43 @@ class LoginMethodsPage extends StatefulWidget {
class LoginMethodsPageState extends State<LoginMethodsPage> {
bool isMoreOption = false;
bool onlySMSBox = false;
late AuthMethodTypes fingerPrintBefore;
late AuthMethodTypes selectedOption;
late LoginViewModel loginViewModel;
LoginType? loginType;
AuthMethodTypes? selectedAuthType;
late LoginProviderModel loginProviderModel;
@override
Widget build(BuildContext context) {
loginViewModel = context.read<LoginViewModel>();
if (loginType == null) {
loginType = ModalRoute.of(context)!.settings.arguments as LoginType;
}
loginProviderModel = context.read<LoginProviderModel>();
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.transparent,
leading: IconButton(
icon: const Icon(Icons.arrow_back_ios, color: MyColors.darkIconColor),
onPressed: () => Navigator.pop(context),
),
// actions: [Center(child: "Employee Digital ID".toText12(color: MyColors.textMixColor, isUnderLine: true).onPress(() {})), 21.width],
),
body: SingleChildScrollView(
child: Center(
child: FractionallySizedBox(
widthFactor: 0.9,
// appBar: AppBar(
// backgroundColor: Colors.transparent,
// leading: null,
// // actions: [Center(child: "Employee Digital ID".toText12(color: MyColors.textMixColor, isUnderLine: true).onPress(() {})), 21.width],
// ),
body: Container(
width: double.infinity,
height: double.infinity,
padding: const EdgeInsets.all(21),
child: Column(
children: [
Expanded(
child: SafeArea(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
heightSpacer1per(),
if (loginViewModel.isFromLogin)
InkWell(
onTap: () {
loginViewModel.setUnverified(false, isFromLogin: false);
loginViewModel.setAppStatus(APPSTATUS.unAuthenticated);
},
child: const Icon(Icons.arrow_back_ios, color: MyColors.darkTextColor)),
children: [
21.height,
if (loginType == LoginType.SILENT_LOGIN && appState.lastLoginImeiDate != null)
Column(
children: <Widget>[
heightSpacer1per(),
isMoreOption != null && isMoreOption == false
? Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
LocaleKeys.welcomeBack.tr().toText12(),
"Dr Amal Ahmed".toText20(isBold: true),
(appState.lastLoginImeiDate!.titleDescription! + " " + appState.lastLoginImeiDate!.doctorName!).toText20(isBold: true),
heightSpacer3per(),
LocaleKeys.wouldYouLikeToLoginWithCurrentUsername.tr().toText14(),
heightSpacer3per(),
@ -95,30 +94,9 @@ class LoginMethodsPageState extends State<LoginMethodsPage> {
child: Row(
children: [
"${LocaleKeys.verificationType.tr()} : ".toText11(),
"${loginViewModel.getType(1)}".toText11(isBold: true),
loginProviderModel.getType(appState.lastLoginImeiDate!.logInTypeID ?? 1).toText11(isBold: true),
],
),
// child: RichText(
// text: TextSpan(
// text: "${LocaleKeys.verificationType.tr()} ",
// style: TextStyle(
// color: const Color(0xFF575757),
// fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.5,
// fontFamily: 'Poppins',
// fontWeight: FontWeight.w600,
// letterSpacing: -0.4),
// children: <TextSpan>[
// TextSpan(
// text: loginViewModel.getType(1),
// style: TextStyle(
// color: MyColors.darkTextColor,
// fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.5,
// fontFamily: 'Poppins',
// fontWeight: FontWeight.w600,
// letterSpacing: -0.48),
// )
// ]),
// ),
),
],
),
@ -126,33 +104,19 @@ class LoginMethodsPageState extends State<LoginMethodsPage> {
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
"12 NOV, 2022".toText11(isBold: true),
(appState.lastLoginImeiDate!.editedOn != null
? AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.convertStringToDate(appState.lastLoginImeiDate!.editedOn ?? ""), isMonthShort: true)
: appState.lastLoginImeiDate!.createdOn != null
? AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.convertStringToDate(appState.lastLoginImeiDate!.createdOn ?? ""), isMonthShort: true)
: '--')
.toText11(isBold: true),
heightSpacer06per(),
"09:56 AM".toText10()
// AppText(
// loginViewModel.user.editedOn != null
// ? AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.convertStringToDate(loginViewModel.user.editedOn), isMonthShort: true)
// : loginViewModel.user.createdOn != null
// ? AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.convertStringToDate(loginViewModel.user.createdOn), isMonthShort: true)
// : '--',
// textAlign: TextAlign.right,
// fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 4.5,
// color: Color(0xFF2E303A),
// fontWeight: FontWeight.w700,
// letterSpacing: -0.48,
// ),
// AppText(
// loginViewModel.user.editedOn != null
// ? AppDateUtils.getHour(AppDateUtils.convertStringToDate(loginViewModel.user.editedOn))
// : loginViewModel.user.createdOn != null
// ? AppDateUtils.getHour(AppDateUtils.convertStringToDate(loginViewModel.user.createdOn))
// : '--',
// textAlign: TextAlign.right,
// fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.5,
// fontWeight: FontWeight.w600,
// letterSpacing: -0.48,
// color: Color(0xFF575757),
// )
(appState.lastLoginImeiDate!.editedOn != null
? AppDateUtils.getHour(AppDateUtils.convertStringToDate(appState.lastLoginImeiDate!.editedOn ?? ""))
: appState.lastLoginImeiDate!.createdOn != null
? AppDateUtils.getHour(AppDateUtils.convertStringToDate(appState.lastLoginImeiDate!.createdOn ?? ""))
: '--')
.toText10()
],
)
],
@ -162,110 +126,156 @@ class LoginMethodsPageState extends State<LoginMethodsPage> {
LocaleKeys.pleaseVerify.tr().toText14().paddingOnly(left: 1.w),
heightSpacer2per(),
],
)
: Column(mainAxisAlignment: MainAxisAlignment.spaceEvenly, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[
LocaleKeys.pleaseVerifyForBio.tr().toText14().paddingAll(10),
]),
isMoreOption != null && isMoreOption == false
? Column(mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[
Row(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
Expanded(
child: VerificationMethodsList(
loginViewModel: loginViewModel,
authMethodType: SelectedAuthMethodTypesService.getMethodsTypeService(1),
authenticateUser: (AuthMethodTypes authMethodType, isActive) {
loginViewModel.startSMSService(authMethodType, context: context);
},
),
Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
if (loginType == LoginType.FROM_LOGIN || loginType == LoginType.SILENT_WITH_OTP)
Column(
children: [
LocaleKeys.pleaseVerifyForBio.tr().toText14(),
21.height,
],
),
if (loginType == LoginType.FROM_LOGIN || loginType == LoginType.SILENT_LOGIN)
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: VerificationMethodsList(
loginViewModel: loginViewModel,
authMethodType: AuthMethodTypes.moreOptions,
onShowMore: () {
authMethodType: AuthMethodTypes.faceID,
isBioAvailable: loginProviderModel.isFaceBioAvailable,
authenticateUser: (AuthMethodTypes authMethodType, isActive) async {
bool isAuthenticated = await loginProviderModel.loginWithFaceIDAndBiometrics();
if (isAuthenticated) {
appState.lastLoginTyp = loginProviderModel.getLoginMethodId(authMethodType);
if (loginType == LoginType.FROM_LOGIN) {
setState(() {
loginType = LoginType.FROM_LOGIN;
});
} else if (loginType == LoginType.SILENT_LOGIN) {
if (appState.lastLoginImeiDate!.logInTypeID == loginProviderModel.getLoginMethodId(authMethodType)) {
loginProviderModel.sendActivationCode(
appState.memberBeforeLogin!,
appState.projectID,
loginProviderModel.getLoginMethodId(AuthMethodTypes.sms),
loginType ?? LoginType.FROM_LOGIN,
isNeedBinding: false,
);
} else {
setState(() {
isMoreOption = true;
loginType = LoginType.SILENT_WITH_OTP;
});
}
}
} else {
print("Authentication Failed");
}
},
))
]),
])
: Column(mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[
onlySMSBox == false
? Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
),
),
21.width,
Expanded(
child: VerificationMethodsList(
loginViewModel: loginViewModel,
authMethodType: AuthMethodTypes.fingerPrint,
authenticateUser: (AuthMethodTypes authMethodType, isActive) {
loginViewModel.startSMSService(authMethodType, context: context);
},
)),
Expanded(
child: VerificationMethodsList(
loginViewModel: loginViewModel,
authMethodType: AuthMethodTypes.faceID,
authenticateUser: (AuthMethodTypes authMethodType, isActive) {
loginViewModel.startSMSService(authMethodType, context: context);
isBioAvailable: loginProviderModel.isFingerBioAvailable,
authenticateUser: (AuthMethodTypes authMethodType, isActive) async {
bool isAuthenticated = await loginProviderModel.loginWithFaceIDAndBiometrics();
if (isAuthenticated) {
appState.lastLoginTyp = loginProviderModel.getLoginMethodId(authMethodType);
if (loginType == LoginType.FROM_LOGIN) {
setState(() {
loginType = LoginType.FROM_LOGIN;
});
} else if (loginType == LoginType.SILENT_LOGIN) {
if (appState.lastLoginImeiDate!.logInTypeID == loginProviderModel.getLoginMethodId(authMethodType)) {
loginProviderModel.sendActivationCode(
appState.memberBeforeLogin!,
appState.projectID,
loginProviderModel.getLoginMethodId(AuthMethodTypes.sms),
loginType ?? LoginType.FROM_LOGIN,
isNeedBinding: false,
);
} else {
setState(() {
loginType = LoginType.SILENT_WITH_OTP;
});
}
}
} else {
print("Authentication Failed");
}
},
))
),
),
],
)
: const SizedBox(),
),
21.height,
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: VerificationMethodsList(
loginViewModel: loginViewModel,
authMethodType: AuthMethodTypes.sms,
authenticateUser: (AuthMethodTypes authMethodType, isActive) {
loginViewModel.startSMSService(authMethodType, context: context);
if (loginType == LoginType.FROM_LOGIN || loginType == LoginType.SILENT_LOGIN) {
if (appState.lastLoginTyp == -1) appState.lastLoginTyp = loginProviderModel.getLoginMethodId(authMethodType);
if (loginType == LoginType.SILENT_LOGIN) {
loginType = LoginType.SILENT_WITH_OTP;
}
}
loginProviderModel.sendActivationCode(
appState.memberBeforeLogin!,
appState.projectID,
loginProviderModel.getLoginMethodId(AuthMethodTypes.sms),
loginType ?? LoginType.FROM_LOGIN,
);
},
)),
),
),
21.width,
Expanded(
child: VerificationMethodsList(
loginViewModel: loginViewModel,
authMethodType: AuthMethodTypes.whatsApp,
authenticateUser: (AuthMethodTypes authMethodType, isActive) {
loginViewModel.startSMSService(authMethodType, context: context);
if (loginType == LoginType.FROM_LOGIN || loginType == LoginType.SILENT_LOGIN) {
if (appState.lastLoginTyp == -1) appState.lastLoginTyp = loginProviderModel.getLoginMethodId(authMethodType);
if (loginType == LoginType.SILENT_LOGIN) {
loginType = LoginType.SILENT_WITH_OTP;
}
}
loginProviderModel.sendActivationCode(
appState.memberBeforeLogin!,
appState.projectID,
loginProviderModel.getLoginMethodId(AuthMethodTypes.whatsApp),
loginType ?? LoginType.FROM_LOGIN,
);
},
))
],
),
]),
// )
],
),
],
),
],
),
12.height,
],
),
),
),
bottomSheet: !isMoreOption
? null
: Container(
height: 10.h,
color: MyColors.backgroundColor,
width: double.infinity,
child: Center(
child: FractionallySizedBox(
widthFactor: 0.9,
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Padding(
padding: EdgeInsets.symmetric(horizontal: 4.w),
child: DefaultButton(LocaleKeys.useAnotherAccount.tr(), () {}, colors: const [MyColors.redColor, MyColors.redColor]),
),
heightSpacer3per(),
21.height,
DefaultButton(
LocaleKeys.useAnotherAccount.tr(),
() async {
Navigator.pushReplacementNamed(context, AppRoutes.login, arguments:false);
},
colors: const [
MyColors.redColor,
MyColors.redColor,
],
),
),
],
),
),
);

@ -1,40 +1,80 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:hmg_nurses/classes/colors.dart';
import 'package:hmg_nurses/classes/consts.dart';
import 'package:hmg_nurses/classes/enums.dart';
import 'package:hmg_nurses/classes/utils.dart';
import 'package:hmg_nurses/config/routes.dart';
import 'package:hmg_nurses/extensions/string_extensions.dart';
import 'package:hmg_nurses/extensions/widget_extensions.dart';
import 'package:hmg_nurses/extensions/int_extensions.dart';
import 'package:hmg_nurses/generated/locale_keys.g.dart';
import 'package:hmg_nurses/main.dart';
import 'package:hmg_nurses/model/login/imei_details_model.dart';
import 'package:hmg_nurses/model/login/member_login_model.dart';
import 'package:hmg_nurses/model/login/project_info_model.dart';
import 'package:hmg_nurses/provider/login_provider_model.dart';
import 'package:hmg_nurses/widgets/button/default_button.dart';
import 'package:hmg_nurses/widgets/cupertino_picker.dart';
import 'package:hmg_nurses/widgets/input_widget.dart';
import 'package:injector/injector.dart';
import 'package:local_auth/local_auth.dart';
import 'package:provider/provider.dart';
import 'package:sizer/sizer.dart';
class LoginPage extends StatefulWidget {
const LoginPage({Key? key}) : super(key: key);
@override
State<LoginPage> createState() => _LoginPageState();
}
class _LoginPageState extends State<LoginPage> {
int branchID = 0;
LoginProviderModel? provider;
final loginFormKey = GlobalKey<FormState>();
var projectIdController = TextEditingController();
var userIdController = TextEditingController();
var passwordController = TextEditingController();
FocusNode projectIdFocusNode = FocusNode();
FocusNode userIdFocusNode = FocusNode();
FocusNode passwordIdFocusNode = FocusNode();
checkUserSession() async {
provider!.checkLastSession();
}
setUserSession() async {
await Utils.getStringFromPrefs(SharedPrefsConsts.username);
await Utils.getStringFromPrefs(SharedPrefsConsts.password);
}
@override
Widget build(BuildContext context) {
if (provider == null) {
dynamic? isNeedCheckUserSession = (ModalRoute.of(context)!.settings.arguments);
// setUserSession();
provider = context.read<LoginProviderModel>();
if (isNeedCheckUserSession == null) {
checkUserSession();
}
}
return Scaffold(
body: SafeArea(
child: Column(
children: [
Expanded(
child: SingleChildScrollView(
child: SizedBox(
height: MediaQuery.of(context).size.height / 1.2,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
Expanded(
flex: 1,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LocaleKeys.welcomeTo.tr().toText14(color: MyColors.blackColor),
@ -42,63 +82,90 @@ class _LoginPageState extends State<LoginPage> {
"Nurses App".toText16(color: MyColors.redColor),
],
),
heightSpacer4per(),
Form(
),
Expanded(
flex: 3,
child: Form(
key: loginFormKey,
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
heightSpacer3per(),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
CustomTextField(
LocaleKeys.userID.tr(),
userIdController,
isEnableBorder: true,
focusNode: userIdFocusNode,
isInputTypeNum: true,
),
heightSpacer3per(),
16.height,
CustomTextField(
LocaleKeys.password.tr(),
passwordController,
isTextIsPassword: true,
focusNode: passwordIdFocusNode,
onChange: (v) {
if (v.length == 1) {
provider!.getAssignedBranches(userIdController.text);
}
},
),
heightSpacer3per(),
CustomTextField(
16.height,
Consumer<LoginProviderModel>(
builder: (_, data, w) {
// if (data.state == ViewState.idle && provider.assignedBranches.isNotEmpty) {
// projectIdController.text = provider.assignedBranches.first.facilityName!;
// branchID = provider.assignedBranches.first.facilityId as int;
// print(branchID);
// provider.notifyListeners();
// }
return data.state == ViewState.hide
? Container()
: data.state == ViewState.busy
? const Center(child: CircularProgressIndicator())
: CustomTextField(
LocaleKeys.branch.tr(),
projectIdController,
hasSelection: true,
isEnable: false,
focusNode: projectIdFocusNode,
onClick: () => CustomCupertinoPicker.showCupertinoPicker(context, [], () {}),
onClick: () => CustomCupertinoPicker.showCupertinoPicker(
context,
provider!.assignedBranches,
(index) {
projectIdController.text = provider!.assignedBranches[index].facilityName!;
branchID = provider!.assignedBranches[index].facilityId as int;
provider!.notifyListeners();
},
),
);
},
),
heightSpacer15per(),
]),
)
],
).paddingSymmetrical(8.w, 4.h),
),
),
bottomSheet: Container(
height: 12.h,
color: MyColors.backgroundColor,
width: double.infinity,
child: Center(
child: FractionallySizedBox(
widthFactor: 0.89,
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Padding(
padding: EdgeInsets.symmetric(horizontal: 4.w),
child: DefaultButton(LocaleKeys.login.tr(), () {
Navigator.pushNamed(context, AppRoutes.loginMethodsPage);
}, colors: const [MyColors.redColor, MyColors.redColor]),
),
heightSpacer3per(),
],
),
),
),
),
21.height,
DefaultButton(
LocaleKeys.login.tr(),
() async {
// provider.checkLastSession();
bool isSuccess = await provider!.performLogin(userIdController.text, passwordController.text, branchID);
if (isSuccess) {
appState.password = passwordController.text;
appState.doctorUserId = int.parse(userIdController.text);
print(appState.doctorUserId);
}
},
colors: const [
MyColors.redColor,
MyColors.redColor,
],
),
],
).paddingAll(21),
),
);
}
}

@ -1,141 +0,0 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:hmg_nurses/base/base_vm.dart';
import 'package:hmg_nurses/classes/enums.dart';
import 'package:hmg_nurses/classes/utils.dart';
import 'package:hmg_nurses/dialogs/otp_dialog.dart';
import 'package:hmg_nurses/generated/locale_keys.g.dart';
import 'package:local_auth/local_auth.dart';
class LoginViewModel extends BaseViewModel {
bool isLogin = false;
bool unverified = false;
bool isFromLogin = false;
APPSTATUS appStatus = APPSTATUS.loading;
String localToken = "";
String nurseProfile = "";
final LocalAuthentication auth = LocalAuthentication();
late List<BiometricType> _availableBiometrics;
LoginViewModel();
/// get type name based on id.
getType(type) {
switch (type) {
case 1:
return LocaleKeys.sms.tr();
case 3:
return LocaleKeys.fingerPrint.tr();
case 4:
return LocaleKeys.face.tr();
case 2:
return LocaleKeys.whatsapp.tr();
default:
return LocaleKeys.sms.tr();
}
}
/// ask user to add his biometric
showIOSAuthMessages() async {
try {
await auth.authenticate(
localizedReason: 'Scan your fingerprint to authenticate',
);
} on PlatformException catch (e) {
if (kDebugMode) {
print(e);
}
}
}
/// check specific biometric if it available or not
Future<bool> checkIfBiometricAvailable(BiometricType biometricType) async {
bool isAvailable = false;
await _getAvailableBiometrics();
if (_availableBiometrics != null) {
for (var i = 0; i < _availableBiometrics.length; i++) {
if (biometricType == _availableBiometrics[i]) isAvailable = true;
}
}
return isAvailable;
}
/// get all available biometric on the device for local Auth service
Future<void> _getAvailableBiometrics() async {
try {
_availableBiometrics = await auth.getAvailableBiometrics();
} on PlatformException catch (e) {
if (kDebugMode) {
print(e);
}
}
}
/// determine the status of the app
APPSTATUS get status {
if (state == ViewState.busy) {
appStatus = APPSTATUS.loading;
} else {
if (nurseProfile != null) {
appStatus = APPSTATUS.authenticated;
} else if (unverified) {
appStatus = APPSTATUS.unverified;
} else if (isLogin) {
appStatus = APPSTATUS.authenticated;
} else {
appStatus = APPSTATUS.unAuthenticated;
}
}
return appStatus;
}
setAppStatus(APPSTATUS status) {
appStatus = status;
notifyListeners();
}
setUnverified(bool unverified, {bool isFromLogin = false}) {
this.unverified = unverified;
this.isFromLogin = isFromLogin;
notifyListeners();
}
/// logout function
logout({bool isFromLogin = false}) async {
// localToken = "";
// String lang = await sharedPref.getString(APP_Language);
// await Utils.clearSharedPref();
// doctorProfile = null;
// sharedPref.setString(APP_Language, lang);
// deleteUser();
// await getDeviceInfoFromFirebase();
// this.isFromLogin = isFromLogin;
// appStatus = APPSTATUS.unAuthenticated;
// setState(ViewState.Idle);
}
deleteUser() {
// user = null;
// unverified = false;
// isLogin = false;
}
startSMSService(AuthMethodTypes type, {isSilentLogin = false, required BuildContext context}) {
OtpDialog(
type: 1,
mobileNo: 0504278212,
onSuccess: (String otpCode, TextEditingController pinPut) {
Utils.showLoading();
//TODO: API CALL
// performDirectApiCall(_title, _icon, _flag, value);
},
onFailure: () => Navigator.pop(context),
onResendCode: () {})
.displayDialog(context);
}
}

@ -1,6 +1,36 @@
import 'package:flutter/material.dart';
import 'package:hmg_nurses/services/api_repo/login_api_repo.dart';
import 'package:hmg_nurses/services/firebase_service.dart';
import 'package:injector/injector.dart';
import '../../classes/utils.dart';
class SplashPage extends StatefulWidget {
@override
State<SplashPage> createState() => _SplashPageState();
}
class _SplashPageState extends State<SplashPage> {
final ILoginApiRepo _loginApiRepo = Injector.appInstance.get<ILoginApiRepo>();
@override
void initState() {
super.initState();
getData();
}
getData() async {
try {
await _loginApiRepo.getDeviceInfoByIMEI();
await _loginApiRepo.getProjectInfo("userId");
await _loginApiRepo.memberLogin("13777", "Rr123456", 12);
} catch (e) {
Utils.handleException(e, context, (msg) {
Utils.confirmDialog(context, msg);
});
}
}
class SplashPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold();

@ -6,61 +6,65 @@ import 'package:hmg_nurses/classes/colors.dart';
import 'package:hmg_nurses/classes/enums.dart';
import 'package:hmg_nurses/classes/size_config.dart';
import 'package:hmg_nurses/generated/locale_keys.g.dart';
import 'package:hmg_nurses/ui/login/login_vm.dart';
import 'package:local_auth/local_auth.dart';
class VerificationMethodsList extends StatefulWidget {
class VerificationMethodsList extends StatelessWidget {
final AuthMethodTypes authMethodType;
final Function(AuthMethodTypes type, bool isActive)? authenticateUser;
final Function? onShowMore;
final LoginViewModel loginViewModel;
const VerificationMethodsList({Key? key, required this.authMethodType, this.authenticateUser, this.onShowMore, required this.loginViewModel}) : super(key: key);
@override
VerificationMethodsListState createState() => VerificationMethodsListState();
}
final bool isBioAvailable;
class VerificationMethodsListState extends State<VerificationMethodsList> {
final LocalAuthentication auth = LocalAuthentication();
const VerificationMethodsList({
Key? key,
required this.authMethodType,
this.authenticateUser,
this.onShowMore,
this.isBioAvailable = true,
}) : super(key: key);
@override
Widget build(BuildContext context) {
switch (widget.authMethodType) {
switch (authMethodType) {
case AuthMethodTypes.whatsApp:
return MethodTypeCard(
assetPath: 'assets/images/login/verify_whatsapp.svg',
onTap: () => {widget.authenticateUser!(AuthMethodTypes.whatsApp, true)},
onTap: () => {authenticateUser!(AuthMethodTypes.whatsApp, true)},
label: LocaleKeys.verifyThroughWhatsapp.tr(),
isBioAvailable: isBioAvailable,
);
case AuthMethodTypes.sms:
return MethodTypeCard(
assetPath: "assets/images/login/verify_sms.svg",
onTap: () => {widget.authenticateUser!(AuthMethodTypes.sms, true)},
onTap: () => {authenticateUser!(AuthMethodTypes.sms, true)},
label: LocaleKeys.verifyThroughSMS.tr(),
isBioAvailable: isBioAvailable,
);
case AuthMethodTypes.fingerPrint:
return MethodTypeCard(
assetPath: 'assets/images/login/verify_thumb.svg',
onTap: () => {widget.authenticateUser!(AuthMethodTypes.fingerPrint, true)},
onTap: () => {authenticateUser!(AuthMethodTypes.fingerPrint, true)},
label: LocaleKeys.verifyThroughFingerprint.tr(),
isBioAvailable: isBioAvailable,
);
case AuthMethodTypes.faceID:
return MethodTypeCard(
assetPath: 'assets/images/login/verify_face.svg',
onTap: () => {widget.authenticateUser!(AuthMethodTypes.faceID, true)},
onTap: () => {authenticateUser!(AuthMethodTypes.faceID, true)},
label: LocaleKeys.verifyThroughFace.tr(),
isBioAvailable: isBioAvailable,
);
default:
return MethodTypeCard(
assetPath: 'assets/images/login/more_icon.png',
onTap: () {
widget.onShowMore!();
onShowMore!();
},
isSvg: false,
label: LocaleKeys.moreVerificationOpts.tr(),
height: 0,
isBioAvailable: isBioAvailable,
);
}
}
@ -74,12 +78,14 @@ class MethodTypeCard extends StatelessWidget {
required this.label,
this.height = 20,
this.isSvg = true,
required this.isBioAvailable,
}) : super(key: key);
final String assetPath;
final GestureTapCallback onTap;
final String label;
final double height;
final bool isSvg;
final bool isBioAvailable;
@override
Widget build(BuildContext context) {
@ -92,9 +98,8 @@ class MethodTypeCard extends StatelessWidget {
return InkWell(
onTap: onTap,
child: Container(
margin: const EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.white,
color: isBioAvailable ? Colors.white : Colors.grey[400],
borderRadius: const BorderRadius.all(Radius.circular(10)),
border: Border.all(color: HexColor('#707070'), width: 0.1),
),
@ -129,7 +134,8 @@ class MethodTypeCard extends StatelessWidget {
],
),
),
)),
),
),
);
}
}

@ -0,0 +1,56 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:hmg_nurses/classes/date-utils.dart';
import 'package:hmg_nurses/extensions/int_extensions.dart';
import 'package:hmg_nurses/extensions/string_extensions.dart';
import 'package:hmg_nurses/model/patient/patient_file_information_prm_list.dart';
import 'package:hmg_nurses/ui/patient/widgets/grid/profile_gird_for_search.dart';
import 'package:hmg_nurses/ui/patient/widgets/patient_profile_header.dart';
import 'package:hmg_nurses/widgets/app_bar_widget.dart';
import 'package:hmg_nurses/widgets/circular_avatar.dart';
import 'package:hmg_nurses/widgets/commen/cusom_row.dart';
import 'package:url_launcher/url_launcher.dart';
class PatientProfilePage extends StatelessWidget {
late GetPatientFileInformationPrmList patientProfile;
@override
Widget build(BuildContext context) {
patientProfile = ModalRoute.of(context)!.settings.arguments as GetPatientFileInformationPrmList;
return Scaffold(
appBar: AppBarWidget(
context,
title: "${patientProfile.firstName!} ${patientProfile.lastName!}",
actions: [
SvgPicture.asset(
patientProfile.gender == 1 ? "assets/images/svgs/male.svg" : "assets/images/svgs/female.svg",
),
IconButton(
onPressed: () async {
String url = "tel://${patientProfile.mobileNumber}";
if (!await launchUrl(Uri.parse(url))) {
throw 'Could not launch $url';
}
},
icon: const Icon(Icons.call),
),
],
),
body: SingleChildScrollView(
child: Column(
children: [
PatientProfileHeader(patientProfile),
Container(
width: double.infinity,
margin: const EdgeInsets.all(21),
child: ProfileGridForSearch(
patient: patientProfile,
),
)
],
),
),
);
}
}

@ -0,0 +1,47 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:hmg_nurses/model/patient/patient_file_information_prm_list.dart';
import 'package:hmg_nurses/provider/patient_provider_model.dart';
import 'package:hmg_nurses/ui/patient/widgets/patient_profile_header.dart';
import 'package:hmg_nurses/widgets/app_bar_widget.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';
class VitalSignsPage extends StatelessWidget {
late GetPatientFileInformationPrmList patientProfile;
late PatientProviderModel provider;
@override
Widget build(BuildContext context) {
patientProfile = ModalRoute.of(context)!.settings.arguments as GetPatientFileInformationPrmList;
provider = context.read<PatientProviderModel>();
provider.fetchVitalSignsHistory(patientProfile);
return Scaffold(
appBar: AppBarWidget(
context,
title: "${patientProfile.firstName!} ${patientProfile.lastName!}",
actions: [
SvgPicture.asset(
patientProfile.gender == 1 ? "assets/images/svgs/male.svg" : "assets/images/svgs/female.svg",
),
IconButton(
onPressed: () async {
String url = "tel://${patientProfile.mobileNumber}";
if (!await launchUrl(Uri.parse(url))) {
throw 'Could not launch $url';
}
},
icon: const Icon(Icons.call),
),
],
),
body: SingleChildScrollView(
child: Column(
children: [
PatientProfileHeader(patientProfile),
],
),
),
);
}
}

@ -0,0 +1,55 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:hmg_nurses/classes/colors.dart';
import 'package:hmg_nurses/provider/patient_provider_model.dart';
import 'package:hmg_nurses/widgets/app_bar_widget.dart';
import 'package:hmg_nurses/widgets/button/default_button.dart';
import 'package:hmg_nurses/widgets/input_widget.dart';
import 'package:provider/provider.dart';
class SearchPatientPage extends StatelessWidget {
var searchController = TextEditingController();
PatientProviderModel? provider;
@override
Widget build(BuildContext context) {
provider = context.read<PatientProviderModel>();
return Scaffold(
appBar: AppBarWidget(context, title: "Search Patients", isNeedLeading: false, actions: [
IconButton(
onPressed: () {
Navigator.pop(context);
},
icon: const Icon(Icons.close),
),
]),
body: Container(
padding: const EdgeInsets.all(21),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
CustomTextField(
"Search By Patient Id",
searchController,
inputFormatters: [
FilteringTextInputFormatter.allow(
RegExp("[0-9]"),
),
],
),
DefaultButton(
"Search",
() async {
// provider.checkLastSession();
if (searchController.text.length > 0) {
provider?.searchPatient(int.parse(searchController.text));
}
},
),
],
),
),
);
}
}

@ -0,0 +1,96 @@
import 'package:flutter/material.dart';
import 'package:hmg_nurses/config/routes.dart';
import 'package:hmg_nurses/extensions/int_extensions.dart';
import 'package:hmg_nurses/provider/patient_provider_model.dart';
import 'package:hmg_nurses/ui/patient/widgets/patient_card.dart';
import 'package:hmg_nurses/widgets/app_bar_widget.dart';
import 'package:hmg_nurses/widgets/errors/error_message.dart';
import 'package:hmg_nurses/widgets/input_widget.dart';
import 'package:provider/provider.dart';
class SearchedPatientListPage extends StatelessWidget {
int? patientId;
late PatientProviderModel provider;
var searchController = TextEditingController();
@override
Widget build(BuildContext context) {
patientId ??= ModalRoute.of(context)!.settings.arguments as int;
provider = context.read<PatientProviderModel>();
return Scaffold(
appBar: AppBarWidget(
context,
title: "Search For $patientId",
),
body: Container(
width: double.infinity,
height: double.infinity,
padding: EdgeInsets.all(21),
child: Column(
children: [
CustomTextField(
"Search Name, Medical File, Phone Number",
searchController,
suffixIcon: Icons.filter_alt,
onChange: (v) {
provider.filterPatient(v);
},
),
21.height,
Expanded(
child: Consumer<PatientProviderModel>(
builder: (_, model, widget) {
return model.searchedPatient.getPatientFileInformationPrmList!.isEmpty
? ErrorMessage(errorMessage: "No Data Found")
: Column(
children: [
model.filteredPatientsList.isEmpty
? ErrorMessage(errorMessage: "No Data")
: Expanded(
child: SizedBox(
width: double.infinity,
height: double.infinity,
child: ListView.separated(
itemBuilder: (context, index) {
// String nationalityName = model.filteredPatientsList[index].nationalityName != null
// ? model.filteredPatientsList[index].nationalityName.trim()
// : model.filteredPatientsList[index].nationality != null
// ? model.filteredPatientsList[index].nationality.trim()
// : model.filteredPatientsList[index].nationalityId != null
// ? model.filteredPatientsList[index].nationalityId
// : "";
return PatientCard(
name: "${model.filteredPatientsList[index].firstName!} ${model.filteredPatientsList[index].lastName!}",
gender: model.filteredPatientsList[index].gender??1 ,
nationalityName: (model.filteredPatientsList[index].nationalityId != null) ? model.filteredPatientsList[index].nationalityId! : "",
nationalityFlagURL: (model.filteredPatientsList[index].nationalityId != null) ? model.filteredPatientsList[index].nationalityFlagUrl! : "",
fileNumber: model.filteredPatientsList[index].patientId.toString(),
dateofBirth: model.filteredPatientsList[index].dateofBirth!,
// arrivedOn: "",
// appointmentDate: "",
// admissionDate: "",
// clinicDescription: "",
// roomId: "",
onTap: () {
Navigator.pushNamed(context, AppRoutes.patientProfile, arguments: model.filteredPatientsList[index]);
},
);
},
separatorBuilder: (context, index) {
return 12.height;
},
itemCount: model.filteredPatientsList.length,
),
),
),
],
);
},
),
),
],
),
),
);
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save