Compare commits

..

1 Commits

Author SHA1 Message Date
Faiz Hashmi dbdbf534e3 Committing before reverting from SignalR to Apis 3 years ago

@ -1,57 +0,0 @@
{
"agcgw_all":{
"CN":"connect-drcn.dbankcloud.cn",
"CN_back":"connect-drcn.hispace.hicloud.com",
"DE":"connect-dre.dbankcloud.cn",
"DE_back":"connect-dre.hispace.hicloud.com",
"RU":"connect-drru.hispace.dbankcloud.ru",
"RU_back":"connect-drru.hispace.dbankcloud.cn",
"SG":"connect-dra.dbankcloud.cn",
"SG_back":"connect-dra.hispace.hicloud.com"
},
"websocketgw_all":{
"CN":"connect-ws-drcn.hispace.dbankcloud.cn",
"CN_back":"connect-ws-drcn.hispace.dbankcloud.com",
"DE":"connect-ws-dre.hispace.dbankcloud.cn",
"DE_back":"connect-ws-dre.hispace.dbankcloud.com",
"RU":"connect-ws-drru.hispace.dbankcloud.ru",
"RU_back":"connect-ws-drru.hispace.dbankcloud.cn",
"SG":"connect-ws-dra.hispace.dbankcloud.cn",
"SG_back":"connect-ws-dra.hispace.dbankcloud.com"
},
"client":{
"cp_id":"2640966000002322881",
"product_id":"737518067793559971",
"client_id":"715996003571874624",
"client_secret":"B5B89A56A53847C6BB9D216A8747E75952760DF9A8232239D8744CD847A8FFDA",
"project_id":"737518067793559971",
"app_id":"104737117",
"api_key":"DAEDACKDrYgyco9mjPV9ZUjCSh1kCr/GBV0nseHH0z2mnxlZ41RksOKmyTi+PUTwmGEPK+VxCup4F9oUf4VbDnCsjB7aNBShYcjR+g==",
"package_name":"hmg.cloudSolutions.mohem"
},
"oauth_client":{
"client_id":"104737117",
"client_type":1
},
"app_info":{
"app_id":"104737117",
"package_name":"hmg.cloudSolutions.mohem"
},
"configuration_version":"3.0",
"appInfos":[
{
"package_name":"hmg.cloudSolutions.mohem",
"client":{
"app_id":"104737117"
},
"app_info":{
"package_name":"hmg.cloudSolutions.mohem",
"app_id":"104737117"
},
"oauth_client":{
"client_type":1,
"client_id":"104737117"
}
}
]
}

@ -21,17 +21,10 @@ if (flutterVersionName == null) {
flutterVersionName = '1.0' flutterVersionName = '1.0'
} }
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android'
apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.gms.google-services'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
apply plugin: 'com.huawei.agconnect'
android { android {
compileSdkVersion 33 compileSdkVersion 33
@ -51,33 +44,18 @@ android {
defaultConfig { defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "hmg.cloudSolutions.mohem" applicationId "com.cloudSolutions.mohemmtest"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 33 targetSdkVersion 32
versionCode flutterVersionCode.toInteger() versionCode flutterVersionCode.toInteger()
versionName flutterVersionName versionName flutterVersionName
} }
signingConfigs {
// debug {
// keyAlias keystoreProperties['keyAlias']
// keyPassword keystoreProperties['keyPassword']
// storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
// storePassword keystoreProperties['storePassword']
// }
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes { buildTypes {
release { release {
signingConfig signingConfigs.release // TODO: Add your own signing config for the release build.
minifyEnabled true // Signing with the debug keys for now, so `flutter run --release` works.
shrinkResources true signingConfig signingConfigs.debug
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} }
} }
} }

@ -10,7 +10,7 @@
"client_info": { "client_info": {
"mobilesdk_app_id": "1:679409052782:android:dba155ac0859d7fea78a7f", "mobilesdk_app_id": "1:679409052782:android:dba155ac0859d7fea78a7f",
"android_client_info": { "android_client_info": {
"package_name": "hmg.cloudSolutions.mohem" "package_name": "com.cloudSolutions.mohemmtest"
} }
}, },
"oauth_client": [ "oauth_client": [

@ -7,18 +7,8 @@
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.NFC" /> <uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<!-- Chat Web RTC Calling -->
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<application <application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="Mohemm" android:label="Mohemm"
android:networkSecurityConfig="@xml/network_security_config" android:networkSecurityConfig="@xml/network_security_config"
@ -46,21 +36,15 @@
<meta-data <meta-data
android:name="io.flutter.embedding.android.SplashScreenDrawable" android:name="io.flutter.embedding.android.SplashScreenDrawable"
android:resource="@drawable/launch_background" /> android:resource="@drawable/launch_background" />
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
<intent-filter>
<action android:name="FLUTTER_NOTIFICATION_CLICK" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity> </activity>
<!-- Don't delete the meta-data below. <!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data <meta-data
android:name="flutterEmbedding" android:name="flutterEmbedding"
android:value="2" /> android:value="2" />
</application> </application>
</manifest> </manifest>

@ -3,14 +3,12 @@ buildscript {
repositories { repositories {
google() google()
mavenCentral() mavenCentral()
maven { url 'https://developer.huawei.com/repo/' }
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:7.0.3' classpath 'com.android.tools.build:gradle:7.0.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.8' classpath 'com.google.gms:google-services:4.3.8'
classpath 'com.huawei.agconnect:agcp:1.8.0.300'
} }
} }
@ -18,7 +16,6 @@ allprojects {
repositories { repositories {
google() google()
mavenCentral() mavenCentral()
maven { url 'https://developer.huawei.com/repo/' }
} }
} }

Binary file not shown.

@ -1,54 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/>
<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/>
<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/>
<path style="fill:#F15642;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16
V416z"/>
<g>
<path style="fill:#FFFFFF;" d="M88.368,384c-4.096-2.304-6.656-6.912-4.096-12.288l36.72-71.744c3.456-6.784,12.656-7.04,15.856,0
l36.08,71.744c5.248,9.984-10.24,17.904-14.848,7.936l-5.632-11.248h-47.2l-5.52,11.248C97.712,384,92.992,384.912,88.368,384z
M143.392,351.52l-14.464-31.616l-15.744,31.616H143.392z"/>
<path style="fill:#FFFFFF;" d="M189.184,384c-4.096-2.304-6.656-6.912-4.096-12.288l36.704-71.744
c3.456-6.784,12.672-7.04,15.872,0l36.064,71.744c5.248,9.984-10.24,17.904-14.832,7.936l-5.648-11.248h-47.2l-5.504,11.248
C198.512,384,193.776,384.912,189.184,384z M244.192,351.52l-14.448-31.616l-15.728,31.616H244.192z"/>
<path style="fill:#FFFFFF;" d="M282.416,339.088c0-24.688,15.488-45.904,44.912-45.904c11.136,0,19.952,3.312,29.296,11.376
c3.456,3.184,3.84,8.832,0.384,12.4c-3.456,3.056-8.704,2.688-11.76-0.368c-5.248-5.504-10.624-7.024-17.92-7.024
c-19.696,0-29.168,13.936-29.168,29.536c0,15.872,9.344,30.464,29.168,30.464c7.296,0,14.08-2.96,19.952-8.192
c3.968-3.072,9.472-1.552,11.776,1.536c2.048,2.816,3.056,7.536-1.408,12.016c-8.96,8.336-19.696,9.984-30.336,9.984
C296.368,384.912,282.416,363.792,282.416,339.088z"/>
</g>
<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

@ -1,13 +1,23 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24.322" height="24.322" viewBox="0 0 24.322 24.322"> <svg xmlns="http://www.w3.org/2000/svg" width="29.557" height="29.557" viewBox="0 0 29.557 29.557">
<g id="chat_8_" data-name="chat (8)" transform="translate(0 -0.006)"> <g id="chat_3_" data-name="chat (3)" transform="translate(0 -0.008)">
<g id="Group_7919" data-name="Group 7919" transform="translate(0 7.368)"> <g id="Group_8672" data-name="Group 8672" transform="translate(0 0.007)">
<g id="Group_7918" data-name="Group 7918"> <g id="Group_8671" data-name="Group 8671" transform="translate(0 0)">
<path id="Path_4723" data-name="Path 4723" d="M10.023,155C4.522,155,0,158.78,0,163.43a7.852,7.852,0,0,0,2.043,5.211L.176,170.775a.713.713,0,0,0,.536,1.182H10.735c4.061,0,9.31-3.5,9.31-8.526C20.045,158.78,15.523,155,10.023,155ZM5.7,164.736a1.425,1.425,0,1,1,1.425-1.425A1.427,1.427,0,0,1,5.7,164.736Zm4.323,0a1.425,1.425,0,1,1,1.425-1.425A1.427,1.427,0,0,1,10.023,164.736Zm4.323,0a1.425,1.425,0,1,1,1.425-1.425A1.427,1.427,0,0,1,14.345,164.736Z" transform="translate(0 -154.998)" fill="#818181"/> <path id="Path_13684" data-name="Path 13684" d="M29.348,17.685l-2.039-2.379A8.6,8.6,0,0,0,29.556,9.59c0-5.369-5.209-9.583-11.315-9.583-6.207,0-11.257,4.3-11.257,9.583,0,.133,0,.266.011.4-4.131,1.641-7,5.18-7,9.271a9.341,9.341,0,0,0,2.483,6.276L.214,28.127a.866.866,0,0,0,.652,1.436H13.046c.1,0,.4-.055.462-.061A12.95,12.95,0,0,0,21,26.322a9.481,9.481,0,0,0,3.3-7.207H28.69A.867.867,0,0,0,29.348,17.685ZM13.219,27.79c-.076.006-.337.029-.39.042H2.774l1.538-1.758a.866.866,0,0,0-.056-1.2,7.739,7.739,0,0,1-2.525-5.616c0-4.694,4.687-8.515,10.449-8.515,5.73,0,10.391,3.82,10.391,8.515C22.571,23.649,18.482,27.36,13.219,27.79ZM24.1,17.383h0C23.057,12.566,18.06,9.013,12.18,9.013a14.281,14.281,0,0,0-3.461.422c.1-4.258,4.333-7.7,9.523-7.7,5.284,0,9.583,3.522,9.583,7.851a7.016,7.016,0,0,1-2.284,5.058.866.866,0,0,0-.059,1.189l1.326,1.547Z" transform="translate(0 -0.007)" fill="#989898"/>
</g> </g>
</g> </g>
<g id="Group_7921" data-name="Group 7921" transform="translate(5.823 0.006)"> <g id="Group_8674" data-name="Group 8674" transform="translate(5.253 17.383)">
<g id="Group_7920" data-name="Group 7920" transform="translate(0 0)"> <g id="Group_8673" data-name="Group 8673">
<path id="Path_4724" data-name="Path 4724" d="M140.909,14.5l-1.678-1.957a7.078,7.078,0,0,0,1.849-4.7c0-4.322-4.155-7.838-9.263-7.838-4.618,0-8.542,2.878-9.235,6.624a13.184,13.184,0,0,1,4.2-.687c6.24,0,11.366,4.358,11.441,9.738h2.144A.713.713,0,0,0,140.909,14.5Z" transform="translate(-122.583 -0.006)" fill="#818181"/> <path id="Path_13685" data-name="Path 13685" d="M92.729,301a1.732,1.732,0,1,0,1.732,1.732A1.734,1.734,0,0,0,92.729,301Z" transform="translate(-90.997 -300.999)" fill="#989898"/>
</g>
</g>
<g id="Group_8676" data-name="Group 8676" transform="translate(10.448 17.383)">
<g id="Group_8675" data-name="Group 8675">
<path id="Path_13686" data-name="Path 13686" d="M182.726,301a1.732,1.732,0,1,0,1.732,1.732A1.734,1.734,0,0,0,182.726,301Z" transform="translate(-180.994 -300.999)" fill="#989898"/>
</g>
</g>
<g id="Group_8678" data-name="Group 8678" transform="translate(15.644 17.383)">
<g id="Group_8677" data-name="Group 8677">
<path id="Path_13687" data-name="Path 13687" d="M272.723,301a1.732,1.732,0,1,0,1.732,1.732A1.734,1.734,0,0,0,272.723,301Z" transform="translate(-270.991 -300.999)" fill="#989898"/>
</g> </g>
</g> </g>
</g> </g>

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

@ -1,57 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.616,14.4,32,32,32h320c17.6,0,32-14.384,32-32V128L352,0H128z
"/>
<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/>
<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/>
<path style="fill:#50BEE8;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16
V416z"/>
<g>
<path style="fill:#FFFFFF;" d="M117.184,327.84v47.344c0,5.632-4.592,8.832-9.216,8.832c-4.096,0-7.664-3.2-7.664-8.832v-72.032
c0-6.64,5.632-8.832,7.664-8.832c3.712,0,5.888,2.192,8.064,4.608l28.16,38l29.152-39.408c4.24-5.248,14.592-3.2,14.592,5.632
v72.032c0,5.632-3.6,8.832-7.68,8.832c-4.592,0-8.192-3.2-8.192-8.832V327.84l-21.232,26.88c-4.592,5.632-10.352,5.632-14.576,0
L117.184,327.84z"/>
<path style="fill:#FFFFFF;" d="M210.288,303.152c0-4.224,3.328-8.832,8.704-8.832h29.552c16.64,0,31.616,11.136,31.616,32.496
c0,20.224-14.976,31.472-31.616,31.472h-21.36v16.896c0,5.632-3.584,8.832-8.192,8.832c-4.224,0-8.704-3.2-8.704-8.832V303.152z
M227.168,310.448v31.856h21.36c8.576,0,15.36-7.552,15.36-15.488c0-8.96-6.784-16.368-15.36-16.368L227.168,310.448
L227.168,310.448z"/>
<path style="fill:#FFFFFF;" d="M322.064,311.472h-21.872c-10.736,0-10.096-15.984,0-15.984h39.152c7.792,0,11.376,8.96,5.632,14.72
l-21.232,19.824c15.616-1.152,27.888,10.48,27.888,24.816c0,15.728-11.136,29.168-34.544,29.168
c-10.24,0-20.336-4.224-26.224-13.44c-6.144-9.072,7.024-17.776,13.936-8.832c3.328,4.352,8.704,6.528,14.448,6.528
c7.808,0,15.488-3.328,15.488-13.44c0-13.296-16.256-11.248-25.072-10.352c-10.752,2.048-13.936-9.6-7.664-14.448L322.064,311.472z
"/>
</g>
<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

@ -1,5 +1,7 @@
<svg id="interview_4_" data-name="interview (4)" xmlns="http://www.w3.org/2000/svg" width="25.9" height="25.9" viewBox="0 0 25.9 25.9"> <svg id="interview_3_" data-name="interview (3)" xmlns="http://www.w3.org/2000/svg" width="27.258" height="27.258" viewBox="0 0 27.258 27.258">
<path id="Path_4711" data-name="Path 4711" d="M205.751,0H196a3.2,3.2,0,0,0-3.2,3.2v14.63a.759.759,0,0,0,1.214.607l3.049-2.286h8.687a3.2,3.2,0,0,0,3.2-3.2V3.2A3.2,3.2,0,0,0,205.751,0Zm-5.635,12.084h-3.3a.759.759,0,1,1,0-1.518h3.3a.759.759,0,1,1,0,1.518Zm4.823-3.251h-8.128a.759.759,0,1,1,0-1.518h8.128a.759.759,0,1,1,0,1.518Zm0-3.251h-8.128a.759.759,0,1,1,0-1.518h8.128a.759.759,0,1,1,0,1.518Zm0,0" transform="translate(-183.048)" fill="#818181"/> <path id="Path_4667" data-name="Path 4667" d="M7.663,248.55a4.22,4.22,0,1,0-5.175,0A5.07,5.07,0,0,0,0,252.918v1.711a.8.8,0,0,0,.8.8H9.352a.8.8,0,0,0,.8-.8v-1.711A5.07,5.07,0,0,0,7.663,248.55Zm-5.21-3.33a2.623,2.623,0,1,1,2.623,2.623A2.626,2.626,0,0,1,2.452,245.22Zm6.1,8.61H1.6v-.912a3.478,3.478,0,1,1,6.956,0v.912Zm0,0" transform="translate(0 -228.17)" fill="#989898"/>
<path id="Path_4712" data-name="Path 4712" d="M31.6,244.575a3.587,3.587,0,1,1-3.587-3.587A3.587,3.587,0,0,1,31.6,244.575Zm0,0" transform="translate(-23.19 -228.797)" fill="#818181"/> <path id="Path_4668" data-name="Path 4668" d="M206.43,0H196.165A3.363,3.363,0,0,0,192.8,3.365v15.4a.8.8,0,0,0,1.278.639l3.208-2.406h9.143a3.363,3.363,0,0,0,3.365-3.365V3.365A3.363,3.363,0,0,0,206.43,0ZM208.2,13.629A1.766,1.766,0,0,1,206.43,15.4h-9.409a.8.8,0,0,0-.479.16L194.4,17.164V3.365A1.766,1.766,0,0,1,196.165,1.6H206.43A1.766,1.766,0,0,1,208.2,3.365Zm0,0" transform="translate(-182.536 0)" fill="#989898"/>
<path id="Path_4713" data-name="Path 4713" d="M4.823,382.8A4.823,4.823,0,0,0,0,387.627v.954a.759.759,0,0,0,.759.759H8.886a.759.759,0,0,0,.759-.759v-.954A4.823,4.823,0,0,0,4.823,382.8Zm0,0" transform="translate(0 -363.44)" fill="#818181"/> <path id="Path_4669" data-name="Path 4669" d="M266.419,80.332h-8.554a.8.8,0,1,0,0,1.6h8.554a.8.8,0,0,0,0-1.6Zm0,0" transform="translate(-243.381 -76.055)" fill="#989898"/>
<path id="Path_4670" data-name="Path 4670" d="M266.419,144.6h-8.554a.8.8,0,1,0,0,1.6h8.554a.8.8,0,0,0,0-1.6Zm0,0" transform="translate(-243.381 -136.903)" fill="#989898"/>
<path id="Path_4671" data-name="Path 4671" d="M262.142,208.867h-4.277a.8.8,0,1,0,0,1.6h4.277a.8.8,0,1,0,0-1.6Zm0,0" transform="translate(-243.381 -197.747)" fill="#989898"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1018 B

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -1,7 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="25.898" height="25.9" viewBox="0 0 25.898 25.9"> <svg xmlns="http://www.w3.org/2000/svg" width="25.898" height="25.9" viewBox="0 0 25.898 25.9">
<g id="home_12_" data-name="home (12)" transform="translate(-0.021)"> <g id="home_12_" data-name="home (12)" transform="translate(-0.022)">
<path id="Path_4683" data-name="Path 4683" d="M351.362.759A.759.759,0,0,0,350.6,0h-3.251a.759.759,0,0,0-.759.759v.687l4.769,4.769Z" transform="translate(-329.039 0)" fill="#818181"/> <path id="Path_4683" data-name="Path 4683" d="M351.362.759A.759.759,0,0,0,350.6,0h-3.251a.759.759,0,0,0-.759.759v.687l4.769,4.769Z" transform="translate(-329.039 0)" fill="#2e303a"/>
<path id="Path_4684" data-name="Path 4684" d="M25.221,11.259,14.661.7A2.391,2.391,0,0,0,11.28.7L.721,11.26A2.391,2.391,0,1,0,4.1,14.641l8.869-8.869,8.869,8.869a2.375,2.375,0,0,0,1.69.7h0a2.391,2.391,0,0,0,1.691-4.081Z" fill="#818181"/> <path id="Path_4684" data-name="Path 4684" d="M25.221,11.259,14.661.7A2.391,2.391,0,0,0,11.28.7L.721,11.26A2.391,2.391,0,1,0,4.1,14.641l8.869-8.869,8.869,8.869a2.375,2.375,0,0,0,1.69.7h0a2.391,2.391,0,0,0,1.691-4.081Z" fill="#2e303a"/>
<path id="Path_4685" data-name="Path 4685" d="M65.238,156.525l-7.8,7.8a3.878,3.878,0,0,1-2.369,1.125v6.271a2.794,2.794,0,0,0,2.791,2.791H62.8a.759.759,0,0,0,.759-.759v-5.743h3.359v5.743a.759.759,0,0,0,.759.759h4.935a2.794,2.794,0,0,0,2.791-2.791v-6.271a3.879,3.879,0,0,1-2.368-1.125Z" transform="translate(-52.267 -148.607)" fill="#818181"/> <path id="Path_4685" data-name="Path 4685" d="M65.238,156.525l-7.8,7.8a3.878,3.878,0,0,1-2.369,1.125v6.271a2.794,2.794,0,0,0,2.791,2.791H62.8a.759.759,0,0,0,.759-.759v-5.743h3.359v5.743a.759.759,0,0,0,.759.759h4.935a2.794,2.794,0,0,0,2.791-2.791v-6.271a3.879,3.879,0,0,1-2.368-1.125Z" transform="translate(-52.267 -148.607)" fill="#2e303a"/>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 955 B

After

Width:  |  Height:  |  Size: 955 B

@ -1,11 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="23.893" height="22.83" viewBox="0 0 23.893 22.83"> <svg xmlns="http://www.w3.org/2000/svg" width="25.974" height="24.23" viewBox="0 0 25.974 24.23">
<g id="shipping_3_" data-name="shipping (3)" transform="translate(0 -11.379)"> <path id="shipping_2_" data-name="shipping (2)" d="M23.959,29.714V17.886a.764.764,0,0,0-.764-.764H2.724a.764.764,0,0,0-.764.764V30.657A2.294,2.294,0,0,0,.512,34.381l3.442,4.172c2.13,2.493,4.393,2.8,7.758,2.8a25.054,25.054,0,0,0,6.694-.561l2.45-.586a2.138,2.138,0,0,0,1.737.914H23.8a2.238,2.238,0,0,0,2.175-2.291V32A2.248,2.248,0,0,0,23.959,29.714Zm-3.434,1.572-1.018-.517a6.053,6.053,0,0,0-5.309-.086,7.3,7.3,0,0,1-2,.774H8.664a2.128,2.128,0,0,0-2.125,2.125v.557l-.02-.021L4,31.381a2.327,2.327,0,0,0-.508-.416v-7.58H9.741v2.8a.764.764,0,0,0,.764.764h4.821a.764.764,0,0,0,.764-.764v-2.8h6.341v6.329A2.2,2.2,0,0,0,20.525,31.286Zm-9.256-7.9h3.293v2.037H11.269Zm11.162-1.528H16.091V18.65h6.341v3.206ZM14.563,18.65v3.206H11.269V18.65Zm-4.821,0v3.206H3.488V18.65ZM18.05,39.3a24.308,24.308,0,0,1-6.312.511c-3.158,0-4.684-.051-6.606-2.235L1.691,33.408a.773.773,0,0,1,1.182-.993L5.4,35.154a3.469,3.469,0,0,0,2.54,1.113h6.994a.764.764,0,0,0,0-1.528H8.067V33.582a.6.6,0,0,1,.6-.6H12.2a6.994,6.994,0,0,0,2.645-.917,4.533,4.533,0,0,1,3.975.063l1.6.813v5.794Zm6.4-.477a.713.713,0,0,1-.647.763H22.592a.713.713,0,0,1-.647-.763V32a.713.713,0,0,1,.647-.763H23.8a.713.713,0,0,1,.647.763Z" transform="translate(0.001 -17.122)" fill="#989898"/>
<path id="Path_4716" data-name="Path 4716" d="M217.941,11.378h3.429v4.135h-3.429Z" transform="translate(-207.769)" fill="#818181"/>
<path id="Path_4717" data-name="Path 4717" d="M217.941,134.067h3.429v2.121h-3.429Z" transform="translate(-207.769 -116.963)" fill="#818181"/>
<path id="Path_4718" data-name="Path 4718" d="M27.275,134.067v7.59a2.406,2.406,0,0,1,1.325.737l2.627,2.852.021.021v-.58a2.216,2.216,0,0,1,2.213-2.213H37.14a7.7,7.7,0,0,0,2.083-.806,6.3,6.3,0,0,1,5.529.089l1.06.539a2.283,2.283,0,0,1,2.152-1.644h.629v-6.584h-7.4v2.917a.8.8,0,0,1-.8.8H35.378a.8.8,0,0,1-.8-.8v-2.917Z" transform="translate(-26.002 -116.963)" fill="#818181"/>
<path id="Path_4719" data-name="Path 4719" d="M325.521,15.513h7.4V12.482a1.023,1.023,0,0,0-.917-1.1h-6.482Z" transform="translate(-310.328)" fill="#818181"/>
<path id="Path_4720" data-name="Path 4720" d="M456.823,309.24a.742.742,0,0,0-.673.794v7.113a.742.742,0,0,0,.673.795h1.257a.742.742,0,0,0,.673-.795v-7.113a.742.742,0,0,0-.673-.794Z" transform="translate(-434.861 -283.961)" fill="#818181"/>
<path id="Path_4721" data-name="Path 4721" d="M34.582,11.378H28.037a.851.851,0,0,0-.762.917v3.217h7.307Z" transform="translate(-26.002)" fill="#818181"/>
<path id="Path_4722" data-name="Path 4722" d="M1.428,319.1c-.7-.7-1.9.216-1.231,1.034l3.584,4.345A6.361,6.361,0,0,0,8.7,326.795h4.054a19.348,19.348,0,0,0,4.475-.525l2.465-.59v-6.034l-1.666-.846a4.72,4.72,0,0,0-4.139-.066l-1.417.659a3.193,3.193,0,0,1-1.337.3H7.459a.622.622,0,0,0-.622.622v1.205h7.146a.8.8,0,1,1,0,1.591H6.7a3.66,3.66,0,0,1-2.645-1.16Z" transform="translate(0 -292.586)" fill="#818181"/>
</g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -1,6 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg" width="19.729" height="25.9" viewBox="0 0 19.729 25.9"> <svg xmlns="http://www.w3.org/2000/svg" width="21.12" height="26.881" viewBox="0 0 21.12 26.881">
<g id="to-do-list_1_" data-name="to-do-list (1)" transform="translate(-61)"> <g id="clipboard_5_" data-name="clipboard (5)" transform="translate(-47.037 0)">
<path id="Path_4714" data-name="Path 4714" d="M80.064,30.668A2.258,2.258,0,0,0,78.455,30H77.446v1.012a2.025,2.025,0,0,1-2.021,2.023h-9.1a2.025,2.025,0,0,1-2.021-2.023V30H63.3a2.278,2.278,0,0,0-2.274,2.274L61,52.1a2.275,2.275,0,0,0,2.274,2.279H78.433a2.278,2.278,0,0,0,2.274-2.274l.022-19.83A2.263,2.263,0,0,0,80.064,30.668Zm-8.942,6.92h5.385a.759.759,0,0,1,0,1.518H71.122a.759.759,0,0,1,0-1.518Zm0,5.059h5.385a.759.759,0,0,1,0,1.518H71.122a.759.759,0,0,1,0-1.518Zm0,5.059h5.407a.759.759,0,0,1,0,1.518H71.122a.759.759,0,0,1,0-1.518ZM64.664,37.618a.757.757,0,0,1,1.072,0l.412.413,1.748-1.75a.758.758,0,1,1,1.072,1.073L66.684,39.64a.757.757,0,0,1-1.072,0l-.948-.949a.759.759,0,0,1,0-1.073Zm0,5.445a.757.757,0,0,1,1.072,0l.412.413,1.748-1.75A.758.758,0,0,1,68.968,42.8l-2.284,2.286a.757.757,0,0,1-1.072,0l-.948-.949A.759.759,0,0,1,64.664,43.063Zm0,5.059a.757.757,0,0,1,1.072,0l.412.413,1.748-1.75a.758.758,0,1,1,1.072,1.073l-2.284,2.286a.757.757,0,0,1-1.072,0l-.948-.949A.759.759,0,0,1,64.664,48.122Z" transform="translate(0 -28.482)" fill="#818181"/> <g id="Group_7687" data-name="Group 7687" transform="translate(47.037 0)">
<path id="Path_4715" data-name="Path 4715" d="M156.361,2.529a.506.506,0,0,0,.505.506h9.1a.506.506,0,0,0,.505-.506V.506A.506.506,0,0,0,165.962,0h-9.1a.506.506,0,0,0-.505.506Z" transform="translate(-90.537)" fill="#818181"/> <g id="Group_7686" data-name="Group 7686" transform="translate(0 0)">
<path id="Path_4672" data-name="Path 4672" d="M65.469,3.522H63.037V2.434c0-.352-.384-.512-.736-.512H60.413A2.862,2.862,0,0,0,57.565,0a2.912,2.912,0,0,0-2.848,1.92H52.861c-.352,0-.7.16-.7.512V3.522H49.725a2.72,2.72,0,0,0-2.688,2.592V24.45a2.575,2.575,0,0,0,2.688,2.432H65.469a2.575,2.575,0,0,0,2.688-2.432V6.114A2.72,2.72,0,0,0,65.469,3.522ZM53.437,3.2H55.2a.7.7,0,0,0,.608-.576,1.856,1.856,0,0,1,1.76-1.44,1.824,1.824,0,0,1,1.728,1.44.7.7,0,0,0,.64.576h1.824v2.56h-8.32ZM66.877,24.45A1.3,1.3,0,0,1,65.469,25.6H49.725a1.3,1.3,0,0,1-1.408-1.152V6.114A1.44,1.44,0,0,1,49.725,4.8h2.432V6.434a.672.672,0,0,0,.7.608H62.3a.7.7,0,0,0,.736-.608V4.8h2.432a1.44,1.44,0,0,1,1.408,1.312V24.45Z" transform="translate(-47.037 0)" fill="#989898"/>
<path id="Path_4673" data-name="Path 4673" d="M104.271,230.511a.64.64,0,0,0-.9-.032l-2.048,1.952-.864-.9a.64.64,0,0,0-.9-.032.672.672,0,0,0,0,.928l1.312,1.344a.576.576,0,0,0,.448.192.64.64,0,0,0,.448-.192l2.5-2.368a.608.608,0,0,0,.037-.859C104.3,230.535,104.283,230.523,104.271,230.511Z" transform="translate(-96.175 -216.205)" fill="#989898"/>
<path id="Path_4674" data-name="Path 4674" d="M206.548,256.034h-7.36a.64.64,0,0,0,0,1.28h7.36a.64.64,0,1,0,0-1.28Z" transform="translate(-189.268 -240.352)" fill="#989898"/>
<path id="Path_4675" data-name="Path 4675" d="M104.271,146.919a.64.64,0,0,0-.9-.032l-2.048,1.952-.864-.9a.64.64,0,0,0-.9-.032.672.672,0,0,0,0,.928l1.312,1.344a.576.576,0,0,0,.448.192.64.64,0,0,0,.448-.192l2.5-2.368a.608.608,0,0,0,.037-.859C104.3,146.943,104.283,146.931,104.271,146.919Z" transform="translate(-96.175 -137.733)" fill="#989898"/>
<path id="Path_4676" data-name="Path 4676" d="M206.548,172.442h-7.36a.64.64,0,0,0,0,1.28h7.36a.64.64,0,1,0,0-1.28Z" transform="translate(-189.268 -161.88)" fill="#989898"/>
<path id="Path_4677" data-name="Path 4677" d="M104.271,314.1a.64.64,0,0,0-.9-.032l-2.048,1.952-.864-.9a.64.64,0,0,0-.9-.032.672.672,0,0,0,0,.928l1.312,1.344a.576.576,0,0,0,.448.192.64.64,0,0,0,.448-.192l2.5-2.368a.608.608,0,0,0,.037-.859C104.3,314.126,104.283,314.114,104.271,314.1Z" transform="translate(-96.175 -294.677)" fill="#989898"/>
<path id="Path_4678" data-name="Path 4678" d="M206.548,339.626h-7.36a.64.64,0,0,0,0,1.28h7.36a.64.64,0,1,0,0-1.28Z" transform="translate(-189.268 -318.824)" fill="#989898"/>
</g>
</g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 732 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 702 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 610 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 518 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

@ -1,522 +0,0 @@
[
{
"id": "b8f10b10-221c-495d-b99b-6a8094892549",
"titleEn": "How many time Uruguay won FIFA World Cups?",
"titleAr": "How many time Uruguay won FIFA World Cups?",
"marathonId": "979813be-eafa-4d3e-d27e-08dae8a08a3b",
"questionTypeId": 1,
"questionTime": 10,
"nextQuestGap": 5,
"gapType": 0,
"gapText": null,
"gapImage": "Questions/51b598b6-c837-45be-8734-1374978bd426_congratulations-gif.gif",
"questOptionsLimit": 0,
"remainingParticipantCount": 1,
"questionOptions": [
{
"id": "772e6062-543c-4ddc-e516-08dae8b36b35",
"titleEn": "1",
"titleAr": "1",
"questionId": "b8f10b10-221c-495d-b99b-6a8094892549",
"sequence": 1,
"image": "null",
"isCorrectOption": false
},
{
"id": "ea3c673e-78c7-41dd-e517-08dae8b36b35",
"titleEn": "2",
"titleAr": "2",
"questionId": "b8f10b10-221c-495d-b99b-6a8094892549",
"sequence": 3,
"image": "null",
"isCorrectOption": true
},
{
"id": "7adbdfec-ef77-417e-e518-08dae8b36b35",
"titleEn": "3",
"titleAr": "3",
"questionId": "b8f10b10-221c-495d-b99b-6a8094892549",
"sequence": 2,
"image": "null",
"isCorrectOption": false
},
{
"id": "895eab85-e321-4d3e-e519-08dae8b36b35",
"titleEn": "4",
"titleAr": "4",
"questionId": "b8f10b10-221c-495d-b99b-6a8094892549",
"sequence": 4,
"image": "null",
"isCorrectOption": false
}
]
},
{
"id": "0d60d55f-4067-48f9-9ace-b6309c6a7cf0",
"titleEn": "Who is the current FIFA World Cup Winner?",
"titleAr": "Who is the current FIFA World Cup Winner?",
"marathonId": "979813be-eafa-4d3e-d27e-08dae8a08a3b",
"questionTypeId": 1,
"questionTime": 10,
"nextQuestGap": 5,
"gapType": 0,
"gapText": null,
"gapImage": "Questions/24dddc50-7583-48b4-9fec-8a490d246191_great-thumbs.gif",
"questOptionsLimit": 0,
"remainingParticipantCount": 0,
"questionOptions": [
{
"id": "dd0ba127-26ed-4308-e50e-08dae8b36b35",
"titleEn": "Brazil",
"titleAr": "Brazil",
"questionId": "0d60d55f-4067-48f9-9ace-b6309c6a7cf0",
"sequence": 1,
"image": "null",
"isCorrectOption": false
},
{
"id": "4748df31-95f0-4fee-e50f-08dae8b36b35",
"titleEn": "Argentina",
"titleAr": "Argentina",
"questionId": "0d60d55f-4067-48f9-9ace-b6309c6a7cf0",
"sequence": 4,
"image": "null",
"isCorrectOption": true
},
{
"id": "4079d32a-891b-4e83-e510-08dae8b36b35",
"titleEn": "Germany",
"titleAr": "Germany",
"questionId": "0d60d55f-4067-48f9-9ace-b6309c6a7cf0",
"sequence": 3,
"image": "null",
"isCorrectOption": false
},
{
"id": "1c17cfcd-9f19-4020-e511-08dae8b36b35",
"titleEn": "France",
"titleAr": "France",
"questionId": "0d60d55f-4067-48f9-9ace-b6309c6a7cf0",
"sequence": 2,
"image": "null",
"isCorrectOption": false
}
]
},
{
"id": "489659b0-0400-4b64-8ce2-e6fe48db61db",
"titleEn": "How many times England won FIFA World Cups?",
"titleAr": "How many times England won FIFA World Cups?",
"marathonId": "979813be-eafa-4d3e-d27e-08dae8a08a3b",
"questionTypeId": 1,
"questionTime": 10,
"nextQuestGap": 5,
"gapType": 0,
"gapText": null,
"gapImage": "Questions/a9ffa364-231c-4877-824f-84febac51086_thumbs-up-simon-cowell.gif",
"questOptionsLimit": 0,
"remainingParticipantCount": 0,
"questionOptions": [
{
"id": "7f63cd45-ce2c-417f-e502-08dae8b36b35",
"titleEn": "1",
"titleAr": "1",
"questionId": "489659b0-0400-4b64-8ce2-e6fe48db61db",
"sequence": 1,
"image": "null",
"isCorrectOption": true
},
{
"id": "34690bfa-0ffd-453f-e503-08dae8b36b35",
"titleEn": "2",
"titleAr": "2",
"questionId": "489659b0-0400-4b64-8ce2-e6fe48db61db",
"sequence": 2,
"image": "null",
"isCorrectOption": false
},
{
"id": "4526efdd-ff6f-4340-e504-08dae8b36b35",
"titleEn": "3",
"titleAr": "3",
"questionId": "489659b0-0400-4b64-8ce2-e6fe48db61db",
"sequence": 3,
"image": "null",
"isCorrectOption": false
},
{
"id": "65d06188-fa63-49fd-e505-08dae8b36b35",
"titleEn": "4",
"titleAr": "4",
"questionId": "489659b0-0400-4b64-8ce2-e6fe48db61db",
"sequence": 4,
"image": "null",
"isCorrectOption": false
}
]
},
{
"id": "253fc396-dab9-41ca-82bd-511f98c5dee8",
"titleEn": "How many time Germany won FIFA World Cups?",
"titleAr": "How many time Germany won FIFA World Cups?",
"marathonId": "979813be-eafa-4d3e-d27e-08dae8a08a3b",
"questionTypeId": 1,
"questionTime": 10,
"nextQuestGap": 5,
"gapType": 0,
"gapText": null,
"gapImage": "Questions/012d6493-3612-42c9-8f6f-84417d4736d4_good-job-well-done.gif",
"questOptionsLimit": 0,
"remainingParticipantCount": 0,
"questionOptions": [
{
"id": "dce4999c-5629-45f4-e4f6-08dae8b36b35",
"titleEn": "1",
"titleAr": "1",
"questionId": "253fc396-dab9-41ca-82bd-511f98c5dee8",
"sequence": 1,
"image": "null",
"isCorrectOption": false
},
{
"id": "00913ba1-5ccc-4d7c-e4f7-08dae8b36b35",
"titleEn": "2",
"titleAr": "2",
"questionId": "253fc396-dab9-41ca-82bd-511f98c5dee8",
"sequence": 2,
"image": "null",
"isCorrectOption": false
},
{
"id": "9e5f5e89-608e-4fc9-e4f8-08dae8b36b35",
"titleEn": "3",
"titleAr": "3",
"questionId": "253fc396-dab9-41ca-82bd-511f98c5dee8",
"sequence": 3,
"image": "null",
"isCorrectOption": false
},
{
"id": "a535cacf-ee4d-4895-e4f9-08dae8b36b35",
"titleEn": "4",
"titleAr": "4",
"questionId": "253fc396-dab9-41ca-82bd-511f98c5dee8",
"sequence": 4,
"image": "null",
"isCorrectOption": true
}
]
},
{
"id": "669c4fe2-a3e6-4e29-8c56-ae09efa9ba6c",
"titleEn": "How many times Portugal won FIFA World Cups?",
"titleAr": "How many times Portugal won FIFA World Cups?",
"marathonId": "979813be-eafa-4d3e-d27e-08dae8a08a3b",
"questionTypeId": 1,
"questionTime": 10,
"nextQuestGap": 5,
"gapType": 0,
"gapText": null,
"gapImage": "Questions/ca3f32a1-ed9f-45df-b2fb-3d1df78d5651_congrats-14.gif",
"questOptionsLimit": 0,
"remainingParticipantCount": 0,
"questionOptions": [
{
"id": "597c308e-3f09-4a05-e506-08dae8b36b35",
"titleEn": "0",
"titleAr": "0",
"questionId": "669c4fe2-a3e6-4e29-8c56-ae09efa9ba6c",
"sequence": 1,
"image": "null",
"isCorrectOption": true
},
{
"id": "2face927-7c8e-4945-e507-08dae8b36b35",
"titleEn": "1",
"titleAr": "1",
"questionId": "669c4fe2-a3e6-4e29-8c56-ae09efa9ba6c",
"sequence": 2,
"image": "null",
"isCorrectOption": false
},
{
"id": "bde21640-798e-4750-e508-08dae8b36b35",
"titleEn": "2",
"titleAr": "2",
"questionId": "669c4fe2-a3e6-4e29-8c56-ae09efa9ba6c",
"sequence": 3,
"image": "null",
"isCorrectOption": false
},
{
"id": "9312acac-f0c3-4ed4-e509-08dae8b36b35",
"titleEn": "3",
"titleAr": "3",
"questionId": "669c4fe2-a3e6-4e29-8c56-ae09efa9ba6c",
"sequence": 4,
"image": "null",
"isCorrectOption": false
}
]
},
{
"id": "f91774ce-14f0-4af0-9a77-e649bc013b44",
"titleEn": "How many times Spain won FIFA World Cups?",
"titleAr": "How many times Spain won FIFA World Cups?",
"marathonId": "979813be-eafa-4d3e-d27e-08dae8a08a3b",
"questionTypeId": 1,
"questionTime": 10,
"nextQuestGap": 5,
"gapType": 0,
"gapText": null,
"gapImage": "Questions/6484c5bc-09fd-4586-8036-67868afbe27b_good-job-well-done.gif",
"questOptionsLimit": 0,
"remainingParticipantCount": 0,
"questionOptions": [
{
"id": "2f968964-ce91-4478-e512-08dae8b36b35",
"titleEn": "1",
"titleAr": "1",
"questionId": "f91774ce-14f0-4af0-9a77-e649bc013b44",
"sequence": 1,
"image": "null",
"isCorrectOption": true
},
{
"id": "4fed9355-2c9f-458d-e513-08dae8b36b35",
"titleEn": "2",
"titleAr": "2",
"questionId": "f91774ce-14f0-4af0-9a77-e649bc013b44",
"sequence": 2,
"image": "null",
"isCorrectOption": false
},
{
"id": "8f232a43-3792-4cd0-e514-08dae8b36b35",
"titleEn": "3",
"titleAr": "3",
"questionId": "f91774ce-14f0-4af0-9a77-e649bc013b44",
"sequence": 3,
"image": "null",
"isCorrectOption": false
},
{
"id": "24478e43-bf4c-4852-e515-08dae8b36b35",
"titleEn": "4",
"titleAr": "4",
"questionId": "f91774ce-14f0-4af0-9a77-e649bc013b44",
"sequence": 4,
"image": "null",
"isCorrectOption": false
}
]
},
{
"id": "fd3a90e6-5b35-4035-bc1c-4483facaf6d3",
"titleEn": "How many times France won FIFA World Cups?",
"titleAr": "How many times France won FIFA World Cups?",
"marathonId": "979813be-eafa-4d3e-d27e-08dae8a08a3b",
"questionTypeId": 1,
"questionTime": 10,
"nextQuestGap": 5,
"gapType": 0,
"gapText": null,
"gapImage": "Questions/24dddc50-7583-48b4-9fec-8a490d246191_great-thumbs.gif",
"questOptionsLimit": 0,
"remainingParticipantCount": 0,
"questionOptions": [
{
"id": "9d0743e0-9f3f-48d0-e4fa-08dae8b36b35",
"titleEn": "1",
"titleAr": "1",
"questionId": "fd3a90e6-5b35-4035-bc1c-4483facaf6d3",
"sequence": 1,
"image": "null",
"isCorrectOption": false
},
{
"id": "a81eda99-d9ad-49e0-e4fb-08dae8b36b35",
"titleEn": "2",
"titleAr": "2",
"questionId": "fd3a90e6-5b35-4035-bc1c-4483facaf6d3",
"sequence": 2,
"image": "null",
"isCorrectOption": true
},
{
"id": "7ca78891-890d-4023-e4fc-08dae8b36b35",
"titleEn": "3",
"titleAr": "3",
"questionId": "fd3a90e6-5b35-4035-bc1c-4483facaf6d3",
"sequence": 3,
"image": "null",
"isCorrectOption": false
},
{
"id": "d1a98bd9-8afa-49c1-e4fd-08dae8b36b35",
"titleEn": "4",
"titleAr": "4",
"questionId": "fd3a90e6-5b35-4035-bc1c-4483facaf6d3",
"sequence": 4,
"image": "null",
"isCorrectOption": false
}
]
},
{
"id": "3a35855d-3ed7-4d45-8864-9135d71378de",
"titleEn": "How many time Argentina won FIFA World Cups?",
"titleAr": "How many time Argentina won FIFA World Cups?",
"marathonId": "979813be-eafa-4d3e-d27e-08dae8a08a3b",
"questionTypeId": 1,
"questionTime": 10,
"nextQuestGap": 5,
"gapType": 0,
"gapText": null,
"gapImage": "Questions/24dddc50-7583-48b4-9fec-8a490d246191_great-thumbs.gif",
"questOptionsLimit": 0,
"remainingParticipantCount": 0,
"questionOptions": [
{
"id": "f0766816-837f-47e6-e51a-08dae8b36b35",
"titleEn": "1",
"titleAr": "1",
"questionId": "3a35855d-3ed7-4d45-8864-9135d71378de",
"sequence": 1,
"image": "null",
"isCorrectOption": false
},
{
"id": "dc9c68de-afa4-4b63-e51b-08dae8b36b35",
"titleEn": "2",
"titleAr": "2",
"questionId": "3a35855d-3ed7-4d45-8864-9135d71378de",
"sequence": 2,
"image": "null",
"isCorrectOption": false
},
{
"id": "52f2d024-8a29-4781-e51c-08dae8b36b35",
"titleEn": "3",
"titleAr": "3",
"questionId": "3a35855d-3ed7-4d45-8864-9135d71378de",
"sequence": 3,
"image": "null",
"isCorrectOption": true
},
{
"id": "122636e4-5e98-499e-e51d-08dae8b36b35",
"titleEn": "4",
"titleAr": "4",
"questionId": "3a35855d-3ed7-4d45-8864-9135d71378de",
"sequence": 4,
"image": "null",
"isCorrectOption": false
}
]
},
{
"id": "6c9d809d-683b-4d77-b98e-62a0d083488a",
"titleEn": "How many times Brazil won FIFA World Cups?",
"titleAr": "How many times Brazil won FIFA World Cups?",
"marathonId": "979813be-eafa-4d3e-d27e-08dae8a08a3b",
"questionTypeId": 1,
"questionTime": 10,
"nextQuestGap": 5,
"gapType": 0,
"gapText": null,
"gapImage": "Questions/a9ffa364-231c-4877-824f-84febac51086_thumbs-up-simon-cowell.gif",
"questOptionsLimit": 0,
"remainingParticipantCount": 0,
"questionOptions": [
{
"id": "4e94437a-b10d-46c6-e4fe-08dae8b36b35",
"titleEn": "2",
"titleAr": "2",
"questionId": "6c9d809d-683b-4d77-b98e-62a0d083488a",
"sequence": 1,
"image": "null",
"isCorrectOption": false
},
{
"id": "6e0e8baa-c13e-45f1-e4ff-08dae8b36b35",
"titleEn": "3",
"titleAr": "3",
"questionId": "6c9d809d-683b-4d77-b98e-62a0d083488a",
"sequence": 2,
"image": "null",
"isCorrectOption": false
},
{
"id": "3065d26a-9aa4-4626-e500-08dae8b36b35",
"titleEn": "4",
"titleAr": "4",
"questionId": "6c9d809d-683b-4d77-b98e-62a0d083488a",
"sequence": 3,
"image": "null",
"isCorrectOption": false
},
{
"id": "6cc3ff60-02cc-4e59-e501-08dae8b36b35",
"titleEn": "5",
"titleAr": "5",
"questionId": "6c9d809d-683b-4d77-b98e-62a0d083488a",
"sequence": 4,
"image": "null",
"isCorrectOption": true
}
]
},
{
"id": "e8c8442e-f370-444d-bee9-f7f75d146e5c",
"titleEn": "How many times Italy won FIFA World Cups?",
"titleAr": "How many times Italy won FIFA World Cups?",
"marathonId": "979813be-eafa-4d3e-d27e-08dae8a08a3b",
"questionTypeId": 1,
"questionTime": 10,
"nextQuestGap": 5,
"gapType": 0,
"gapText": null,
"gapImage": "Questions/34f3c402-1244-4320-98c2-751cb2a347c5_congrats-1.gif",
"questOptionsLimit": 0,
"remainingParticipantCount": 0,
"questionOptions": [
{
"id": "53d456b7-8f56-4c58-e50a-08dae8b36b35",
"titleEn": "1",
"titleAr": "1",
"questionId": "e8c8442e-f370-444d-bee9-f7f75d146e5c",
"sequence": 1,
"image": "null",
"isCorrectOption": false
},
{
"id": "280df6d7-ca61-4d78-e50b-08dae8b36b35",
"titleEn": "2",
"titleAr": "2",
"questionId": "e8c8442e-f370-444d-bee9-f7f75d146e5c",
"sequence": 2,
"image": "null",
"isCorrectOption": false
},
{
"id": "769939dc-4a46-4f4f-e50c-08dae8b36b35",
"titleEn": "3",
"titleAr": "3",
"questionId": "e8c8442e-f370-444d-bee9-f7f75d146e5c",
"sequence": 3,
"image": "null",
"isCorrectOption": false
},
{
"id": "c389fae7-0019-4922-e50d-08dae8b36b35",
"titleEn": "4",
"titleAr": "4",
"questionId": "e8c8442e-f370-444d-bee9-f7f75d146e5c",
"sequence": 4,
"image": "null",
"isCorrectOption": true
}
]
}
]

@ -1,46 +0,0 @@
{
"id": "979813be-eafa-4d3e-d27e-08dae8a08a3b",
"titleEn": "FIFA World Cup",
"titleAr": "undefined",
"descEn": "FIFA World Cup Description",
"descAr": "undefined",
"questionTime": 10,
"winDeciderTime": 30,
"winnersCount": 1,
"questGapTime": 5,
"startTime": "2022-12-28T10:44:41",
"endTime": null,
"marathoneStatusId": 4,
"scheduleTime": "2022-12-28T10:14:41",
"selectedLanguage": 0,
"projects": {
"id": "b1cd3fa3-bb27-422e-a4c1-08dac09254df",
"nameEn": "Cloud Solutions",
"nameAr": "333شركة حلول السحابة للاتصالات وتقنية المعلومات",
"projectCode": "CS"
},
"sponsors": [
{
"id": "3272b127-b388-4f09-425b-08dac2eb788e",
"nameEn": "Cloud Solutions",
"nameAr": "حل السحابة",
"image": "SponsorImage/b9aed4a8-42b2-45fc-b6f1-47ee0c7b4138_sponsor.jpeg",
"video": "SponsorVideo/9ab678ab-1b4c-4ea4-aaf2-32ce1353d3fe_sample-10s.mp4",
"logo": "SponsorLogo/eb029f0d-bce1-4a61-b0c0-abaa484912a0_sponsor.jpeg",
"videoDuration": null,
"sponsorPrizes": [
{
"id": "e657a18c-6fb2-4099-07c8-08dae89efcd3",
"marathonPrizeEn": "SAR 500",
"marathonPrizeAr": "SAR 500"
}
]
}
],
"questions": null,
"isEmailSent": false,
"totalQuestions": 10,
"cancelReason": null,
"marathonBufferTime": 30,
"currentTime": "2022-12-28T08:03:24.3671803Z"
}

@ -25,7 +25,6 @@
"checkIn": "تحقق في", "checkIn": "تحقق في",
"workList": "قائمة العمل", "workList": "قائمة العمل",
"leaveBalance": "رصيد الاجازات", "leaveBalance": "رصيد الاجازات",
"businessTripBalance": "رصيد رحلة العمل",
"missingSwipes": "تسجيل بصمة حضور", "missingSwipes": "تسجيل بصمة حضور",
"ticketBalance": "رصيد التذكرة", "ticketBalance": "رصيد التذكرة",
"other": "آخر", "other": "آخر",
@ -307,7 +306,6 @@
"actionBy": "الرد بواسطة", "actionBy": "الرد بواسطة",
"pending": "معلق", "pending": "معلق",
"pendingTransactions": "المعاملات المعلقه", "pendingTransactions": "المعاملات المعلقه",
"notices": "إشعارات",
"selectRequestType": "الرجاء اختيار نوع الطلب", "selectRequestType": "الرجاء اختيار نوع الطلب",
"dateFrom": "من تاريخ", "dateFrom": "من تاريخ",
"dateTo": "الى تاريخ", "dateTo": "الى تاريخ",
@ -426,9 +424,6 @@
"typeCurrentPasswordBelow": "اكتب كلمة المرور الحاليه", "typeCurrentPasswordBelow": "اكتب كلمة المرور الحاليه",
"currentPassword": "كلمة المرور الحاليه", "currentPassword": "كلمة المرور الحاليه",
"concurrentReports": "التقارير المتزامنه", "concurrentReports": "التقارير المتزامنه",
"EnterNewAddressMoved" : "أدخل عنوان جديد إذا كنت قد انتقلت",
"CorrectAddress": "تصحيح أو تعديل هذا العنوان",
"SelectChangeWantToMake": " حدد نوع التغيير الذي تريد القيام به.",
"profile": { "profile": {
"reset_password": { "reset_password": {
"label": "Reset Password", "label": "Reset Password",
@ -482,7 +477,6 @@
"gameTime": "وقت اللعب:", "gameTime": "وقت اللعب:",
"joinMarathon": "انضم إلى ماراثون", "joinMarathon": "انضم إلى ماراثون",
"joinDemoMarathon": "انضم إلى الماراثون التجريبي", "joinDemoMarathon": "انضم إلى الماراثون التجريبي",
"demo":"تجريبي",
"minutes": "الدقائق", "minutes": "الدقائق",
"seconds": "ثواني", "seconds": "ثواني",
"note": "ملحوظة:", "note": "ملحوظة:",
@ -492,11 +486,9 @@
"sponsoredBy": "برعاية:", "sponsoredBy": "برعاية:",
"question": "سؤال", "question": "سؤال",
"marathoners": "الماراثون", "marathoners": "الماراثون",
"marathoner": "ماراثونر",
"prize": "جائزة:", "prize": "جائزة:",
"winnerSelection": "اختيار الفائز", "winnerSelection": "اختيار الفائز",
"qualifiers": "تصفيات", "qualifiers": "تصفيات",
"qualifier": "المؤهل",
"getReadyForContest": "استعد للمسابقة القادمة:", "getReadyForContest": "استعد للمسابقة القادمة:",
"winnerSelectedRandomly": "سيتم اختيار الفائز عشوائياً من بين التصفيات.", "winnerSelectedRandomly": "سيتم اختيار الفائز عشوائياً من بين التصفيات.",
"fingersCrossed": "تشابك الاصابع!!!", "fingersCrossed": "تشابك الاصابع!!!",
@ -516,29 +508,5 @@
"winner": "الفائز", "winner": "الفائز",
"youWantToLeaveMarathon": "هل أنت متأكد أنك تريد العودة؟ سوف تخرج من المسابقة.", "youWantToLeaveMarathon": "هل أنت متأكد أنك تريد العودة؟ سوف تخرج من المسابقة.",
"ourSponsor": "راعينا:", "ourSponsor": "راعينا:",
"startingIn": "يبدأ في", "startingIn": "يبدأ في"
"youAreOutOfContest": "أنت خارج المسابقة.",
"winners": "الفائزين!!!",
"expireAfter":"تنتهي بعد",
"oneWeek":"أسبوع 1",
"twoWeek":"2 أسبوع",
"noUpcoming": "لا يوجد قادم",
"fakeLocation": ".لقد تتبعنا أنك تحاول استخدام موقع مزيف! يعتبر هذا مخالفة وقد تم إخطار الموارد البشرية",
"noWinner": "حزين! لم يفز أحد اليوم.",
"myTeam" : "فريقي",
"youCanPlayDemo": "لكن يمكنك لعب العرض",
"qualification": "مؤهلات",
"esteblishmentName": "اسم المؤسسة",
"gradeDescription": "وصف الصف",
"type": "يكتب",
"status": "حالة",
"leaveType": "نوع الإجازة",
"attendanceType": "نوع الحضور",
"help": "يساعد",
"dear": "عزيزي",
"assistant": "للحصول على المساعدة ، يمكنك تقديم الطلب على نظام سعيد أو الاتصال بمركز الاتصال الموحد على 8310200",
"employee_leaves_calender": "تقويم أوراق الموظفين",
"view_your_leave_information": "عرض معلومات إجازتك",
"view_details": "عرض التفاصيل",
"hierarchy": "تَسَلسُل"
} }

@ -25,7 +25,6 @@
"checkIn": "Check In", "checkIn": "Check In",
"workList": "Work List", "workList": "Work List",
"leaveBalance": "Leave Balance", "leaveBalance": "Leave Balance",
"businessTripBalance": "Business Trip Balance",
"missingSwipes": "Missing Swipes", "missingSwipes": "Missing Swipes",
"ticketBalance": "Ticket Balance", "ticketBalance": "Ticket Balance",
"other": "Other", "other": "Other",
@ -303,7 +302,6 @@
"topic": "Topic", "topic": "Topic",
"actionBy": "Action By", "actionBy": "Action By",
"pendingTransactions": "Pending Transactions", "pendingTransactions": "Pending Transactions",
"notices": "Notices",
"selectRequestType": "Please select request type", "selectRequestType": "Please select request type",
"dateFrom": "Date From", "dateFrom": "Date From",
"dateTo": "Date To", "dateTo": "Date To",
@ -426,9 +424,6 @@
"typeCurrentPasswordBelow": "Type Your Current password below", "typeCurrentPasswordBelow": "Type Your Current password below",
"currentPassword": "Current password", "currentPassword": "Current password",
"concurrentReports": "Concurrent Reports", "concurrentReports": "Concurrent Reports",
"EnterNewAddressMoved": "Enter a new address if you have moved",
"CorrectAddress": "Correct or amend this address",
"SelectChangeWantToMake": "Select the type of change you want to make",
"profile": { "profile": {
"reset_password": { "reset_password": {
"label": "Reset Password", "label": "Reset Password",
@ -471,7 +466,6 @@
"gameTime": "Game Time:", "gameTime": "Game Time:",
"joinMarathon": "Join Marathon", "joinMarathon": "Join Marathon",
"joinDemoMarathon": "Join Demo Marathon", "joinDemoMarathon": "Join Demo Marathon",
"demo": "Demo",
"minutes": "Minutes", "minutes": "Minutes",
"seconds": "Seconds", "seconds": "Seconds",
"note": "Note:", "note": "Note:",
@ -481,7 +475,6 @@
"sponsoredBy": "Sponsored By:", "sponsoredBy": "Sponsored By:",
"question": "Question", "question": "Question",
"marathoners": "Marathoners", "marathoners": "Marathoners",
"marathoner": "Marathoner",
"prize": "Prize:", "prize": "Prize:",
"advancedSearch": "Advanced Search", "advancedSearch": "Advanced Search",
"openNot": "Open Notifications", "openNot": "Open Notifications",
@ -496,7 +489,6 @@
"none": "None", "none": "None",
"winnerSelection": "Winner Selection", "winnerSelection": "Winner Selection",
"qualifiers": "Qualifiers", "qualifiers": "Qualifiers",
"qualifier": "Qualifier",
"getReadyForContest": "Get Ready for the coming contest:", "getReadyForContest": "Get Ready for the coming contest:",
"winnerSelectedRandomly": "The winner will be selected randomly among the qualifiers.", "winnerSelectedRandomly": "The winner will be selected randomly among the qualifiers.",
"fingersCrossed": "Fingers Crossed!!!", "fingersCrossed": "Fingers Crossed!!!",
@ -510,36 +502,12 @@
"favorite": "My Favorites", "favorite": "My Favorites",
"searchfromchat": "Search from chat", "searchfromchat": "Search from chat",
"yourAnswerCorrect": "Your answer is correct", "yourAnswerCorrect": "Your answer is correct",
"youMissedTheQuestion": "You ran out of time. You are out of the game. But you can continue as a viewer.", "youMissedTheQuestion": "You ran out of time. You are out of the game. But you can continue and as a viewer.",
"wrongAnswer": "Your answer is Incorrect. You are out of the game. But you can continue as a viewer.", "wrongAnswer": "Your answer is Incorrect. You are out of the game. But you can continue and as a viewer.",
"oops": "Ooopsss!!!!", "oops": "Ooopsss!!!!",
"winner": "WINNER", "winner": "WINNER",
"youWantToLeaveMarathon": "Are you sure you want to go back? You will be out of the contest.", "youWantToLeaveMarathon": "Are you sure you want to go back? You will be out of the contest.",
"ourSponsor": "Our Sponsor:", "ourSponsor": "Our Sponsor:",
"startingIn": "Starting in", "startingIn": "Starting in"
"youAreOutOfContest": "You are out of the contest.",
"winners": "WINNERS!!!",
"expireAfter": "Expires After",
"oneWeek": "1 Week",
"twoWeek": "2 Week",
"noUpcoming": "There is no upcoming",
"fakeLocation": "We traced out that you try to use a fake location! This is considered a violation, and HR has been notified.",
"noWinner": "Sad! No one won today.",
"myTeam": "My Team",
"youCanPlayDemo": "But you can play demo",
"qualification": "Qualifications",
"esteblishmentName": "Establishment Name",
"gradeDescription": "Grade Description",
"type": "Type",
"status": "Status",
"leaveType": "Leave Type",
"attendanceType": "Attendance Type",
"help": "Help",
"dear": "Dear",
"assistant": "For assistance, you can submit the request on the Saeed system or call the unified call center on 8310200",
"employee_leaves_calender": "Employee Leaves Calender",
"view_your_leave_information": "View Your Leave Information",
"view_details": "View Details",
"hierarchy": "Hierarchy"
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,8 +1,5 @@
import UIKit import UIKit
import Flutter import Flutter
import Firebase
import flutter_local_notifications
@UIApplicationMain @UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate { @objc class AppDelegate: FlutterAppDelegate {
@ -10,13 +7,6 @@ import flutter_local_notifications
_ application: UIApplication, _ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool { ) -> Bool {
FirebaseApp.configure()
FlutterLocalNotificationsPlugin.setPluginRegistrantCallback { (registry) in
GeneratedPluginRegistrant.register(with: registry)
}
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().delegate = self as UNUserNotificationCenterDelegate
}
GeneratedPluginRegistrant.register(with: self) GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions) return super.application(application, didFinishLaunchingWithOptions: launchOptions)
} }

@ -2,15 +2,6 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSAllowsArbitraryLoadsForMedia</key>
<true/>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
</dict>
<key>CADisableMinimumFrameDurationOnPhone</key> <key>CADisableMinimumFrameDurationOnPhone</key>
<true/> <true/>
<key>CFBundleDevelopmentRegion</key> <key>CFBundleDevelopmentRegion</key>
@ -22,7 +13,7 @@
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleName</key> <key>CFBundleName</key>
<string>MOHEMM</string> <string>mohem_flutter_app</string>
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
@ -42,7 +33,7 @@
<key>NFCReaderUsageDescription</key> <key>NFCReaderUsageDescription</key>
<string>This App requires access to NFC to mark your attendance.</string> <string>This App requires access to NFC to mark your attendance.</string>
<key>NSCameraUsageDescription</key> <key>NSCameraUsageDescription</key>
<string>This app requires camera access to capture &amp; upload picture as profile image.</string> <string>This app requires camera access to capture &amp; upload pictures.</string>
<key>NSFaceIDUsageDescription</key> <key>NSFaceIDUsageDescription</key>
<string>This app requires Face ID to allow biometric authentication for app login.</string> <string>This app requires Face ID to allow biometric authentication for app login.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
@ -54,14 +45,11 @@
<key>NSPhotoLibraryUsageDescription</key> <key>NSPhotoLibraryUsageDescription</key>
<string>This app requires photo library access to select image as document &amp; upload it.</string> <string>This app requires photo library access to select image as document &amp; upload it.</string>
<key>NSMicrophoneUsageDescription</key> <key>NSMicrophoneUsageDescription</key>
<string>This app requires microphone access to for call.</string> <string>This app requires microphone access to for call.</string>
<key>UIBackgroundModes</key> <key>UIBackgroundModes</key>
<array> <array>
<string>fetch</string>
<string>remote-notification</string> <string>remote-notification</string>
</array> </array>
<key>FirebaseAppDelegateProxyEnabled</key>
<false/>
<key>UILaunchStoryboardName</key> <key>UILaunchStoryboardName</key>
<string>LaunchScreen</string> <string>LaunchScreen</string>
<key>UIMainStoryboardFile</key> <key>UIMainStoryboardFile</key>
@ -85,11 +73,5 @@
<array> <array>
<string>0000</string> <string>0000</string>
</array> </array>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>TAG</string>
</array>
</dict> </dict>
</plist> </plist>

@ -14,16 +14,11 @@ typedef FactoryConstructor<U> = U Function(dynamic);
class APIError { class APIError {
int? errorCode; int? errorCode;
int? errorType;
String? errorMessage; String? errorMessage;
APIError(this.errorCode, this.errorMessage, this.errorType); APIError(this.errorCode, this.errorMessage);
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {'errorCode': errorCode, 'errorMessage': errorMessage};
'errorCode': errorCode,
'errorMessage': errorMessage,
'errorType': errorType,
};
@override @override
String toString() { String toString() {
@ -38,14 +33,14 @@ APIException _throwAPIException(Response response) {
if (response.body != null && response.body.isNotEmpty) { if (response.body != null && response.body.isNotEmpty) {
var jsonError = jsonDecode(response.body); var jsonError = jsonDecode(response.body);
print(jsonError); print(jsonError);
apiError = APIError(jsonError['ErrorCode'], jsonError['ErrorMessage'], jsonError['ErrorType']); apiError = APIError(jsonError['ErrorCode'], jsonError['ErrorMessage']);
} }
return APIException(APIException.BAD_REQUEST, error: apiError); return APIException(APIException.BAD_REQUEST, error: apiError);
case 400: case 400:
APIError? apiError; APIError? apiError;
if (response.body != null && response.body.isNotEmpty) { if (response.body != null && response.body.isNotEmpty) {
var jsonError = jsonDecode(response.body); var jsonError = jsonDecode(response.body);
apiError = APIError(jsonError['ErrorCode'], jsonError['ErrorMessage'], jsonError['ErrorType']); apiError = APIError(jsonError['ErrorCode'], jsonError['ErrorMessage']);
} }
return APIException(APIException.BAD_REQUEST, error: apiError); return APIException(APIException.BAD_REQUEST, error: apiError);
case 401: case 401:
@ -77,35 +72,34 @@ class ApiClient {
if (headers != null && headers.isNotEmpty) { if (headers != null && headers.isNotEmpty) {
_headers.addAll(headers); _headers.addAll(headers);
} }
if (!kReleaseMode) {
print("Url:$url"); print("Url:$url");
var bodyJson = json.encode(jsonObject); var bodyJson = json.encode(jsonObject);
print("body:$bodyJson"); 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 { // try {
if (!kReleaseMode) { if (!kReleaseMode) {
logger.i("res: " + response.body); logger.i("res: " + response.body);
} }
var jsonData = jsonDecode(response.body);
var jsonData = jsonDecode(response.body); if (jsonData["IsAuthenticated"] != null) {
if (jsonData["IsAuthenticated"] != null) { AppState().setIsAuthenticated = jsonData["IsAuthenticated"];
AppState().setIsAuthenticated = jsonData["IsAuthenticated"]; }
} if (jsonData["ErrorMessage"] == null) {
if (jsonData["ErrorMessage"] == null) { return factoryConstructor(jsonData);
return factoryConstructor(jsonData); } else {
} else { APIError? apiError;
APIError? apiError; apiError = APIError(jsonData['ErrorCode'], jsonData['ErrorEndUserMessage']);
apiError = APIError(jsonData['ErrorCode'], jsonData['ErrorEndUserMessage'], jsonData['ErrorType'] ?? 0); throw APIException(APIException.BAD_REQUEST, error: apiError);
throw APIException(APIException.BAD_REQUEST, error: apiError);
}
} catch (ex) {
if (ex is APIException) {
rethrow;
} else {
throw APIException(APIException.BAD_RESPONSE_FORMAT, arguments: ex);
}
} }
// } catch (ex) {
// if (ex is APIException) {
// rethrow;
// } else {
// throw APIException(APIException.BAD_RESPONSE_FORMAT, arguments: ex);
// }
// }
} }
Future<Response> postJsonForResponse<T>(String url, T jsonObject, Future<Response> postJsonForResponse<T>(String url, T jsonObject,

@ -2,8 +2,6 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:mohem_flutter_app/api/api_client.dart'; import 'package:mohem_flutter_app/api/api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart';
@ -11,7 +9,6 @@ import 'package:mohem_flutter_app/classes/consts.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/exceptions/api_exception.dart'; import 'package:mohem_flutter_app/exceptions/api_exception.dart';
import 'package:mohem_flutter_app/main.dart'; import 'package:mohem_flutter_app/main.dart';
import 'package:mohem_flutter_app/models/chat/chat_user_image_model.dart';
import 'package:mohem_flutter_app/models/chat/get_search_user_chat_model.dart'; import 'package:mohem_flutter_app/models/chat/get_search_user_chat_model.dart';
import 'package:mohem_flutter_app/models/chat/get_user_login_token_model.dart' as user; import 'package:mohem_flutter_app/models/chat/get_user_login_token_model.dart' as user;
import 'package:mohem_flutter_app/models/chat/make_user_favotire_unfavorite_chat_model.dart' as fav; import 'package:mohem_flutter_app/models/chat/make_user_favotire_unfavorite_chat_model.dart' as fav;
@ -24,100 +21,104 @@ class ChatApiClient {
factory ChatApiClient() => _instance; factory ChatApiClient() => _instance;
Future<user.UserAutoLoginModel> getUserLoginToken() async { Future<user.UserAutoLoginModel> getUserLoginToken() async {
user.UserAutoLoginModel userLoginResponse = user.UserAutoLoginModel();
Response response = await ApiClient().postJsonForResponse( Response response = await ApiClient().postJsonForResponse(
"${ApiConsts.chatLoginTokenUrl}externaluserlogin", "${ApiConsts.chatLoginTokenUrl}externaluserlogin",
{ {
"employeeNumber": AppState().memberInformationList!.eMPLOYEENUMBER.toString(), "employeeNumber": AppState().memberInformationList!.eMPLOYEENUMBER.toString(),
"password": "FxIu26rWIKoF8n6mpbOmAjDLphzFGmpG", "password": "FxIu26rWIKoF8n6mpbOmAjDLphzFGmpG",
"isMobile": true,
"deviceToken": AppState().getDeviceToken,
}, },
); );
user.UserAutoLoginModel userLoginResponse = user.userAutoLoginModelFromJson(
if (!kReleaseMode) { response.body,
logger.i("login-res: " + response.body); );
}
if (response.statusCode == 200) {
userLoginResponse = user.userAutoLoginModelFromJson(response.body);
} else if (response.statusCode == 501 || response.statusCode == 502 || response.statusCode == 503 || response.statusCode == 504) {
getUserLoginToken();
} else {
userLoginResponse = user.userAutoLoginModelFromJson(response.body);
Utils.showToast(userLoginResponse.errorResponses!.first.message!);
}
return userLoginResponse; return userLoginResponse;
} }
Future<ChatUserModel> getChatMemberFromSearch(String searchParam, int cUserId, int pageNo) async { Future<List<ChatUser>?> getChatMemberFromSearch(String sName, int cUserId) async {
ChatUserModel chatUserModel; Response response = await ApiClient().getJsonForResponse(
Response response = await ApiClient().postJsonForResponse("${ApiConsts.chatLoginTokenUrl}getUserWithStatusAndFavAsync", {"employeeNumber": cUserId, "userName": searchParam, "pageNumber": pageNo}, "${ApiConsts.chatLoginTokenUrl}getUserWithStatusAndFavAsync/$sName/$cUserId",
token: AppState().chatDetails!.response!.token); token: AppState().chatDetails!.response!.token,
if (!kReleaseMode) { );
logger.i("res: " + response.body); return searchUserJsonModel(response.body);
}
chatUserModel = chatUserModelFromJson(response.body);
return chatUserModel;
} }
//Get User Recent Chats List<ChatUser> searchUserJsonModel(String str) => List<ChatUser>.from(
json.decode(str).map((x) => ChatUser.fromJson(x)),
);
Future<ChatUserModel> getRecentChats() async { Future<ChatUserModel> getRecentChats() async {
try { try {
Response response = await ApiClient().getJsonForResponse( Response response = await ApiClient().getJsonForResponse(
"${ApiConsts.chatRecentUrl}getchathistorybyuserid", "${ApiConsts.chatRecentUrl}getchathistorybyuserid",
token: AppState().chatDetails!.response!.token, token: AppState().chatDetails!.response!.token,
); );
if (!kReleaseMode) {
logger.i("res: " + response.body);
}
return ChatUserModel.fromJson( return ChatUserModel.fromJson(
json.decode(response.body), json.decode(response.body),
); );
} catch (e) { } catch (e) {
e as APIException;
if (e.message == "api_common_unauthorized") {
logger.d("Token Generated On APIIIIII");
user.UserAutoLoginModel userLoginResponse = await ChatApiClient().getUserLoginToken();
if (userLoginResponse.response != null) {
AppState().setchatUserDetails = userLoginResponse;
getRecentChats();
} else {
Utils.showToast(
userLoginResponse.errorResponses!.first.fieldName.toString() + " Erorr",
);
}
}
throw e; throw e;
} }
} }
// Get Favorite Users
Future<ChatUserModel> getFavUsers() async { Future<ChatUserModel> getFavUsers() async {
Response favRes = await ApiClient().getJsonForResponse( Response favRes = await ApiClient().getJsonForResponse(
"${ApiConsts.chatFavUser}getFavUserById/${AppState().chatDetails!.response!.id}", "${ApiConsts.chatFavUser}getFavUserById/${AppState().chatDetails!.response!.id}",
token: AppState().chatDetails!.response!.token, token: AppState().chatDetails!.response!.token,
); );
if (!kReleaseMode) { return ChatUserModel.fromJson(
logger.i("res: " + favRes.body); json.decode(favRes.body),
} );
return ChatUserModel.fromJson(json.decode(favRes.body));
} }
//Get User Chat History
Future<Response> getSingleUserChatHistory({required int senderUID, required int receiverUID, required bool loadMore, bool isNewChat = false, required int paginationVal}) async { Future<Response> getSingleUserChatHistory({required int senderUID, required int receiverUID, required bool loadMore, bool isNewChat = false, required int paginationVal}) async {
try { try {
Response response = await ApiClient().getJsonForResponse( Response response = await ApiClient().getJsonForResponse(
"${ApiConsts.chatSingleUserHistoryUrl}GetUserChatHistory/$senderUID/$receiverUID/$paginationVal", "${ApiConsts.chatSingleUserHistoryUrl}GetUserChatHistory/$senderUID/$receiverUID/$paginationVal",
token: AppState().chatDetails!.response!.token, token: AppState().chatDetails!.response!.token,
); );
if (!kReleaseMode) {
logger.i("res: " + response.body);
}
return response; return response;
} catch (e) { } catch (e) {
getSingleUserChatHistory(senderUID: senderUID, receiverUID: receiverUID, loadMore: loadMore, paginationVal: paginationVal); e as APIException;
if (e.message == "api_common_unauthorized") {
user.UserAutoLoginModel userLoginResponse = await ChatApiClient().getUserLoginToken();
if (userLoginResponse.response != null) {
AppState().setchatUserDetails = userLoginResponse;
getSingleUserChatHistory(senderUID: senderUID, receiverUID: receiverUID, loadMore: loadMore, paginationVal: paginationVal);
} else {
Utils.showToast(
userLoginResponse.errorResponses!.first.fieldName.toString() + " Erorr",
);
}
}
throw e; throw e;
} }
} }
//Favorite Users
Future<fav.FavoriteChatUser> favUser({required int userID, required int targetUserID}) async { Future<fav.FavoriteChatUser> favUser({required int userID, required int targetUserID}) async {
Response response = await ApiClient().postJsonForResponse("${ApiConsts.chatFavUser}addFavUser", {"targetUserId": targetUserID, "userId": userID}, token: AppState().chatDetails!.response!.token); Response response = await ApiClient().postJsonForResponse(
if (!kReleaseMode) { "${ApiConsts.chatFavUser}addFavUser",
logger.i("res: " + response.body); {
} "targetUserId": targetUserID,
"userId": userID,
},
token: AppState().chatDetails!.response!.token);
fav.FavoriteChatUser favoriteChatUser = fav.FavoriteChatUser.fromRawJson(response.body); fav.FavoriteChatUser favoriteChatUser = fav.FavoriteChatUser.fromRawJson(response.body);
return favoriteChatUser; return favoriteChatUser;
} }
//UnFavorite Users
Future<fav.FavoriteChatUser> unFavUser({required int userID, required int targetUserID}) async { Future<fav.FavoriteChatUser> unFavUser({required int userID, required int targetUserID}) async {
try { try {
Response response = await ApiClient().postJsonForResponse( Response response = await ApiClient().postJsonForResponse(
@ -125,37 +126,37 @@ class ChatApiClient {
{"targetUserId": targetUserID, "userId": userID}, {"targetUserId": targetUserID, "userId": userID},
token: AppState().chatDetails!.response!.token, token: AppState().chatDetails!.response!.token,
); );
if (!kReleaseMode) {
logger.i("res: " + response.body);
}
fav.FavoriteChatUser favoriteChatUser = fav.FavoriteChatUser.fromRawJson(response.body); fav.FavoriteChatUser favoriteChatUser = fav.FavoriteChatUser.fromRawJson(response.body);
return favoriteChatUser; return favoriteChatUser;
} catch (e) { } catch (e) {
e as APIException; e as APIException;
if (e.message == "api_common_unauthorized") {
logger.d("Token Generated On APIIIIII");
user.UserAutoLoginModel userLoginResponse = await ChatApiClient().getUserLoginToken();
if (userLoginResponse.response != null) {
AppState().setchatUserDetails = userLoginResponse;
unFavUser(userID: userID, targetUserID: targetUserID);
} else {
Utils.showToast(
userLoginResponse.errorResponses!.first.fieldName.toString() + " Erorr",
);
}
}
throw e; throw e;
} }
} }
// Upload Chat Media Future<StreamedResponse> uploadMedia(String userId, File file) async {
Future<Object?> uploadMedia(String userId, File file) async { dynamic request = MultipartRequest('POST', Uri.parse('${ApiConsts.chatServerBaseApiUrl}upload'));
if (kDebugMode) {
print("${ApiConsts.chatMediaImageUploadUrl}upload");
print(AppState().chatDetails!.response!.token);
}
dynamic request = MultipartRequest('POST', Uri.parse('${ApiConsts.chatMediaImageUploadUrl}upload'));
request.fields.addAll({'userId': userId, 'fileSource': '1'}); request.fields.addAll({'userId': userId, 'fileSource': '1'});
request.files.add(await MultipartFile.fromPath('files', file.path)); request.files.add(await MultipartFile.fromPath('files', file.path));
request.headers.addAll({'Authorization': 'Bearer ${AppState().chatDetails!.response!.token}'}); request.headers.addAll({'Authorization': 'Bearer ${AppState().chatDetails!.response!.token}'});
StreamedResponse response = await request.send(); StreamedResponse response = await request.send();
String data = await response.stream.bytesToString(); return response;
if (!kReleaseMode) {
logger.i("res: " + data);
}
return jsonDecode(data);
} }
// Download File For Chat // Download File For Chat
Future<Uint8List> downloadURL({required String fileName, required String fileTypeDescription}) async { Future<Uint8List> downloadURL({required String fileName, required String fileTypeDescription}) async {
Response response = await ApiClient().postJsonForResponse( Response response = await ApiClient().postJsonForResponse(
"${ApiConsts.chatMediaImageUploadUrl}download", "${ApiConsts.chatMediaImageUploadUrl}download",
@ -166,25 +167,16 @@ class ChatApiClient {
return data; return data;
} }
//Get Chat Users & Favorite Images Future getUsersImages({required List encryptedEmails}) async {
Future<List<ChatUserImageModel>> getUsersImages({required List<String> encryptedEmails}) async {
List<ChatUserImageModel> imagesData = [];
Response response = await ApiClient().postJsonForResponse( Response response = await ApiClient().postJsonForResponse(
"${ApiConsts.chatUserImages}images", "${ApiConsts.chatUserImages}images",
{"encryptedEmails": encryptedEmails, "fromClient": false}, {
"encryptedEmails": ["/g8Rc+s6eEOdci41PwJuV5dX+gXe51G9OTHzb9ahcVlHCmVvNhxReirudF79+hdxVSkCnQ6wC5DBFV8xnJlC74X6157PxF7mNYrAYuHRgp4="],
"fromClient": true
},
token: AppState().chatDetails!.response!.token, token: AppState().chatDetails!.response!.token,
); );
if (!kReleaseMode) { logger.d(response.body);
logger.i("res: " + response.body); // Uint8List data = Uint8List.fromList(response.body);
}
if (response.statusCode == 200) {
imagesData = chatUserImageModelFromJson(response.body);
} else if (response.statusCode == 500 || response.statusCode == 504) {
getUsersImages(encryptedEmails: encryptedEmails);
} else {
Utils.showToast("Something went wrong while loading images");
imagesData = [];
}
return imagesData;
} }
} }

@ -1,10 +1,12 @@
import 'dart:async'; import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'package:http/http.dart';
import 'package:mohem_flutter_app/api/api_client.dart'; import 'package:mohem_flutter_app/api/api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/consts.dart'; import 'package:mohem_flutter_app/classes/consts.dart';
import 'package:mohem_flutter_app/classes/date_uitl.dart'; import 'package:mohem_flutter_app/classes/date_uitl.dart';
import 'package:mohem_flutter_app/models/chat/chat_count_conversation_model.dart';
import 'package:mohem_flutter_app/models/dashboard/get_accrual_balances_list_model.dart'; import 'package:mohem_flutter_app/models/dashboard/get_accrual_balances_list_model.dart';
import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_model.dart'; import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_model.dart';
import 'package:mohem_flutter_app/models/dashboard/itg_forms_model.dart'; import 'package:mohem_flutter_app/models/dashboard/itg_forms_model.dart';
@ -12,6 +14,7 @@ import 'package:mohem_flutter_app/models/dashboard/list_menu.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:mohem_flutter_app/models/itg/itg_main_response.dart'; import 'package:mohem_flutter_app/models/itg/itg_main_response.dart';
import 'package:mohem_flutter_app/models/itg/itg_response_model.dart'; import 'package:mohem_flutter_app/models/itg/itg_response_model.dart';
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
class DashboardApiClient { class DashboardApiClient {
@ -44,6 +47,7 @@ class DashboardApiClient {
Future<GenericResponseModel?> getCOCNotifications() async { Future<GenericResponseModel?> getCOCNotifications() async {
String url = "${ApiConsts.cocRest}Mohemm_ITG_ReviewerAdmin_Pending_Tasks"; String url = "${ApiConsts.cocRest}Mohemm_ITG_ReviewerAdmin_Pending_Tasks";
Map<String, dynamic> postParams = {"Date": DateUtil.getISODateFormat(DateTime.now()), "EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER}; Map<String, dynamic> postParams = {"Date": DateUtil.getISODateFormat(DateTime.now()), "EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER};
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel responseData = GenericResponseModel.fromJson(json); GenericResponseModel responseData = GenericResponseModel.fromJson(json);
@ -61,11 +65,10 @@ class DashboardApiClient {
}, url, postParams); }, url, postParams);
} }
Future<List<GetAccrualBalancesList>> getAccrualBalances(String effectiveDate, {String? empID}) async { Future<List<GetAccrualBalancesList>> getAccrualBalances(String effectiveDate) async {
String url = "${ApiConsts.erpRest}GET_ACCRUAL_BALANCES"; String url = "${ApiConsts.erpRest}GET_ACCRUAL_BALANCES";
Map<String, dynamic> postParams = {"P_EFFECTIVE_DATE": effectiveDate}; Map<String, dynamic> postParams = {"P_EFFECTIVE_DATE": effectiveDate};
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
if (empID != null) postParams["P_SELECTED_EMPLOYEE_NUMBER"] = empID;
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel responseData = GenericResponseModel.fromJson(json); GenericResponseModel responseData = GenericResponseModel.fromJson(json);
return responseData.getAccrualBalancesList ?? []; return responseData.getAccrualBalancesList ?? [];
@ -127,28 +130,6 @@ class DashboardApiClient {
}, url, postParams); }, url, postParams);
} }
//Mark Fake Location
Future<GenericResponseModel?> markFakeLocation({String lat = "0", String? long = "0", required String sourceName}) async {
String url = "${ApiConsts.swpRest}CreateIssueInfo";
var uuid = Uuid();
// Generate a v4 (random) id
Map<String, dynamic> postParams = {
"UID": uuid.v4(), //Mobile Id
"Latitude": lat,
"Longitude": long,
"QRValue": '',
"NFCValue": sourceName == 'NFC' ? sourceName : '',
"WifiValue": sourceName == 'WIFI' ? sourceName : '',
"EmployeeID": AppState().memberInformationList!.eMPLOYEENUMBER,
};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
return responseData;
}, url, postParams);
}
//Check ITG Type //Check ITG Type
Future<MohemmItgResponseItem?> getITGPageNotification() async { Future<MohemmItgResponseItem?> getITGPageNotification() async {
String url = "${ApiConsts.cocRest}Mohemm_ITG_GetPageNotification"; String url = "${ApiConsts.cocRest}Mohemm_ITG_GetPageNotification";
@ -199,6 +180,13 @@ class DashboardApiClient {
}, url, postParams); }, url, postParams);
} }
Future<ChatUnreadCovnCountModel> getChatCount() async {
Response response = await ApiClient().getJsonForResponse(
"${ApiConsts.chatLoginTokenUrl}unreadconversationcount/${AppState().getUserName}",
);
return chatUnreadCovnCountModelFromJson(response.body);
}
// Future setAdvertisementViewed(String masterID, int advertisementId) async { // Future setAdvertisementViewed(String masterID, int advertisementId) async {
// String url = "${ApiConsts.cocRest}Mohemm_ITG_UpdateAdvertisementAsViewed"; // String url = "${ApiConsts.cocRest}Mohemm_ITG_UpdateAdvertisementAsViewed";
// //

@ -32,7 +32,7 @@ class ItemsForSaleApiClient {
getSaleCategoriesListObj.titleAr = "الجميع"; getSaleCategoriesListObj.titleAr = "الجميع";
getSaleCategoriesListObj.isActive = true; getSaleCategoriesListObj.isActive = true;
getSaleCategoriesListObj.content = getSaleCategoriesListObj.content =
'<svg xmlns="http://www.w3.org/2000/svg" width="26.213" height="26.213" viewBox="0 0 26.213 26.213"> <g id="More_Select" data-name="More Select" transform="translate(-1 -1)"> <path id="Path_4860" data-name="Path 4860" d="M26.844,1H5.874A.874.874,0,0,0,5,1.874v.874H23.349A2.621,2.621,0,0,1,25.97,5.369V23.718h.874a.874.874,0,0,0,.874-.874V1.874A.874.874,0,0,0,26.844,1Z" transform="translate(-0.505)" fill="#2bb8a6"/> <path id="Path_4861" data-name="Path 4861" d="M22.844,5H1.874A.874.874,0,0,0,1,5.874v20.97a.874.874,0,0,0,.874.874h20.97a.874.874,0,0,0,.874-.874V5.874A.874.874,0,0,0,22.844,5ZM18.7,13.164,11.07,20.789a.874.874,0,0,1-1.236,0L6.022,16.977a.874.874,0,1,1,1.236-1.236l3.2,3.195,7.008-7.007A.874.874,0,1,1,18.7,13.165Z" transform="translate(0 -0.505)" fill="#125765"/> </g> </svg>'; '<svg xmlns="http://www.w3.org/2000/svg" width="33.925" height="25.841" viewBox="0 0 33.925 25.841"><g id="More_Select" data-name="More Select"><path d="m30 1h-24a1 1 0 0 0 -1 1v1h21a3 3 0 0 1 3 3v21h1a1 1 0 0 0 1-1v-24a1 1 0 0 0 -1-1z"/><path d="m26 5h-24a1 1 0 0 0 -1 1v24a1 1 0 0 0 1 1h24a1 1 0 0 0 1-1v-24a1 1 0 0 0 -1-1zm-4.747 9.344-8.728 8.726a1 1 0 0 1 -1.414 0l-4.364-4.363a1 1 0 0 1 1.414-1.414l3.657 3.656 8.021-8.019a1 1 0 0 1 1.414 1.414z"/></g></svg>';
getSaleCategoriesList.add(getSaleCategoriesListObj); getSaleCategoriesList.add(getSaleCategoriesListObj);
@ -66,41 +66,6 @@ class ItemsForSaleApiClient {
}, url, postParams); }, url, postParams);
} }
Future<dynamic> updateItemsForSale(int itemSaleID) async {
List<GetItemsForSaleList> getItemsForSaleList = [];
String url = "${ApiConsts.cocRest}Mohemm_ITG_UpdateItemForSale";
// request.fields['itemSaleID'] = itemSaleID.toString();
// request.fields['Channel'] = "31";
// request.fields['isActive'] = "false";
// request.fields['LogInToken'] = loginTokenID!;
// request.fields['Token'] = tokenID!;
// request.fields['MobileNo'] = empMobNum!;
// request.fields['EmployeeNumber'] = empNum!;
// request.fields['employeeNumber'] = empNum;
Map<String, dynamic> postParams = {
"EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER,
"employeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER,
"MobileNo": AppState().memberInformationList?.eMPLOYEEMOBILENUMBER,
"itemSaleID": itemSaleID.toString(),
"Channel": "31",
"isActive": "false",
"Token": AppState().postParamsObject?.tokenID
};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((response) {
var body = json.decode(response['Mohemm_ITG_ResponseItem']);
// body['result']['data'].forEach((v) {
// getItemsForSaleList.add(new GetItemsForSaleList.fromJson(v));
// });
return getItemsForSaleList;
}, url, postParams);
}
Future<List<EmployeePostedAds>> getEmployeePostedAds() async { Future<List<EmployeePostedAds>> getEmployeePostedAds() async {
List<EmployeePostedAds> employeePostedAdsList = []; List<EmployeePostedAds> employeePostedAdsList = [];

@ -17,30 +17,27 @@ class LeaveBalanceApiClient {
factory LeaveBalanceApiClient() => _instance; factory LeaveBalanceApiClient() => _instance;
Future<List<GetAbsenceTransactionList>> getAbsenceTransactions(int pSelectedResopID, String? empID) async { Future<List<GetAbsenceTransactionList>> getAbsenceTransactions(int pSelectedResopID) async {
String url = "${ApiConsts.erpRest}GET_ABSENCE_TRANSACTIONS"; String url = "${ApiConsts.erpRest}GET_ABSENCE_TRANSACTIONS";
Map<String, dynamic> postParams = {"P_PAGE_LIMIT": 50, "P_PAGE_NUM": 1, "P_MENU_TYPE": "E", "P_SELECTED_RESP_ID": pSelectedResopID}; Map<String, dynamic> postParams = {"P_PAGE_LIMIT": 50, "P_PAGE_NUM": 1, "P_MENU_TYPE": "E", "P_SELECTED_RESP_ID": pSelectedResopID};
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
if (empID != null) postParams["P_SELECTED_EMPLOYEE_NUMBER"] = empID;
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getAbsenceTransactionList ?? []; return responseData.getAbsenceTransactionList ?? [];
}, url, postParams); }, url, postParams);
} }
Future<List<GetAbsenceAttendanceTypesList>> getAbsenceAttendanceTypes({String? empID}) async { Future<List<GetAbsenceAttendanceTypesList>> getAbsenceAttendanceTypes() async {
String url = "${ApiConsts.erpRest}GET_ABSENCE_ATTENDANCE_TYPES"; String url = "${ApiConsts.erpRest}GET_ABSENCE_ATTENDANCE_TYPES";
Map<String, dynamic> postParams = {}; Map<String, dynamic> postParams = {};
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
if (empID != null) postParams["P_SELECTED_EMPLOYEE_NUMBER"] = empID;
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getAbsenceAttendanceTypesList ?? []; return responseData.getAbsenceAttendanceTypesList ?? [];
}, url, postParams); }, url, postParams);
} }
Future<CalculateAbsenceDuration> calculateAbsenceDuration(int pAbsenceAttendanceTypeID, String pDateStart, String pDateEnd, int pSelectedResopID, {String? empID}) async { Future<CalculateAbsenceDuration> calculateAbsenceDuration(int pAbsenceAttendanceTypeID, String pDateStart, String pDateEnd, int pSelectedResopID) async {
String url = "${ApiConsts.erpRest}CALCULATE_ABSENCE_DURATION"; String url = "${ApiConsts.erpRest}CALCULATE_ABSENCE_DURATION";
Map<String, dynamic> postParams = { Map<String, dynamic> postParams = {
"P_ABSENCE_ATTENDANCE_TYPE_ID": pAbsenceAttendanceTypeID, "P_ABSENCE_ATTENDANCE_TYPE_ID": pAbsenceAttendanceTypeID,
@ -49,26 +46,19 @@ class LeaveBalanceApiClient {
"P_SELECTED_RESP_ID": pSelectedResopID, "P_SELECTED_RESP_ID": pSelectedResopID,
"P_MENU_TYPE": "E", "P_MENU_TYPE": "E",
"P_TIME_END": null, "P_TIME_END": null,
"P_TIME_START": null "P_TIME_START": null,
}; };
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
if (empID != null) postParams["P_SELECTED_EMPLOYEE_NUMBER"] = empID;
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.calculateAbsenceDuration!; return responseData.calculateAbsenceDuration!;
}, url, postParams); }, url, postParams);
} }
Future<List<GetAbsenceDffStructureList>> getAbsenceDffStructure(String pDescFlexContextCode, String pFunctionName, int pSelectedResopID, {String? empID}) async { Future<List<GetAbsenceDffStructureList>> getAbsenceDffStructure(String pDescFlexContextCode, String pFunctionName, int pSelectedResopID) async {
String url = "${ApiConsts.erpRest}GET_ABSENCE_DFF_STRUCTURE"; String url = "${ApiConsts.erpRest}GET_ABSENCE_DFF_STRUCTURE";
Map<String, dynamic> postParams = { Map<String, dynamic> postParams = {"P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode, "P_FUNCTION_NAME": pFunctionName, "P_MENU_TYPE": "E", "P_SELECTED_RESP_ID": pSelectedResopID};
"P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode,
"P_FUNCTION_NAME": pFunctionName,
"P_MENU_TYPE": "E",
"P_SELECTED_RESP_ID": pSelectedResopID,
};
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
if (empID != null) postParams["P_SELECTED_EMPLOYEE_NUMBER"] = empID;
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getAbsenceDffStructureList ?? []; return responseData.getAbsenceDffStructureList ?? [];
@ -77,7 +67,7 @@ class LeaveBalanceApiClient {
Future<GenericResponseModel> validateAbsenceTransaction( Future<GenericResponseModel> validateAbsenceTransaction(
String pDescFlexContextCode, String pFunctionName, int pAbsenceAttendanceTypeID, String pReplacementUserName, String pDateStart, String pDateEnd, int pSelectedResopID, Map<String, String?> data, String pDescFlexContextCode, String pFunctionName, int pAbsenceAttendanceTypeID, String pReplacementUserName, String pDateStart, String pDateEnd, int pSelectedResopID, Map<String, String?> data,
{String comments = "", String? empID}) async { {String comments = ""}) async {
String url = "${ApiConsts.erpRest}VALIDATE_ABSENCE_TRANSACTION"; String url = "${ApiConsts.erpRest}VALIDATE_ABSENCE_TRANSACTION";
Map<String, dynamic> postParams = { Map<String, dynamic> postParams = {
"P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode, "P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode,
@ -92,11 +82,10 @@ class LeaveBalanceApiClient {
"P_SELECTED_RESP_ID": pSelectedResopID, "P_SELECTED_RESP_ID": pSelectedResopID,
"P_MENU_TYPE": "E", "P_MENU_TYPE": "E",
"P_TIME_END": null, "P_TIME_END": null,
"P_TIME_START": null "P_TIME_START": null,
}; };
postParams.addAll(data); postParams.addAll(data);
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
if (empID != null) postParams["P_SELECTED_EMPLOYEE_NUMBER"] = empID;
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData; return responseData;
@ -105,7 +94,7 @@ class LeaveBalanceApiClient {
Future<SumbitAbsenceTransactionList> submitAbsenceTransaction( Future<SumbitAbsenceTransactionList> submitAbsenceTransaction(
String pDescFlexContextCode, String pFunctionName, int pAbsenceAttendanceTypeID, String pReplacementUserName, String pDateStart, String pDateEnd, int pSelectedResopID, Map<String, String?> data, String pDescFlexContextCode, String pFunctionName, int pAbsenceAttendanceTypeID, String pReplacementUserName, String pDateStart, String pDateEnd, int pSelectedResopID, Map<String, String?> data,
{String comments = "", String? empID}) async { {String comments = ""}) async {
String url = "${ApiConsts.erpRest}SUBMIT_ABSENCE_TRANSACTION"; String url = "${ApiConsts.erpRest}SUBMIT_ABSENCE_TRANSACTION";
Map<String, dynamic> postParams = { Map<String, dynamic> postParams = {
"P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode, "P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode,
@ -120,11 +109,10 @@ class LeaveBalanceApiClient {
"P_SELECTED_RESP_ID": pSelectedResopID, "P_SELECTED_RESP_ID": pSelectedResopID,
"P_MENU_TYPE": "E", "P_MENU_TYPE": "E",
"P_TIME_END": null, "P_TIME_END": null,
"P_TIME_START": null "P_TIME_START": null,
}; };
postParams.addAll(data); postParams.addAll(data);
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
if (empID != null) postParams["P_SELECTED_EMPLOYEE_NUMBER"] = empID;
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.sumbitAbsenceTransactionList!; return responseData.sumbitAbsenceTransactionList!;
@ -141,11 +129,15 @@ class LeaveBalanceApiClient {
}, url, postParams); }, url, postParams);
} }
Future<StartAbsenceApprovalProccess> startAbsenceApprovalProcess(int pTransactionID, String comments, int pSelectedResopID, {String? empID}) async { Future<StartAbsenceApprovalProccess> startAbsenceApprovalProcess(int pTransactionID, String comments, int pSelectedResopID) async {
String url = "${ApiConsts.erpRest}START_ABSENCE_APPROVAL_PROCESS"; String url = "${ApiConsts.erpRest}START_ABSENCE_APPROVAL_PROCESS";
Map<String, dynamic> postParams = {"P_TRANSACTION_ID": pTransactionID, "P_SELECTED_RESP_ID": pSelectedResopID, "P_COMMENTS": comments, "P_MENU_TYPE": "E"}; Map<String, dynamic> postParams = {
"P_TRANSACTION_ID": pTransactionID,
"P_SELECTED_RESP_ID": pSelectedResopID,
"P_COMMENTS": comments,
"P_MENU_TYPE": "E",
};
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
if (empID != null) postParams["P_SELECTED_EMPLOYEE_NUMBER"] = empID;
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.startAbsenceApprovalProccess!; return responseData.startAbsenceApprovalProccess!;

@ -88,10 +88,7 @@ class LoginApiClient {
AppState().postParamsObject?.pEmailAddress = responseData.basicMemberInformation!.pEMAILADDRESS; AppState().postParamsObject?.pEmailAddress = responseData.basicMemberInformation!.pEMAILADDRESS;
AppState().postParamsObject?.pSessionId = responseData.pSESSIONID; AppState().postParamsObject?.pSessionId = responseData.pSESSIONID;
AppState().postParamsObject?.pUserName = AppState().getUserName; AppState().postParamsObject?.pUserName = AppState().getUserName;
//TODO: employee id changed in SRCA instead of username AppState().postParamsObject?.pSelectedEmployeeNumber = AppState().getUserName;
// AppState().postParamsObject?.pSelectedEmployeeNumber = AppState().getUserName;
//TODO: need to fix emp number
AppState().postParamsObject?.pSelectedEmployeeNumber = responseData.memberInformationList!.first.eMPLOYEENUMBER;
AppState().postParamsObject?.setPLegislationCode = responseData.basicMemberInformation!.pLEGISLATIONCODE; AppState().postParamsObject?.setPLegislationCode = responseData.basicMemberInformation!.pLEGISLATIONCODE;
AppState().postParamsObject?.setPayrollCodeStr = responseData.memberInformationList!.first.pAYROLLCODE; AppState().postParamsObject?.setPayrollCodeStr = responseData.memberInformationList!.first.pAYROLLCODE;
AppState().setBusinessCardPrivilege = responseData.businessCardPrivilege ?? false; AppState().setBusinessCardPrivilege = responseData.businessCardPrivilege ?? false;

@ -1,25 +0,0 @@
import 'dart:convert';
import 'package:flutter/services.dart';
import 'package:logger/logger.dart' as L;
import 'package:mohem_flutter_app/models/marathon/marathon_model.dart';
import 'package:mohem_flutter_app/models/marathon/question_model.dart';
class DemoMarathonRepo {
L.Logger logger = L.Logger();
Future<MarathonDetailModel> getDemoMarathonDetails() async {
String response = await rootBundle.loadString('assets/json/demo_upcoming_marathon');
var json = jsonDecode(response);
MarathonDetailModel marathonDetailModel = MarathonDetailModel.fromJson(json);
return marathonDetailModel;
}
Future<QuestionModel> getDemoNextQuestion({required int currentQuestionNumber}) async {
String response = await rootBundle.loadString('assets/json/demo_questions_marathon');
List json = jsonDecode(response);
QuestionModel currentQuestion = QuestionModel.fromJson(json.elementAt(currentQuestionNumber));
return currentQuestion;
}
}

@ -1,6 +1,5 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:logger/logger.dart' as L; import 'package:logger/logger.dart' as L;
import 'package:mohem_flutter_app/api/api_client.dart'; import 'package:mohem_flutter_app/api/api_client.dart';
@ -11,58 +10,66 @@ import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/models/marathon/marathon_generic_model.dart'; import 'package:mohem_flutter_app/models/marathon/marathon_generic_model.dart';
import 'package:mohem_flutter_app/models/marathon/marathon_model.dart'; import 'package:mohem_flutter_app/models/marathon/marathon_model.dart';
import 'package:mohem_flutter_app/models/marathon/question_model.dart'; import 'package:mohem_flutter_app/models/marathon/question_model.dart';
import 'package:mohem_flutter_app/models/marathon/winner_model.dart'; import 'package:signalr_netcore/hub_connection.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart';
import 'package:provider/provider.dart';
class MarathonApiClient { class MarathonApiClient {
late HubConnection hubConnection;
L.Logger logger = L.Logger(); L.Logger logger = L.Logger();
Future<String> getMarathonToken() async { Future<String> getMarathonToken() async {
String employeeUserName = AppState().getUserName ?? ""; String employeeUserName = AppState().getUserName ?? "";
String employeeSession = AppState().postParamsObject?.pSessionId.toString() ?? ""; String employeeSession = AppState().postParamsObject?.pSessionId.toString() ?? "";
Map<String, String> jsonObject = <String, String>{"userName": employeeUserName, "password": employeeSession}; Map<String, String> jsonObject = <String, String>{"userName": employeeUserName, "password": employeeSession};
Response response = await ApiClient().postJsonForResponse(ApiConsts.marathonParticipantLoginUrl, jsonObject);
var json = jsonDecode(response.body);
return await ApiClient().postJsonForObject( MarathonGenericModel marathonModel = MarathonGenericModel.fromJson(json);
(json) {
MarathonGenericModel marathonModel = MarathonGenericModel.fromJson(json); if (marathonModel.statusCode == 200) {
if (marathonModel.data != null && marathonModel.isSuccessful == true) {
AppState().setMarathonToken = marathonModel.data["token"] ?? ""; AppState().setMarathonToken = marathonModel.data["token"] ?? "";
print("bearer: ${AppState().getMarathonToken}");
return marathonModel.data["token"] ?? ""; return marathonModel.data["token"] ?? "";
}, } else {
ApiConsts.marathonParticipantLoginUrl, //TODO : DO ERROR HANDLING HERE
jsonObject, return "";
); }
} else {
//TODO : DO ERROR HANDLING HERE
return "";
}
} }
Future<String> getProjectId() async { Future<String> getProjectId() async {
return await ApiClient().postJsonForObject( Response response = await ApiClient().postJsonForResponse(ApiConsts.marathonProjectGetUrl, <String, dynamic>{}, token: AppState().getMarathonToken ?? await getMarathonToken());
(json) {
MarathonGenericModel responseData = MarathonGenericModel.fromJson(json); var json = jsonDecode(response.body);
return responseData.data[0]["id"] ?? ""; MarathonGenericModel marathonModel = MarathonGenericModel.fromJson(json);
},
ApiConsts.marathonProjectGetUrl, if (marathonModel.statusCode == 200) {
<String, dynamic>{}, if (marathonModel.data != null && marathonModel.isSuccessful == true) {
token: AppState().getMarathonToken == null || AppState().getMarathonToken == "" ? await getMarathonToken() : AppState().getMarathonToken, logger.i("message: ${marathonModel.data[0]["id"]}");
); AppState().setMarathonProjectId = marathonModel.data[0]["id"] ?? "";
return marathonModel.data[0]["id"] ?? "";
} else {
return "";
}
} else {
return "";
}
} }
Future<MarathonDetailModel> getMarathonDetails() async { Future<MarathonDetailModel> getMarathonDetails() async {
String payrollString = AppState().postParamsObject?.payrollCodeStr.toString() ?? "CS"; String payrollString = AppState().postParamsObject?.payrollCodeStr.toString() ?? "CS";
Response response = await ApiClient().getJsonForResponse( Response response = await ApiClient().getJsonForResponse(ApiConsts.marathonUpcomingUrl + payrollString, token: AppState().getMarathonToken ?? await getMarathonToken());
ApiConsts.marathonUpcomingUrl + payrollString,
token: AppState().getMarathonToken == null || AppState().getMarathonToken == "" ? await getMarathonToken() : AppState().getMarathonToken,
);
var json = jsonDecode(response.body); var json = jsonDecode(response.body);
logger.i("json in getMarathonDetails: $json");
MarathonGenericModel marathonGenericModel = MarathonGenericModel.fromJson(json); MarathonGenericModel marathonGenericModel = MarathonGenericModel.fromJson(json);
if (marathonGenericModel.data == null) {
return MarathonDetailModel();
}
MarathonDetailModel marathonDetailModel = MarathonDetailModel.fromJson(marathonGenericModel.data); MarathonDetailModel marathonDetailModel = MarathonDetailModel.fromJson(marathonGenericModel.data);
AppState().setMarathonProjectId = marathonDetailModel.id!; AppState().setMarathonProjectId = marathonDetailModel.id!;
@ -70,119 +77,56 @@ class MarathonApiClient {
return marathonDetailModel; return marathonDetailModel;
} }
Future<int?> joinMarathonAsParticipant() async { Future<bool> joinMarathonAsParticipant() async {
Map<String, String> jsonObject = <String, String>{ Map<String, String> jsonObject = <String, String>{
"employeeNumber": AppState().memberInformationList!.eMPLOYEENUMBER ?? "", "employeeNumber": AppState().memberInformationList!.eMPLOYEENUMBER ?? "",
"employeeNameAr": AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr ?? "", "employeeName": AppState().memberInformationList!.eMPLOYEENAME ?? "",
"employeeNameEn": AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn ?? "",
"marathonId": AppState().getMarathonProjectId!, "marathonId": AppState().getMarathonProjectId!,
}; };
return await ApiClient().postJsonForObject( Response response = await ApiClient().postJsonForResponse(ApiConsts.marathonJoinParticipantUrl, jsonObject, token: AppState().getMarathonToken ?? await getMarathonToken());
(json) {
MarathonGenericModel marathonModel = MarathonGenericModel.fromJson(json);
return marathonModel.data["remainingTime"];
},
ApiConsts.marathonJoinParticipantUrl,
jsonObject,
token: AppState().getMarathonToken == null || AppState().getMarathonToken == "" ? await getMarathonToken() : AppState().getMarathonToken,
);
}
Future<QuestionModel> getNextQuestion({required String? questionId, required String marathonId}) async {
Map<String, String?> jsonObject = <String, String?>{
"previousQuestionId": questionId,
"marathonId": marathonId,
};
return await ApiClient().postJsonForObject(
(json) {
MarathonGenericModel marathonModel = MarathonGenericModel.fromJson(json);
if (marathonModel.statusCode == 404 || marathonModel.statusCode == 208 || marathonModel.statusCode == 204 || marathonModel.statusCode == 500) {
Utils.confirmDialog(
AppRoutes.navigatorKey.currentContext,
marathonModel.message!,
onTap: () {
AppRoutes.navigatorKey.currentContext!.read<MarathonProvider>().resetValues();
Navigator.of(
AppRoutes.navigatorKey.currentContext!,
).popUntil(ModalRoute.withName(AppRoutes.dashboard));
},
);
}
QuestionModel newQuestion = QuestionModel.fromJson(marathonModel.data);
return newQuestion;
},
ApiConsts.marathonNextQuestionUrl,
jsonObject,
token: AppState().getMarathonToken == null || AppState().getMarathonToken == "" ? await getMarathonToken() : AppState().getMarathonToken,
);
}
Future<bool> submitSelectedOption({required String marathonId, required String? questionId, required String? selectedAnswerId}) async {
Map<String, String?> jsonObject = <String, String?>{"marathonId": marathonId, "questionId": questionId, "selectedOptionId": selectedAnswerId};
return await ApiClient().postJsonForObject(
(json) {
MarathonGenericModel marathonModel = MarathonGenericModel.fromJson(json);
if (marathonModel.data != null) {
bool isOptionCorrect = marathonModel.data["isCorrect"];
return isOptionCorrect;
}
return false;
},
ApiConsts.marathonSubmitAnswerUrl,
jsonObject,
token: AppState().getMarathonToken == null || AppState().getMarathonToken == "" ? await getMarathonToken() : AppState().getMarathonToken,
);
}
Future<int?> getQualifiers({required String marathonId}) async {
Map<String, String> params = <String, String>{"marathonId": marathonId};
Response response = await ApiClient().getJsonForResponse(
ApiConsts.marathonQualifiersUrl,
queryParameters: params,
token: AppState().getMarathonToken == null || AppState().getMarathonToken == "" ? await getMarathonToken() : AppState().getMarathonToken,
);
var json = jsonDecode(response.body); var json = jsonDecode(response.body);
logger.i("json in getQualifiers: $json"); MarathonGenericModel marathonModel = MarathonGenericModel.fromJson(json);
MarathonGenericModel marathonGenericModel = MarathonGenericModel.fromJson(json);
if (marathonGenericModel.isSuccessful == true && marathonGenericModel.statusCode == 200 && marathonGenericModel.data != null) { if (marathonModel.statusCode == 200) {
return marathonGenericModel.data["winnerCount"]; if (marathonModel.data != null && marathonModel.isSuccessful == true) {
logger.i("message: ${marathonModel.data}");
return true;
} else {
return false;
}
} else {
return false;
} }
return null;
} }
Future<List<WinnerModel>?> getSelectedWinner({required String marathonId}) async { Future<QuestionModel> getNextQuestion({required String? selectedOptionId, required String? questionId, required String marathonId}) async {
Map<String, String> params = <String, String>{"marathonId": marathonId}; Map<String, String?> jsonObject = <String, String?>{
Response response = await ApiClient().getJsonForResponse( "selectedOptionId": selectedOptionId,
ApiConsts.marathonSelectedWinner, "questionId": questionId,
queryParameters: params, "marathonId": marathonId,
token: AppState().getMarathonToken == null || AppState().getMarathonToken == "" ? await getMarathonToken() : AppState().getMarathonToken, };
);
var json = jsonDecode(response.body);
logger.i("json in getSelectedWinner: $json");
MarathonGenericModel marathonGenericModel = MarathonGenericModel.fromJson(json);
if (marathonGenericModel.isSuccessful == true && marathonGenericModel.statusCode == 200 && marathonGenericModel.data != null) { Response response = await ApiClient().postJsonForResponse(ApiConsts.marathonNextQuestionUrl, jsonObject, token: AppState().getMarathonToken ?? await getMarathonToken());
List<WinnerModel> winners = <WinnerModel>[];
List data = marathonGenericModel.data as List;
for (Map<String, dynamic> winner in data) { var json = jsonDecode(response.body);
winners.add(WinnerModel.fromJson(winner)); MarathonGenericModel marathonModel = MarathonGenericModel.fromJson(json);
if (marathonModel.statusCode == 200) {
if (marathonModel.data != null && marathonModel.isSuccessful == true) {
logger.i("message: ${marathonModel.data}");
return QuestionModel();
} else {
Utils.confirmDialog(AppRoutes.navigatorKey.currentContext, marathonModel.message!);
return QuestionModel();
} }
return winners; } else {
Utils.confirmDialog(AppRoutes.navigatorKey.currentContext, marathonModel.message!);
return QuestionModel();
} }
return null;
} }
// late HubConnection hubConnection;
// Future<void> buildHubConnection(BuildContext context, String prizeId) async { // Future<void> buildHubConnection(BuildContext context, String prizeId) async {
// HttpConnectionOptions httpOptions = HttpConnectionOptions(skipNegotiation: false, logMessageContent: true); // HttpConnectionOptions httpOptions = HttpConnectionOptions(skipNegotiation: false, logMessageContent: true);
// hubConnection = HubConnectionBuilder() // hubConnection = HubConnectionBuilder()

@ -1,13 +1,14 @@
import 'dart:async'; import 'dart:async';
import 'package:mohem_flutter_app/api/api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/consts.dart'; import 'package:mohem_flutter_app/classes/consts.dart';
import 'package:mohem_flutter_app/models/employee_leaves_list.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:mohem_flutter_app/models/get_day_hours_type_details_list_model.dart'; import 'package:mohem_flutter_app/models/get_day_hours_type_details_list_model.dart';
import 'package:mohem_flutter_app/models/get_mobile_login_info_list_model.dart';
import 'package:mohem_flutter_app/models/get_schedule_shifts_details_list_model.dart'; import 'package:mohem_flutter_app/models/get_schedule_shifts_details_list_model.dart';
import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart'; import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart';
import 'package:mohem_flutter_app/api/api_client.dart';
class MonthlyAttendanceApiClient { class MonthlyAttendanceApiClient {
static final MonthlyAttendanceApiClient _instance = MonthlyAttendanceApiClient._internal(); static final MonthlyAttendanceApiClient _instance = MonthlyAttendanceApiClient._internal();
@ -28,6 +29,7 @@ class MonthlyAttendanceApiClient {
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
print(responseData);
return (responseData.getTimeCardSummaryList?.length ?? 0) > 0 ? responseData.getTimeCardSummaryList!.first : null; return (responseData.getTimeCardSummaryList?.length ?? 0) > 0 ? responseData.getTimeCardSummaryList!.first : null;
}, url, postParams); }, url, postParams);
} }
@ -47,28 +49,11 @@ class MonthlyAttendanceApiClient {
// postParams["DeviceType"] = deviceType; // postParams["DeviceType"] = deviceType;
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
print(responseData.getDayHoursTypeDetailsList!.length);
return responseData.getDayHoursTypeDetailsList ?? []; return responseData.getDayHoursTypeDetailsList ?? [];
}, url, postParams); }, url, postParams);
} }
Future<List<EmployeeLeavesList>> getEmployeeLeaves(String startDate, String endDate) async {
// String url = "${ApiConsts.erpRest}GET_TIME_CARD_SUMMARY";
String url = "${ApiConsts.erpRest}GET_EMPLOYEE_LEAVES";
Map<String, dynamic> postParams = {
"P_MENU_TYPE": "E",
"P_SELECTED_RESP_ID": -999,
// "SearchMonth": month,
// "SearchYear": year,
"P_DATE_FROM_STR": startDate,
"P_DATE_TO_STR": endDate
};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getEmployeeLeavesList ?? [];
}, url, postParams);
}
Future<GetScheduleShiftsDetailsList?> getScheduleShiftsDetails(int pRTPID) async { Future<GetScheduleShiftsDetailsList?> getScheduleShiftsDetails(int pRTPID) async {
String url = "${ApiConsts.erpRest}GET_SCHEDULE_SHIFTS_DETAILS"; String url = "${ApiConsts.erpRest}GET_SCHEDULE_SHIFTS_DETAILS";
@ -83,4 +68,5 @@ class MonthlyAttendanceApiClient {
return (responseData.getScheduleShiftsDetailsList?.length ?? 0) > 0 ? responseData.getScheduleShiftsDetailsList!.first : null; return (responseData.getScheduleShiftsDetailsList?.length ?? 0) > 0 ? responseData.getScheduleShiftsDetailsList!.first : null;
}, url, postParams); }, url, postParams);
} }
}
}

@ -19,6 +19,7 @@ class MonthlyPaySlipApiClient {
String url = "${ApiConsts.erpRest}GET_PAYSLIP"; String url = "${ApiConsts.erpRest}GET_PAYSLIP";
Map<String, dynamic> postParams = {"P_MENU_TYPE": "E", "P_SELECTED_RESP_ID": -999}; Map<String, dynamic> postParams = {"P_MENU_TYPE": "E", "P_SELECTED_RESP_ID": -999};
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
print(postParams);
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getPayslipList ?? []; return responseData.getPayslipList ?? [];

@ -1,5 +1,4 @@
import 'dart:async'; import 'dart:async';
import 'dart:convert';
import 'package:mohem_flutter_app/api/api_client.dart'; import 'package:mohem_flutter_app/api/api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart';
@ -23,7 +22,12 @@ class MyAttendanceApiClient {
String url = "${ApiConsts.erpRest}GET_EIT_TRANSACTIONS"; String url = "${ApiConsts.erpRest}GET_EIT_TRANSACTIONS";
Map<String, dynamic> postParams = {"P_PAGE_LIMIT": 50, "P_PAGE_NUM": 1, "P_SELECTED_RESP_ID": -999, "P_MENU_TYPE": "E", "P_FUNCTION_NAME": pFunctionName}; Map<String, dynamic> postParams = {"P_PAGE_LIMIT": 50, "P_PAGE_NUM": 1, "P_SELECTED_RESP_ID": -999, "P_MENU_TYPE": "E", "P_FUNCTION_NAME": pFunctionName};
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
if (empID != null) postParams["P_SELECTED_EMPLOYEE_NUMBER"] = empID; // postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID;
if (empID!.isNotEmpty) {
postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID;
// AppState().postParamsJson['P_SELECTED_EMPLOYEE_NUMBER'] = empID;
print(empID);
}
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getEITTransactionList ?? []; return responseData.getEITTransactionList ?? [];
@ -34,7 +38,9 @@ class MyAttendanceApiClient {
String url = "${ApiConsts.erpRest}GET_EIT_DFF_STRUCTURE"; String url = "${ApiConsts.erpRest}GET_EIT_DFF_STRUCTURE";
Map<String, dynamic> postParams = {"P_SELECTED_RESP_ID": -999, "P_MENU_TYPE": "E", "P_FUNCTION_NAME": pFunctionName}; Map<String, dynamic> postParams = {"P_SELECTED_RESP_ID": -999, "P_MENU_TYPE": "E", "P_FUNCTION_NAME": pFunctionName};
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
if (empID != null) postParams["P_SELECTED_EMPLOYEE_NUMBER"] = empID; if (empID!.isNotEmpty) {
postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID;
}
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData; return responseData;
@ -48,21 +54,23 @@ class MyAttendanceApiClient {
"P_MENU_TYPE": "E", "P_MENU_TYPE": "E",
"P_PAGE_LIMIT": 1000, "P_PAGE_LIMIT": 1000,
"P_PAGE_NUM": 1, "P_PAGE_NUM": 1,
"P_PARENT_VALUE": empID != null ? parentValue : null, "P_PARENT_VALUE": empID!.isNotEmpty ? parentValue : null,
"P_SEGMENT_NAME": pSegmentName, "P_SEGMENT_NAME": pSegmentName,
"P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode, "P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode,
"P_DESC_FLEX_NAME": pDescFlexName, "P_DESC_FLEX_NAME": pDescFlexName,
"GetValueSetValuesTBL": list, "GetValueSetValuesTBL": list,
}; };
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
if (empID != null) postParams["P_SELECTED_EMPLOYEE_NUMBER"] = empID; if (empID.isNotEmpty) {
postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID;
}
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getValueSetValuesList ?? []; return responseData.getValueSetValuesList ?? [];
}, url, postParams); }, url, postParams);
} }
Future<ESERVICESDV> getDefaultValue(String pSegmentName, String pDescFlexContextCode, String pDescFlexName, List<Map<String, dynamic>> list, {String? empID}) async { Future<ESERVICESDV> getDefaultValue(String pSegmentName, String pDescFlexContextCode, String pDescFlexName, List<Map<String, dynamic>> list, String? empID) async {
String url = "${ApiConsts.erpRest}GET_DEFAULT_VALUE"; String url = "${ApiConsts.erpRest}GET_DEFAULT_VALUE";
Map<String, dynamic> postParams = { Map<String, dynamic> postParams = {
"P_SELECTED_RESP_ID": -999, "P_SELECTED_RESP_ID": -999,
@ -74,15 +82,9 @@ class MyAttendanceApiClient {
"GetValueSetValuesTBL": list, "GetValueSetValuesTBL": list,
}; };
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
if (empID != null) postParams["P_SELECTED_EMPLOYEE_NUMBER"] = empID; if (empID!.isNotEmpty) {
// below commneted lines when need to verify payload postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID;
// print(jsonEncode(postParams)); }
// for (var value in list) {
// print(jsonEncode(value));
// }
//postParams["GetValueSetValuesTBL"] = list;
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return ESERVICESDV.fromJson(responseData.getDefaultValueList!.toJson()); return ESERVICESDV.fromJson(responseData.getDefaultValueList!.toJson());
@ -99,7 +101,9 @@ class MyAttendanceApiClient {
"EITTransactionTBL": list, "EITTransactionTBL": list,
}; };
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
if (empID != null) postParams["P_SELECTED_EMPLOYEE_NUMBER"] = empID; if (empID!.isNotEmpty) {
postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID;
}
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData; //ESERVICESDV.fromJson(responseData.getDefaultValueList!.toJson()); return responseData; //ESERVICESDV.fromJson(responseData.getDefaultValueList!.toJson());
@ -117,7 +121,9 @@ class MyAttendanceApiClient {
"EITTransactionTBLModel": list, "EITTransactionTBLModel": list,
}; };
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
if (empID != null) postParams["P_SELECTED_EMPLOYEE_NUMBER"] = empID; if (empID!.isNotEmpty) {
postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID;
}
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel responseData = GenericResponseModel.fromJson(json); GenericResponseModel responseData = GenericResponseModel.fromJson(json);
return responseData.submitEITTransactionList!; //ESERVICESDV.fromJson(responseData.getDefaultValueList!.toJson()); return responseData.submitEITTransactionList!; //ESERVICESDV.fromJson(responseData.getDefaultValueList!.toJson());

@ -16,9 +16,9 @@ class MyRequestsApiClient {
factory MyRequestsApiClient() => _instance; factory MyRequestsApiClient() => _instance;
Future<List<GetConcurrentProgramsModel>> getConcurrentPrograms(int id) async { Future<List<GetConcurrentProgramsModel>> getConcurrentPrograms() async {
String url = "${ApiConsts.erpRest}GET_CONCURRENT_PROGRAMS"; String url = "${ApiConsts.erpRest}GET_CONCURRENT_PROGRAMS";
Map<String, dynamic> postParams = {"P_REQUEST_GROUP_ID": id}; Map<String, dynamic> postParams = {"P_REQUEST_GROUP_ID": 3290};
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
@ -60,28 +60,30 @@ class MyRequestsApiClient {
}, url, postParams); }, url, postParams);
} }
Future<GenericResponseModel> getSubmitNewRequest(List<Map<String, dynamic>> list, {String? functionName}) async { Future<SubmitCcpTransactionList?> getSubmitNewRequest(List<Map<String, dynamic>> list) async
{
String url = "${ApiConsts.erpRest}SUBMIT_CCP_TRANSACTION"; String url = "${ApiConsts.erpRest}SUBMIT_CCP_TRANSACTION";
Map<String, dynamic> postParams = { Map<String, dynamic> postParams = {
"P_MENU_TYPE": "E", "P_MENU_TYPE": "E",
"P_SELECTED_RESP_ID": -999, "P_SELECTED_RESP_ID": -999,
"P_DESC_FLEX_NAME": functionName ?? "HMG_EMP_BUS_TRIP_SET_SS", "P_DESC_FLEX_NAME": "HMG_EMP_BUS_TRIP_SET_SS",
}; };
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
postParams["EITTransactionTBL"] = list; postParams["EITTransactionTBL"] = list;
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData; return responseData.submitCcpTransactionList;
}, url, postParams); }, url, postParams);
} }
Future<List<GetCCPTransactionsModel>> getCcpTransactions(List<Map<String, dynamic>> list, {String? functionName}) async { Future<List<GetCCPTransactionsModel>> getCcpTransactions(List<Map<String, dynamic>> list) async
{
String url = "${ApiConsts.erpRest}GET_CCP_TRANSACTIONS"; String url = "${ApiConsts.erpRest}GET_CCP_TRANSACTIONS";
Map<String, dynamic> postParams = { Map<String, dynamic> postParams = {
"P_MENU_TYPE": "E", "P_MENU_TYPE": "E",
"P_SELECTED_RESP_ID": -999, "P_SELECTED_RESP_ID": -999,
"P_DESC_FLEX_NAME": functionName ?? "HMG_EMP_BUS_TRIP_SET_SS", "P_DESC_FLEX_NAME": "HMG_EMP_BUS_TRIP_SET_SS",
}; };
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
@ -91,4 +93,5 @@ class MyRequestsApiClient {
return responseData.getCCPTransactionsModel ?? []; return responseData.getCCPTransactionsModel ?? [];
}, url, postParams); }, url, postParams);
} }
} }

@ -64,6 +64,7 @@ class MyTeamApiClient {
postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID; postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID;
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
print(responseData.getDayHoursTypeDetailsList!.length);
return responseData.getDayHoursTypeDetailsList ?? []; return responseData.getDayHoursTypeDetailsList ?? [];
}, url, postParams); }, url, postParams);
} }
@ -75,6 +76,7 @@ class MyTeamApiClient {
postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID; postParams['P_SELECTED_EMPLOYEE_NUMBER'] = empID;
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
print(responseData.getAttendanceTrackingList);
return responseData.getAttendanceTrackingList; return responseData.getAttendanceTrackingList;
}, url, postParams); }, url, postParams);
} }

@ -17,7 +17,7 @@ class OffersAndDiscountsApiClient {
List<GetCategoriesList> getSaleCategoriesList = []; List<GetCategoriesList> getSaleCategoriesList = [];
String url = "${ApiConsts.cocRest}Mohemm_ITG_GetCategories"; String url = "${ApiConsts.cocRest}Mohemm_ITG_GetCategories";
Map<String, dynamic> postParams = {"EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER, "ItgPageSize": 100, "ItgPageNo": 1, "ItgIsActive": true}; Map<String, dynamic> postParams = {"EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER, "ItgPageSize": 100, "ItgPageNo": 1};
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject( return await ApiClient().postJsonForObject(
@ -30,7 +30,7 @@ class OffersAndDiscountsApiClient {
getSaleCategoriesListObj.categoryNameAr = "الجميع"; getSaleCategoriesListObj.categoryNameAr = "الجميع";
getSaleCategoriesListObj.isActive = true; getSaleCategoriesListObj.isActive = true;
getSaleCategoriesListObj.content = getSaleCategoriesListObj.content =
'<svg xmlns="http://www.w3.org/2000/svg" width="26.213" height="26.213" viewBox="0 0 26.213 26.213"> <g id="More_Select" data-name="More Select" transform="translate(-1 -1)"> <path id="Path_4860" data-name="Path 4860" d="M26.844,1H5.874A.874.874,0,0,0,5,1.874v.874H23.349A2.621,2.621,0,0,1,25.97,5.369V23.718h.874a.874.874,0,0,0,.874-.874V1.874A.874.874,0,0,0,26.844,1Z" transform="translate(-0.505)" fill="#2bb8a6"/> <path id="Path_4861" data-name="Path 4861" d="M22.844,5H1.874A.874.874,0,0,0,1,5.874v20.97a.874.874,0,0,0,.874.874h20.97a.874.874,0,0,0,.874-.874V5.874A.874.874,0,0,0,22.844,5ZM18.7,13.164,11.07,20.789a.874.874,0,0,1-1.236,0L6.022,16.977a.874.874,0,1,1,1.236-1.236l3.2,3.195,7.008-7.007A.874.874,0,1,1,18.7,13.165Z" transform="translate(0 -0.505)" fill="#125765"/> </g> </svg>'; '<svg xmlns="http://www.w3.org/2000/svg" width="33.925" height="25.841" viewBox="0 0 33.925 25.841"><g id="More_Select" data-name="More Select"><path d="m30 1h-24a1 1 0 0 0 -1 1v1h21a3 3 0 0 1 3 3v21h1a1 1 0 0 0 1-1v-24a1 1 0 0 0 -1-1z"/><path d="m26 5h-24a1 1 0 0 0 -1 1v24a1 1 0 0 0 1 1h24a1 1 0 0 0 1-1v-24a1 1 0 0 0 -1-1zm-4.747 9.344-8.728 8.726a1 1 0 0 1 -1.414 0l-4.364-4.363a1 1 0 0 1 1.414-1.414l3.657 3.656 8.021-8.019a1 1 0 0 1 1.414 1.414z"/></g></svg>';
getSaleCategoriesList.add(getSaleCategoriesListObj); getSaleCategoriesList.add(getSaleCategoriesListObj);
@ -55,12 +55,12 @@ class OffersAndDiscountsApiClient {
(response) { (response) {
var body = json.decode(response['Mohemm_ITG_ResponseItem']); var body = json.decode(response['Mohemm_ITG_ResponseItem']);
var bodyData = body['result']['data']; var bodyData = json.decode(body['result']['data']);
if (bodyData != null) { if(bodyData != null) {
bodyData.forEach((v) { bodyData.forEach((v) {
getSaleCategoriesList.add(OffersListModel.fromJson(v)); getSaleCategoriesList.add(OffersListModel.fromJson(v));
}); });
} }
return getSaleCategoriesList; return getSaleCategoriesList;
}, },

@ -12,10 +12,8 @@ import 'package:mohem_flutter_app/models/get_employee_address_model.dart';
import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart';
import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart';
import 'package:mohem_flutter_app/models/get_employee_phones_model.dart'; import 'package:mohem_flutter_app/models/get_employee_phones_model.dart';
import 'package:mohem_flutter_app/models/hierarchy_lists.dart';
import 'package:mohem_flutter_app/models/performance.dart'; import 'package:mohem_flutter_app/models/performance.dart';
import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart'; import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart';
import 'package:mohem_flutter_app/models/profile/employee_qualifications_list.dart';
import 'package:mohem_flutter_app/models/profile/get_contact_clos_structure_list.dart'; import 'package:mohem_flutter_app/models/profile/get_contact_clos_structure_list.dart';
import 'package:mohem_flutter_app/models/profile/get_contact_details_list.dart'; import 'package:mohem_flutter_app/models/profile/get_contact_details_list.dart';
import 'package:mohem_flutter_app/models/profile/get_countries_list_model.dart'; import 'package:mohem_flutter_app/models/profile/get_countries_list_model.dart';
@ -43,6 +41,7 @@ class ProfileApiClient {
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
print(responseData);
return responseData.getEmployeeContactsList ?? []; return responseData.getEmployeeContactsList ?? [];
}, url, postParams); }, url, postParams);
} }
@ -60,19 +59,6 @@ class ProfileApiClient {
}, url, postParams); }, url, postParams);
} }
Future<List<EmployeeQualificationsList>> getEmployeeQualifications() async {
String url = "${ApiConsts.erpRest}GET_EMPLOYEE_QUALIFICATIONS";
Map<String, dynamic> postParams = {
"P_MENU_TYPE": "E",
"P_SELECTED_RESP_ID": -999,
};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getEmployeeQualificationsList ?? [];
}, url, postParams);
}
Future<List<GetEmployeePhonesList>> getEmployeePhones() async { Future<List<GetEmployeePhonesList>> getEmployeePhones() async {
String url = "${ApiConsts.erpRest}GET_EMPLOYEE_PHONES"; String url = "${ApiConsts.erpRest}GET_EMPLOYEE_PHONES";
Map<String, dynamic> postParams = { Map<String, dynamic> postParams = {
@ -272,6 +258,7 @@ class ProfileApiClient {
// "EITTransactionTBLModel": list, // "EITTransactionTBLModel": list,
}; };
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
print("postParams:$postParams");
postParams["EITTransactionTBL"] = list; postParams["EITTransactionTBL"] = list;
postParams["EITTransactionTBLModel"] = list; postParams["EITTransactionTBLModel"] = list;
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
@ -313,6 +300,7 @@ class ProfileApiClient {
// "EITTransactionTBLModel": list, // "EITTransactionTBLModel": list,
}; };
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
print("postParams:$postParams");
postParams["EITTransactionTBL"] = list; postParams["EITTransactionTBL"] = list;
// postParams["EITTransactionTBLModel"] = list; // postParams["EITTransactionTBLModel"] = list;
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
@ -401,7 +389,12 @@ class ProfileApiClient {
}; };
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
print("postParam:${json.encode(postParams)}");
postParams["EITTransactionTBL"] = list; postParams["EITTransactionTBL"] = list;
list.forEach((element) {
print(json.encode(element));
});
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json); GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.submitContactTransactionList; return responseData.submitContactTransactionList;
@ -418,19 +411,4 @@ class ProfileApiClient {
return responseData.getPerformanceAppraisalList ?? []; return responseData.getPerformanceAppraisalList ?? [];
}, url, postParams); }, url, postParams);
} }
Future<SupervisorHierarchyLists?> getHierarchy(String empNum) async {
String url = "${ApiConsts.erpRest}GET_SUPERVISOR_HIERARCHY";
Map<String, dynamic> postParams = {
"P_MENU_TYPE": "E",
"P_SELECTED_RESP_ID": -999
};
postParams.addAll(AppState().postParamsJson);
postParams["P_SELECTED_EMPLOYEE_NUMBER"] = empNum;
return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.supervisorHierarchyLists;
}, url, postParams);
}
} }

@ -46,6 +46,9 @@ class TerminationDffApiClient {
}; };
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
for (var abc in list) {
print(abc);
}
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel genericResponseModel = GenericResponseModel.fromJson(json); GenericResponseModel genericResponseModel = GenericResponseModel.fromJson(json);
return genericResponseModel.submitTermTransactionList!; return genericResponseModel.submitTermTransactionList!;

@ -26,7 +26,6 @@ import 'package:mohem_flutter_app/models/update_user_item_type_list.dart';
import 'package:mohem_flutter_app/models/worklist/GetRFCEmployeeList.dart'; import 'package:mohem_flutter_app/models/worklist/GetRFCEmployeeList.dart';
import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart'; import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/eit_otification_body_model.dart'; import 'package:mohem_flutter_app/models/worklist/hr/eit_otification_body_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_address_notification_body_list.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_basic_det_ntf_body_list_model.dart'; import 'package:mohem_flutter_app/models/worklist/hr/get_basic_det_ntf_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_contact_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/worklist/hr/get_contact_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_phones_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/worklist/hr/get_phones_notification_body_list_model.dart';
@ -149,16 +148,15 @@ class WorkListApiClient {
}, url, postParams); }, url, postParams);
} }
Future<MemberInformationListModel> getUserInformation(int pSelectedResopID, String selectedEmployeeNumber, String noficationId) async { Future<MemberInformationListModel> getUserInformation(int pSelectedResopID, String selectedEmployeeNumber) async {
String url = "${ApiConsts.erpRest}Get_Notification_UserInformation"; String url = "${ApiConsts.erpRest}Get_UserInformation";
Map<String, dynamic> postParams = { Map<String, dynamic> postParams = {
"P_SELECTED_RESP_ID": pSelectedResopID, "P_SELECTED_RESP_ID": pSelectedResopID,
"P_PAGE_LIMIT": 100, "P_PAGE_LIMIT": 100,
"P_PAGE_NUM": 1, "P_PAGE_NUM": 1,
"P_NOTIFICATION_ID": noficationId,
}; };
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
if (selectedEmployeeNumber != null) postParams["P_SELECTED_EMPLOYEE_NUMBER"] = selectedEmployeeNumber; postParams["P_SELECTED_EMPLOYEE_NUMBER"] = selectedEmployeeNumber;
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel responseData = GenericResponseModel.fromJson(json); GenericResponseModel responseData = GenericResponseModel.fromJson(json);
return responseData.memberInformationList![0]; return responseData.memberInformationList![0];
@ -414,7 +412,7 @@ class WorkListApiClient {
"EmployeeNumber": employeeNumber, "EmployeeNumber": employeeNumber,
"Comments": "", "Comments": "",
"AdditionalFields": null, "AdditionalFields": null,
"NewUserEMPId": newUserEMPId "NewUserEMPId":newUserEMPId
}; };
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
@ -511,20 +509,6 @@ class WorkListApiClient {
}, url, postParams); }, url, postParams);
} }
Future<List<GetAddressNotificationBodyList>?> getAddressNotificationBodyList(int? notificationId) async {
String url = "${ApiConsts.erpRest}GET_ADDRESS_NOTIFICATION_BODY";
Map<String, dynamic> postParams = {
"P_NOTIFICATION_ID": notificationId,
"P_PAGE_LIMIT": 100,
"P_PAGE_NUM": 1,
};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
return responseData.getAddressNotificationBodyList;
}, url, postParams);
}
Future<List<GetFavoriteReplacements>?> getFavoriteReplacementWithoutImage() async { Future<List<GetFavoriteReplacements>?> getFavoriteReplacementWithoutImage() async {
String url = "${ApiConsts.erpRest}Mohemm_GetFavoriteReplacementsWithoutImage"; String url = "${ApiConsts.erpRest}Mohemm_GetFavoriteReplacementsWithoutImage";
Map<String, dynamic> postParams = {}; Map<String, dynamic> postParams = {};

File diff suppressed because one or more lines are too long

@ -6,8 +6,8 @@ class MyColors {
static const Color darkTextColor = Color(0xff2B353E); static const Color darkTextColor = Color(0xff2B353E);
static const Color normalTextColor = Color(0xff5A5A5A); static const Color normalTextColor = Color(0xff5A5A5A);
static const Color lightTextColor = Color(0xffBFBFBF); static const Color lightTextColor = Color(0xffBFBFBF);
static const Color gradiantStartColor = Color(0xff259db7); static const Color gradiantStartColor = Color(0xff33c0a5);
static const Color gradiantEndColor = Color(0xff33c0a5); static const Color gradiantEndColor = Color(0xff259db7);
static const Color textMixColor = Color(0xff2BB8A6); static const Color textMixColor = Color(0xff2BB8A6);
static const Color backgroundColor = Color(0xffF8F8F8); static const Color backgroundColor = Color(0xffF8F8F8);
static const Color grey41Color = Color(0xff414141); static const Color grey41Color = Color(0xff414141);
@ -30,7 +30,7 @@ class MyColors {
static const Color darkWhiteColor = Color(0xffE0E0E0); static const Color darkWhiteColor = Color(0xffE0E0E0);
static const Color redColor = Color(0xffD02127); static const Color redColor = Color(0xffD02127);
static const Color pinkColor = Color(0xffEBA9A9); static const Color pinkColor = Color(0xffEBA9A9);
static const Color pinkDarkColor = Color(0xffdb5b6a); static const Color pinkDarkColor = Color(0xffe3797d);
static const Color yellowColor = Color(0xffF4E31C); static const Color yellowColor = Color(0xffF4E31C);
static const Color orange = Color(0xFFCC9B14); static const Color orange = Color(0xFFCC9B14);
static const Color yellowFavColor = Color(0xffEAC321); static const Color yellowFavColor = Color(0xffEAC321);
@ -41,7 +41,6 @@ class MyColors {
static const Color borderColor = Color(0xffE8E8E8); static const Color borderColor = Color(0xffE8E8E8);
static const Color borderE3Color = Color(0xffE3E3E3); static const Color borderE3Color = Color(0xffE3E3E3);
static const Color borderCEColor = Color(0xffCECECE); static const Color borderCEColor = Color(0xffCECECE);
//static const Color grey67Color = Color(0xff676767); //static const Color grey67Color = Color(0xff676767);
static const Color whiteColor = Color(0xFFEEEEEE); static const Color whiteColor = Color(0xFFEEEEEE);
static const Color greenColor = Color(0xff1FA269); static const Color greenColor = Color(0xff1FA269);
@ -56,13 +55,11 @@ class MyColors {
static const Color lightGreyColor = Color(0xffC7C7C7); static const Color lightGreyColor = Color(0xffC7C7C7);
static const Color green69Color = Color(0xff1FA169); static const Color green69Color = Color(0xff1FA169);
static const Color redA3Color = Color(0xffCA3332); static const Color redA3Color = Color(0xffCA3332);
static const Color green9CColor = Color(0xff259CB8); static const Color green9CColor = Color(0xff259CB8);
static const Color green2DColor = Color(0xff32D892); static const Color green2DColor = Color(0xff32D892);
static const Color greyC4Color = Color(0xffC4C4C4); static const Color greyC4Color = Color(0xffC4C4C4);
static const Color grey35Color = Color(0xff535353); static const Color grey35Color = Color(0xff535353);
static const Color grey9DColor = Color(0xff9D9D9D); static const Color grey9DColor = Color(0xff9D9D9D);
static const Color darkDigitColor = Color(0xff2D2F39); static const Color darkDigitColor = Color(0xff2D2F39);
static const Color grey71Color = Color(0xff717171); static const Color grey71Color = Color(0xff717171);
static const Color darkGrey3BColor = Color(0xff3B3B3B);
static const Color lightGreyIconColor = Color(0xff919191);
} }

@ -1,16 +1,19 @@
import 'package:mohem_flutter_app/ui/marathon/widgets/question_card.dart'; import 'package:mohem_flutter_app/ui/marathon/widgets/question_card.dart';
class ApiConsts { class ApiConsts {
static String baseUrl = "https://uathrmsys.moenergy.gov.sa"; //MOE UAT //static String baseUrl = "http://10.200.204.20:2801/"; // Local server
// static String baseUrl = "https://hrmsys.moenergy.gov.sa"; // MOE ;LIVE 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 baseUrlServices = baseUrl + "/Services/"; // server
// static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server
static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/"; static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/";
static String erpRest = baseUrlServices + "ERP.svc/REST/"; static String erpRest = baseUrlServices + "ERP.svc/REST/";
static String swpRest = baseUrlServices + "SWP.svc/REST/"; static String swpRest = baseUrlServices + "SWP.svc/REST/";
static String user = baseUrlServices + "api/User/"; static String user = baseUrlServices + "api/User/";
static String cocRest = baseUrlServices + "COCWS.svc/REST/"; static String cocRest = baseUrlServices + "COCWS.svc/REST/";
// todo @aamir move api end point last repo to concerned method.
//Chat //Chat
static String chatServerBaseUrl = "https://apiderichat.hmg.com/"; static String chatServerBaseUrl = "https://apiderichat.hmg.com/";
static String chatServerBaseApiUrl = chatServerBaseUrl + "api/"; static String chatServerBaseApiUrl = chatServerBaseUrl + "api/";
@ -25,21 +28,21 @@ class ApiConsts {
static String chatUserImages = chatServerBaseUrl + "empservice/api/employee/"; static String chatUserImages = chatServerBaseUrl + "empservice/api/employee/";
//Brain Marathon Constants //Brain Marathon Constants
static String marathonBaseUrl = "https://marathoon.com/service/api/"; static String marathonBaseUrl = "https://18.188.181.12/service/api/";
static String marathonBaseUrlServices = "https://marathoon.com/service/"; static String marathonHubConnectionUrl = "https://18.188.181.12/service/MarathonBroadCast";
static String marathonParticipantLoginUrl = marathonBaseUrl + "auth/participantlogin"; static String marathonParticipantLoginUrl = marathonBaseUrl + "auth/participantlogin";
static String marathonProjectGetUrl = marathonBaseUrl + "Project/Project_Get"; static String marathonProjectGetUrl = marathonBaseUrl + "Project/Project_Get";
static String marathonUpcomingUrl = marathonBaseUrl + "marathon/upcoming/"; static String marathonUpcomingUrl = marathonBaseUrl + "marathon/upcoming/";
static String marathonJoinParticipantUrl = marathonBaseUrl + "participant/join";
static String marathonJoinParticipantUrl = marathonBaseUrl + "participant/participant_join";
static String marathonNextQuestionUrl = marathonBaseUrl + "question/next"; static String marathonNextQuestionUrl = marathonBaseUrl + "question/next";
static String marathonSubmitAnswerUrl = marathonBaseUrl + "question/submit"; static String marathonSubmitAnswerUrl = marathonBaseUrl + "question/submit";
static String marathonQualifiersUrl = marathonBaseUrl + "winner/getWinner/"; static String marathonQualifiersUrl = marathonBaseUrl + "winner/getWinner/";
static String marathonSelectedWinner = marathonBaseUrl + "winner/getSelectedWinner/"; static String marathonSelectedWinner = marathonBaseUrl + "winner/getSelectedWinner/";
//DummyCards for the UI //DummyCards for the UI
static CardContent dummyQuestion = const CardContent();
static int tabletMinLength = 500; static CardContent dummyQuestion = const CardContent();
} }
class SharedPrefsConsts { class SharedPrefsConsts {

@ -6,6 +6,7 @@ class DateUtil {
/// ///
/// ///
static DateTime convertStringToDateMarathon(String date) { static DateTime convertStringToDateMarathon(String date) {
// /Date(1585774800000+0300)/ // /Date(1585774800000+0300)/
if (date != null) { if (date != null) {
@ -39,34 +40,11 @@ class DateUtil {
} }
static DateTime convertSimpleStringDateToDate(String date) { static DateTime convertSimpleStringDateToDate(String date) {
// print(date.toUpperCase()); return DateFormat("MM/dd/yyyy hh:mm:ss a").parse(date);
return getDateTimeFromString(date.split(" ")[0], date.toUpperCase().split(" ")[1] + " " + date.toUpperCase().split(" ")[2]);
}
static DateTime getDateTimeFromString(String date, String time) {
var hours = num.parse(time.split(":")[0]);
var mins = time.split(":")[1];
var secs = time.split(":")[2].split(" ")[0];
String meridium = time.split(" ")[1];
if (meridium == "PM") {
if (hours != 12) {
hours = hours + 12;
}
}
if (meridium == "AM") {
if (hours == 12) {
hours = 00;
}
}
date = date + " $hours:$mins:$secs";
DateTime returnDate = DateFormat("MM/dd/yyyy HH:mm:ss", "en_US").parse(date);
return returnDate;
} }
static DateTime convertSimpleStringDateToDateddMMyyyy(String date) { static DateTime convertSimpleStringDateToDateddMMyyyy(String date) {
return DateFormat("MM/dd/yyyy hh:mm:ss", "en_US").parse(date); return DateFormat("MM/dd/yyyy hh:mm:ss").parse(date);
} }
static DateTime convertStringToDateNoTimeZone(String date) { static DateTime convertStringToDateNoTimeZone(String date) {
@ -123,7 +101,7 @@ class DateUtil {
} }
static String formatDateToTime(DateTime date) { static String formatDateToTime(DateTime date) {
return DateFormat('hh:mm a', "en_US").format(date); return DateFormat('hh:mm a').format(date);
} }
static String yearMonthDay(DateTime dateTime) { static String yearMonthDay(DateTime dateTime) {
@ -419,7 +397,7 @@ class DateUtil {
/// [dateTime] convert DateTime to data formatted /// [dateTime] convert DateTime to data formatted
static String getDayMonthDateFormatted(DateTime dateTime) { static String getDayMonthDateFormatted(DateTime dateTime) {
if (dateTime != null) if (dateTime != null)
return DateFormat('dd/MM', "en_US").format(dateTime); return DateFormat('dd/MM').format(dateTime);
else else
return ""; return "";
} }
@ -459,14 +437,14 @@ class DateUtil {
/// get data formatted like 10:30 according to lang /// get data formatted like 10:30 according to lang
static String formatDateToTimeLang(DateTime date, bool isArabic) { static String formatDateToTimeLang(DateTime date, bool isArabic) {
return DateFormat('hh:mm a', isArabic ? "ar_SA" : "en_US").format(date); return DateFormat('HH:mm a', isArabic ? "ar_SA" : "en_US").format(date);
} }
/// get data formatted like 26/4/2020 10:30 /// get data formatted like 26/4/2020 10:30
/// [dateTime] convert DateTime to data formatted /// [dateTime] convert DateTime to data formatted
static String getDayMonthYearHourMinuteDateFormatted(DateTime dateTime) { static String getDayMonthYearHourMinuteDateFormatted(DateTime dateTime) {
if (dateTime != null) if (dateTime != null)
return dateTime.day.toString() + "/" + dateTime.month.toString() + "/" + dateTime.year.toString() + " " + DateFormat('HH:mm', "en_US").format(dateTime); return dateTime.day.toString() + "/" + dateTime.month.toString() + "/" + dateTime.year.toString() + " " + DateFormat('HH:mm').format(dateTime);
else else
return ""; return "";
} }
@ -491,11 +469,11 @@ class DateUtil {
} }
static String getFormattedDate(DateTime dateTime, String formattedString) { static String getFormattedDate(DateTime dateTime, String formattedString) {
return DateFormat(formattedString, "en_US").format(dateTime); return DateFormat(formattedString).format(dateTime);
} }
static String convertISODateToJsonDate(String isoDate) { static String convertISODateToJsonDate(String isoDate) {
return "/Date(" + DateFormat('mm-dd-yyy', "en_US").parse(isoDate).millisecondsSinceEpoch.toString() + ")/"; return "/Date(" + DateFormat('mm-dd-yyy').parse(isoDate).millisecondsSinceEpoch.toString() + ")/";
} }
// static String getDay(DayOfWeek dayOfWeek) { // static String getDay(DayOfWeek dayOfWeek) {

@ -1,27 +0,0 @@
import 'dart:convert';
import 'dart:typed_data';
import 'package:flutter/services.dart';
class EmailImageEncryption {
static final EmailImageEncryption _instance = EmailImageEncryption._internal();
static const MethodChannel _channel = MethodChannel('flutter_des');
static const key = "PeShVmYp";
static const iv = "j70IbWYn";
EmailImageEncryption._internal();
factory EmailImageEncryption() => _instance;
Future<String> encrypt({required String val}) async {
Uint8List? crypt = await _channel.invokeMethod('encrypt', [val, key, iv]);
String enc = base64Encode(crypt!.toList());
return enc;
}
Future<String> decrypt({required String encodedVal}) async {
Uint8List deco = base64Decode(encodedVal);
String? decCrypt = await _channel.invokeMethod('decrypt', [deco, key, iv]);
return decCrypt!;
}
}

@ -7,6 +7,4 @@ class MyLottieConsts {
static const String marathonWaiting = "assets/lottie/marathon_waiting.json"; static const String marathonWaiting = "assets/lottie/marathon_waiting.json";
static const String wrongAnswerGif = "assets/images/wrong_answer.gif"; static const String wrongAnswerGif = "assets/images/wrong_answer.gif";
static const String congratsGif = "assets/images/congrats.gif"; static const String congratsGif = "assets/images/congrats.gif";
static const String loadingLottie = "assets/lottie/loading_lottie.json";
static const String noWinnerLottie = "assets/lottie/no_winner.json";
} }

@ -1,279 +0,0 @@
// import 'dart:io';
//
// import 'package:firebase_core/firebase_core.dart';
// import 'package:firebase_messaging/firebase_messaging.dart';
// import 'package:flutter/foundation.dart';
// import 'package:flutter_local_notifications/flutter_local_notifications.dart';
// import 'package:huawei_hmsavailability/huawei_hmsavailability.dart';
// import 'package:huawei_push/huawei_push.dart' as huawei_push;
// import 'package:mohem_flutter_app/app_state/app_state.dart';
// import 'package:mohem_flutter_app/classes/utils.dart';
// import 'package:permission_handler/permission_handler.dart';
//
// final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
//
// class AppNotifications {
// static final AppNotifications _instance = AppNotifications._internal();
//
// AppNotifications._internal();
//
// factory AppNotifications() => _instance;
//
// late HmsApiAvailability hmsApiAvailability;
//
// String _huaweiToken = '';
//
// Future<void> requestPermissions() async {
// if (Platform.isIOS) {
// await flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation<IOSFlutterLocalNotificationsPlugin>()?.requestPermissions(alert: true, badge: true, sound: true);
// } else if (Platform.isAndroid) {
// AndroidFlutterLocalNotificationsPlugin? androidImplementation = flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>();
// bool? granted = await androidImplementation?.requestPermission();
// if (granted == false) {
// if (kDebugMode) {
// print("-------------------- Permission Granted ------------------------");
// print(granted);
// }
// await Permission.notification.request();
// }
// }
// }
//
// void init(String? firebaseToken) async {
// hmsApiAvailability = HmsApiAvailability();
// await requestPermissions();
// AppState().setDeviceToken = firebaseToken;
// await Permission.notification.isDenied.then((bool value) {
// if (value) {
// Permission.notification.request();
// }
// });
// RemoteMessage? initialMessage = await FirebaseMessaging.instance.getInitialMessage();
//
// if (initialMessage != null) _handleMessage(initialMessage);
//
// FirebaseMessaging.onMessage.listen((RemoteMessage message) {
// if (message.notification != null) _handleMessage(message);
// });
//
// FirebaseMessaging.onMessageOpenedApp.listen(_handleOpenApp);
//
// FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler);
//
// FirebaseMessaging.instance.onTokenRefresh.listen((String token) {
// AppState().setDeviceToken = token;
// });
//
// if (Platform.isAndroid) {
// await hmsApiAvailability.isHMSAvailable().then((value) async {
// if (value == 0) {
// huawei_push.Push.enableLogger();
// var result = await huawei_push.Push.setAutoInitEnabled(true);
//
// huawei_push.Push.onNotificationOpenedApp.listen((message) {
// // newMessage(toFirebaseRemoteMessage(message));
// }, onError: (e) => print(e.toString()));
//
// huawei_push.Push.onMessageReceivedStream.listen((message) {
// // newMessage(toFirebaseRemoteMessage(message));
// }, onError: (e) => print(e.toString()));
// }
// }).catchError((err) {
// print(err);
// });
// }
// }
//
// void initHuaweiPush(Function loginCallback) {
// AppState().setIsHuawei = true;
// initTokenStream(loginCallback);
// huawei_push.Push.getToken("");
// }
//
// // HUAWEI PUSH TOKEN IMPLEMENTATION
// void _onTokenEvent(String event) {
// _huaweiToken = event;
// AppState().setHuaweiPushToken = _huaweiToken;
// debugPrint("HUAWEI PUSH TOKEN: $_huaweiToken");
// }
//
// void _onTokenError(Object error) {}
//
// Future<void> initTokenStream(Function loginCallback) async {
// huawei_push.Push.getTokenStream.listen(_onTokenEvent, onError: _onTokenError).onData((data) {
// AppState().setHuaweiPushToken = data;
// debugPrint("HUAWEI PUSH TOKEN: $data");
// loginCallback();
// });
// }
//
// void _handleMessage(RemoteMessage message) {
// Utils.saveStringFromPrefs("isAppOpendByChat", "false");
// }
//
// void _handleOpenApp(RemoteMessage message) {
// Utils.saveStringFromPrefs("isAppOpendByChat", "true");
// Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString());
// }
// }
//
// AndroidNotificationChannel channel = const AndroidNotificationChannel(
// "high_importance_channel",
// "High Importance Notifications",
// importance: Importance.high,
// );
//
// Future<dynamic> backgroundMessageHandler(RemoteMessage message) async {
// await Firebase.initializeApp();
// Utils.saveStringFromPrefs("isAppOpendByChat", "false");
// Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString());
// }
//************** NEW fILE *****************
import 'dart:io';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
// import 'package:huawei_hmsavailability/huawei_hmsavailability.dart';
import 'package:huawei_push/huawei_push.dart' as huawei_push;
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:permission_handler/permission_handler.dart';
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
class AppNotifications {
static final AppNotifications _instance = AppNotifications._internal();
AppNotifications._internal();
factory AppNotifications() => _instance;
// late HmsApiAvailability hmsApiAvailability;
String _huaweiToken = '';
Future<void> requestPermissions() async {
if (Platform.isIOS) {
await flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation<IOSFlutterLocalNotificationsPlugin>()?.requestPermissions(alert: true, badge: true, sound: true);
} else if (Platform.isAndroid) {
AndroidFlutterLocalNotificationsPlugin? androidImplementation = flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>();
bool? granted = await androidImplementation?.requestPermission();
if (granted == false) {
if (kDebugMode) {
print("-------------------- Permission Granted ------------------------");
print(granted);
}
await Permission.notification.request();
}
}
}
void init(String? firebaseToken) async {
// if (Platform.isAndroid) {
// hmsApiAvailability = HmsApiAvailability();
// }
await requestPermissions();
AppState().setDeviceToken = firebaseToken;
await Permission.notification.isDenied.then((bool value) {
if (value) {
Permission.notification.request();
}
});
RemoteMessage? initialMessage = await FirebaseMessaging.instance.getInitialMessage();
if (initialMessage != null) _handleMessage(initialMessage);
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
if (message.notification != null) _handleMessage(message);
});
FirebaseMessaging.onMessageOpenedApp.listen(_handleOpenApp);
FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler);
FirebaseMessaging.instance.onTokenRefresh.listen((String token) {
AppState().setDeviceToken = token;
});
if (Platform.isAndroid) {
// await hmsApiAvailability.isHMSAvailable().then((value) async {
if (!(await Utils.isGoogleServicesAvailable())) {
huawei_push.Push.enableLogger();
var result = await huawei_push.Push.setAutoInitEnabled(true);
huawei_push.Push.onNotificationOpenedApp.listen((message) {
// newMessage(toFirebaseRemoteMessage(message));
}, onError: (e) => print(e.toString()));
huawei_push.Push.onMessageReceivedStream.listen((message) {
// newMessage(toFirebaseRemoteMessage(message));
}, onError: (e) => print(e.toString()));
}
// }).catchError((err) {
// print(err);
// });
}
}
void initHuaweiPush(Function loginCallback) {
AppState().setIsHuawei = true;
initTokenStream(loginCallback);
huawei_push.Push.getToken("");
}
// HUAWEI PUSH TOKEN IMPLEMENTATION
void _onTokenEvent(String event) {
_huaweiToken = event;
AppState().setHuaweiPushToken = _huaweiToken;
debugPrint("HUAWEI PUSH TOKEN: $_huaweiToken");
}
void _onTokenError(Object error) {}
Future<void> initTokenStream(Function loginCallback) async {
huawei_push.Push.getTokenStream.listen(_onTokenEvent, onError: _onTokenError).onData((data) {
AppState().setHuaweiPushToken = data;
debugPrint("HUAWEI PUSH TOKEN: $data");
loginCallback();
});
}
void _handleMessage(RemoteMessage message) {
Utils.saveStringFromPrefs("isAppOpendByChat", "false");
}
void _handleOpenApp(RemoteMessage message) {
if (message.data.isNotEmpty && message.data["type"] == 'chat') {
Utils.saveStringFromPrefs("isAppOpendByChat", "true");
Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString());
}
}
}
AndroidNotificationChannel channel = const AndroidNotificationChannel(
"high_importance_channel",
"High Importance Notifications",
importance: Importance.high,
);
Future<dynamic> backgroundMessageHandler(RemoteMessage message) async {
await Firebase.initializeApp();
Utils.saveStringFromPrefs("isAppOpendByChat", "false");
Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString());
if (message.data.isNotEmpty && message.data["type"] == 'call') {
// ChatVoipCall().showCallkitIncoming(uuid: const Uuid().v4(), data: message);
}
}

@ -7,7 +7,6 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:google_api_availability/google_api_availability.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/config/routes.dart';
@ -21,7 +20,6 @@ import 'package:mohem_flutter_app/widgets/loading_dialog.dart';
import 'package:nfc_manager/nfc_manager.dart'; import 'package:nfc_manager/nfc_manager.dart';
import 'package:nfc_manager/platform_tags.dart'; import 'package:nfc_manager/platform_tags.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
// ignore_for_file: avoid_annotating_with_dynamic // ignore_for_file: avoid_annotating_with_dynamic
class Utils { class Utils {
@ -37,7 +35,7 @@ class Utils {
timeInSecForIosWeb: 1, timeInSecForIosWeb: 1,
backgroundColor: Colors.black54, backgroundColor: Colors.black54,
textColor: Colors.white, textColor: Colors.white,
fontSize: 13.0); fontSize: 16.0);
} }
static dynamic getNotNullValue(List<dynamic> list, int index) { static dynamic getNotNullValue(List<dynamic> list, int index) {
@ -66,7 +64,6 @@ class Utils {
showDialog( showDialog(
context: context, context: context,
barrierColor: Colors.black.withOpacity(0.5), barrierColor: Colors.black.withOpacity(0.5),
useRootNavigator: false,
builder: (BuildContext context) => LoadingDialog(), builder: (BuildContext context) => LoadingDialog(),
).then((value) { ).then((value) {
_isLoadingVisible = false; _isLoadingVisible = false;
@ -87,11 +84,6 @@ class Utils {
return prefs.getString(key) ?? ""; return prefs.getString(key) ?? "";
} }
static Future<bool> removeStringFromPrefs(String key) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.remove(key);
}
static Future<bool> saveStringFromPrefs(String key, String value) async { static Future<bool> saveStringFromPrefs(String key, String value) async {
SharedPreferences prefs = await SharedPreferences.getInstance(); SharedPreferences prefs = await SharedPreferences.getInstance();
return await prefs.setString(key, value); return await prefs.setString(key, value);
@ -99,61 +91,39 @@ class Utils {
static void handleException(dynamic exception, cxt, Function(String)? onErrorMessage) { static void handleException(dynamic exception, cxt, Function(String)? onErrorMessage) {
String errorMessage; String errorMessage;
print("exception:$exception"); if (exception is APIException) {
if (exception?.error?.errorType != null && exception.error.errorType == 4) { if (exception.message == APIException.UNAUTHORIZED) {
Navigator.pushNamedAndRemoveUntil(cxt, AppRoutes.appUpdateScreen, (_) => false, arguments: exception.error?.errorMessage); return;
} else {
if (exception is APIException) {
if (exception.message == APIException.UNAUTHORIZED) {
return;
} else {
errorMessage = exception.error?.errorMessage ?? exception.message;
}
} else { } else {
errorMessage = APIException.UNKNOWN; errorMessage = exception.error?.errorMessage ?? exception.message;
} }
if (onErrorMessage != null) { } else {
onErrorMessage(errorMessage); errorMessage = APIException.UNKNOWN;
}
if (onErrorMessage != null) {
onErrorMessage(errorMessage);
} else {
if (!AppState().isAuthenticated) {
showDialog(
context: cxt,
builder: (cxt) => ConfirmDialog(
message: errorMessage,
onTap: () {
Navigator.pushNamedAndRemoveUntil(cxt, AppRoutes.login, (Route<dynamic> route) => false);
},
),
);
} else { } else {
if (!AppState().isAuthenticated) { showToast(errorMessage);
showDialog(
barrierDismissible: false,
context: cxt,
builder: (cxt) => ConfirmDialog(
message: errorMessage,
onTap: () {
Navigator.pushNamedAndRemoveUntil(cxt, AppRoutes.login, (Route<dynamic> route) => false);
},
onCloseTap: () {},
),
);
} else {
if (cxt != null) {
confirmDialog(cxt, errorMessage);
} else {
showToast(errorMessage);
}
}
} }
} }
} }
static Future showErrorDialog({required BuildContext context, required VoidCallback onOkTapped, required String message}) async { static void confirmDialog(cxt, String message) {
return showDialog(
context: context,
builder: (BuildContext context) => ConfirmDialog(
message: message,
onTap: onOkTapped,
),
);
}
static void confirmDialog(cxt, String message, {VoidCallback? onTap}) {
showDialog( showDialog(
context: cxt, context: cxt,
builder: (BuildContext cxt) => ConfirmDialog( builder: (cxt) => ConfirmDialog(
message: message, message: message,
onTap: onTap,
), ),
); );
} }
@ -268,7 +238,7 @@ class Utils {
static String getMonthNamedFormat(DateTime date) { static String getMonthNamedFormat(DateTime date) {
/// it will return like "29-Sep-2022" /// it will return like "29-Sep-2022"
return DateFormat('dd-MMM-yyyy', "en_US").format(date); return DateFormat('dd-MMM-yyyy').format(date);
} }
static String reverseFormatDate(String date) { static String reverseFormatDate(String date) {
@ -319,7 +289,7 @@ class Utils {
String formattedDate; String formattedDate;
if (date.isNotEmpty) { if (date.isNotEmpty) {
formattedDate = date.split('T')[0]; formattedDate = date.split('T')[0];
if (!formattedDate.contains("00:00:00")) { if(!formattedDate.contains("00:00:00")) {
formattedDate = formattedDate + ' 00:00:00'; formattedDate = formattedDate + ' 00:00:00';
} }
} else { } else {
@ -328,45 +298,17 @@ class Utils {
return formattedDate; return formattedDate;
} }
static String formatDateDefault(String date) {
if (date.isNotEmpty) {
if (date.toLowerCase().contains("t")) {
date = date.toLowerCase().split("t")[0];
if (!date.contains("00:00:00")) {
date = date + ' 00:00:00';
}
return date;
} else {
if(date.toLowerCase().split("-").length == 1 && date.contains("/")) {
return reverseFormatDate(date);
}
else
if (date.toLowerCase().split("-")[1].length == 3) {
return DateFormat('dd-MM-yyyy', "en_US").format(DateFormat('dd-MMM-yyyy', "en_US").parseLoose(date));
} else {
if(date.contains(" ")) {
date = date.split(" ").first;
}
return DateFormat('dd-MM-yyyy', "en_US").format(DateFormat('yyyy-MM-dd', "en_US").parseLoose(date));
}
// return DateFormat('yyyy-MM-dd').format(DateFormat('dd-MM-yyyy').parseLoose(date));
}
} else {
return date;
}
}
static Future<DateTime> selectDate(BuildContext context, DateTime selectedDate) async { static Future<DateTime> selectDate(BuildContext context, DateTime selectedDate) async {
if (!Platform.isIOS) { if (!Platform.isIOS) {
await showCupertinoModalPopup( await showCupertinoModalPopup(
context: context, context: context,
builder: (BuildContext cxt) => Container( builder: (cxt) => Container(
height: 250, height: 250,
color: Colors.white, color: Colors.white,
child: CupertinoDatePicker( child: CupertinoDatePicker(
backgroundColor: Colors.white, backgroundColor: Colors.white,
mode: CupertinoDatePickerMode.date, mode: CupertinoDatePickerMode.date,
onDateTimeChanged: (DateTime value) { onDateTimeChanged: (value) {
if (value != null && value != selectedDate) { if (value != null && value != selectedDate) {
selectedDate = value; selectedDate = value;
} }
@ -384,9 +326,11 @@ class Utils {
return selectedDate; return selectedDate;
} }
static void readNFc({required Function(String) onRead}) { static void readNFc({required Function(String) onRead}) {
NfcManager.instance.startSession(onDiscovered: (NfcTag tag) async { NfcManager.instance.startSession(onDiscovered: (NfcTag tag) async {
MifareUltralight f; print(tag.data);
var f;
if (Platform.isAndroid) { if (Platform.isAndroid) {
f = MifareUltralight(tag: tag, identifier: tag.data["nfca"]["identifier"], type: 2, maxTransceiveLength: 252, timeout: 22); f = MifareUltralight(tag: tag, identifier: tag.data["nfca"]["identifier"], type: 2, maxTransceiveLength: 252, timeout: 22);
} else { } else {
@ -399,15 +343,4 @@ class Utils {
print(err); print(err);
}); });
} }
//HUAWEI DECISION MAKING
static Future<bool> isGoogleServicesAvailable() async {
GooglePlayServicesAvailability availability = await GoogleApiAvailability.instance.checkGooglePlayServicesAvailability();
String status = availability.toString().split('.').last;
if (status == "success") {
return true;
}
return false;
}
} }

@ -1,206 +0,0 @@
// ignore_for_file: prefer_single_quotes, lines_longer_than_80_chars final
// link to generate dart class https://www.webinovers.com/web-tools/json-to-dart-convertor
Map<String, dynamic> _env = {
"appConfig": "lib/config/config_en.json",
"login": {
"verification": true,
"verificationMethod": {
"whatsapp": false,
},
"forgetPassword": false
},
"bottomBar": false,
"dashboard": {
"attendance": false,
"worklist": true,
"ticketBalance": false,
"leaveBalance": true,
"missingSwipe": false,
"monthlyAttendance": false,
"vocationRules": false,
},
"itg": false,
"marathon": false,
"offersDiscount": false,
"myTeams": false,
"modifiy": false,
"myRequest": false,
"pendingTransactions": false,
"myProfile": false,
"itemsForSale": false,
"chat": false,
"monthlyAttendance": true,
"vocationRules": false,
"canEdit": false,
};
Env env = Env.fromJson(_env);
class Env {
Env({
required this.appConfig,
required this.login,
required this.bottomBar,
required this.dashboard,
required this.itg,
required this.marathon,
required this.offersDiscount,
required this.myTeams,
required this.modifiy,
required this.myRequest,
required this.pendingTransactions,
required this.myProfile,
required this.itemsForSale,
required this.chat,
required this.monthlyAttendance,
required this.vocationRules,
required this.canEdit,
});
late final String appConfig;
late final Login login;
late final bool bottomBar;
late final Dashboard dashboard;
late final bool itg;
late final bool marathon;
late final bool offersDiscount;
late final bool myTeams;
late final bool modifiy;
late final bool myRequest;
late final bool pendingTransactions;
late final bool myProfile;
late final bool itemsForSale;
late final bool chat;
late final bool monthlyAttendance;
late final bool vocationRules;
late final bool canEdit;
Env.fromJson(Map<String, dynamic> json) {
appConfig = json['appConfig'];
login = Login.fromJson(json['login']);
bottomBar = json['bottomBar'];
dashboard = Dashboard.fromJson(json['dashboard']);
marathon = json['marathon'];
itg = json['itg'];
offersDiscount = json['offersDiscount'];
myTeams = json['myTeams'];
modifiy = json['modifiy'];
myRequest = json['myRequest'];
pendingTransactions = json['pendingTransactions'];
myProfile = json['myProfile'];
itemsForSale = json['itemsForSale'];
chat = json['chat'];
monthlyAttendance = json['monthlyAttendance'];
vocationRules = json['vocationRules'];
canEdit = json['canEdit'];
}
Map<String, dynamic> toJson() {
var _data = <String, dynamic>{};
_data['appConfig'] = appConfig;
_data['login'] = login.toJson();
_data['bottomBar'] = bottomBar;
_data['dashboard'] = dashboard.toJson();
_data['marathon'] = marathon;
_data['itg'] = itg;
_data['offersDiscount'] = offersDiscount;
_data['myTeams'] = myTeams;
_data['modifiy'] = modifiy;
_data['myRequest'] = myRequest;
_data['pendingTransactions'] = pendingTransactions;
_data['myProfile'] = myProfile;
_data['itemsForSale'] = itemsForSale;
_data['chat'] = chat;
_data['monthlyAttendance'] = monthlyAttendance;
_data['vocationRules'] = vocationRules;
_data['canEdit'] = canEdit;
return _data;
}
}
class Login {
Login({
required this.verification,
required this.verificationMethod,
required this.forgetPassword,
});
late final bool verification;
late final VerificationMethod verificationMethod;
late final bool forgetPassword;
Login.fromJson(Map<String, dynamic> json) {
verification = json['verification'];
verificationMethod = VerificationMethod.fromJson(json['verificationMethod']);
forgetPassword = json['forgetPassword'];
}
Map<String, dynamic> toJson() {
var _data = <String, dynamic>{};
_data['verification'] = verification;
_data['verificationMethod'] = verificationMethod.toJson();
_data['forgetPassword'] = forgetPassword;
return _data;
}
}
class VerificationMethod {
VerificationMethod({
required this.whatsapp,
});
late final bool whatsapp;
VerificationMethod.fromJson(Map<String, dynamic> json) {
whatsapp = json['whatsapp'];
}
Map<String, dynamic> toJson() {
var _data = <String, dynamic>{};
_data['whatsapp'] = whatsapp;
return _data;
}
}
class Dashboard {
Dashboard({
required this.attendance,
required this.worklist,
required this.ticketBalance,
required this.leaveBalance,
required this.missingSwipe,
required this.monthlyAttendance,
required this.vocationRules,
});
late final bool attendance;
late final bool worklist;
late final bool ticketBalance;
late final bool leaveBalance;
late final bool missingSwipe;
late final bool monthlyAttendance;
late final bool vocationRules;
Dashboard.fromJson(Map<String, dynamic> json) {
attendance = json['attendance'];
worklist = json['worklist'];
ticketBalance = json['ticketBalance'];
leaveBalance = json['leaveBalance'];
missingSwipe = json['missingSwipe'];
monthlyAttendance = json['monthlyAttendance'];
vocationRules = json['vocationRules'];
}
Map<String, dynamic> toJson() {
var _data = <String, dynamic>{};
_data['attendance'] = attendance;
_data['worklist'] = worklist;
_data['ticketBalance'] = ticketBalance;
_data['leaveBalance'] = leaveBalance;
_data['missingSwipe'] = missingSwipe;
_data['monthlyAttendance'] = monthlyAttendance;
_data['vocationRules'] = vocationRules;
return _data;
}
}

@ -1,7 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/ui/app_update_screen.dart';
import 'package:mohem_flutter_app/ui/attendance/add_vacation_rule_screen.dart'; import 'package:mohem_flutter_app/ui/attendance/add_vacation_rule_screen.dart';
import 'package:mohem_flutter_app/ui/attendance/moe_monthly_attendance_screen.dart';
import 'package:mohem_flutter_app/ui/attendance/monthly_attendance_screen.dart'; import 'package:mohem_flutter_app/ui/attendance/monthly_attendance_screen.dart';
import 'package:mohem_flutter_app/ui/attendance/vacation_rule_screen.dart'; import 'package:mohem_flutter_app/ui/attendance/vacation_rule_screen.dart';
import 'package:mohem_flutter_app/ui/bottom_sheets/attendence_details_bottom_sheet.dart'; import 'package:mohem_flutter_app/ui/bottom_sheets/attendence_details_bottom_sheet.dart';
@ -24,6 +22,8 @@ import 'package:mohem_flutter_app/ui/marathon/marathon_intro_screen.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_screen.dart'; import 'package:mohem_flutter_app/ui/marathon/marathon_screen.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_sponsor_video_screen.dart'; import 'package:mohem_flutter_app/ui/marathon/marathon_sponsor_video_screen.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_waiting_screen.dart'; import 'package:mohem_flutter_app/ui/marathon/marathon_waiting_screen.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_winner_selection.dart';
import 'package:mohem_flutter_app/ui/marathon/winner_screen.dart';
import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart'; import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart';
import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart';
import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart';
@ -46,8 +46,6 @@ import 'package:mohem_flutter_app/ui/profile/delete_family_member.dart';
import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_address_screen.dart'; import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_address_screen.dart';
import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart'; import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart';
import 'package:mohem_flutter_app/ui/profile/family_members.dart'; import 'package:mohem_flutter_app/ui/profile/family_members.dart';
import 'package:mohem_flutter_app/ui/profile/help_screen.dart';
import 'package:mohem_flutter_app/ui/profile/hierarchy_screen.dart';
import 'package:mohem_flutter_app/ui/profile/personal_info.dart'; import 'package:mohem_flutter_app/ui/profile/personal_info.dart';
import 'package:mohem_flutter_app/ui/profile/profile_screen.dart'; import 'package:mohem_flutter_app/ui/profile/profile_screen.dart';
import 'package:mohem_flutter_app/ui/screens/announcements/announcement_details.dart'; import 'package:mohem_flutter_app/ui/screens/announcements/announcement_details.dart';
@ -69,7 +67,6 @@ import 'package:mohem_flutter_app/ui/screens/pending_transactions/pending_transa
import 'package:mohem_flutter_app/ui/screens/pending_transactions/pending_transactions_details.dart'; import 'package:mohem_flutter_app/ui/screens/pending_transactions/pending_transactions_details.dart';
import 'package:mohem_flutter_app/ui/screens/submenu_screen.dart'; import 'package:mohem_flutter_app/ui/screens/submenu_screen.dart';
import 'package:mohem_flutter_app/ui/termination/end_employement.dart'; import 'package:mohem_flutter_app/ui/termination/end_employement.dart';
import 'package:mohem_flutter_app/ui/unsafe_device_screen.dart';
import 'package:mohem_flutter_app/ui/work_list/item_history_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/item_history_screen.dart';
import 'package:mohem_flutter_app/ui/work_list/itg_detail_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/itg_detail_screen.dart';
import 'package:mohem_flutter_app/ui/work_list/work_list_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/work_list_screen.dart';
@ -189,15 +186,11 @@ class AppRoutes {
//Marathon //Marathon
static const String marathonIntroScreen = "/marathonIntroScreen"; static const String marathonIntroScreen = "/marathonIntroScreen";
static const String marathonScreen = "/marathonScreen"; static const String marathonScreen = "/marathonScreen";
static const String marathonWinnerSelection = "/marathonWinnerSelection";
static const String marathonWinnerScreen = "/marathonWinnerScreen"; static const String marathonWinnerScreen = "/marathonWinnerScreen";
static const String marathonSponsorVideoScreen = "/marathonSponsorVideoScreen"; static const String marathonSponsorVideoScreen = "/marathonSponsorVideoScreen";
static const String marathonWaitingScreen = "/marathonWaitingScreen"; static const String marathonWaitingScreen = "/marathonWaitingScreen";
static const String unsafeDeviceScreen = "/unsafeDeviceScreen";
static const String appUpdateScreen = "/appUpdateScreen";
static const String help = "/help";
static const String hierarchy = "/hierarchy";
static final Map<String, WidgetBuilder> routes = { static final Map<String, WidgetBuilder> routes = {
login: (BuildContext context) => LoginScreen(), login: (BuildContext context) => LoginScreen(),
verifyLogin: (BuildContext context) => VerifyLoginScreen(), verifyLogin: (BuildContext context) => VerifyLoginScreen(),
@ -231,8 +224,7 @@ class AppRoutes {
// addWorkFromHome: (BuildContext context) => AddWorkFromHomeScreen(), // addWorkFromHome: (BuildContext context) => AddWorkFromHomeScreen(),
profile: (BuildContext context) => ProfileScreen(), profile: (BuildContext context) => ProfileScreen(),
//Attendance //Attendance
// monthlyAttendance: (BuildContext context) => MonthlyAttendanceScreen(), monthlyAttendance: (BuildContext context) => MonthlyAttendanceScreen(),
monthlyAttendance: (BuildContext context) => MoeMonthlyAttendanceScreen(),
vacationRule: (BuildContext context) => VacationRuleScreen(), vacationRule: (BuildContext context) => VacationRuleScreen(),
addVacationRule: (BuildContext context) => AddVacationRuleScreen(), addVacationRule: (BuildContext context) => AddVacationRuleScreen(),
@ -304,12 +296,9 @@ class AppRoutes {
// Marathon // Marathon
marathonIntroScreen: (BuildContext context) => MarathonIntroScreen(), marathonIntroScreen: (BuildContext context) => MarathonIntroScreen(),
marathonScreen: (BuildContext context) => MarathonScreen(), marathonScreen: (BuildContext context) => MarathonScreen(),
marathonWinnerSelection: (BuildContext context) => MarathonWinnerSelection(),
marathonWinnerScreen: (BuildContext context) => WinnerScreen(),
marathonSponsorVideoScreen: (BuildContext context) => const SponsorVideoScreen(), marathonSponsorVideoScreen: (BuildContext context) => const SponsorVideoScreen(),
marathonWaitingScreen: (BuildContext context) => const MarathonWaitingScreen(), marathonWaitingScreen: (BuildContext context) => const MarathonWaitingScreen(),
unsafeDeviceScreen: (BuildContext context) => const UnsafeDeviceScreen(),
appUpdateScreen: (BuildContext context) => const AppUpdateScreen(),
help: (BuildContext context) => HelpScreen(),
hierarchy: (BuildContext context) => HierarchyScreen(),
}; };
} }

@ -9,6 +9,7 @@ import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/otp_widget.dart'; import 'package:mohem_flutter_app/widgets/otp_widget.dart';
import 'package:sizer/sizer.dart';
final ValueNotifier<String> otpFieldClear = ValueNotifier<String>(""); final ValueNotifier<String> otpFieldClear = ValueNotifier<String>("");

@ -13,15 +13,6 @@ extension CapExtension on String {
String get capitalizeFirstofEach => this.trim().length > 0 ? this.trim().toLowerCase().split(" ").map((str) => str.inCaps).join(" ") : ""; String get capitalizeFirstofEach => this.trim().length > 0 ? this.trim().toLowerCase().split(" ").map((str) => str.inCaps).join(" ") : "";
} }
extension TrimString on String {
String trimString(int minThreshold) {
if (length > minThreshold) {
return "${substring(0, 10)}...${substring(length - 4, length)}";
}
return this;
}
}
extension EmailValidator on String { extension EmailValidator on String {
Widget get toWidget => Text(this); Widget get toWidget => Text(this);
@ -99,9 +90,8 @@ extension EmailValidator on String {
style: TextStyle(fontSize: 13, fontWeight: FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.52, decoration: isUnderLine ? TextDecoration.underline : null), style: TextStyle(fontSize: 13, fontWeight: FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.52, decoration: isUnderLine ? TextDecoration.underline : null),
); );
Widget toText14({Color? color, bool isUnderLine = false, bool isBold = false, FontWeight? weight, int? maxlines, TextAlign? textAlign, bool isCenter = false}) => Text( Widget toText14({Color? color, bool isUnderLine = false, bool isBold = false, FontWeight? weight, int? maxlines}) => Text(
this, this,
textAlign: isCenter ? TextAlign.center : (textAlign ?? TextAlign.left),
maxLines: maxlines, maxLines: maxlines,
style: TextStyle( style: TextStyle(
color: color ?? MyColors.darkTextColor, color: color ?? MyColors.darkTextColor,
@ -111,15 +101,13 @@ extension EmailValidator on String {
decoration: isUnderLine ? TextDecoration.underline : null), decoration: isUnderLine ? TextDecoration.underline : null),
); );
Widget toText16({Color? color, bool isUnderLine = false, bool isBold = false, int? maxlines, double? height}) => Text( Widget toText16({Color? color, bool isUnderLine = false, bool isBold = false, int? maxlines}) => Text(
this, this,
maxLines: maxlines, maxLines: maxlines,
overflow: TextOverflow.ellipsis,
style: TextStyle( style: TextStyle(
color: color ?? MyColors.darkTextColor, color: color ?? MyColors.darkTextColor,
fontSize: 16, fontSize: 16,
letterSpacing: -0.64, letterSpacing: -0.64,
height: height,
fontWeight: isBold ? FontWeight.bold : FontWeight.w600, fontWeight: isBold ? FontWeight.bold : FontWeight.w600,
decoration: isUnderLine ? TextDecoration.underline : null, decoration: isUnderLine ? TextDecoration.underline : null,
), ),
@ -141,9 +129,8 @@ extension EmailValidator on String {
style: TextStyle(fontSize: 19, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -1.14), style: TextStyle(fontSize: 19, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -1.14),
); );
Widget toText20({Color? color, bool isBold = false, bool isCentered = false}) => Text( Widget toText20({Color? color, bool isBold = false}) => Text(
this, this,
textAlign: isCentered ? TextAlign.center : null,
style: TextStyle(fontSize: 20, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4), style: TextStyle(fontSize: 20, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4),
); );
@ -153,27 +140,23 @@ extension EmailValidator on String {
style: TextStyle(color: color ?? MyColors.grey3AColor, fontSize: 21, letterSpacing: -0.84, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.w600)), style: TextStyle(color: color ?? MyColors.grey3AColor, fontSize: 21, letterSpacing: -0.84, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.w600)),
); );
Widget toText22({Color? color, bool isBold = false, bool isCentered = false}) => Text( Widget toText22({Color? color, bool isBold = false}) => Text(
this, this,
textAlign: isCentered ? TextAlign.center : null,
style: TextStyle(height: 1, color: color ?? MyColors.darkTextColor, fontSize: 22, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), style: TextStyle(height: 1, color: color ?? MyColors.darkTextColor, fontSize: 22, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),
); );
Widget toText24({Color? color, bool isBold = false, bool isCentered = false}) => Text( Widget toText24({Color? color, bool isBold = false}) => Text(
this, this,
textAlign: isCentered ? TextAlign.center : null,
style: TextStyle(height: 23 / 24, color: color ?? MyColors.darkTextColor, fontSize: 24, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), style: TextStyle(height: 23 / 24, color: color ?? MyColors.darkTextColor, fontSize: 24, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),
); );
Widget toText30({Color? color, bool isBold = false, bool isCentered = false}) => Text( Widget toText30({Color? color, bool isBold = false}) => Text(
this, this,
textAlign: isCentered ? TextAlign.center : null, style: TextStyle(height: 20 / 32, color: color ?? MyColors.darkTextColor, fontSize: 32, letterSpacing: -1.2, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),
style: TextStyle(height: 20 / 32, color: color ?? MyColors.darkTextColor, fontSize: 32, letterSpacing: -1.2, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), );
);
Widget toText32({Color? color, bool isBold = false, bool isCentered = false}) => Text( Widget toText32({Color? color, bool isBold = false}) => Text(
this, this,
textAlign: isCentered ? TextAlign.center : null,
style: TextStyle(height: 32 / 32, color: color ?? MyColors.darkTextColor, fontSize: 32, letterSpacing: -1.92, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), style: TextStyle(height: 32 / 32, color: color ?? MyColors.darkTextColor, fontSize: 32, letterSpacing: -1.92, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),
); );
@ -222,7 +205,7 @@ extension EmailValidator on String {
String date = this.split("T")[0]; String date = this.split("T")[0];
String time = this.split("T")[1]; String time = this.split("T")[1];
var dates = date.split("-"); var dates = date.split("-");
return "${dates[2]} ${getMonth(int.parse(dates[1]))} ${dates[0]} ${DateFormat('hh:mm a', "en_US").format(DateFormat('hh:mm:ss', "en_US").parse(time))}"; return "${dates[2]} ${getMonth(int.parse(dates[1]))} ${dates[0]} ${DateFormat('hh:mm a').format(DateFormat('hh:mm:ss').parse(time))}";
} }
String getMonth(int month) { String getMonth(int month) {

@ -58,7 +58,7 @@ extension WidgetExtensions on Widget {
), ),
], ],
), ),
alignment: center ? Alignment.center : null, alignment: center == true ? Alignment.center : null,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,

@ -41,7 +41,6 @@ class CodegenLoader extends AssetLoader{
"checkIn": "تحقق في", "checkIn": "تحقق في",
"workList": "قائمة العمل", "workList": "قائمة العمل",
"leaveBalance": "رصيد الاجازات", "leaveBalance": "رصيد الاجازات",
"businessTripBalance": "رصيد رحلة العمل",
"missingSwipes": "تسجيل بصمة حضور", "missingSwipes": "تسجيل بصمة حضور",
"ticketBalance": "رصيد التذكرة", "ticketBalance": "رصيد التذكرة",
"other": "آخر", "other": "آخر",
@ -441,9 +440,6 @@ class CodegenLoader extends AssetLoader{
"typeCurrentPasswordBelow": "اكتب كلمة المرور الحاليه", "typeCurrentPasswordBelow": "اكتب كلمة المرور الحاليه",
"currentPassword": "كلمة المرور الحاليه", "currentPassword": "كلمة المرور الحاليه",
"concurrentReports": "التقارير المتزامنه", "concurrentReports": "التقارير المتزامنه",
"EnterNewAddressMoved": "أدخل عنوان جديد إذا كنت قد انتقلت",
"CorrectAddress": "تصحيح أو تعديل هذا العنوان",
"SelectChangeWantToMake": " حدد نوع التغيير الذي تريد القيام به.",
"profile": { "profile": {
"reset_password": { "reset_password": {
"label": "Reset Password", "label": "Reset Password",
@ -497,7 +493,6 @@ class CodegenLoader extends AssetLoader{
"gameTime": "وقت اللعب:", "gameTime": "وقت اللعب:",
"joinMarathon": "انضم إلى ماراثون", "joinMarathon": "انضم إلى ماراثون",
"joinDemoMarathon": "انضم إلى الماراثون التجريبي", "joinDemoMarathon": "انضم إلى الماراثون التجريبي",
"demo": "تجريبي",
"minutes": "الدقائق", "minutes": "الدقائق",
"seconds": "ثواني", "seconds": "ثواني",
"note": "ملحوظة:", "note": "ملحوظة:",
@ -507,11 +502,9 @@ class CodegenLoader extends AssetLoader{
"sponsoredBy": "برعاية:", "sponsoredBy": "برعاية:",
"question": "سؤال", "question": "سؤال",
"marathoners": "الماراثون", "marathoners": "الماراثون",
"marathoner": "ماراثونر",
"prize": "جائزة:", "prize": "جائزة:",
"winnerSelection": "اختيار الفائز", "winnerSelection": "اختيار الفائز",
"qualifiers": "تصفيات", "qualifiers": "تصفيات",
"qualifier": "المؤهل",
"getReadyForContest": "استعد للمسابقة القادمة:", "getReadyForContest": "استعد للمسابقة القادمة:",
"winnerSelectedRandomly": "سيتم اختيار الفائز عشوائياً من بين التصفيات.", "winnerSelectedRandomly": "سيتم اختيار الفائز عشوائياً من بين التصفيات.",
"fingersCrossed": "تشابك الاصابع!!!", "fingersCrossed": "تشابك الاصابع!!!",
@ -523,40 +516,7 @@ class CodegenLoader extends AssetLoader{
"codeExpire": "انتهت صلاحية رمز التحقق", "codeExpire": "انتهت صلاحية رمز التحقق",
"typeheretoreply": "اكتب هنا للرد", "typeheretoreply": "اكتب هنا للرد",
"favorite": "مفضلتي", "favorite": "مفضلتي",
"searchfromchat": "البحث من الدردشة", "searchfromchat": "البحث من الدردشة"
"yourAnswerCorrect": "إجابتك صحيحة",
"youMissedTheQuestion": "نفد منك الوقت. أنت خارج اللعبة. لكن يمكنك الاستمرار وكمشاهد.",
"wrongAnswer": "إجابتك غير صحيحة. أنت خارج اللعبة. لكن يمكنك الاستمرار وكمشاهد.",
"oops": "أوه!!!",
"winner": "الفائز",
"youWantToLeaveMarathon": "هل أنت متأكد أنك تريد العودة؟ سوف تخرج من المسابقة.",
"ourSponsor": "راعينا:",
"startingIn": "يبدأ في",
"youAreOutOfContest": "أنت خارج المسابقة.",
"winners": "الفائزين!!!",
"expireAfter": "تنتهي بعد",
"oneWeek": "أسبوع 1",
"twoWeek": "2 أسبوع",
"noUpcoming": "لا يوجد قادم",
"fakeLocation": ".لقد تتبعنا أنك تحاول استخدام موقع مزيف! يعتبر هذا مخالفة وقد تم إخطار الموارد البشرية",
"noWinner": "حزين! لم يفز أحد اليوم.",
"myTeam": "فريقي",
"youCanPlayDemo": "لكن يمكنك لعب العرض",
"qualification": "مؤهلات",
"esteblishmentName": "اسم المؤسسة",
"gradeDescription": "وصف الصف",
"type": "يكتب",
"status": "حالة",
"leaveType": "نوع الإجازة",
"attendanceType": "نوع الحضور",
"help": "يساعد",
"dear": "عزيزي",
"assistant": "للحصول على المساعدة ، يمكنك تقديم الطلب على نظام سعيد أو الاتصال بمركز الاتصال الموحد على 8310200",
"employee_leaves_calender": "تقويم أوراق الموظفين",
"view_your_leave_information": "عرض معلومات إجازتك",
"view_details": "عرض التفاصيل",
"create_absence_request": "إنشاء طلب الغياب",
"business_mission": "طلب مهمة العمل"
}; };
static const Map<String,dynamic> en_US = { static const Map<String,dynamic> en_US = {
"mohemm": "Mohemm", "mohemm": "Mohemm",
@ -585,7 +545,6 @@ static const Map<String,dynamic> en_US = {
"checkIn": "Check In", "checkIn": "Check In",
"workList": "Work List", "workList": "Work List",
"leaveBalance": "Leave Balance", "leaveBalance": "Leave Balance",
"businessTripBalance": "Business Trip Balance",
"missingSwipes": "Missing Swipes", "missingSwipes": "Missing Swipes",
"ticketBalance": "Ticket Balance", "ticketBalance": "Ticket Balance",
"other": "Other", "other": "Other",
@ -985,9 +944,6 @@ static const Map<String,dynamic> en_US = {
"typeCurrentPasswordBelow": "Type Your Current password below", "typeCurrentPasswordBelow": "Type Your Current password below",
"currentPassword": "Current password", "currentPassword": "Current password",
"concurrentReports": "Concurrent Reports", "concurrentReports": "Concurrent Reports",
"EnterNewAddressMoved": "Enter a new address if you have moved",
"CorrectAddress": "Correct or amend this address",
"SelectChangeWantToMake": "Select the type of change you want to make",
"profile": { "profile": {
"reset_password": { "reset_password": {
"label": "Reset Password", "label": "Reset Password",
@ -1030,7 +986,6 @@ static const Map<String,dynamic> en_US = {
"gameTime": "Game Time:", "gameTime": "Game Time:",
"joinMarathon": "Join Marathon", "joinMarathon": "Join Marathon",
"joinDemoMarathon": "Join Demo Marathon", "joinDemoMarathon": "Join Demo Marathon",
"demo": "Demo",
"minutes": "Minutes", "minutes": "Minutes",
"seconds": "Seconds", "seconds": "Seconds",
"note": "Note:", "note": "Note:",
@ -1040,7 +995,6 @@ static const Map<String,dynamic> en_US = {
"sponsoredBy": "Sponsored By:", "sponsoredBy": "Sponsored By:",
"question": "Question", "question": "Question",
"marathoners": "Marathoners", "marathoners": "Marathoners",
"marathoner": "Marathoner",
"prize": "Prize:", "prize": "Prize:",
"advancedSearch": "Advanced Search", "advancedSearch": "Advanced Search",
"openNot": "Open Notifications", "openNot": "Open Notifications",
@ -1055,7 +1009,6 @@ static const Map<String,dynamic> en_US = {
"none": "None", "none": "None",
"winnerSelection": "Winner Selection", "winnerSelection": "Winner Selection",
"qualifiers": "Qualifiers", "qualifiers": "Qualifiers",
"qualifier": "Qualifier",
"getReadyForContest": "Get Ready for the coming contest:", "getReadyForContest": "Get Ready for the coming contest:",
"winnerSelectedRandomly": "The winner will be selected randomly among the qualifiers.", "winnerSelectedRandomly": "The winner will be selected randomly among the qualifiers.",
"fingersCrossed": "Fingers Crossed!!!", "fingersCrossed": "Fingers Crossed!!!",
@ -1067,40 +1020,7 @@ static const Map<String,dynamic> en_US = {
"allQuestionsCorrect": "You have answered all questions correct", "allQuestionsCorrect": "You have answered all questions correct",
"typeheretoreply": "Type here to reply", "typeheretoreply": "Type here to reply",
"favorite": "My Favorites", "favorite": "My Favorites",
"searchfromchat": "Search from chat", "searchfromchat": "Search from chat"
"yourAnswerCorrect": "Your answer is correct",
"youMissedTheQuestion": "You ran out of time. You are out of the game. But you can continue as a viewer.",
"wrongAnswer": "Your answer is Incorrect. You are out of the game. But you can continue as a viewer.",
"oops": "Ooopsss!!!!",
"winner": "WINNER",
"youWantToLeaveMarathon": "Are you sure you want to go back? You will be out of the contest.",
"ourSponsor": "Our Sponsor:",
"startingIn": "Starting in",
"youAreOutOfContest": "You are out of the contest.",
"winners": "WINNERS!!!",
"expireAfter": "Expires After",
"oneWeek": "1 Week",
"twoWeek": "2 Week",
"noUpcoming": "There is no upcoming",
"fakeLocation": "We traced out that you try to use a fake location! This is considered a violation, and HR has been notified.",
"noWinner": "Sad! No one won today.",
"myTeam": "My Team",
"youCanPlayDemo": "But you can play demo",
"qualification": "Qualifications",
"esteblishmentName": "Establishment Name",
"gradeDescription": "Grade Description",
"type": "Type",
"status": "Status",
"leaveType": "Leave Type",
"attendanceType": "Attendance Type",
"help": "Help",
"dear": "Dear",
"assistant": "For assistance, you can submit the request on the Saeed system or call the unified call center on 8310200",
"employee_leaves_calender": "Employee Leaves Calender",
"view_your_leave_information": "View Your Leave Information",
"view_details": "View Details",
"create_absence_request": "Create Absence Request",
"business_mission": "Business Mission Request"
}; };
static const Map<String, Map<String,dynamic>> mapLocales = {"ar_SA": ar_SA, "en_US": en_US}; static const Map<String, Map<String,dynamic>> mapLocales = {"ar_SA": ar_SA, "en_US": en_US};
} }

@ -27,7 +27,6 @@ abstract class LocaleKeys {
static const checkIn = 'checkIn'; static const checkIn = 'checkIn';
static const workList = 'workList'; static const workList = 'workList';
static const leaveBalance = 'leaveBalance'; static const leaveBalance = 'leaveBalance';
static const businessTripBalance = 'businessTripBalance';
static const missingSwipes = 'missingSwipes'; static const missingSwipes = 'missingSwipes';
static const ticketBalance = 'ticketBalance'; static const ticketBalance = 'ticketBalance';
static const services = 'services'; static const services = 'services';
@ -426,9 +425,6 @@ abstract class LocaleKeys {
static const typeCurrentPasswordBelow = 'typeCurrentPasswordBelow'; static const typeCurrentPasswordBelow = 'typeCurrentPasswordBelow';
static const currentPassword = 'currentPassword'; static const currentPassword = 'currentPassword';
static const concurrentReports = 'concurrentReports'; static const concurrentReports = 'concurrentReports';
static const EnterNewAddressMoved = 'EnterNewAddressMoved';
static const CorrectAddress = 'CorrectAddress';
static const SelectChangeWantToMake = 'SelectChangeWantToMake';
static const profile_reset_password_label = 'profile.reset_password.label'; static const profile_reset_password_label = 'profile.reset_password.label';
static const profile_reset_password_username = 'profile.reset_password.username'; static const profile_reset_password_username = 'profile.reset_password.username';
static const profile_reset_password_password = 'profile.reset_password.password'; static const profile_reset_password_password = 'profile.reset_password.password';
@ -467,7 +463,6 @@ abstract class LocaleKeys {
static const gameTime = 'gameTime'; static const gameTime = 'gameTime';
static const joinMarathon = 'joinMarathon'; static const joinMarathon = 'joinMarathon';
static const joinDemoMarathon = 'joinDemoMarathon'; static const joinDemoMarathon = 'joinDemoMarathon';
static const demo = 'demo';
static const minutes = 'minutes'; static const minutes = 'minutes';
static const seconds = 'seconds'; static const seconds = 'seconds';
static const note = 'note'; static const note = 'note';
@ -477,11 +472,9 @@ abstract class LocaleKeys {
static const sponsoredBy = 'sponsoredBy'; static const sponsoredBy = 'sponsoredBy';
static const question = 'question'; static const question = 'question';
static const marathoners = 'marathoners'; static const marathoners = 'marathoners';
static const marathoner = 'marathoner';
static const prize = 'prize'; static const prize = 'prize';
static const winnerSelection = 'winnerSelection'; static const winnerSelection = 'winnerSelection';
static const qualifiers = 'qualifiers'; static const qualifiers = 'qualifiers';
static const qualifier = 'qualifier';
static const getReadyForContest = 'getReadyForContest'; static const getReadyForContest = 'getReadyForContest';
static const winnerSelectedRandomly = 'winnerSelectedRandomly'; static const winnerSelectedRandomly = 'winnerSelectedRandomly';
static const fingersCrossed = 'fingersCrossed'; static const fingersCrossed = 'fingersCrossed';
@ -502,32 +495,5 @@ abstract class LocaleKeys {
static const youWantToLeaveMarathon = 'youWantToLeaveMarathon'; static const youWantToLeaveMarathon = 'youWantToLeaveMarathon';
static const ourSponsor = 'ourSponsor'; static const ourSponsor = 'ourSponsor';
static const startingIn = 'startingIn'; static const startingIn = 'startingIn';
static const youAreOutOfContest = 'youAreOutOfContest';
static const winners = 'winners';
static const expireAfter = 'expireAfter';
static const oneWeek = 'oneWeek';
static const twoWeek = 'twoWeek';
static const noUpcoming = 'noUpcoming';
static const fakeLocation = 'fakeLocation';
static const noWinner = 'noWinner';
static const myTeam = 'myTeam';
static const youCanPlayDemo = 'youCanPlayDemo';
static const qualification = 'qualification';
static const esteblishmentName = 'esteblishmentName';
static const gradeDescription = 'gradeDescription';
static const type = 'type';
static const status = 'status';
static const leaveType = 'leaveType';
static const attendanceType = 'attendanceType';
static const help = 'help';
static const dear = 'dear';
static const assistant = 'assistant';
static const employee_leaves_calender = 'employee_leaves_calender';
static const view_your_leave_information = 'view_your_leave_information';
static const view_details = 'view_details';
static const notices = 'notices';
static const hierarchy = 'hierarchy';
static const create_absence_request = 'create_absence_request';
static const business_mission = 'business_mission';
} }

@ -6,8 +6,6 @@
// ignore_for_file: lines_longer_than_80_chars // ignore_for_file: lines_longer_than_80_chars
// ignore_for_file: depend_on_referenced_packages // ignore_for_file: depend_on_referenced_packages
import 'package:audio_session/audio_session_web.dart';
import 'package:camera_web/camera_web.dart';
import 'package:file_picker/_internal/file_picker_web.dart'; import 'package:file_picker/_internal/file_picker_web.dart';
import 'package:firebase_core_web/firebase_core_web.dart'; import 'package:firebase_core_web/firebase_core_web.dart';
import 'package:firebase_messaging_web/firebase_messaging_web.dart'; import 'package:firebase_messaging_web/firebase_messaging_web.dart';
@ -15,18 +13,15 @@ import 'package:fluttertoast/fluttertoast_web.dart';
import 'package:geolocator_web/geolocator_web.dart'; import 'package:geolocator_web/geolocator_web.dart';
import 'package:google_maps_flutter_web/google_maps_flutter_web.dart'; import 'package:google_maps_flutter_web/google_maps_flutter_web.dart';
import 'package:image_picker_for_web/image_picker_for_web.dart'; import 'package:image_picker_for_web/image_picker_for_web.dart';
import 'package:just_audio_web/just_audio_web.dart';
import 'package:record_web/record_web.dart';
import 'package:shared_preferences_web/shared_preferences_web.dart'; import 'package:shared_preferences_web/shared_preferences_web.dart';
import 'package:url_launcher_web/url_launcher_web.dart'; import 'package:url_launcher_web/url_launcher_web.dart';
import 'package:video_player_web/video_player_web.dart'; import 'package:video_player_web/video_player_web.dart';
import 'package:wakelock_web/wakelock_web.dart';
import 'package:flutter_web_plugins/flutter_web_plugins.dart'; import 'package:flutter_web_plugins/flutter_web_plugins.dart';
// ignore: public_member_api_docs // ignore: public_member_api_docs
void registerPlugins(Registrar registrar) { void registerPlugins(Registrar registrar) {
AudioSessionWeb.registerWith(registrar);
CameraPlugin.registerWith(registrar);
FilePickerWeb.registerWith(registrar); FilePickerWeb.registerWith(registrar);
FirebaseCoreWeb.registerWith(registrar); FirebaseCoreWeb.registerWith(registrar);
FirebaseMessagingWeb.registerWith(registrar); FirebaseMessagingWeb.registerWith(registrar);
@ -34,10 +29,9 @@ void registerPlugins(Registrar registrar) {
GeolocatorPlugin.registerWith(registrar); GeolocatorPlugin.registerWith(registrar);
GoogleMapsPlugin.registerWith(registrar); GoogleMapsPlugin.registerWith(registrar);
ImagePickerPlugin.registerWith(registrar); ImagePickerPlugin.registerWith(registrar);
JustAudioPlugin.registerWith(registrar);
RecordPluginWeb.registerWith(registrar);
SharedPreferencesPlugin.registerWith(registrar); SharedPreferencesPlugin.registerWith(registrar);
UrlLauncherPlugin.registerWith(registrar); UrlLauncherPlugin.registerWith(registrar);
VideoPlayerPlugin.registerWith(registrar); VideoPlayerPlugin.registerWith(registrar);
WakelockWeb.registerWith(registrar);
registrar.registerMessageHandler(); registrar.registerMessageHandler();
} }

@ -2,15 +2,11 @@ import 'dart:io';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:logger/logger.dart'; import 'package:logger/logger.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/consts.dart';
import 'package:mohem_flutter_app/config/env.dart';
import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/generated/codegen_loader.g.dart'; import 'package:mohem_flutter_app/generated/codegen_loader.g.dart';
import 'package:mohem_flutter_app/models/post_params_model.dart'; import 'package:mohem_flutter_app/models/post_params_model.dart';
import 'package:mohem_flutter_app/provider/chat_call_provider.dart';
import 'package:mohem_flutter_app/provider/chat_provider_model.dart'; import 'package:mohem_flutter_app/provider/chat_provider_model.dart';
import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart';
import 'package:mohem_flutter_app/provider/eit_provider_model.dart'; import 'package:mohem_flutter_app/provider/eit_provider_model.dart';
@ -22,9 +18,11 @@ import 'package:provider/single_child_widget.dart';
import 'package:sizer/sizer.dart'; import 'package:sizer/sizer.dart';
Logger logger = Logger( Logger logger = Logger(
// filter: null, // Use the default LogFilter (-> only log in debug mode)
printer: PrettyPrinter( printer: PrettyPrinter(
lineLength: 0, lineLength: 0,
), ), // Use the PrettyPrinter to format and print log
// output: null, // U
); );
class MyHttpOverrides extends HttpOverrides { class MyHttpOverrides extends HttpOverrides {
@ -34,19 +32,11 @@ class MyHttpOverrides extends HttpOverrides {
} }
} }
bool isTablet = false;
Future<void> main() async { Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
await EasyLocalization.ensureInitialized(); await EasyLocalization.ensureInitialized();
AppState().setPostParamsInitConfig(); AppState().setPostParamsInitConfig();
HttpOverrides.global = MyHttpOverrides(); HttpOverrides.global = MyHttpOverrides();
isTablet = MediaQueryData.fromWindow(WidgetsBinding.instance.window).size.shortestSide >= ApiConsts.tabletMinLength;
runApp( runApp(
EasyLocalization( EasyLocalization(
supportedLocales: const <Locale>[ supportedLocales: const <Locale>[
@ -63,17 +53,12 @@ Future<void> main() async {
ChangeNotifierProvider<EITProviderModel>( ChangeNotifierProvider<EITProviderModel>(
create: (_) => EITProviderModel(), create: (_) => EITProviderModel(),
), ),
if (env.chat) ChangeNotifierProvider<ChatProviderModel>(
ChangeNotifierProvider<ChatProviderModel>( create: (_) => ChatProviderModel(),
create: (_) => ChatProviderModel(), ),
), ChangeNotifierProvider<MarathonProvider>(
if (env.marathon) create: (_) => MarathonProvider(),
ChangeNotifierProvider<MarathonProvider>( )
create: (_) => MarathonProvider(),
),
// ChangeNotifierProvider<ChatCallProvider>(
// create: (_) => ChatCallProvider(),
// ),
], ],
child: const MyApp(), child: const MyApp(),
), ),
@ -265,3 +250,4 @@ class MyApp extends StatelessWidget {
// }); // });
// } // }
// } // }

@ -7,191 +7,127 @@ import 'dart:convert';
class CallDataModel { class CallDataModel {
CallDataModel({ CallDataModel({
this.callerId, this.callerId,
this.callerDetails, this.callReceiverID,
this.receiverId, this.notificationForeground,
this.receiverDetails, this.message,
this.title, this.title,
this.calltype, this.type,
this.identity,
this.name,
this.isCall,
this.isWebrtc,
this.contant,
this.contantNo,
this.chatEventId,
this.fileTypeId,
this.currentUserId,
this.chatSource,
this.userChatHistoryLineRequestList,
this.server,
}); });
String? callerId; String? callerId;
CallerDetails? callerDetails; String? callReceiverID;
String? receiverId; String? notificationForeground;
ReceiverDetails? receiverDetails; String? message;
dynamic title; String? title;
String? calltype; String? type;
String? identity;
String? name;
String? isCall;
String? isWebrtc;
String? contant;
String? contantNo;
String? chatEventId;
dynamic? fileTypeId;
String? currentUserId;
String? chatSource;
List<UserChatHistoryLineRequestList>? userChatHistoryLineRequestList;
String? server;
factory CallDataModel.fromRawJson(String str) => CallDataModel.fromJson(json.decode(str)); factory CallDataModel.fromRawJson(String str) => CallDataModel.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson()); String toRawJson() => json.encode(toJson());
factory CallDataModel.fromJson(Map<String, dynamic> json) => CallDataModel( factory CallDataModel.fromJson(Map<String, dynamic> json) => CallDataModel(
callerId: json["callerID"], callerId: json["callerID"] == null ? null : json["callerID"],
callerDetails: json["callerDetails"] == null ? null : CallerDetails.fromJson(json["callerDetails"]), callReceiverID: json["callReceiverID"] == null ? null : json["callReceiverID"],
receiverId: json["receiverID"], notificationForeground: json["notification_foreground"] == null ? null : json["notification_foreground"],
receiverDetails: json["receiverDetails"] == null ? null : ReceiverDetails.fromJson(json["receiverDetails"]), message: json["message"] == null ? null : json["message"],
title: json["title"], title: json["title"] == null ? null : json["title"],
calltype: json["calltype"], type: json["type"] == null ? null : json["type"],
); identity: json["identity"] == null ? null : json["identity"],
name: json["name"] == null ? null : json["name"],
Map<String, dynamic> toJson() => { isCall: json["is_call"] == null ? null : json["is_call"],
"callerID": callerId, isWebrtc: json["is_webrtc"] == null ? null : json["is_webrtc"],
"callerDetails": callerDetails?.toJson(), contant: json["contant"] == null ? null : json["contant"],
"receiverID": receiverId, contantNo: json["contantNo"] == null ? null : json["contantNo"],
"receiverDetails": receiverDetails?.toJson(), chatEventId: json["chatEventId"] == null ? null : json["chatEventId"],
"title": title, fileTypeId: json["fileTypeId"],
"calltype": calltype, currentUserId: json["currentUserId"] == null ? null : json["currentUserId"],
}; chatSource: json["chatSource"] == null ? null : json["chatSource"],
} userChatHistoryLineRequestList: json["userChatHistoryLineRequestList"] == null
? null
class CallerDetails { : List<UserChatHistoryLineRequestList>.from(
CallerDetails({ json["userChatHistoryLineRequestList"].map(
this.response, (x) => UserChatHistoryLineRequestList.fromJson(x),
this.errorResponses, ),
}); ),
server: json["server"] == null ? null : json["server"],
Response? response; );
dynamic errorResponses;
factory CallerDetails.fromRawJson(String str) => CallerDetails.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory CallerDetails.fromJson(Map<String, dynamic> json) => CallerDetails(
response: json["response"] == null ? null : Response.fromJson(json["response"]),
errorResponses: json["errorResponses"],
);
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"response": response?.toJson(), "callerID": callerId == null ? null : callerId,
"errorResponses": errorResponses, "callReceiverID": callReceiverID == null ? null : callReceiverID,
}; "notification_foreground": notificationForeground == null ? null : notificationForeground,
"message": message == null ? null : message,
"title": title == null ? null : title,
"type": type == null ? null : type,
"identity": identity == null ? null : identity,
"name": name == null ? null : name,
"is_call": isCall == null ? null : isCall,
"is_webrtc": isWebrtc == null ? null : isWebrtc,
"contant": contant == null ? null : contant,
"contantNo": contantNo == null ? null : contantNo,
"chatEventId": chatEventId == null ? null : chatEventId,
"fileTypeId": fileTypeId,
"currentUserId": currentUserId == null ? null : currentUserId,
"chatSource": chatSource == null ? null : chatSource,
"userChatHistoryLineRequestList": userChatHistoryLineRequestList == null
? null
: List<dynamic>.from(
userChatHistoryLineRequestList!.map(
(x) => x.toJson(),
),
),
"server": server == null ? null : server,
};
} }
class Response { class UserChatHistoryLineRequestList {
Response({ UserChatHistoryLineRequestList({
this.id, this.isSeen,
this.userName, this.isDelivered,
this.email, this.targetUserId,
this.phone, this.targetUserStatus,
this.title,
this.token,
this.isDomainUser,
this.isActiveCode,
this.encryptedUserId,
this.encryptedUserName,
}); });
int? id; bool? isSeen;
String? userName; bool? isDelivered;
String? email; int? targetUserId;
dynamic phone; int? targetUserStatus;
String? title;
String? token;
bool? isDomainUser;
bool? isActiveCode;
String? encryptedUserId;
String? encryptedUserName;
factory Response.fromRawJson(String str) => Response.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory Response.fromJson(Map<String, dynamic> json) => Response(
id: json["id"],
userName: json["userName"],
email: json["email"],
phone: json["phone"],
title: json["title"],
token: json["token"],
isDomainUser: json["isDomainUser"],
isActiveCode: json["isActiveCode"],
encryptedUserId: json["encryptedUserId"],
encryptedUserName: json["encryptedUserName"],
);
Map<String, dynamic> toJson() => {
"id": id,
"userName": userName,
"email": email,
"phone": phone,
"title": title,
"token": token,
"isDomainUser": isDomainUser,
"isActiveCode": isActiveCode,
"encryptedUserId": encryptedUserId,
"encryptedUserName": encryptedUserName,
};
}
class ReceiverDetails {
ReceiverDetails({
this.id,
this.userName,
this.email,
this.phone,
this.title,
this.userStatus,
this.image,
this.unreadMessageCount,
this.userAction,
this.isPin,
this.isFav,
this.isAdmin,
this.rKey,
this.totalCount,
});
int? id;
String? userName;
String? email;
dynamic phone;
dynamic title;
int? userStatus;
String? image;
int? unreadMessageCount;
dynamic userAction;
bool? isPin;
bool? isFav;
bool? isAdmin;
String? rKey;
int? totalCount;
factory ReceiverDetails.fromRawJson(String str) => ReceiverDetails.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory ReceiverDetails.fromJson(Map<String, dynamic> json) => ReceiverDetails( factory UserChatHistoryLineRequestList.fromJson(Map<String, dynamic> json) => UserChatHistoryLineRequestList(
id: json["id"], isSeen: json["isSeen"] == null ? null : json["isSeen"],
userName: json["userName"], isDelivered: json["isDelivered"] == null ? null : json["isDelivered"],
email: json["email"], targetUserId: json["targetUserId"] == null ? null : json["targetUserId"],
phone: json["phone"], targetUserStatus: json["targetUserStatus"] == null ? null : json["targetUserStatus"],
title: json["title"], );
userStatus: json["userStatus"],
image: json["image"],
unreadMessageCount: json["unreadMessageCount"],
userAction: json["userAction"],
isPin: json["isPin"],
isFav: json["isFav"],
isAdmin: json["isAdmin"],
rKey: json["rKey"],
totalCount: json["totalCount"],
);
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"id": id, "isSeen": isSeen == null ? null : isSeen,
"userName": userName, "isDelivered": isDelivered == null ? null : isDelivered,
"email": email, "targetUserId": targetUserId == null ? null : targetUserId,
"phone": phone, "targetUserStatus": targetUserStatus == null ? null : targetUserStatus,
"title": title, };
"userStatus": userStatus,
"image": image,
"unreadMessageCount": unreadMessageCount,
"userAction": userAction,
"isPin": isPin,
"isFav": isFav,
"isAdmin": isAdmin,
"rKey": rKey,
"totalCount": totalCount,
};
} }

@ -1,9 +1,9 @@
// To parse this JSON data, do
//
// final chatUnreadCovnCountModel = chatUnreadCovnCountModelFromMap(jsonString);
import 'dart:convert'; import 'dart:convert';
ChatUnreadCovnCountModel chatUnreadCovnCountModelFromJson(String str) => ChatUnreadCovnCountModel.fromJson(json.decode(str));
String chatUnreadCovnCountModelToJson(ChatUnreadCovnCountModel data) => json.encode(data.toJson());
class ChatUnreadCovnCountModel { class ChatUnreadCovnCountModel {
ChatUnreadCovnCountModel({ ChatUnreadCovnCountModel({
this.singleChatCount, this.singleChatCount,
@ -13,17 +13,13 @@ class ChatUnreadCovnCountModel {
int? singleChatCount; int? singleChatCount;
int? groupChatCount; int? groupChatCount;
factory ChatUnreadCovnCountModel.fromJson(String str) => ChatUnreadCovnCountModel.fromMap(json.decode(str)); factory ChatUnreadCovnCountModel.fromJson(Map<String, dynamic> json) => ChatUnreadCovnCountModel(
singleChatCount: json["singleChatCount"] == null ? null : json["singleChatCount"],
String toJson() => json.encode(toMap()); groupChatCount: json["groupChatCount"] == null ? null : json["groupChatCount"],
);
factory ChatUnreadCovnCountModel.fromMap(Map<String, dynamic> json) => ChatUnreadCovnCountModel(
singleChatCount: json["singleChatCount"] == null ? null : json["singleChatCount"],
groupChatCount: json["groupChatCount"] == null ? null : json["groupChatCount"],
);
Map<String, dynamic> toMap() => { Map<String, dynamic> toJson() => {
"singleChatCount": singleChatCount == null ? null : singleChatCount, "singleChatCount": singleChatCount == null ? null : singleChatCount,
"groupChatCount": groupChatCount == null ? null : groupChatCount, "groupChatCount": groupChatCount == null ? null : groupChatCount,
}; };
} }

@ -1,33 +0,0 @@
// To parse this JSON data, do
//
// final chatUserImageModel = chatUserImageModelFromJson(jsonString);
import 'dart:convert';
List<ChatUserImageModel> chatUserImageModelFromJson(String str) => List<ChatUserImageModel>.from(json.decode(str).map((x) => ChatUserImageModel.fromJson(x)));
String chatUserImageModelToJson(List<ChatUserImageModel> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class ChatUserImageModel {
ChatUserImageModel({
this.email,
this.profilePicture,
this.mobileNumber,
});
String? email;
String? profilePicture;
String? mobileNumber;
factory ChatUserImageModel.fromJson(Map<String, dynamic> json) => ChatUserImageModel(
email: json["email"] == null ? null : json["email"],
profilePicture: json["profilePicture"] == null ? null : json["profilePicture"],
mobileNumber: json["mobileNumber"] == null ? null : json["mobileNumber"],
);
Map<String, dynamic> toJson() => {
"email": email == null ? null : email,
"profilePicture": profilePicture == null ? null : profilePicture,
"mobileNumber": mobileNumber == null ? null : mobileNumber,
};
}

@ -1,10 +1,3 @@
import 'dart:convert';
import 'dart:io';
ChatUserModel chatUserModelFromJson(String str) => ChatUserModel.fromJson(json.decode(str));
String chatUserModelToJson(ChatUserModel data) => json.encode(data.toJson());
class ChatUserModel { class ChatUserModel {
ChatUserModel({ ChatUserModel({
this.response, this.response,
@ -12,70 +5,41 @@ class ChatUserModel {
}); });
List<ChatUser>? response; List<ChatUser>? response;
List<ErrorResponse>? errorResponses; dynamic errorResponses;
factory ChatUserModel.fromJson(Map<String, dynamic> json) => ChatUserModel( factory ChatUserModel.fromJson(Map<String, dynamic> json) => ChatUserModel(
response: json["response"] == null ? null : List<ChatUser>.from(json["response"].map((x) => ChatUser.fromJson(x))), response: json["response"] == null ? null : List<ChatUser>.from(json["response"].map((x) => ChatUser.fromJson(x))),
errorResponses: json["errorResponses"] == null ? null : List<ErrorResponse>.from(json["errorResponses"].map((x) => ErrorResponse.fromJson(x))), errorResponses: json["errorResponses"],
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"response": response == null ? null : List<dynamic>.from(response!.map((x) => x.toJson())), "response": response == null ? null : List<dynamic>.from(response!.map((x) => x.toJson())),
"errorResponses": errorResponses == null ? null : List<dynamic>.from(errorResponses!.map((x) => x.toJson())), "errorResponses": errorResponses,
};
}
class ErrorResponse {
ErrorResponse({
this.fieldName,
this.message,
});
dynamic? fieldName;
String? message;
factory ErrorResponse.fromRawJson(String str) => ErrorResponse.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory ErrorResponse.fromJson(Map<String, dynamic> json) => ErrorResponse(
fieldName: json["fieldName"],
message: json["message"] == null ? null : json["message"],
);
Map<String, dynamic> toJson() => {
"fieldName": fieldName,
"message": message == null ? null : message,
}; };
} }
class ChatUser { class ChatUser {
ChatUser({ ChatUser(
this.id, {this.id,
this.userName, this.userName,
this.email, this.email,
this.phone, this.phone,
this.title, this.title,
this.userStatus, this.userStatus,
this.image, this.image,
this.unreadMessageCount, this.unreadMessageCount,
this.userAction, this.userAction,
this.isPin, this.isPin,
this.isFav, this.isFav,
this.isAdmin, this.isAdmin,
this.rKey, this.isTyping,
this.totalCount, this.isLoadingCounter});
this.isTyping,
this.isImageLoaded,
this.isImageLoading,
this.userLocalDownlaodedImage,
});
int? id; int? id;
String? userName; String? userName;
String? email; String? email;
dynamic? phone; dynamic? phone;
String? title; dynamic? title;
int? userStatus; int? userStatus;
dynamic? image; dynamic? image;
int? unreadMessageCount; int? unreadMessageCount;
@ -83,43 +47,32 @@ class ChatUser {
bool? isPin; bool? isPin;
bool? isFav; bool? isFav;
bool? isAdmin; bool? isAdmin;
dynamic? rKey;
int? totalCount;
bool? isTyping; bool? isTyping;
bool? isImageLoaded; bool? isLoadingCounter;
bool? isImageLoading;
File? userLocalDownlaodedImage;
factory ChatUser.fromRawJson(String str) => ChatUser.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory ChatUser.fromJson(Map<String, dynamic> json) => ChatUser( factory ChatUser.fromJson(Map<String, dynamic> json) => ChatUser(
id: json["id"] == null ? null : json["id"], id: json["id"] == null ? null : json["id"],
userName: json["userName"] == null ? null : json["userName"], userName: json["userName"] == null ? null : json["userName"],
email: json["email"] == null ? null : json["email"], email: json["email"] == null ? null : json["email"],
phone: json["phone"], phone: json["phone"],
title: json["title"] == null ? null : json["title"], title: json["title"],
userStatus: json["userStatus"] == null ? null : json["userStatus"], userStatus: json["userStatus"] == null ? null : json["userStatus"],
image: json["image"], image: json["image"],
unreadMessageCount: json["unreadMessageCount"] == null ? null : json["unreadMessageCount"], unreadMessageCount: json["unreadMessageCount"] == null ? null : json["unreadMessageCount"],
userAction: json["userAction"], userAction: json["userAction"],
isPin: json["isPin"] == null ? null : json["isPin"], isPin: json["isPin"] == null ? null : json["isPin"],
isFav: json["isFav"] == null ? null : json["isFav"], isFav: json["isFav"] == null ? null : json["isFav"],
isAdmin: json["isAdmin"] == null ? null : json["isAdmin"], isAdmin: json["isAdmin"] == null ? null : json["isAdmin"],
rKey: json["rKey"], isTyping: false,
totalCount: json["totalCount"] == null ? null : json["totalCount"], isLoadingCounter: true,
isTyping: false, );
isImageLoaded: false,
isImageLoading: true,
userLocalDownlaodedImage: null);
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"id": id == null ? null : id, "id": id == null ? null : id,
"userName": userName == null ? null : userName, "userName": userName == null ? null : userName,
"email": email == null ? null : email, "email": email == null ? null : email,
"phone": phone, "phone": phone,
"title": title == null ? null : title, "title": title,
"userStatus": userStatus == null ? null : userStatus, "userStatus": userStatus == null ? null : userStatus,
"image": image, "image": image,
"unreadMessageCount": unreadMessageCount == null ? null : unreadMessageCount, "unreadMessageCount": unreadMessageCount == null ? null : unreadMessageCount,
@ -127,7 +80,5 @@ class ChatUser {
"isPin": isPin == null ? null : isPin, "isPin": isPin == null ? null : isPin,
"isFav": isFav == null ? null : isFav, "isFav": isFav == null ? null : isFav,
"isAdmin": isAdmin == null ? null : isAdmin, "isAdmin": isAdmin == null ? null : isAdmin,
"rKey": rKey,
"totalCount": totalCount == null ? null : totalCount,
}; };
} }

@ -1,41 +1,32 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/foundation.dart';
import 'package:just_audio/just_audio.dart';
List<SingleUserChatModel> singleUserChatModelFromJson(String str) => List<SingleUserChatModel>.from(json.decode(str).map((x) => SingleUserChatModel.fromJson(x))); List<SingleUserChatModel> singleUserChatModelFromJson(String str) => List<SingleUserChatModel>.from(json.decode(str).map((x) => SingleUserChatModel.fromJson(x)));
String singleUserChatModelToJson(List<SingleUserChatModel> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson()))); String singleUserChatModelToJson(List<SingleUserChatModel> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class SingleUserChatModel { class SingleUserChatModel {
SingleUserChatModel( SingleUserChatModel({
{this.userChatHistoryId, this.userChatHistoryId,
this.userChatHistoryLineId, this.userChatHistoryLineId,
this.contant, this.contant,
this.contantNo, this.contantNo,
this.currentUserId, this.currentUserId,
this.currentUserName, this.currentUserName,
this.targetUserId, this.targetUserId,
this.targetUserName, this.targetUserName,
this.encryptedTargetUserId, this.encryptedTargetUserId,
this.encryptedTargetUserName, this.encryptedTargetUserName,
this.currentUserEmail, this.chatEventId,
this.targetUserEmail, this.fileTypeId,
this.chatEventId, this.isSeen,
this.fileTypeId, this.isDelivered,
this.isSeen, this.createdDate,
this.isDelivered, this.chatSource,
this.createdDate, this.conversationId,
this.chatSource, this.fileTypeResponse,
this.conversationId, this.userChatReplyResponse,
this.fileTypeResponse, this.isReplied,
this.userChatReplyResponse, });
this.isReplied,
this.isImageLoaded,
this.image,
this.voice,
this.voiceController});
int? userChatHistoryId; int? userChatHistoryId;
int? userChatHistoryLineId; int? userChatHistoryLineId;
@ -43,10 +34,8 @@ class SingleUserChatModel {
String? contantNo; String? contantNo;
int? currentUserId; int? currentUserId;
String? currentUserName; String? currentUserName;
String? currentUserEmail;
int? targetUserId; int? targetUserId;
String? targetUserName; String? targetUserName;
String? targetUserEmail;
String? encryptedTargetUserId; String? encryptedTargetUserId;
String? encryptedTargetUserName; String? encryptedTargetUserName;
int? chatEventId; int? chatEventId;
@ -59,38 +48,29 @@ class SingleUserChatModel {
FileTypeResponse? fileTypeResponse; FileTypeResponse? fileTypeResponse;
UserChatReplyResponse? userChatReplyResponse; UserChatReplyResponse? userChatReplyResponse;
bool? isReplied; bool? isReplied;
bool? isImageLoaded;
Uint8List? image;
File? voice;
AudioPlayer? voiceController;
factory SingleUserChatModel.fromJson(Map<String, dynamic> json) => SingleUserChatModel( factory SingleUserChatModel.fromJson(Map<String, dynamic> json) => SingleUserChatModel(
userChatHistoryId: json["userChatHistoryId"] == null ? null : json["userChatHistoryId"], userChatHistoryId: json["userChatHistoryId"] == null ? null : json["userChatHistoryId"],
userChatHistoryLineId: json["userChatHistoryLineId"] == null ? null : json["userChatHistoryLineId"], userChatHistoryLineId: json["userChatHistoryLineId"] == null ? null : json["userChatHistoryLineId"],
contant: json["contant"] == null ? null : json["contant"], contant: json["contant"] == null ? null : json["contant"],
contantNo: json["contantNo"] == null ? null : json["contantNo"], contantNo: json["contantNo"] == null ? null : json["contantNo"],
currentUserId: json["currentUserId"] == null ? null : json["currentUserId"], currentUserId: json["currentUserId"] == null ? null : json["currentUserId"],
currentUserName: json["currentUserName"] == null ? null : json["currentUserName"], currentUserName: json["currentUserName"] == null ? null : json["currentUserName"],
targetUserId: json["targetUserId"] == null ? null : json["targetUserId"], targetUserId: json["targetUserId"] == null ? null : json["targetUserId"],
targetUserName: json["targetUserName"] == null ? null : json["targetUserName"], targetUserName: json["targetUserName"] == null ? null : json["targetUserName"],
targetUserEmail: json["targetUserEmail"] == null ? null : json["targetUserEmail"], encryptedTargetUserId: json["encryptedTargetUserId"] == null ? null : json["encryptedTargetUserId"],
currentUserEmail: json["currentUserEmail"] == null ? null : json["currentUserEmail"], encryptedTargetUserName: json["encryptedTargetUserName"] == null ? null : json["encryptedTargetUserName"],
encryptedTargetUserId: json["encryptedTargetUserId"] == null ? null : json["encryptedTargetUserId"], chatEventId: json["chatEventId"] == null ? null : json["chatEventId"],
encryptedTargetUserName: json["encryptedTargetUserName"] == null ? null : json["encryptedTargetUserName"], fileTypeId: json["fileTypeId"],
chatEventId: json["chatEventId"] == null ? null : json["chatEventId"], isSeen: json["isSeen"] == null ? null : json["isSeen"],
fileTypeId: json["fileTypeId"], isDelivered: json["isDelivered"] == null ? null : json["isDelivered"],
isSeen: json["isSeen"] == null ? null : json["isSeen"], createdDate: json["createdDate"] == null ? null : DateTime.parse(json["createdDate"]),
isDelivered: json["isDelivered"] == null ? null : json["isDelivered"], chatSource: json["chatSource"] == null ? null : json["chatSource"],
createdDate: json["createdDate"] == null ? null : DateTime.parse(json["createdDate"]), conversationId: json["conversationId"] == null ? null : json["conversationId"],
chatSource: json["chatSource"] == null ? null : json["chatSource"], fileTypeResponse: json["fileTypeResponse"] == null ? null : FileTypeResponse.fromJson(json["fileTypeResponse"]),
conversationId: json["conversationId"] == null ? null : json["conversationId"], userChatReplyResponse: json["userChatReplyResponse"] == null ? null : UserChatReplyResponse.fromJson(json["userChatReplyResponse"]),
fileTypeResponse: json["fileTypeResponse"] == null ? null : FileTypeResponse.fromJson(json["fileTypeResponse"]), isReplied: false,
userChatReplyResponse: json["userChatReplyResponse"] == null ? null : UserChatReplyResponse.fromJson(json["userChatReplyResponse"]), );
isReplied: false,
isImageLoaded: false,
image: null,
voice: null,
voiceController: json["fileTypeId"] == 13 ? AudioPlayer() : null);
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"userChatHistoryId": userChatHistoryId == null ? null : userChatHistoryId, "userChatHistoryId": userChatHistoryId == null ? null : userChatHistoryId,
@ -103,8 +83,6 @@ class SingleUserChatModel {
"targetUserName": targetUserName == null ? null : targetUserName, "targetUserName": targetUserName == null ? null : targetUserName,
"encryptedTargetUserId": encryptedTargetUserId == null ? null : encryptedTargetUserId, "encryptedTargetUserId": encryptedTargetUserId == null ? null : encryptedTargetUserId,
"encryptedTargetUserName": encryptedTargetUserName == null ? null : encryptedTargetUserName, "encryptedTargetUserName": encryptedTargetUserName == null ? null : encryptedTargetUserName,
"currentUserEmail": currentUserEmail == null ? null : currentUserEmail,
"targetUserEmail": targetUserEmail == null ? null : targetUserEmail,
"chatEventId": chatEventId == null ? null : chatEventId, "chatEventId": chatEventId == null ? null : chatEventId,
"fileTypeId": fileTypeId, "fileTypeId": fileTypeId,
"isSeen": isSeen == null ? null : isSeen, "isSeen": isSeen == null ? null : isSeen,
@ -150,19 +128,17 @@ class FileTypeResponse {
} }
class UserChatReplyResponse { class UserChatReplyResponse {
UserChatReplyResponse( UserChatReplyResponse({
{this.userChatHistoryId, this.userChatHistoryId,
this.chatEventId, this.chatEventId,
this.contant, this.contant,
this.contantNo, this.contantNo,
this.fileTypeId, this.fileTypeId,
this.createdDate, this.createdDate,
this.targetUserId, this.targetUserId,
this.targetUserName, this.targetUserName,
this.fileTypeResponse, this.fileTypeResponse,
this.isImageLoaded, });
this.image,
this.voice});
int? userChatHistoryId; int? userChatHistoryId;
int? chatEventId; int? chatEventId;
@ -173,9 +149,6 @@ class UserChatReplyResponse {
int? targetUserId; int? targetUserId;
String? targetUserName; String? targetUserName;
FileTypeResponse? fileTypeResponse; FileTypeResponse? fileTypeResponse;
bool? isImageLoaded;
Uint8List? image;
Uint8List? voice;
factory UserChatReplyResponse.fromJson(Map<String, dynamic> json) => UserChatReplyResponse( factory UserChatReplyResponse.fromJson(Map<String, dynamic> json) => UserChatReplyResponse(
userChatHistoryId: json["userChatHistoryId"] == null ? null : json["userChatHistoryId"], userChatHistoryId: json["userChatHistoryId"] == null ? null : json["userChatHistoryId"],
@ -187,9 +160,6 @@ class UserChatReplyResponse {
targetUserId: json["targetUserId"] == null ? null : json["targetUserId"], targetUserId: json["targetUserId"] == null ? null : json["targetUserId"],
targetUserName: json["targetUserName"] == null ? null : json["targetUserName"], targetUserName: json["targetUserName"] == null ? null : json["targetUserName"],
fileTypeResponse: json["fileTypeResponse"] == null ? null : FileTypeResponse.fromJson(json["fileTypeResponse"]), fileTypeResponse: json["fileTypeResponse"] == null ? null : FileTypeResponse.fromJson(json["fileTypeResponse"]),
isImageLoaded: false,
image: null,
voice: null,
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {

@ -2,8 +2,6 @@ class DrawerMenuItem {
String icon; String icon;
String title; String title;
String routeName; String routeName;
int? requestGroupId;
String? requestGroupName;
DrawerMenuItem(this.icon, this.title, this.routeName, {this.requestGroupId, this.requestGroupName}); DrawerMenuItem(this.icon, this.title, this.routeName);
} }

@ -1,45 +0,0 @@
// To parse this JSON data, do
//
// final employeeLeavesList = employeeLeavesListFromJson(jsonString);
import 'dart:convert';
EmployeeLeavesList employeeLeavesListFromJson(String str) => EmployeeLeavesList.fromJson(json.decode(str));
String employeeLeavesListToJson(EmployeeLeavesList data) => json.encode(data.toJson());
class EmployeeLeavesList {
EmployeeLeavesList({
this.absenceAttendanceTypeName,
this.dateEnd,
this.dateStart,
this.eventDate,
this.holidayType,
this.leaveType,
});
String? absenceAttendanceTypeName;
String? dateEnd;
String? dateStart;
String? eventDate;
String? holidayType;
String? leaveType;
factory EmployeeLeavesList.fromJson(Map<String, dynamic> json) => EmployeeLeavesList(
absenceAttendanceTypeName: json["ABSENCE_ATTENDANCE_TYPE_NAME"],
dateEnd: json["DATE_END"],
dateStart: json["DATE_START"],
eventDate: json["EVENT_DATE"],
holidayType: json["HOLIDAY_TYPE"],
leaveType: json["LEAVE_TYPE"],
);
Map<String, dynamic> toJson() => {
"ABSENCE_ATTENDANCE_TYPE_NAME": absenceAttendanceTypeName,
"DATE_END": dateEnd,
"DATE_START": dateStart,
"EVENT_DATE": eventDate,
"HOLIDAY_TYPE": holidayType,
"LEAVE_TYPE": leaveType,
};
}

@ -8,7 +8,6 @@ import 'package:mohem_flutter_app/models/dashboard/get_open_notifications_list.d
import 'package:mohem_flutter_app/models/dashboard/list_menu.dart'; import 'package:mohem_flutter_app/models/dashboard/list_menu.dart';
import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart'; import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart';
import 'package:mohem_flutter_app/models/dashboard/mohemm_itg_pending_task_responseitem.dart'; import 'package:mohem_flutter_app/models/dashboard/mohemm_itg_pending_task_responseitem.dart';
import 'package:mohem_flutter_app/models/employee_leaves_list.dart';
import 'package:mohem_flutter_app/models/get_absence_collection_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/get_absence_collection_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/get_action_history_list_model.dart'; import 'package:mohem_flutter_app/models/get_action_history_list_model.dart';
import 'package:mohem_flutter_app/models/get_approves_list_model.dart'; import 'package:mohem_flutter_app/models/get_approves_list_model.dart';
@ -36,7 +35,6 @@ import 'package:mohem_flutter_app/models/get_stamp_ms_notification_body_list_mod
import 'package:mohem_flutter_app/models/get_stamp_ns_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/get_stamp_ns_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart'; import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart';
import 'package:mohem_flutter_app/models/get_user_item_type_list.dart'; import 'package:mohem_flutter_app/models/get_user_item_type_list.dart';
import 'package:mohem_flutter_app/models/hierarchy_lists.dart';
import 'package:mohem_flutter_app/models/leave_balance/calculate_absence_duration_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/calculate_absence_duration_model.dart';
import 'package:mohem_flutter_app/models/leave_balance/cancel_hr_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/cancel_hr_transaction_list_model.dart';
import 'package:mohem_flutter_app/models/leave_balance/get_absence_attendance_types_list_model.dart'; import 'package:mohem_flutter_app/models/leave_balance/get_absence_attendance_types_list_model.dart';
@ -75,7 +73,6 @@ import 'package:mohem_flutter_app/models/performance.dart';
import 'package:mohem_flutter_app/models/privilege_list_model.dart'; import 'package:mohem_flutter_app/models/privilege_list_model.dart';
import 'package:mohem_flutter_app/models/profile/basic_details_cols_structions.dart'; import 'package:mohem_flutter_app/models/profile/basic_details_cols_structions.dart';
import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart'; import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart';
import 'package:mohem_flutter_app/models/profile/employee_qualifications_list.dart';
import 'package:mohem_flutter_app/models/profile/get_address_dff_structure_list.dart'; import 'package:mohem_flutter_app/models/profile/get_address_dff_structure_list.dart';
import 'package:mohem_flutter_app/models/profile/get_contact_clos_structure_list.dart'; import 'package:mohem_flutter_app/models/profile/get_contact_clos_structure_list.dart';
import 'package:mohem_flutter_app/models/profile/get_contact_details_list.dart'; import 'package:mohem_flutter_app/models/profile/get_contact_details_list.dart';
@ -105,7 +102,6 @@ import 'package:mohem_flutter_app/models/validate_eit_transaction_list_model.dar
import 'package:mohem_flutter_app/models/worklist/GetRFCEmployeeList.dart'; import 'package:mohem_flutter_app/models/worklist/GetRFCEmployeeList.dart';
import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart'; import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/eit_otification_body_model.dart'; import 'package:mohem_flutter_app/models/worklist/hr/eit_otification_body_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_address_notification_body_list.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_basic_det_ntf_body_list_model.dart'; import 'package:mohem_flutter_app/models/worklist/hr/get_basic_det_ntf_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_contact_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/worklist/hr/get_contact_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_phones_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/worklist/hr/get_phones_notification_body_list_model.dart';
@ -167,12 +163,12 @@ class GenericResponseModel {
List<String>? getAbsenceAttachmentsList; List<String>? getAbsenceAttachmentsList;
List<GetAbsenceAttendanceTypesList>? getAbsenceAttendanceTypesList; List<GetAbsenceAttendanceTypesList>? getAbsenceAttendanceTypesList;
List<GetAbsenceCollectionNotificationBodyList>? getAbsenceCollectionNotificationBodyList; List<GetAbsenceCollectionNotificationBodyList>? getAbsenceCollectionNotificationBodyList;
List<GetAddressNotificationBodyList>? getAddressNotificationBodyList;
List<GetAbsenceDffStructureList>? getAbsenceDffStructureList; List<GetAbsenceDffStructureList>? getAbsenceDffStructureList;
List<GetAbsenceTransactionList>? getAbsenceTransactionList; List<GetAbsenceTransactionList>? getAbsenceTransactionList;
List<GetAccrualBalancesList>? getAccrualBalancesList; List<GetAccrualBalancesList>? getAccrualBalancesList;
List<GetActionHistoryList>? getActionHistoryList; List<GetActionHistoryList>? getActionHistoryList;
List<GetAddressDffStructureList>? getAddressDffStructureList; List<GetAddressDffStructureList>? getAddressDffStructureList;
List<String>? getAddressNotificationBodyList;
List<GetApprovesList>? getApprovesList; List<GetApprovesList>? getApprovesList;
List<GetAttachementList>? getAttachementList; List<GetAttachementList>? getAttachementList;
GetAttendanceTracking? getAttendanceTrackingList; GetAttendanceTracking? getAttendanceTrackingList;
@ -199,7 +195,6 @@ class GenericResponseModel {
List<GetEmployeeBasicDetailsList>? getEmployeeBasicDetailsList; List<GetEmployeeBasicDetailsList>? getEmployeeBasicDetailsList;
List<GetEmployeeContactsList>? getEmployeeContactsList; List<GetEmployeeContactsList>? getEmployeeContactsList;
List<GetEmployeePhonesList>? getEmployeePhonesList; List<GetEmployeePhonesList>? getEmployeePhonesList;
List<EmployeeQualificationsList>? getEmployeeQualificationsList;
List<GetEmployeeSubordinatesList>? getEmployeeSubordinatesList; List<GetEmployeeSubordinatesList>? getEmployeeSubordinatesList;
List<String>? getFliexfieldStructureList; List<String>? getFliexfieldStructureList;
List<String>? getHrCollectionNotificationBodyList; List<String>? getHrCollectionNotificationBodyList;
@ -253,7 +248,6 @@ class GenericResponseModel {
List<GetTermDffStructureList>? getTermDffStructureList; List<GetTermDffStructureList>? getTermDffStructureList;
List<String>? getTermNotificationBodyList; List<String>? getTermNotificationBodyList;
List<GetTimeCardSummaryList>? getTimeCardSummaryList; List<GetTimeCardSummaryList>? getTimeCardSummaryList;
List<EmployeeLeavesList>? getEmployeeLeavesList;
List<GetTicketsByEmployeeList>? getTicketsByEmployeeList; List<GetTicketsByEmployeeList>? getTicketsByEmployeeList;
List<GetTicketDetailsByEmployee>? getTicketDetailsByEmployee; List<GetTicketDetailsByEmployee>? getTicketDetailsByEmployee;
List<GetTicketTransactions>? getTicketTransactions; List<GetTicketTransactions>? getTicketTransactions;
@ -383,274 +377,269 @@ class GenericResponseModel {
String? ePharmacyGetItemOnHandList; String? ePharmacyGetItemOnHandList;
bool? isActiveCode; bool? isActiveCode;
bool? isSMSSent; bool? isSMSSent;
SupervisorHierarchyLists? supervisorHierarchyLists;
GenericResponseModel(
GenericResponseModel({ {this.date,
this.date, this.languageID,
this.languageID, this.serviceName,
this.serviceName, this.time,
this.time, this.androidLink,
this.androidLink, this.authenticationTokenID,
this.authenticationTokenID, this.data,
this.data, this.dataw,
this.dataw, this.dietType,
this.dietType, this.dietTypeID,
this.dietTypeID, this.errorCode,
this.errorCode, this.errorEndUserMessage,
this.errorEndUserMessage, this.errorEndUserMessageN,
this.errorEndUserMessageN, this.errorMessage,
this.errorMessage, this.errorType,
this.errorType, this.foodCategory,
this.foodCategory, this.iOSLink,
this.iOSLink, this.isAuthenticated,
this.isAuthenticated, this.mealOrderStatus,
this.mealOrderStatus, this.mealType,
this.mealType, this.messageStatus,
this.messageStatus, this.numberOfResultRecords,
this.numberOfResultRecords, this.patientBlodType,
this.patientBlodType, this.successMsg,
this.successMsg, this.successMsgN,
this.successMsgN, this.vidaUpdatedResponse,
this.vidaUpdatedResponse, this.addAttSuccessList,
this.addAttSuccessList, this.addAttachmentList,
this.addAttachmentList, this.bCDomain,
this.bCDomain, this.bCLogo,
this.bCLogo, this.basicMemberInformation,
this.basicMemberInformation, this.businessCardPrivilege,
this.businessCardPrivilege, this.calculateAbsenceDuration,
this.calculateAbsenceDuration, this.cancelHRTransactionLIst,
this.cancelHRTransactionLIst, this.chatEmployeeLoginList,
this.chatEmployeeLoginList, this.companyBadge,
this.companyBadge, this.companyImage,
this.companyImage, this.companyImageDescription,
this.companyImageDescription, this.companyImageURL,
this.companyImageURL, this.companyMainCompany,
this.companyMainCompany, this.countryList,
this.countryList, this.createVacationRuleList,
this.createVacationRuleList, this.deleteAttachmentList,
this.deleteAttachmentList, this.deleteVacationRuleList,
this.deleteVacationRuleList, this.disableSessionList,
this.disableSessionList, this.employeeQR,
this.employeeQR, this.forgetPasswordTokenID,
this.forgetPasswordTokenID, this.getAbsenceAttachmentsList,
this.getAbsenceAttachmentsList, this.getAbsenceAttendanceTypesList,
this.getAbsenceAttendanceTypesList, this.getAbsenceCollectionNotificationBodyList,
this.getAbsenceCollectionNotificationBodyList, this.getAbsenceDffStructureList,
this.getAbsenceDffStructureList, this.getAbsenceTransactionList,
this.getAbsenceTransactionList, this.getAccrualBalancesList,
this.getAccrualBalancesList, this.getActionHistoryList,
this.getActionHistoryList, this.getAddressDffStructureList,
this.getAddressDffStructureList, this.getAddressNotificationBodyList,
this.getAddressNotificationBodyList, this.getApprovesList,
this.getApprovesList, this.getAttachementList,
this.getAttachementList, this.getAttendanceTrackingList,
this.getAttendanceTrackingList, this.getBasicDetColsStructureList,
this.getBasicDetColsStructureList, this.getBasicDetDffStructureList,
this.getBasicDetDffStructureList, this.getBasicDetNtfBodyList,
this.getBasicDetNtfBodyList, this.getCEICollectionNotificationBodyList,
this.getCEICollectionNotificationBodyList, this.getCEIDFFStructureList,
this.getCEIDFFStructureList, this.getCEITransactionList,
this.getCEITransactionList, this.getCcpTransactionsList,
this.getCcpTransactionsList, this.getCcpTransactionsListNew,
this.getCcpTransactionsListNew, this.getConcurrentProgramsList,
this.getConcurrentProgramsList, this.getContactColsStructureList,
this.getContactColsStructureList, this.getContactDetailsList,
this.getContactDetailsList, this.getContactDffStructureList,
this.getContactDffStructureList, this.getContactNotificationBodyList,
this.getContactNotificationBodyList, this.getCountriesList,
this.getCountriesList, this.getDayHoursTypeDetailsList,
this.getDayHoursTypeDetailsList, this.getDeductionsList,
this.getDeductionsList, this.getDefaultValueList,
this.getDefaultValueList, this.getEITCollectionNotificationBodyList,
this.getEITCollectionNotificationBodyList, this.getEITDFFStructureList,
this.getEITDFFStructureList, this.getEITTransactionList,
this.getEITTransactionList, this.getEarningsList,
this.getEarningsList, this.getEmployeeAddressList,
this.getEmployeeAddressList, this.getEmployeeBasicDetailsList,
this.getEmployeeBasicDetailsList, this.getEmployeeContactsList,
this.getEmployeeContactsList, this.getEmployeePhonesList,
this.getEmployeePhonesList, this.getEmployeeSubordinatesList,
this.getEmployeeQualificationsList, this.getFliexfieldStructureList,
this.getEmployeeSubordinatesList, this.getHrCollectionNotificationBodyList,
this.getFliexfieldStructureList, this.getHrTransactionList,
this.getHrCollectionNotificationBodyList, this.getItemCreationNtfBodyList,
this.getHrTransactionList, this.getItemTypeNotificationsList,
this.getItemCreationNtfBodyList, this.getItemTypesList,
this.getItemTypeNotificationsList, this.getLookupValuesList,
this.getItemTypesList, this.getMenuEntriesList,
this.getLookupValuesList, this.getMoItemHistoryList,
this.getMenuEntriesList, this.getMoNotificationBodyList,
this.getMoItemHistoryList, this.getNotificationButtonsList,
this.getMoNotificationBodyList, this.getNotificationReassignModeList,
this.getNotificationButtonsList, this.getObjectValuesList,
this.getNotificationReassignModeList, this.getOpenMissingSwipesList,
this.getObjectValuesList, this.getOpenNotificationsList,
this.getOpenMissingSwipesList, this.getOpenNotificationsNumList,
this.getOpenNotificationsList, this.getOpenPeriodDatesList,
this.getOpenNotificationsNumList, this.getOrganizationsSalariesList,
this.getOpenPeriodDatesList, this.getPaymentInformationList,
this.getOrganizationsSalariesList, this.getPayslipList,
this.getPaymentInformationList, this.getPerformanceAppraisalList,
this.getPayslipList, this.getPhonesNotificationBodyList,
this.getPerformanceAppraisalList, this.getPoItemHistoryList,
this.getPhonesNotificationBodyList, this.getPoNotificationBodyList,
this.getPoItemHistoryList, this.getPrNotificationBodyList,
this.getPoNotificationBodyList, this.getQuotationAnalysisList,
this.getPrNotificationBodyList, this.getRFCEmployeeListList,
this.getQuotationAnalysisList, this.getRespondAttributeValueList,
this.getRFCEmployeeListList, this.getSITCollectionNotificationBodyList,
this.getRespondAttributeValueList, this.getSITDFFStructureList,
this.getSITCollectionNotificationBodyList, this.getSITTransactionList,
this.getSITDFFStructureList, this.getScheduleShiftsDetailsList,
this.getSITTransactionList, this.getShiftTypesList,
this.getScheduleShiftsDetailsList, this.getStampMsNotificationBodyList,
this.getShiftTypesList, this.getStampNsNotificationBodyList,
this.getStampMsNotificationBodyList, this.getSubordinatesAttdStatusList,
this.getStampNsNotificationBodyList, this.getSubordinatesLeavesList,
this.getSubordinatesAttdStatusList, this.getSubordinatesLeavesTotalVacationsList,
this.getSubordinatesLeavesList, this.getSummaryOfPaymentList,
this.getSubordinatesLeavesTotalVacationsList, this.getSwipesList,
this.getSummaryOfPaymentList, this.getTermColsStructureList,
this.getSwipesList, this.getTermDffStructureList,
this.getTermColsStructureList, this.getTermNotificationBodyList,
this.getTermDffStructureList, this.getTimeCardSummaryList,
this.getTermNotificationBodyList, this.getTicketsByEmployeeList,
this.getTimeCardSummaryList, this.getTicketDetailsByEmployee,
this.getEmployeeLeavesList, this.getTicketTransactions,
this.getTicketsByEmployeeList, this.getTicketTypes,
this.getTicketDetailsByEmployee, this.getSectionTopics,
this.getTicketTransactions, this.getMowadhafhiProjects,
this.getTicketTypes, this.getProjectDepartments,
this.getSectionTopics, this.getDepartmentSections,
this.getMowadhafhiProjects, this.getPendingTransactionsFunctions,
this.getProjectDepartments, this.getPendingTransactionsDetails,
this.getDepartmentSections, this.getConcurrentProgramsModel,
this.getPendingTransactionsFunctions, this.getCCPTransactionsModel,
this.getPendingTransactionsDetails, this.getCCPOutputModel,
this.getConcurrentProgramsModel, this.getCCPDFFStructureModel,
this.getCCPTransactionsModel, this.getUserItemTypesList,
this.getCCPOutputModel, this.getVacationRulesList,
this.getCCPDFFStructureModel, this.getVaccinationOnHandList,
this.getUserItemTypesList, this.getVaccinationsList,
this.getVacationRulesList, this.getValueSetValuesList,
this.getVaccinationOnHandList, this.getWorkList,
this.getVaccinationsList, this.hRCertificateTemplate,
this.getValueSetValuesList, this.imgURLsList,
this.getWorkList, this.insertApInv,
this.hRCertificateTemplate, this.insertBooked,
this.imgURLsList, this.insertEmpSwipesList,
this.insertApInv, this.insertJournal,
this.insertBooked, this.insertOrders,
this.insertEmpSwipesList, this.intPortalGetEmployeeList,
this.insertJournal, this.isDeviceTokenEmpty,
this.insertOrders, this.isPasswordExpired,
this.intPortalGetEmployeeList, this.isRegisterAllowed,
this.isDeviceTokenEmpty, this.isRequriedValueSetEmpty,
this.isPasswordExpired, this.isUserSMSExcluded,
this.isRegisterAllowed, this.itemOnHand,
this.isRequriedValueSetEmpty, this.languageAvailable,
this.isUserSMSExcluded, this.listSupplier,
this.itemOnHand, this.listUserAgreement,
this.languageAvailable, this.listEITStrucrure,
this.listSupplier, this.listItemImagesDetails,
this.listUserAgreement, this.listItemMaster,
this.listEITStrucrure, this.listMedicineDetails,
this.listItemImagesDetails, this.listMenu,
this.listItemMaster, this.listNewEmployees,
this.listMedicineDetails, this.listRadScreen,
this.listMenu, this.logInTokenID,
this.listNewEmployees, this.memberInformationList,
this.listRadScreen, this.memberLoginList,
this.logInTokenID, this.mohemmGetBusinessCardEnabledList,
this.memberInformationList, this.mohemmGetFavoriteReplacementsList,
this.memberLoginList, this.mohemmGetMobileDeviceInfobyEmpInfoList,
this.mohemmGetBusinessCardEnabledList, this.mohemmGetMobileLoginInfoList,
this.mohemmGetFavoriteReplacementsList, this.mohemmGetPatientIDList,
this.mohemmGetMobileDeviceInfobyEmpInfoList, this.mohemmITGResponseItem,
this.mohemmGetMobileLoginInfoList, this.mohemmIsChangeIsActiveBusinessCardEnable,
this.mohemmGetPatientIDList, this.mohemmIsInsertBusinessCardEnable,
this.mohemmITGResponseItem, this.mohemmWifiPassword,
this.mohemmIsChangeIsActiveBusinessCardEnable, this.mohemmWifiSSID,
this.mohemmIsInsertBusinessCardEnable, this.notificationAction,
this.mohemmWifiPassword, this.notificationGetRespondAttributesList,
this.mohemmWifiSSID, this.notificationRespondRolesList,
this.notificationAction, this.oracleOutPutNumber,
this.notificationGetRespondAttributesList, this.pASSWORDEXPIREDMSG,
this.notificationRespondRolesList, this.pCOUNTRYCODE,
this.oracleOutPutNumber, this.pCOUNTRYNAME,
this.pASSWORDEXPIREDMSG, this.pDESCFLEXCONTEXTCODE,
this.pCOUNTRYCODE, this.pDESCFLEXCONTEXTNAME,
this.pCOUNTRYNAME, this.pForm,
this.pDESCFLEXCONTEXTCODE, this.pINFORMATION,
this.pDESCFLEXCONTEXTNAME, this.pMBLID,
this.pForm, this.pNUMOFSUBORDINATES,
this.pINFORMATION, this.pOPENNTFNUMBER,
this.pMBLID, this.pQUESTION,
this.pNUMOFSUBORDINATES, this.pSESSIONID,
this.pOPENNTFNUMBER, this.pSchema,
this.pQUESTION, this.pharmacyStockAddPharmacyStockList,
this.pSESSIONID, this.pharmacyStockGetOnHandList,
this.pSchema, this.privilegeList,
this.pharmacyStockAddPharmacyStockList, this.processTransactions,
this.pharmacyStockGetOnHandList, this.registerUserNameList,
this.privilegeList, this.replacementList,
this.processTransactions, this.respondAttributesList,
this.registerUserNameList, this.respondRolesList,
this.replacementList, this.resubmitAbsenceTransactionList,
this.respondAttributesList, this.resubmitEITTransactionList,
this.respondRolesList, this.resubmitHrTransactionList,
this.resubmitAbsenceTransactionList, this.sFHGetPoNotificationBodyList,
this.resubmitEITTransactionList, this.sFHGetPrNotificationBodyList,
this.resubmitHrTransactionList, this.startAbsenceApprovalProccess,
this.sFHGetPoNotificationBodyList, this.startAddressApprovalProcessList,
this.sFHGetPrNotificationBodyList, this.startBasicDetApprProcessList,
this.startAbsenceApprovalProccess, this.startCeiApprovalProcess,
this.startAddressApprovalProcessList, this.startContactApprovalProcessList,
this.startBasicDetApprProcessList, this.startEitApprovalProcess,
this.startCeiApprovalProcess, this.startHrApprovalProcessList,
this.startContactApprovalProcessList, this.startPhonesApprovalProcessList,
this.startEitApprovalProcess, this.startSitApprovalProcess,
this.startHrApprovalProcessList, this.startTermApprovalProcessList,
this.startPhonesApprovalProcessList, this.submitAddressTransactionList,
this.startSitApprovalProcess, this.submitBasicDetTransactionList,
this.startTermApprovalProcessList, this.submitCEITransactionList,
this.submitAddressTransactionList, this.submitCcpTransactionList,
this.submitBasicDetTransactionList, this.submitContactTransactionList,
this.submitCEITransactionList, this.submitEITTransactionList,
this.submitCcpTransactionList, this.submitHrTransactionList,
this.submitContactTransactionList, this.submitPhonesTransactionList,
this.submitEITTransactionList, this.submitSITTransactionList,
this.submitHrTransactionList, this.submitTermTransactionList,
this.submitPhonesTransactionList, this.subordinatesOnLeavesList,
this.submitSITTransactionList, this.sumbitAbsenceTransactionList,
this.submitTermTransactionList, this.tokenID,
this.subordinatesOnLeavesList, this.updateAttachmentList,
this.sumbitAbsenceTransactionList, this.updateEmployeeImageList,
this.tokenID, this.updateItemTypeSuccessList,
this.updateAttachmentList, this.updateUserItemTypesList,
this.updateEmployeeImageList, this.updateVacationRuleList,
this.updateItemTypeSuccessList, this.vHREmployeeLoginList,
this.updateUserItemTypesList, this.vHRGetEmployeeDetailsList,
this.updateVacationRuleList, this.vHRGetManagersDetailsList,
this.vHREmployeeLoginList, this.vHRGetProjectByCodeList,
this.vHRGetEmployeeDetailsList, this.vHRIsVerificationCodeValid,
this.vHRGetManagersDetailsList, this.validateAbsenceTransactionList,
this.vHRGetProjectByCodeList, this.validateEITTransactionList,
this.vHRIsVerificationCodeValid, this.validatePhonesTransactionList,
this.validateAbsenceTransactionList, this.vrItemTypesList,
this.validateEITTransactionList, this.wFLookUpList,
this.validatePhonesTransactionList, this.eLearningGETEMPLOYEEPROFILEList,
this.vrItemTypesList, this.eLearningLOGINList,
this.wFLookUpList, this.eLearningValidateLoginList,
this.eLearningGETEMPLOYEEPROFILEList, this.eLearningValidate_LoginList,
this.eLearningLOGINList, this.ePharmacyGetItemOnHandList,
this.eLearningValidateLoginList, this.isActiveCode,
this.eLearningValidate_LoginList, this.isSMSSent});
this.ePharmacyGetItemOnHandList,
this.isActiveCode,
this.isSMSSent,
this.supervisorHierarchyLists,
});
GenericResponseModel.fromJson(Map<String, dynamic> json) { GenericResponseModel.fromJson(Map<String, dynamic> json) {
date = json['Date']; date = json['Date'];
@ -728,13 +717,6 @@ class GenericResponseModel {
}); });
} }
if (json['GetAddressNotificationBodyList'] != null) {
getAddressNotificationBodyList = <GetAddressNotificationBodyList>[];
json['GetAddressNotificationBodyList'].forEach((v) {
getAddressNotificationBodyList!.add(GetAddressNotificationBodyList.fromJson(v));
});
}
if (json['GetAbsenceDffStructureList'] != null) { if (json['GetAbsenceDffStructureList'] != null) {
getAbsenceDffStructureList = <GetAbsenceDffStructureList>[]; getAbsenceDffStructureList = <GetAbsenceDffStructureList>[];
json['GetAbsenceDffStructureList'].forEach((v) { json['GetAbsenceDffStructureList'].forEach((v) {
@ -764,7 +746,7 @@ class GenericResponseModel {
getAddressDffStructureList!.add(GetAddressDffStructureList.fromJson(v)); getAddressDffStructureList!.add(GetAddressDffStructureList.fromJson(v));
}); });
} }
// getAddressNotificationBodyList = json['GetAddressNotificationBodyList']; getAddressNotificationBodyList = json['GetAddressNotificationBodyList'];
if (json['GetApprovesList'] != null) { if (json['GetApprovesList'] != null) {
getApprovesList = <GetApprovesList>[]; getApprovesList = <GetApprovesList>[];
@ -899,12 +881,6 @@ class GenericResponseModel {
getEmployeePhonesList!.add(GetEmployeePhonesList.fromJson(v)); getEmployeePhonesList!.add(GetEmployeePhonesList.fromJson(v));
}); });
} }
if (json['EmployeeQualificationsList'] != null) {
getEmployeeQualificationsList = <EmployeeQualificationsList>[];
json['EmployeeQualificationsList'].forEach((v) {
getEmployeeQualificationsList!.add(EmployeeQualificationsList.fromJson(v));
});
}
if (json['GetEmployeeSubordinatesList'] != null) { if (json['GetEmployeeSubordinatesList'] != null) {
getEmployeeSubordinatesList = <GetEmployeeSubordinatesList>[]; getEmployeeSubordinatesList = <GetEmployeeSubordinatesList>[];
json['GetEmployeeSubordinatesList'].forEach((v) { json['GetEmployeeSubordinatesList'].forEach((v) {
@ -1079,12 +1055,6 @@ class GenericResponseModel {
getTimeCardSummaryList!.add(GetTimeCardSummaryList.fromJson(v)); getTimeCardSummaryList!.add(GetTimeCardSummaryList.fromJson(v));
}); });
} }
if (json['EmployeeLeavesList'] != null) {
getEmployeeLeavesList = <EmployeeLeavesList>[];
json['EmployeeLeavesList'].forEach((v) {
getEmployeeLeavesList!.add(EmployeeLeavesList.fromJson(v));
});
}
if (json['Mohemm_ITG_TicketsByEmployeeList'] != null) { if (json['Mohemm_ITG_TicketsByEmployeeList'] != null) {
getTicketsByEmployeeList = <GetTicketsByEmployeeList>[]; getTicketsByEmployeeList = <GetTicketsByEmployeeList>[];
@ -1313,7 +1283,7 @@ class GenericResponseModel {
if (json['RespondRolesList'] != null) { if (json['RespondRolesList'] != null) {
respondRolesList = <String>[]; respondRolesList = <String>[];
json['RespondRolesList'].forEach((v) { json['RespondRolesList'].forEach((v) {
// respondRolesList!.add(v); // respondRolesList!.add(v);
}); });
} }
resubmitAbsenceTransactionList = json['ResubmitAbsenceTransactionList']; resubmitAbsenceTransactionList = json['ResubmitAbsenceTransactionList'];
@ -1339,7 +1309,10 @@ class GenericResponseModel {
submitAddressTransactionList = json['SubmitAddressTransactionList'] != null ? SubmitAddressTransaction.fromJson(json['SubmitAddressTransactionList']) : null; submitAddressTransactionList = json['SubmitAddressTransactionList'] != null ? SubmitAddressTransaction.fromJson(json['SubmitAddressTransactionList']) : null;
submitBasicDetTransactionList = json['SubmitBasicDetTransactionList'] != null ? SubmitBasicDetailsTransactionList.fromJson(json['SubmitBasicDetTransactionList']) : null; submitBasicDetTransactionList = json['SubmitBasicDetTransactionList'] != null ? SubmitBasicDetailsTransactionList.fromJson(json['SubmitBasicDetTransactionList']) : null;
submitCEITransactionList = json['SubmitCEITransactionList']; submitCEITransactionList = json['SubmitCEITransactionList'];
submitCcpTransactionList = json['SubmitCcpTransactionList'] != null ? new SubmitCcpTransactionList.fromJson(json['SubmitCcpTransactionList']) : null; submitCcpTransactionList = json['SubmitCcpTransactionList'] != null
? new SubmitCcpTransactionList.fromJson(
json['SubmitCcpTransactionList'])
: null;
submitContactTransactionList = json['SubmitContactTransactionList'] != null ? SubmitContactTransactionList.fromJson(json['SubmitContactTransactionList']) : null; submitContactTransactionList = json['SubmitContactTransactionList'] != null ? SubmitContactTransactionList.fromJson(json['SubmitContactTransactionList']) : null;
submitEITTransactionList = json['SubmitEITTransactionList'] != null ? SubmitEITTransactionList.fromJson(json['SubmitEITTransactionList']) : null; submitEITTransactionList = json['SubmitEITTransactionList'] != null ? SubmitEITTransactionList.fromJson(json['SubmitEITTransactionList']) : null;
@ -1399,8 +1372,6 @@ class GenericResponseModel {
ePharmacyGetItemOnHandList = json['ePharmacy_GetItemOnHandList']; ePharmacyGetItemOnHandList = json['ePharmacy_GetItemOnHandList'];
isActiveCode = json['isActiveCode']; isActiveCode = json['isActiveCode'];
isSMSSent = json['isSMSSent']; isSMSSent = json['isSMSSent'];
supervisorHierarchyLists= json["SupervisorHierarchyLists"] == null ? null : SupervisorHierarchyLists.fromJson(json["SupervisorHierarchyLists"]);
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -1562,9 +1533,6 @@ class GenericResponseModel {
if (this.getEmployeePhonesList != null) { if (this.getEmployeePhonesList != null) {
data['GetEmployeePhonesList'] = this.getEmployeePhonesList!.map((v) => v.toJson()).toList(); data['GetEmployeePhonesList'] = this.getEmployeePhonesList!.map((v) => v.toJson()).toList();
} }
if (this.getEmployeeQualificationsList != null) {
data['EmployeeQualificationsList'] = this.getEmployeeQualificationsList!.map((v) => v.toJson()).toList();
}
if (this.getEmployeeSubordinatesList != null) { if (this.getEmployeeSubordinatesList != null) {
data['GetEmployeeSubordinatesList'] = this.getEmployeeSubordinatesList!.map((v) => v.toJson()).toList(); data['GetEmployeeSubordinatesList'] = this.getEmployeeSubordinatesList!.map((v) => v.toJson()).toList();
} }
@ -1675,10 +1643,6 @@ class GenericResponseModel {
if (this.getTimeCardSummaryList != null) { if (this.getTimeCardSummaryList != null) {
data['GetTimeCardSummaryList'] = this.getTimeCardSummaryList!.map((v) => v.toJson()).toList(); data['GetTimeCardSummaryList'] = this.getTimeCardSummaryList!.map((v) => v.toJson()).toList();
} }
if (this.getEmployeeLeavesList != null) {
data['EmployeeLeavesList'] = this.getEmployeeLeavesList!.map((v) => v.toJson()).toList();
}
data['GetUserItemTypesList'] = this.getUserItemTypesList; data['GetUserItemTypesList'] = this.getUserItemTypesList;
if (this.getVacationRulesList != null) { if (this.getVacationRulesList != null) {
data['GetVacationRulesList'] = this.getVacationRulesList!.map((v) => v.toJson()).toList(); data['GetVacationRulesList'] = this.getVacationRulesList!.map((v) => v.toJson()).toList();
@ -1804,7 +1768,8 @@ class GenericResponseModel {
data['SubmitCEITransactionList'] = this.submitCEITransactionList; data['SubmitCEITransactionList'] = this.submitCEITransactionList;
if (this.submitCcpTransactionList != null) { if (this.submitCcpTransactionList != null) {
data['SubmitCcpTransactionList'] = this.submitCcpTransactionList!.toJson(); data['SubmitCcpTransactionList'] =
this.submitCcpTransactionList!.toJson();
} }
data['SubmitContactTransactionList'] = this.submitContactTransactionList; data['SubmitContactTransactionList'] = this.submitContactTransactionList;
@ -1866,7 +1831,6 @@ class GenericResponseModel {
data['ePharmacy_GetItemOnHandList'] = this.ePharmacyGetItemOnHandList; data['ePharmacy_GetItemOnHandList'] = this.ePharmacyGetItemOnHandList;
data['isActiveCode'] = this.isActiveCode; data['isActiveCode'] = this.isActiveCode;
data['isSMSSent'] = this.isSMSSent; data['isSMSSent'] = this.isSMSSent;
data["SupervisorHierarchyLists"]= supervisorHierarchyLists?.toJson();
return data; return data;
} }
} }

@ -31,7 +31,6 @@ class GetEITDFFStructureList {
List<PARENTSEGMENTSVSSplitedVS>? pARENTSEGMENTSVSSplitedVS; List<PARENTSEGMENTSVSSplitedVS>? pARENTSEGMENTSVSSplitedVS;
String? rEADONLY; String? rEADONLY;
String? rEQUIREDFLAG; String? rEQUIREDFLAG;
String? rEQCOLTIP;
String? sEGMENTNAME; String? sEGMENTNAME;
String? sEGMENTPROMPT; String? sEGMENTPROMPT;
int? sEGMENTSEQNUM; int? sEGMENTSEQNUM;
@ -74,7 +73,6 @@ class GetEITDFFStructureList {
this.pARENTSEGMENTSVSSplitedVS, this.pARENTSEGMENTSVSSplitedVS,
this.rEADONLY, this.rEADONLY,
this.rEQUIREDFLAG, this.rEQUIREDFLAG,
this.rEQCOLTIP,
this.sEGMENTNAME, this.sEGMENTNAME,
this.sEGMENTPROMPT, this.sEGMENTPROMPT,
this.sEGMENTSEQNUM, this.sEGMENTSEQNUM,
@ -134,6 +132,7 @@ class GetEITDFFStructureList {
}); });
} }
pARENTSEGMENTSVS = json['PARENT_SEGMENTS_VS']; pARENTSEGMENTSVS = json['PARENT_SEGMENTS_VS'];
if (json['PARENT_SEGMENTS_VS_SplitedVS'] != null) { if (json['PARENT_SEGMENTS_VS_SplitedVS'] != null) {
pARENTSEGMENTSVSSplitedVS = <PARENTSEGMENTSVSSplitedVS>[]; pARENTSEGMENTSVSSplitedVS = <PARENTSEGMENTSVSSplitedVS>[];
json['PARENT_SEGMENTS_VS_SplitedVS'].forEach((v) { json['PARENT_SEGMENTS_VS_SplitedVS'].forEach((v) {
@ -142,7 +141,6 @@ class GetEITDFFStructureList {
} }
rEADONLY = json['READ_ONLY']; rEADONLY = json['READ_ONLY'];
rEQUIREDFLAG = json['REQUIRED_FLAG']; rEQUIREDFLAG = json['REQUIRED_FLAG'];
rEQCOLTIP = json['REQ_COL_TIP'];
sEGMENTNAME = json['SEGMENT_NAME']; sEGMENTNAME = json['SEGMENT_NAME'];
sEGMENTPROMPT = json['SEGMENT_PROMPT']; sEGMENTPROMPT = json['SEGMENT_PROMPT'];
sEGMENTSEQNUM = json['SEGMENT_SEQ_NUM']; sEGMENTSEQNUM = json['SEGMENT_SEQ_NUM'];
@ -173,6 +171,9 @@ class GetEITDFFStructureList {
if (this.eSERVICESVS != null) { if (this.eSERVICESVS != null) {
data['E_SERVICES_VS'] = this.eSERVICESVS!.map((v) => v.toJson()).toList(); data['E_SERVICES_VS'] = this.eSERVICESVS!.map((v) => v.toJson()).toList();
} }
// if (this.eSERVICESVS != null) {
// data['E_SERVICES_VS'] = this.eSERVICESVS!.toList();
// }
data['FLEX_VALUE_SET_NAME'] = this.fLEXVALUESETNAME; data['FLEX_VALUE_SET_NAME'] = this.fLEXVALUESETNAME;
data['FORMAT_TYPE'] = this.fORMATTYPE; data['FORMAT_TYPE'] = this.fORMATTYPE;
data['FORMAT_TYPE_DSP'] = this.fORMATTYPEDSP; data['FORMAT_TYPE_DSP'] = this.fORMATTYPEDSP;
@ -192,9 +193,9 @@ class GetEITDFFStructureList {
if (this.pARENTSEGMENTSVSSplitedVS != null) { if (this.pARENTSEGMENTSVSSplitedVS != null) {
data['PARENT_SEGMENTS_VS_SplitedVS'] = this.pARENTSEGMENTSVSSplitedVS!.map((v) => v.toJson()).toList(); data['PARENT_SEGMENTS_VS_SplitedVS'] = this.pARENTSEGMENTSVSSplitedVS!.map((v) => v.toJson()).toList();
} }
data['READ_ONLY'] = this.rEADONLY; data['READ_ONLY'] = this.rEADONLY;
data['REQUIRED_FLAG'] = this.rEQUIREDFLAG; data['REQUIRED_FLAG'] = this.rEQUIREDFLAG;
data['REQ_COL_TIP'] = this.rEQCOLTIP;
data['SEGMENT_NAME'] = this.sEGMENTNAME; data['SEGMENT_NAME'] = this.sEGMENTNAME;
data['SEGMENT_PROMPT'] = this.sEGMENTPROMPT; data['SEGMENT_PROMPT'] = this.sEGMENTPROMPT;
data['SEGMENT_SEQ_NUM'] = this.sEGMENTSEQNUM; data['SEGMENT_SEQ_NUM'] = this.sEGMENTSEQNUM;
@ -209,10 +210,10 @@ class GetEITDFFStructureList {
} }
class ESERVICESDV { class ESERVICESDV {
dynamic pIDCOLUMNNAME; String? pIDCOLUMNNAME;
dynamic pRETURNMSG; String? pRETURNMSG;
String? pRETURNSTATUS; String? pRETURNSTATUS;
dynamic pVALUECOLUMNNAME; String? pVALUECOLUMNNAME;
ESERVICESDV({this.pIDCOLUMNNAME, this.pRETURNMSG, this.pRETURNSTATUS, this.pVALUECOLUMNNAME}); ESERVICESDV({this.pIDCOLUMNNAME, this.pRETURNMSG, this.pRETURNSTATUS, this.pVALUECOLUMNNAME});
@ -225,10 +226,10 @@ class ESERVICESDV {
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
Map<String, dynamic> data = new Map<String, dynamic>(); Map<String, dynamic> data = new Map<String, dynamic>();
data['P_ID_COLUMN_NAME'] = pIDCOLUMNNAME; data['P_ID_COLUMN_NAME'] = this.pIDCOLUMNNAME;
data['P_RETURN_MSG'] = pRETURNMSG; data['P_RETURN_MSG'] = this.pRETURNMSG;
data['P_RETURN_STATUS'] = pRETURNSTATUS; data['P_RETURN_STATUS'] = this.pRETURNSTATUS;
data['P_VALUE_COLUMN_NAME'] = pVALUECOLUMNNAME; data['P_VALUE_COLUMN_NAME'] = this.pVALUECOLUMNNAME;
return data; return data;
} }
} }

@ -1,6 +1,6 @@
class GetMobileLoginInfoListModel { class GetMobileLoginInfoListModel {
int? iD; int? iD;
String? employeeID; int? employeeID;
int? channelID; int? channelID;
int? companyID; int? companyID;
String? deviceType; String? deviceType;

@ -4,7 +4,7 @@ class GetPoItemHistoryList {
String? bUYER; String? bUYER;
String? cLOSEDCODE; String? cLOSEDCODE;
String? cREATIONDATE; String? cREATIONDATE;
num? dISCOUNTPERCENTAGE; int? dISCOUNTPERCENTAGE;
int? fROMROWNUM; int? fROMROWNUM;
int? iTEMID; int? iTEMID;
num? nETPRICE; num? nETPRICE;

@ -5,7 +5,7 @@ class GetQuotationAnalysisList {
int? nOOFROWS; int? nOOFROWS;
String? qUOTBONUSQTY; String? qUOTBONUSQTY;
String? qUOTDELIVERYDATE; String? qUOTDELIVERYDATE;
num? qUOTLINETOTAL; int? qUOTLINETOTAL;
String? qUOTMFGPARTNUM; String? qUOTMFGPARTNUM;
String? qUOTNUM; String? qUOTNUM;
num? qUOTQTY; num? qUOTQTY;

@ -1,41 +1,41 @@
class GetTimeCardSummaryList { class GetTimeCardSummaryList {
num? aBSENTDAYS; int? aBSENTDAYS;
dynamic? aCTUALHRS; dynamic? aCTUALHRS;
dynamic? aPPROVEDTIMEBACKHRS; dynamic? aPPROVEDTIMEBACKHRS;
num? aSSIGNMENTID; int? aSSIGNMENTID;
num? aTTENDEDDAYS; int? aTTENDEDDAYS;
num? bUSINESSTRIP; int? bUSINESSTRIP;
dynamic? cOMPOFFHHRS; dynamic? cOMPOFFHHRS;
dynamic? cOMPOFFNHRS; dynamic? cOMPOFFNHRS;
dynamic? cOMPOFFWHRS; dynamic? cOMPOFFWHRS;
dynamic? dESIREDSCHEDULEDHRS; dynamic? dESIREDSCHEDULEDHRS;
dynamic? eARLYOUTHRS; dynamic? eARLYOUTHRS;
dynamic? eXCESSHRS; dynamic? eXCESSHRS;
num? hALFDAYLEAVE; int? hALFDAYLEAVE;
dynamic? lATEINHRS; dynamic? lATEINHRS;
dynamic? lEAVESHOLIDAYSHRS; dynamic? lEAVESHOLIDAYSHRS;
dynamic? nONSCHEDULEDAYS; dynamic? nONSCHEDULEDAYS;
dynamic? nOTANALYZEDDAYS; dynamic? nOTANALYZEDDAYS;
num? oFFDAYS; int? oFFDAYS;
dynamic? oNCALLHRS; dynamic? oNCALLHRS;
dynamic? pAIDLEAVE; dynamic? pAIDLEAVE;
num? pERIODDAYS; int? pERIODDAYS;
dynamic? pLANNEDOTHRS; dynamic? pLANNEDOTHRS;
num? pUBLICHOLIDAY; int? pUBLICHOLIDAY;
dynamic? sCHEDULEDHRS; dynamic? sCHEDULEDHRS;
dynamic? sCHEDULEDONCALLHRS; dynamic? sCHEDULEDONCALLHRS;
dynamic? sCHEDULEDPLANNEDOTHRS; dynamic? sCHEDULEDPLANNEDOTHRS;
num? sCHEDULEDAYS; int? sCHEDULEDAYS;
dynamic? sHORTAGEHRS; dynamic? sHORTAGEHRS;
dynamic? sHORTAGESCHEDULEHRS; dynamic? sHORTAGESCHEDULEHRS;
num? sICKLEAVE; int? sICKLEAVE;
dynamic? tIMEBACKHRS; dynamic? tIMEBACKHRS;
dynamic? tIMEBACKBALANCE; dynamic? tIMEBACKBALANCE;
num? uNAUTHORIZEDLEAVE; int? uNAUTHORIZEDLEAVE;
dynamic? uNCOVERDSHORTAGEHRS; dynamic? uNCOVERDSHORTAGEHRS;
num? uNPAIDLEAVE; int? uNPAIDLEAVE;
GetTimeCardSummaryList( GetTimeCardSummaryList(
{this.aBSENTDAYS, {this.aBSENTDAYS,

@ -1,71 +0,0 @@
class SupervisorHierarchyLists {
SupervisorHierarchyLists({
this.subordinateHierarchyList,
this.supervisorHierarchyList,
});
List<HierarchyList>? subordinateHierarchyList;
List<HierarchyList>? supervisorHierarchyList;
factory SupervisorHierarchyLists.fromJson(Map<String, dynamic> json) => SupervisorHierarchyLists(
subordinateHierarchyList: json["SubordinateHierarchyList"] == null ? [] : List<HierarchyList>.from(json["SubordinateHierarchyList"]!.map((x) => HierarchyList.fromJson(x))),
supervisorHierarchyList: json["SupervisorHierarchyList"] == null ? [] : List<HierarchyList>.from(json["SupervisorHierarchyList"]!.map((x) => HierarchyList.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"SubordinateHierarchyList": subordinateHierarchyList == null ? [] : List<dynamic>.from(subordinateHierarchyList!.map((x) => x.toJson())),
"SupervisorHierarchyList": supervisorHierarchyList == null ? [] : List<dynamic>.from(supervisorHierarchyList!.map((x) => x.toJson())),
};
}
class HierarchyList {
HierarchyList({
this.employeeEmailAddress,
this.employeeImage,
this.employeeMobileNumber,
this.employeeName,
this.employeeNumber,
this.employeeWorkNumber,
this.lvl,
this.numOfSubordinates,
this.organizationName,
this.positionName,
});
String? employeeEmailAddress;
dynamic employeeImage;
String? employeeMobileNumber;
String? employeeName;
String? employeeNumber;
String? employeeWorkNumber;
int? lvl;
int? numOfSubordinates;
String? organizationName;
String? positionName;
factory HierarchyList.fromJson(Map<String, dynamic> json) => HierarchyList(
employeeEmailAddress: json["EMPLOYEE_EMAIL_ADDRESS"],
employeeImage: json["EMPLOYEE_IMAGE"],
employeeMobileNumber: json["EMPLOYEE_MOBILE_NUMBER"],
employeeName: json["EMPLOYEE_NAME"],
employeeNumber: json["EMPLOYEE_NUMBER"],
employeeWorkNumber: json["EMPLOYEE_WORK_NUMBER"],
lvl: json["LVL"],
numOfSubordinates: json["NUM_OF_SUBORDINATES"],
organizationName: json["ORGANIZATION_NAME"],
positionName: json["POSITION_NAME"],
);
Map<String, dynamic> toJson() => {
"EMPLOYEE_EMAIL_ADDRESS": employeeEmailAddress,
"EMPLOYEE_IMAGE": employeeImage,
"EMPLOYEE_MOBILE_NUMBER": employeeMobileNumber,
"EMPLOYEE_NAME": employeeName,
"EMPLOYEE_NUMBER": employeeNumber,
"EMPLOYEE_WORK_NUMBER": employeeWorkNumber,
"LVL": lvl,
"NUM_OF_SUBORDINATES": numOfSubordinates,
"ORGANIZATION_NAME": organizationName,
"POSITION_NAME": positionName,
};
}

@ -11,7 +11,7 @@ class EmployeePostedAds {
String? countryName; String? countryName;
String? currencyCode; String? currencyCode;
String? startDate; String? startDate;
DateTime? endDate; String? endDate;
int? quotePrice; int? quotePrice;
int? employeeNumber; int? employeeNumber;
String? profilePicture; String? profilePicture;
@ -29,32 +29,32 @@ class EmployeePostedAds {
EmployeePostedAds( EmployeePostedAds(
{this.itemSaleID, {this.itemSaleID,
this.title, this.title,
this.titleAr, this.titleAr,
this.description, this.description,
this.descriptionAr, this.descriptionAr,
this.categoryID, this.categoryID,
this.categoryTitle, this.categoryTitle,
this.regionID, this.regionID,
this.regionName, this.regionName,
this.countryName, this.countryName,
this.currencyCode, this.currencyCode,
this.startDate, this.startDate,
this.endDate, this.endDate,
this.quotePrice, this.quotePrice,
this.employeeNumber, this.employeeNumber,
this.profilePicture, this.profilePicture,
this.fullName, this.fullName,
this.emailAddress, this.emailAddress,
this.mobileNumber, this.mobileNumber,
this.isApproved, this.isApproved,
this.status, this.status,
this.itemAttachments, this.itemAttachments,
this.created, this.created,
this.isActive, this.isActive,
this.pageSize, this.pageSize,
this.pageNo, this.pageNo,
this.languageId}); this.languageId});
EmployeePostedAds.fromJson(Map<String, dynamic> json) { EmployeePostedAds.fromJson(Map<String, dynamic> json) {
itemSaleID = json['itemSaleID']; itemSaleID = json['itemSaleID'];
@ -115,7 +115,8 @@ class EmployeePostedAds {
data['isApproved'] = this.isApproved; data['isApproved'] = this.isApproved;
data['status'] = this.status; data['status'] = this.status;
if (this.itemAttachments != null) { if (this.itemAttachments != null) {
data['itemAttachments'] = this.itemAttachments!.map((v) => v.toJson()).toList(); data['itemAttachments'] =
this.itemAttachments!.map((v) => v.toJson()).toList();
} }
data['created'] = this.created; data['created'] = this.created;
data['isActive'] = this.isActive; data['isActive'] = this.isActive;
@ -137,7 +138,16 @@ class ItemAttachments {
String? content; String? content;
String? filePath; String? filePath;
ItemAttachments({this.attachmentId, this.fileName, this.contentType, this.attachFileStream, this.base64String, this.isActive, this.referenceItemId, this.content, this.filePath}); ItemAttachments(
{this.attachmentId,
this.fileName,
this.contentType,
this.attachFileStream,
this.base64String,
this.isActive,
this.referenceItemId,
this.content,
this.filePath});
ItemAttachments.fromJson(Map<String, dynamic> json) { ItemAttachments.fromJson(Map<String, dynamic> json) {
attachmentId = json['attachmentId']; attachmentId = json['attachmentId'];

@ -9,8 +9,16 @@ class ItemReviewModel {
num? itemPrice; num? itemPrice;
List<String>? itemPhotos; List<String>? itemPhotos;
GetSaleCategoriesList? selectedSaleCategory; GetSaleCategoriesList? selectedSaleCategory;
DateTime endDate;
ItemReviewModel(this.itemTitle, this.itemDescription, this.itemCondition, this.selectedRegion, this.itemPrice, this.itemPhotos, this.selectedSaleCategory, this.endDate); ItemReviewModel(
this.itemTitle,
this.itemDescription,
this.itemCondition,
this.selectedRegion,
this.itemPrice,
this.itemPhotos,
this.selectedSaleCategory,
);
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
Map<String, dynamic> data = new Map<String, dynamic>(); Map<String, dynamic> data = new Map<String, dynamic>();
@ -21,7 +29,7 @@ class ItemReviewModel {
data['itemPrice'] = this.itemPrice; data['itemPrice'] = this.itemPrice;
data['itemPhotos'] = this.itemPhotos; data['itemPhotos'] = this.itemPhotos;
data['selectedSaleCategory'] = this.selectedSaleCategory; data['selectedSaleCategory'] = this.selectedSaleCategory;
data['endDate'] = this.endDate;
return data; return data;
} }
} }

@ -16,28 +16,25 @@ class MarathonDetailModel {
List<Sponsors>? sponsors; List<Sponsors>? sponsors;
List<Questions>? questions; List<Questions>? questions;
int? totalQuestions; int? totalQuestions;
int? marathonBufferTime;
MarathonDetailModel(
MarathonDetailModel({ {id,
id, titleEn,
titleEn, titleAr,
titleAr, descEn,
descEn, descAr,
descAr, winDeciderTime,
winDeciderTime, winnersCount,
winnersCount, questGapTime,
questGapTime, startTime,
startTime, endTime,
endTime, marathoneStatusId,
marathoneStatusId, scheduleTime,
scheduleTime, selectedLanguage,
selectedLanguage, projects,
projects, sponsors,
sponsors, questions,
questions, totalQuestions});
totalQuestions,
marathonBufferTime,
});
MarathonDetailModel.fromJson(Map<String, dynamic> json) { MarathonDetailModel.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
@ -53,21 +50,22 @@ class MarathonDetailModel {
marathoneStatusId = json['marathoneStatusId']; marathoneStatusId = json['marathoneStatusId'];
scheduleTime = json['scheduleTime']; scheduleTime = json['scheduleTime'];
selectedLanguage = json['selectedLanguage']; selectedLanguage = json['selectedLanguage'];
projects = json['projects'] != null ? Projects.fromJson(json['projects']) : null; projects = json['projects'] != null
? Projects.fromJson(json['projects'])
: null;
if (json['sponsors'] != null) { if (json['sponsors'] != null) {
sponsors = <Sponsors>[]; sponsors = <Sponsors>[];
json['sponsors'].forEach((v) { json['sponsors'].forEach((v) {
sponsors!.add(Sponsors.fromJson(v)); sponsors!.add( Sponsors.fromJson(v));
}); });
} }
if (json['questions'] != null) { if (json['questions'] != null) {
questions = <Questions>[]; questions = <Questions>[];
json['questions'].forEach((v) { json['questions'].forEach((v) {
questions!.add(Questions.fromJson(v)); questions!.add( Questions.fromJson(v));
}); });
} }
totalQuestions = json["totalQuestions"]; totalQuestions = json["totalQuestions"];
marathonBufferTime = json["marathonBufferTime"];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -95,7 +93,6 @@ class MarathonDetailModel {
data['questions'] = questions!.map((v) => v.toJson()).toList(); data['questions'] = questions!.map((v) => v.toJson()).toList();
} }
data['totalQuestions'] = totalQuestions; data['totalQuestions'] = totalQuestions;
data['marathonBufferTime'] = marathonBufferTime;
return data; return data;
} }
@ -135,7 +132,14 @@ class Sponsors {
String? logo; String? logo;
List<SponsorPrizes>? sponsorPrizes; List<SponsorPrizes>? sponsorPrizes;
Sponsors({id, nameEn, nameAr, image, video, logo, sponsorPrizes}); Sponsors(
{id,
nameEn,
nameAr,
image,
video,
logo,
sponsorPrizes});
Sponsors.fromJson(Map<String, dynamic> json) { Sponsors.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
@ -147,13 +151,13 @@ class Sponsors {
if (json['sponsorPrizes'] != null) { if (json['sponsorPrizes'] != null) {
sponsorPrizes = <SponsorPrizes>[]; sponsorPrizes = <SponsorPrizes>[];
json['sponsorPrizes'].forEach((v) { json['sponsorPrizes'].forEach((v) {
sponsorPrizes!.add(SponsorPrizes.fromJson(v)); sponsorPrizes!.add( SponsorPrizes.fromJson(v));
}); });
} }
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
Map<String, dynamic> data = <String, dynamic>{}; Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id; data['id'] = id;
data['nameEn'] = nameEn; data['nameEn'] = nameEn;
data['nameAr'] = nameAr; data['nameAr'] = nameAr;
@ -161,7 +165,8 @@ class Sponsors {
data['video'] = video; data['video'] = video;
data['logo'] = logo; data['logo'] = logo;
if (sponsorPrizes != null) { if (sponsorPrizes != null) {
data['sponsorPrizes'] = sponsorPrizes!.map((v) => v.toJson()).toList(); data['sponsorPrizes'] =
sponsorPrizes!.map((v) => v.toJson()).toList();
} }
return data; return data;
} }
@ -181,7 +186,7 @@ class SponsorPrizes {
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
Map<String, dynamic> data = <String, dynamic>{}; Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id; data['id'] = id;
data['marathonPrizeEn'] = marathonPrizeEn; data['marathonPrizeEn'] = marathonPrizeEn;
data['marathonPrizeAr'] = marathonPrizeAr; data['marathonPrizeAr'] = marathonPrizeAr;
@ -203,7 +208,19 @@ class Questions {
int? questOptionsLimit; int? questOptionsLimit;
List? questionOptions; List? questionOptions;
Questions({id, titleEn, titleAr, marathonId, questionTypeId, questionTime, nextQuestGap, gapType, gapValue, gapImage, questOptionsLimit, questionOptions}); Questions(
{id,
titleEn,
titleAr,
marathonId,
questionTypeId,
questionTime,
nextQuestGap,
gapType,
gapValue,
gapImage,
questOptionsLimit,
questionOptions});
Questions.fromJson(Map<String, dynamic> json) { Questions.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];

@ -14,7 +14,6 @@ class QuestionModel {
String? gapText; String? gapText;
String? gapImage; String? gapImage;
int? questOptionsLimit; int? questOptionsLimit;
int? remainingParticipantCount;
List<QuestionOptions>? questionOptions; List<QuestionOptions>? questionOptions;
QuestionModel({ QuestionModel({
@ -29,7 +28,6 @@ class QuestionModel {
String? gapText, String? gapText,
String? gapImage, String? gapImage,
int? questOptionsLimit, int? questOptionsLimit,
int? remainingParticipantCount,
List<QuestionOptions>? questionOptions, List<QuestionOptions>? questionOptions,
}); });
@ -45,13 +43,11 @@ class QuestionModel {
gapText = json['gapText']; gapText = json['gapText'];
gapImage = json['gapImage']; gapImage = json['gapImage'];
questOptionsLimit = json['questOptionsLimit']; questOptionsLimit = json['questOptionsLimit'];
remainingParticipantCount = json['remainingParticipantCount'];
if (json['questionOptions'] != null) { if (json['questionOptions'] != null) {
questionOptions = <QuestionOptions>[]; questionOptions = <QuestionOptions>[];
json['questionOptions'].forEach((v) { json['questionOptions'].forEach((v) {
questionOptions!.add(QuestionOptions.fromJson(v)); questionOptions!.add(QuestionOptions.fromJson(v));
}); });
questionOptions!.sort((QuestionOptions a, QuestionOptions b) => a.sequence!.compareTo(b.sequence!));
} }
} }
@ -68,7 +64,6 @@ class QuestionModel {
data['gapText'] = gapText; data['gapText'] = gapText;
data['gapImage'] = gapImage; data['gapImage'] = gapImage;
data['questOptionsLimit'] = questOptionsLimit; data['questOptionsLimit'] = questOptionsLimit;
data['remainingParticipantCount'] = remainingParticipantCount;
if (questionOptions != null) { if (questionOptions != null) {
data['questionOptions'] = questionOptions!.map((v) => v.toJson()).toList(); data['questionOptions'] = questionOptions!.map((v) => v.toJson()).toList();
} }

@ -1,17 +0,0 @@
class WinnerModel {
String? id;
String? marathoneId;
String? employeeId;
String? nameEn;
String? nameAr;
WinnerModel({id, marathoneId, employeeId, nameEn, nameAr});
WinnerModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
marathoneId = json['marathoneId'];
employeeId = json['employeeId'];
nameEn = json['nameEn'];
nameAr = json['nameAr'];
}
}

@ -48,7 +48,7 @@ class MemberInformationListModel {
String? nATIONALITYCODE; String? nATIONALITYCODE;
String? nATIONALITYMEANING; String? nATIONALITYMEANING;
String? nATIONALIDENTIFIER; String? nATIONALIDENTIFIER;
dynamic? nORMALHOURS; String? nORMALHOURS;
int? nOOFROWS; int? nOOFROWS;
int? oRGANIZATIONID; int? oRGANIZATIONID;
String? oRGANIZATIONNAME; String? oRGANIZATIONNAME;

@ -1,192 +1,96 @@
class OffersListModel { class OffersListModel {
int? offersDiscountId; String? title;
String? titleEn; String? titleAR;
String? titleAr; String? description;
String? descriptionEn; String? descriptionAR;
String? descriptionAr;
String? startDate; String? startDate;
String? endDate; String? endDate;
int? categoryId; String? logo;
String? bannerImage;
String? discount;
String? rowID;
String? categoryNameEn; String? categoryNameEn;
String? categoryNameAr; String? categoryNameAr;
String? discount; String? categoryID;
String? location; String? isHasLocation;
int? statusId;
String? statusTitle;
bool? isHasLocation;
String? discountDescription;
String? websiteUrl;
bool? bookMarked;
bool? isHotDeal;
List<OffersDiscountImageColl>? offersDiscountImageColl;
dynamic locationList;
String? created; String? created;
String? bannerImage; String? publishedDesc;
String? logo; String? published;
bool? isActive; String? expireAfter;
int? pageSize; String? status;
int? pageNo; String? isActive;
int? languageId; String? totalItems;
OffersListModel( OffersListModel(
{this.offersDiscountId, {this.title,
this.titleEn, this.titleAR,
this.titleAr, this.description,
this.descriptionEn, this.descriptionAR,
this.descriptionAr, this.startDate,
this.startDate, this.endDate,
this.endDate, this.logo,
this.categoryId, this.bannerImage,
this.categoryNameEn, this.discount,
this.categoryNameAr, this.rowID,
this.discount, this.categoryNameEn,
this.location, this.categoryNameAr,
this.statusId, this.categoryID,
this.statusTitle, this.isHasLocation,
this.isHasLocation, this.created,
this.discountDescription, this.publishedDesc,
this.websiteUrl, this.published,
this.bookMarked, this.expireAfter,
this.isHotDeal, this.status,
this.offersDiscountImageColl, this.isActive,
this.locationList, this.totalItems});
this.created,
this.bannerImage,
this.logo,
this.isActive,
this.pageSize,
this.pageNo,
this.languageId});
OffersListModel.fromJson(Map<String, dynamic> json) { OffersListModel.fromJson(Map<String, dynamic> json) {
offersDiscountId = json['offersDiscountId']; title = json['Title'];
titleEn = json['titleEn']; titleAR = json['Title_AR'];
titleAr = json['titleAr']; description = json['Description'];
descriptionEn = json['descriptionEn']; descriptionAR = json['Description_AR'];
descriptionAr = json['descriptionAr']; startDate = json['Start Date'];
startDate = json['startDate']; endDate = json['End Date'];
endDate = json['endDate']; logo = json['Logo'];
categoryId = json['categoryId']; bannerImage = json['Banner_Image'];
discount = json['Discount'];
rowID = json['rowID'];
categoryNameEn = json['categoryName_en']; categoryNameEn = json['categoryName_en'];
categoryNameAr = json['categoryName_ar']; categoryNameAr = json['categoryName_ar'];
discount = json['discount']; categoryID = json['categoryID'];
location = json['location']; isHasLocation = json['IsHasLocation'];
statusId = json['statusId'];
statusTitle = json['statusTitle'];
isHasLocation = json['isHasLocation'];
discountDescription = json['discountDescription'];
websiteUrl = json['websiteUrl'];
bookMarked = json['bookMarked'];
isHotDeal = json['isHotDeal'];
if (json['offersDiscountImageColl'] != null) {
offersDiscountImageColl = <OffersDiscountImageColl>[];
json['offersDiscountImageColl'].forEach((v) {
offersDiscountImageColl!.add(new OffersDiscountImageColl.fromJson(v));
});
}
locationList = json['locationList'];
created = json['created']; created = json['created'];
bannerImage = json['banner_Image']; publishedDesc = json['PublishedDesc'];
logo = json['logo']; published = json['Published'];
isActive = json['isActive']; expireAfter = json['ExpireAfter'];
pageSize = json['pageSize']; status = json['Status'];
pageNo = json['pageNo']; isActive = json['IsActive'];
languageId = json['languageId']; totalItems = json['TotalItems'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
Map<String, dynamic> data = new Map<String, dynamic>(); Map<String, dynamic> data = new Map<String, dynamic>();
data['offersDiscountId'] = this.offersDiscountId; data['Title'] = this.title;
data['titleEn'] = this.titleEn; data['Title_AR'] = this.titleAR;
data['titleAr'] = this.titleAr; data['Description'] = this.description;
data['descriptionEn'] = this.descriptionEn; data['Description_AR'] = this.descriptionAR;
data['descriptionAr'] = this.descriptionAr; data['Start Date'] = this.startDate;
data['startDate'] = this.startDate; data['End Date'] = this.endDate;
data['endDate'] = this.endDate; data['Logo'] = this.logo;
data['categoryId'] = this.categoryId; data['Banner_Image'] = this.bannerImage;
data['Discount'] = this.discount;
data['rowID'] = this.rowID;
data['categoryName_en'] = this.categoryNameEn; data['categoryName_en'] = this.categoryNameEn;
data['categoryName_ar'] = this.categoryNameAr; data['categoryName_ar'] = this.categoryNameAr;
data['discount'] = this.discount; data['categoryID'] = this.categoryID;
data['location'] = this.location; data['IsHasLocation'] = this.isHasLocation;
data['statusId'] = this.statusId;
data['statusTitle'] = this.statusTitle;
data['isHasLocation'] = this.isHasLocation;
data['discountDescription'] = this.discountDescription;
data['websiteUrl'] = this.websiteUrl;
data['bookMarked'] = this.bookMarked;
data['isHotDeal'] = this.isHotDeal;
if (this.offersDiscountImageColl != null) {
data['offersDiscountImageColl'] = this.offersDiscountImageColl!.map((v) => v.toJson()).toList();
}
data['locationList'] = this.locationList;
data['created'] = this.created; data['created'] = this.created;
data['banner_Image'] = this.bannerImage; data['PublishedDesc'] = this.publishedDesc;
data['logo'] = this.logo; data['Published'] = this.published;
data['isActive'] = this.isActive; data['ExpireAfter'] = this.expireAfter;
data['pageSize'] = this.pageSize; data['Status'] = this.status;
data['pageNo'] = this.pageNo; data['IsActive'] = this.isActive;
data['languageId'] = this.languageId; data['TotalItems'] = this.totalItems;
return data;
}
}
class OffersDiscountImageColl {
int? imageAttachmentId;
String? fileName;
String? contentType;
String? attachFileStream;
String? base64String;
int? referenceItemId;
String? filePath;
String? imageTag;
bool? isActive;
int? pageSize;
int? pageNo;
int? languageId;
OffersDiscountImageColl(
{this.imageAttachmentId,
this.fileName,
this.contentType,
this.attachFileStream,
this.base64String,
this.referenceItemId,
this.filePath,
this.imageTag,
this.isActive,
this.pageSize,
this.pageNo,
this.languageId});
OffersDiscountImageColl.fromJson(Map<String, dynamic> json) {
imageAttachmentId = json['imageAttachmentId'];
fileName = json['fileName'];
contentType = json['contentType'];
attachFileStream = json['attachFileStream'];
base64String = json['base64String'];
referenceItemId = json['referenceItemId'];
filePath = json['filePath'];
imageTag = json['imageTag'];
isActive = json['isActive'];
pageSize = json['pageSize'];
pageNo = json['pageNo'];
languageId = json['languageId'];
}
Map<String, dynamic> toJson() {
Map<String, dynamic> data = new Map<String, dynamic>();
data['imageAttachmentId'] = this.imageAttachmentId;
data['fileName'] = this.fileName;
data['contentType'] = this.contentType;
data['attachFileStream'] = this.attachFileStream;
data['base64String'] = this.base64String;
data['referenceItemId'] = this.referenceItemId;
data['filePath'] = this.filePath;
data['imageTag'] = this.imageTag;
data['isActive'] = this.isActive;
data['pageSize'] = this.pageSize;
data['pageNo'] = this.pageNo;
data['languageId'] = this.languageId;
return data; return data;
} }
} }

@ -1,41 +0,0 @@
// To parse this JSON data, do
//
// final employeeQualificationsList = employeeQualificationsListFromJson(jsonString);
import 'dart:convert';
EmployeeQualificationsList employeeQualificationsListFromJson(String str) => EmployeeQualificationsList.fromJson(json.decode(str));
String employeeQualificationsListToJson(EmployeeQualificationsList data) => json.encode(data.toJson());
class EmployeeQualificationsList {
EmployeeQualificationsList({
this.establishment,
this.grade,
this.gradeDescription,
this.qualificationType,
this.status,
});
String? establishment;
String? grade;
String? gradeDescription;
String? qualificationType;
String? status;
factory EmployeeQualificationsList.fromJson(Map<String, dynamic> json) => EmployeeQualificationsList(
establishment: json["ESTABLISHMENT"],
grade: json["GRADE"],
gradeDescription: json["GRADE_DESCRIPTION"],
qualificationType: json["QUALIFICATION_TYPE"],
status: json["STATUS"],
);
Map<String, dynamic> toJson() => {
"ESTABLISHMENT": establishment,
"GRADE": grade,
"GRADE_DESCRIPTION": gradeDescription,
"QUALIFICATION_TYPE": qualificationType,
"STATUS": status,
};
}

@ -1,28 +0,0 @@
class GetAddressNotificationBodyList {
String? pREVSEGMENTVALUEDSP;
String? sEGMENTPROMPT;
String? sEGMENTVALUEDSP;
String? uPDATEDFLAG;
GetAddressNotificationBodyList(
{this.pREVSEGMENTVALUEDSP,
this.sEGMENTPROMPT,
this.sEGMENTVALUEDSP,
this.uPDATEDFLAG});
GetAddressNotificationBodyList.fromJson(Map<String, dynamic> json) {
pREVSEGMENTVALUEDSP = json['PREV_SEGMENT_VALUE_DSP'];
sEGMENTPROMPT = json['SEGMENT_PROMPT'];
sEGMENTVALUEDSP = json['SEGMENT_VALUE_DSP'];
uPDATEDFLAG = json['UPDATED_FLAG'];
}
Map<String, dynamic> toJson() {
Map<String, dynamic> data = new Map<String, dynamic>();
data['PREV_SEGMENT_VALUE_DSP'] = this.pREVSEGMENTVALUEDSP;
data['SEGMENT_PROMPT'] = this.sEGMENTPROMPT;
data['SEGMENT_VALUE_DSP'] = this.sEGMENTVALUEDSP;
data['UPDATED_FLAG'] = this.uPDATEDFLAG;
return data;
}
}

@ -8,16 +8,16 @@ class UpdateUserTypesList {
UpdateUserTypesList.fromJson(Map<String, dynamic> json) { UpdateUserTypesList.fromJson(Map<String, dynamic> json) {
itemID = json['ItemID']; itemID = json['ItemID'];
pFYAENABLEDFALG = json['P_FYA_ENABLED_FALG']; pFYAENABLEDFALG = json['P_FYAENABLED_FALG'];
pFYIENABLEDFALG = json['P_FYI_ENABLED_FLAG']; pFYIENABLEDFALG = json['P_FYIENABLED_FALG'];
pITEMTYPE = json['P_ITEM_TYPE']; pITEMTYPE = json['P_ITEM_TYPE'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
Map<String, dynamic> data = new Map<String, dynamic>(); Map<String, dynamic> data = new Map<String, dynamic>();
data['ItemID'] = this.itemID; data['ItemID'] = this.itemID;
data['P_FYA_ENABLED_FALG'] = this.pFYAENABLEDFALG; data['P_FYAENABLED_FALG'] = this.pFYAENABLEDFALG;
data['P_FYI_ENABLED_FLAG'] = this.pFYIENABLEDFALG; data['P_FYIENABLED_FALG'] = this.pFYIENABLEDFALG;
data['P_ITEM_TYPE'] = this.pITEMTYPE; data['P_ITEM_TYPE'] = this.pITEMTYPE;
return data; return data;
} }

@ -1,187 +0,0 @@
import 'dart:convert';
import 'dart:ui';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_webrtc/flutter_webrtc.dart';
import 'package:mohem_flutter_app/ui/landing/dashboard_screen.dart';
class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
///////////////////// Web RTC Video Calling //////////////////////
// Video Call
late RTCPeerConnection _peerConnection;
RTCVideoRenderer _localVideoRenderer = RTCVideoRenderer();
final RTCVideoRenderer _remoteRenderer = RTCVideoRenderer();
MediaStream? _localStream;
MediaStream? _remoteStream;
void initCallListeners() {
chatHubConnection.on("OnCallAcceptedAsync", onCallAcceptedAsync);
chatHubConnection.on("OnIceCandidateAsync", onIceCandidateAsync);
chatHubConnection.on("OnOfferAsync", onOfferAsync);
chatHubConnection.on("OnAnswerOffer", onAnswerOffer);
chatHubConnection.on("OnHangUpAsync", onHangUpAsync);
chatHubConnection.on("OnCallDeclinedAsync", onCallDeclinedAsync);
}
//Video Constraints
var videoConstraints = {
"video": {
"mandatory": {
"width": {"min": 320},
"height": {"min": 180}
},
"optional": [
{
"width": {"max": 1280}
},
{"frameRate": 25},
{"facingMode": "user"}
]
},
"frameRate": 25,
"width": 420, //420,//640,//1280,
"height": 240 //240//480//720
};
// Audio Constraints
var audioConstraints = {
"sampleRate": 8000,
"sampleSize": 16,
"channelCount": 2,
"echoCancellation": true,
"audio": true,
};
Future<RTCPeerConnection> _createPeerConnection() async {
// {"url": "stun:stun.l.google.com:19302"},
Map<String, dynamic> configuration = {
"iceServers": [
{"urls": 'stun:15.185.116.59:3478'},
{"urls": "turn:15.185.116.59:3479", "username": "admin", "credential": "admin"}
]
};
Map<String, dynamic> offerSdpConstraints = {
"mandatory": {
"OfferToReceiveAudio": true,
"OfferToReceiveVideo": true,
},
"optional": [],
};
RTCPeerConnection pc = await createPeerConnection(configuration, offerSdpConstraints);
// if (pc != null) print(pc);
//pc.addStream(widget.localStream);
pc.onIceCandidate = (e) {
if (e.candidate != null) {
print(json.encode({
'candidate': e.candidate.toString(),
'sdpMid': e.sdpMid.toString(),
'sdpMlineIndex': e.sdpMLineIndex,
}));
}
};
pc.onIceConnectionState = (e) {
print(e);
};
pc.onAddStream = (stream) {
print('addStream: ' + stream.id);
_remoteRenderer.srcObject = stream;
};
return pc;
}
void init() {
initRenderers();
_createPeerConnection().then((pc) {
_peerConnection = pc;
// _setRemoteDescription(widget.info);
});
}
void initRenderers() {
_localVideoRenderer.initialize();
_remoteRenderer.initialize();
initLocalCamera();
}
void initLocalCamera() async {
_localStream = await navigator.mediaDevices.getUserMedia({'video': true, 'audio': true});
_localVideoRenderer.srcObject = _localStream;
// _localVideoRenderer.srcObject = await navigator.mediaDevices
// .getUserMedia({'video': true, 'audio': true});
print('this source Object');
print('this suarce ${_localVideoRenderer.srcObject != null}');
notifyListeners();
}
void startCall({required String callType}) {}
void endCall() {}
void checkCall(Map<String, dynamic> message) {
switch (message["callStatus"]) {
case 'connected':
{}
break;
case 'offer':
{}
break;
case 'accept':
{}
break;
case 'candidate':
{}
break;
case 'bye':
{}
break;
case 'leave':
{}
break;
}
}
//// Listeners Methods ////
void onCallAcceptedAsync(List<Object?>? params) {}
void onIceCandidateAsync(List<Object?>? params) {}
void onOfferAsync(List<Object?>? params) {}
void onAnswerOffer(List<Object?>? params) {}
void onHangUpAsync(List<Object?>? params) {}
void onCallDeclinedAsync(List<Object?>? params) {}
//// Invoke Methods
Future<void> invoke({required String invokeMethod, required String currentUserID, required String targetUserID, bool isVideoCall = false, var data}) async {
List<Object> args = [];
if (invokeMethod == "answerCallAsync") {
args = [currentUserID, targetUserID];
} else if (invokeMethod == "CallUserAsync") {
args = [currentUserID, targetUserID, isVideoCall];
} else if (invokeMethod == "IceCandidateAsync") {
args = [targetUserID, data];
} else if (invokeMethod == "OfferAsync") {
args = [targetUserID, data];
} else if (invokeMethod == "AnswerOfferAsync") {
args = [targetUserID, data];
//json In Data
}
await chatHubConnection.invoke(invokeMethod, args: args);
}
void stopListeners() async {
chatHubConnection.off('OnCallDeclinedAsync');
chatHubConnection.off('OnCallAcceptedAsync');
chatHubConnection.off('OnIceCandidateAsync');
chatHubConnection.off('OnAnswerOffer');
}
}

File diff suppressed because it is too large Load Diff

@ -1,14 +1,17 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/chat/chat_api_client.dart';
import 'package:mohem_flutter_app/api/dashboard_api_client.dart'; import 'package:mohem_flutter_app/api/dashboard_api_client.dart';
import 'package:mohem_flutter_app/api/offers_and_discounts_api_client.dart'; import 'package:mohem_flutter_app/api/offers_and_discounts_api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/consts.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/env.dart';
import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/main.dart'; import 'package:mohem_flutter_app/main.dart';
import 'package:mohem_flutter_app/models/chat/chat_count_conversation_model.dart';
import 'package:mohem_flutter_app/models/chat/get_user_login_token_model.dart';
import 'package:mohem_flutter_app/models/dashboard/drawer_menu_item_model.dart'; import 'package:mohem_flutter_app/models/dashboard/drawer_menu_item_model.dart';
import 'package:mohem_flutter_app/models/dashboard/get_accrual_balances_list_model.dart'; import 'package:mohem_flutter_app/models/dashboard/get_accrual_balances_list_model.dart';
import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_model.dart'; import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_model.dart';
@ -21,8 +24,8 @@ import 'package:mohem_flutter_app/models/dashboard/mohemm_itg_pending_task_respo
import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:mohem_flutter_app/models/itg/itg_response_model.dart'; import 'package:mohem_flutter_app/models/itg/itg_response_model.dart';
import 'package:mohem_flutter_app/models/offers_and_discounts/get_offers_list.dart'; import 'package:mohem_flutter_app/models/offers_and_discounts/get_offers_list.dart';
import 'package:mohem_flutter_app/ui/landing/dashboard_screen.dart';
import 'package:mohem_flutter_app/widgets/dialogs/confirm_dialog.dart'; import 'package:mohem_flutter_app/widgets/dialogs/confirm_dialog.dart';
import 'package:signalr_netcore/signalr_client.dart';
/// Mix-in [DiagnosticableTreeMixin] to have access to [debugFillProperties] for the devtool /// Mix-in [DiagnosticableTreeMixin] to have access to [debugFillProperties] for the devtool
// ignore: prefer_mixin // ignore: prefer_mixin
@ -37,27 +40,21 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
bool isWorkListLoading = true; bool isWorkListLoading = true;
int workListCounter = 0; int workListCounter = 0;
//Chat
bool isChatCounterLoding = true;
bool isChatHubLoding = true;
int chatUConvCounter = 0;
//Misssing Swipe //Misssing Swipe
bool isMissingSwipeLoading = true; bool isMissingSwipeLoading = true;
int missingSwipeCounter = 0; int missingSwipeCounter = 0;
bool isMyRequestLoading = true;
ListMenu? myRequest;
//Leave and Ticket Balance //Leave and Ticket Balance
bool isLeaveTicketBalanceLoading = true; bool isLeaveTicketBalanceLoading = true;
List<GetAccrualBalancesList>? accrualList; List<GetAccrualBalancesList>? accrualList;
GetAccrualBalancesList? leaveBalanceAccrual; GetAccrualBalancesList? leaveBalanceAccrual;
GetAccrualBalancesList? oldLeaveBalanceAccrual;
double? get leaveBalance => ((leaveBalanceAccrual?.accrualNetEntitlement! ?? 0) + (oldLeaveBalanceAccrual?.accrualNetEntitlement! ??0));
GetAccrualBalancesList? businessTripAccrual;
double get businessTrip => businessTripAccrual?.accrualNetEntitlement ?? 0;
double get leaveBalance => leaveBalanceAccrual?.accrualNetEntitlement ?? 0;
double ticketBalance = 0; double ticketBalance = 0;
//Menu Entries //Menu Entries
@ -98,19 +95,16 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
isWorkListLoading = true; isWorkListLoading = true;
workListCounter = 0; workListCounter = 0;
isMyRequestLoading = true;
myRequest = null;
isMissingSwipeLoading = true; isMissingSwipeLoading = true;
missingSwipeCounter = 0; missingSwipeCounter = 0;
isWorkListLoading = true;
isLeaveTicketBalanceLoading = true; isLeaveTicketBalanceLoading = true;
accrualList = null; accrualList = null;
leaveBalanceAccrual = null; leaveBalanceAccrual = null;
oldLeaveBalanceAccrual = null;
businessTripAccrual = null; isChatCounterLoding = true;
isChatHubLoding = true;
chatUConvCounter = 0;
ticketBalance = 0; ticketBalance = 0;
isServicesMenusLoading = true; isServicesMenusLoading = true;
@ -120,13 +114,12 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
getOffersList = []; getOffersList = [];
drawerMenuItemList = [ drawerMenuItemList = [
DrawerMenuItem("assets/images/drawer/profile_icon.png", LocaleKeys.myProfile.tr(), AppRoutes.profile), DrawerMenuItem("assets/images/drawer/my_profile.svg", LocaleKeys.myProfile.tr(), AppRoutes.profile),
// DrawerMenuItem("assets/images/drawer/performance_evaluation.svg", LocaleKeys.performanceEvaluation.tr(), AppRoutes.performanceEvaluation), DrawerMenuItem("assets/images/drawer/performance_evaluation.svg", LocaleKeys.performanceEvaluation.tr(), AppRoutes.performanceEvaluation),
// DrawerMenuItem("assets/images/drawer/mowadhafi.svg", LocaleKeys.mowadhafhi.tr(), AppRoutes.mowadhafhi), DrawerMenuItem("assets/images/drawer/mowadhafi.svg", LocaleKeys.mowadhafhi.tr(), AppRoutes.mowadhafhi),
DrawerMenuItem("assets/images/drawer/notices.png", LocaleKeys.notices.tr(), AppRoutes.pendingTransactions), DrawerMenuItem("assets/images/drawer/pending_trasactions.svg", LocaleKeys.pendingTransactions.tr(), AppRoutes.pendingTransactions),
// // DrawerMenuItem("assets/images/drawer/drawer_marathon.svg", LocaleKeys.brainMarathon.tr(), AppRoutes.marathonIntroScreen), DrawerMenuItem("assets/images/drawer/drawer_marathon.svg", LocaleKeys.brainMarathon.tr(), AppRoutes.marathonIntroScreen),
// DrawerMenuItem("assets/images/drawer/change_password.svg", LocaleKeys.changePassword.tr(), AppRoutes.changePassword), DrawerMenuItem("assets/images/drawer/change_password.svg", LocaleKeys.changePassword.tr(), AppRoutes.changePassword),
//
]; ];
notifyListeners(); notifyListeners();
@ -158,17 +151,15 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
getOpenNotificationsList = genericResponseModel?.getOpenNotificationsList; getOpenNotificationsList = genericResponseModel?.getOpenNotificationsList;
workListCounter = genericResponseModel?.pOPENNTFNUMBER ?? 0; workListCounter = genericResponseModel?.pOPENNTFNUMBER ?? 0;
if (env.itg) itgFormsModel = await DashboardApiClient().getItgFormsPendingTask();
itgFormsModel = await DashboardApiClient().getItgFormsPendingTask();
workListCounter = workListCounter + (itgFormsModel?.totalCount ?? 0); workListCounter = workListCounter + (itgFormsModel?.totalCount ?? 0);
if (env.itg) { GenericResponseModel? cocGenericResponseModel = await DashboardApiClient().getCOCNotifications();
GenericResponseModel? cocGenericResponseModel = await DashboardApiClient().getCOCNotifications(); cocCount = cocGenericResponseModel?.mohemmITGPendingTaskResponseItem;
cocCount = cocGenericResponseModel?.mohemmITGPendingTaskResponseItem; if (cocCount != null) {
if (cocCount != null) { cocFinalCount = (cocCount?.escalation ?? 0) + (cocCount?.waitingToClose ?? 0) + (cocCount?.waitingForAcceptance ?? 0) + (cocCount?.extendTATRequest ?? 0);
cocFinalCount = (cocCount?.escalation ?? 0) + (cocCount?.waitingToClose ?? 0) + (cocCount?.waitingForAcceptance ?? 0) + (cocCount?.extendTATRequest ?? 0); workListCounter += cocFinalCount;
workListCounter += cocFinalCount;
}
} }
if (showLoading) Utils.hideLoading(context); if (showLoading) Utils.hideLoading(context);
notifyListeners(); notifyListeners();
} catch (ex) { } catch (ex) {
@ -209,13 +200,10 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
//Leave and Ticket Balance API's & Methods //Leave and Ticket Balance API's & Methods
Future fetchLeaveTicketBalance(context, DateTime date) async { Future fetchLeaveTicketBalance(context, DateTime date) async {
try { try {
accrualList = await DashboardApiClient().getAccrualBalances(DateFormat("MM/dd/yyyy", "en_US").format(date)); accrualList = await DashboardApiClient().getAccrualBalances(DateFormat("MM/dd/yyyy").format(date));
isLeaveTicketBalanceLoading = false; isLeaveTicketBalanceLoading = false;
leaveBalanceAccrual = accrualList!.singleWhere((element) => element.accuralPlanName == 'Annual Vacation Accrual' || element.accuralPlanName == "خطة استحقاق الاجازة الاعتيادية", orElse: null); leaveBalanceAccrual = accrualList![0];
oldLeaveBalanceAccrual = accrualList!.singleWhere((element) => element.accuralPlanName == 'Old Leave Balance' || element.accuralPlanName == "خطة فصل الارصدة 1439", orElse: null); ticketBalance = (accrualList![1].accrualNetEntitlement ?? 0.0) + (accrualList![2].accrualNetEntitlement ?? 0.0);
businessTripAccrual = accrualList!.singleWhere((element) => element.accuralPlanName == 'Business Trip Accrual' || element.accuralPlanName == "خطة استحقاق الإنتدابات", orElse: null);
ticketBalance = (accrualList![1].accrualNetEntitlement ?? 0.0) + (accrualList![2].accrualNetEntitlement ?? 0.0) + (accrualList![3].accrualNetEntitlement ?? 0.0);
notifyListeners(); notifyListeners();
} catch (ex) { } catch (ex) {
isLeaveTicketBalanceLoading = false; isLeaveTicketBalanceLoading = false;
@ -232,19 +220,16 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
void fetchListMenu() async { void fetchListMenu() async {
try { try {
List<ListMenu> menuList = await DashboardApiClient().getListMenu(); List<ListMenu> menuList = await DashboardApiClient().getListMenu();
for (var menu in menuList) { List findMyRequest = menuList.where((element) => element.menuType == "E").toList();
if (menu.menuType == "E") { if (findMyRequest.isNotEmpty) {
myRequest = menu; drawerMenuItemList.insert(3, DrawerMenuItem("assets/images/drawer/my_requests.svg", LocaleKeys.myRequest.tr(), AppRoutes.myRequests));
} else if (menu.menuType == "M") { }
AppState().setempStatusIsManager = true; List findMyTeam = menuList.where((element) => element.menuType == "M").toList();
drawerMenuItemList.add(DrawerMenuItem("assets/images/drawer/my_team_icon.png", LocaleKeys.myTeamMembers.tr(), AppRoutes.myTeam)); if (findMyTeam.isNotEmpty) {
} drawerMenuItemList.insert(2, DrawerMenuItem("assets/images/drawer/my_team.svg", LocaleKeys.myTeamMembers.tr(), AppRoutes.myTeam));
} }
isMyRequestLoading = false;
notifyListeners();
} catch (ex) { } catch (ex) {
logger.wtf(ex); logger.wtf(ex);
notifyListeners();
Utils.handleException(ex, null, null); Utils.handleException(ex, null, null);
} }
} }
@ -255,14 +240,9 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
GenericResponseModel? genericResponseModel = await DashboardApiClient().getGetMenuEntries(); GenericResponseModel? genericResponseModel = await DashboardApiClient().getGetMenuEntries();
getMenuEntriesList = genericResponseModel!.getMenuEntriesList; getMenuEntriesList = genericResponseModel!.getMenuEntriesList;
homeMenus = parseMenus(getMenuEntriesList ?? []); homeMenus = parseMenus(getMenuEntriesList ?? []);
if (homeMenus!.isNotEmpty) { if (homeMenus!.isNotEmpty) {
if (env.dashboard.monthlyAttendance) { homeMenus!.first.menuEntiesList.insert(0, GetMenuEntriesList(requestType: "MONTHLY_ATTENDANCE", prompt: LocaleKeys.monthlyAttendance.tr()));
homeMenus!.first.menuEntiesList.insert(0, GetMenuEntriesList(requestType: "MONTHLY_ATTENDANCE", prompt: LocaleKeys.monthlyAttendance.tr())); homeMenus!.first.menuEntiesList.add(GetMenuEntriesList(requestType: "VACATION_RULE", prompt: LocaleKeys.vacationRule.tr()));
}
if (env.dashboard.vocationRules) {
homeMenus!.first.menuEntiesList.add(GetMenuEntriesList(requestType: "VACATION_RULE", prompt: LocaleKeys.vacationRule.tr()));
}
} }
isServicesMenusLoading = false; isServicesMenusLoading = false;
notifyListeners(); notifyListeners();
@ -276,7 +256,7 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
void getCategoryOffersListAPI(BuildContext context) async { void getCategoryOffersListAPI(BuildContext context) async {
try { try {
// Utils.showLoading(context); // Utils.showLoading(context);
getOffersList = await OffersAndDiscountsApiClient().getOffersList(0, 10); getOffersList = await OffersAndDiscountsApiClient().getOffersList(0, 6);
isOffersLoading = false; isOffersLoading = false;
notifyListeners(); notifyListeners();
} catch (ex) { } catch (ex) {
@ -301,6 +281,39 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
return res; return res;
} }
void fetchChatCounts() async {
try {
ChatUnreadCovnCountModel response = await DashboardApiClient().getChatCount();
chatUConvCounter = response.singleChatCount!;
isChatCounterLoding = false;
notifyListeners();
} catch (ex) {
logger.wtf(ex);
notifyListeners();
Utils.handleException(ex, null, null);
}
}
Future<void> getUserAutoLoginToken() async {
UserAutoLoginModel userLoginResponse = await ChatApiClient().getUserLoginToken();
if (userLoginResponse.response != null) {
AppState().setchatUserDetails = userLoginResponse;
} else {
Utils.showToast(
userLoginResponse.errorResponses!.first.fieldName.toString() + " Erorr",
);
}
}
Future<HubConnection> getHubConnection() async {
HubConnection hub;
HttpConnectionOptions httpOp = HttpConnectionOptions(skipNegotiation: false, logMessageContent: true);
hub = HubConnectionBuilder()
.withUrl(ApiConsts.chatHubConnectionUrl + "?UserId=${AppState().chatDetails!.response!.id}&source=Web&access_token=${AppState().chatDetails!.response!.token}", options: httpOp)
.withAutomaticReconnect(retryDelays: <int>[2000, 5000, 10000, 20000]).build();
isChatHubLoding = false;
return hub;
}
void notify() { void notify() {
notifyListeners(); notifyListeners();
} }

@ -1,56 +0,0 @@
import 'dart:io';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:url_launcher/url_launcher.dart';
class AppUpdateScreen extends StatefulWidget {
const AppUpdateScreen({Key? key}) : super(key: key);
@override
State<AppUpdateScreen> createState() => _UnsafeDeviceScreenState();
}
class _UnsafeDeviceScreenState extends State<AppUpdateScreen> {
String? dynamicParams;
@override
Widget build(BuildContext context) {
dynamicParams ??= ModalRoute.of(context)!.settings.arguments as String;
return Scaffold(
body: SafeArea(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
21.height,
Center(child: Image.asset("assets/images/logos/main_mohemm_logo.png", width: 200, height: 50)),
50.height,
"Please Update Your App".toText24(isBold: true),
48.height,
dynamicParams.toString().toText14(isCenter: true).paddingOnly(left: 20.0, right: 20.0),
21.height,
DefaultButton(LocaleKeys.ok.tr(), () async {
if (Platform.isAndroid || Platform.isIOS) {
var appId = Platform.isAndroid ? 'hmg.cloudSolutions.mohem' : '1468856602';
var url = Uri.parse(
Platform.isAndroid ? "market://details?id=$appId" : "https://apps.apple.com/app/id$appId",
);
launchUrl(
url,
mode: LaunchMode.externalApplication,
);
}
}).paddingAll(24)
],
),
),
);
}
}

@ -1,358 +0,0 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/painting.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:intl/intl.dart';
import 'package:mohem_flutter_app/api/monthly_attendance_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/date_uitl.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/employee_leaves_list.dart';
import 'package:mohem_flutter_app/models/get_day_hours_type_details_list_model.dart';
import 'package:mohem_flutter_app/models/get_schedule_shifts_details_list_model.dart';
import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/circular_step_progress_bar.dart';
import 'package:month_picker_dialog_2/month_picker_dialog_2.dart';
import 'package:pie_chart/pie_chart.dart';
import 'package:sizer/sizer.dart';
import 'package:syncfusion_flutter_calendar/calendar.dart';
enum LeaveType { ABSENCE, BUSINESS_TRIP, HOLIDAY, NORMAL }
class MoeMonthlyAttendanceScreen extends StatefulWidget {
@override
State<MoeMonthlyAttendanceScreen> createState() => _MoeMonthlyAttendanceScreenState();
}
class _MoeMonthlyAttendanceScreenState extends State<MoeMonthlyAttendanceScreen> {
DateTime currentDate = DateTime.now();
int searchYear = DateTime.now().year;
final CalendarController _calendarController = CalendarController();
List<EmployeeLeavesList> employeeLeavesList = [];
@override
void initState() {
super.initState();
getLeavesData(currentDate);
// callTimeCardAndHourDetails(date.day, searchMonth, searchYear);
}
void getLeavesData(DateTime date) async {
try {
Utils.showLoading(context);
String startDate = '${date.year}-${date.month}-${date.day}';
int lastday = DateTime(date.year, date.month + 1, 0).day;
String endDate = '${date.year}-${date.month}-$lastday';
employeeLeavesList = await MonthlyAttendanceApiClient().getEmployeeLeaves(startDate, endDate);
Utils.hideLoading(context);
_calendarController.displayDate = date;
setState(() {});
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBarWidget(
context,
// title: LocaleKeys.mowadhafhiRequest.tr(),
title: "",
// showHomeButton: true,
),
body: ListView(
scrollDirection: Axis.vertical,
children: [
Column(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LocaleKeys.attendance.tr().toText24(isBold: true, color: MyColors.grey3AColor),
Row(
children: [
"${DateFormat("MMMM-yyyy").format(currentDate)}".toText16(color: MyColors.greyACColor),
const Icon(Icons.keyboard_arrow_down_rounded, color: MyColors.greyACColor),
],
).onPress(() async {
showMonthPicker(
context: context,
//locale: EasyLocalization.of(context)?.locale,
initialDate: currentDate,
firstDate: DateTime(searchYear - 2),
lastDate: DateTime.now(),
confirmText: Text(LocaleKeys.confirm.tr()),
cancelText: Text(LocaleKeys.cancel.tr()),
).then((selectedDate) {
if (selectedDate != null) {
getLeavesData(selectedDate);
setState(() {
currentDate = selectedDate;
});
}
});
}),
18.height,
AspectRatio(aspectRatio: 304 / 244, child: calendarWidget()),
12.height,
SizedBox(
width: double.infinity,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
showColorItem("Absence", MyColors.pinkDarkColor),
showColorItem("Business Trip", MyColors.gradiantStartColor),
showColorItem("Holiday", MyColors.gradiantEndColor),
],
),
),
],
).paddingOnly(left: 21, right: 21, top: 21),
],
),
],
),
);
}
Widget showColorItem(String title, Color color) {
return Row(
children: [
Container(
width: 20,
height: 20,
color: color,
).circle(2000),
8.width,
title.toText12()
],
);
}
Widget calendarWidget() {
return SfCalendar(
view: CalendarView.month,
showDatePickerButton: false,
controller: _calendarController,
backgroundColor: Colors.white,
headerHeight: 0,
viewNavigationMode: ViewNavigationMode.none,
todayHighlightColor: MyColors.grey3AColor,
showNavigationArrow: false,
showCurrentTimeIndicator: false,
showWeekNumber: false,
cellBorderColor: Colors.white,
onTap: (v) {
dynamic index = v.date?.day;
if (index != null) {
index = index - 1;
}
EmployeeLeavesList leaves = employeeLeavesList[index];
if (leaves.leaveType != LeaveType.NORMAL.name) {
showModalBottomSheet(
context: context,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(25.0),
topRight: Radius.circular(25.0),
)),
isScrollControlled: true,
backgroundColor: MyColors.white,
builder: (_) {
return DraggableScrollableSheet(
maxChildSize: 0.75,
expand: false,
initialChildSize: 0.75,
builder: (_, controller) {
return Column(
children: [
Container(
width: 49,
height: 7,
margin: const EdgeInsets.symmetric(vertical: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25),
color: MyColors.darkGreyColor,
),
),
16.height,
Container(
padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 40),
margin: const EdgeInsets.only(left: 20, right: 20),
decoration: BoxDecoration(
border: Border.all(
color: Colors.black,
),
borderRadius: BorderRadius.circular(12)),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
DateUtil.getWeekDay(DateUtil.convertStringToDateTime(leaves.eventDate ?? "").weekday).toString().toText14(),
DateUtil.convertStringToDateTime(leaves.eventDate ?? "").day.toString().toText20(),
DateUtil.getMonth(DateUtil.convertStringToDateTime(leaves.eventDate ?? "").month).toString().toText14(),
DateUtil.convertStringToDateTime(leaves.eventDate ?? "").year.toString().toText14(),
],
),
),
6.height,
showText(LocaleKeys.leaveType.tr(), leaves.leaveType.toString()),
// if (leaves.absenceAttendanceTypeName.toString().isNotEmpty)
// const Divider(
// color: MyColors.borderCEColor,
// ),
// if (leaves.absenceAttendanceTypeName.toString().isNotEmpty) showText(LocaleKeys.attendanceType.tr(), leaves.absenceAttendanceTypeName.toString()),
const Divider(
color: MyColors.borderCEColor,
),
showText(LocaleKeys.startDateT.tr(), leaves.dateStart.toString()),
const Divider(
color: MyColors.borderCEColor,
),
showText(LocaleKeys.endDate.tr(), leaves.dateEnd.toString()),
],
);
},
);
},
);
}
},
selectionDecoration: BoxDecoration(
border: Border.all(color: MyColors.white, width: 1),
shape: BoxShape.circle,
),
dataSource: MeetingDataSource(_getDataSource()),
// onTap: calendarTapped,
monthViewSettings: const MonthViewSettings(
dayFormat: 'EEE',
showTrailingAndLeadingDates: false,
showAgenda: false,
),
viewHeaderStyle: const ViewHeaderStyle(
dayTextStyle: TextStyle(color: MyColors.grey3AColor, fontSize: 13, fontWeight: FontWeight.w600),
),
monthCellBuilder: (build, details) {
LeaveType leaveType = LeaveType.NORMAL;
for (int i = 0; i < employeeLeavesList.length; i++) {
if (details.date.day == DateUtil.convertSimpleStringDateToDateddMMyyyy(employeeLeavesList[i].eventDate ?? "").day) {
if (employeeLeavesList[i].leaveType == LeaveType.ABSENCE.name) {
leaveType = LeaveType.ABSENCE;
} else if (employeeLeavesList[i].leaveType == LeaveType.BUSINESS_TRIP.name) {
leaveType = LeaveType.BUSINESS_TRIP;
} else if (employeeLeavesList[i].leaveType == LeaveType.HOLIDAY.name) {
leaveType = LeaveType.HOLIDAY;
}
}
}
return Container(
margin: const EdgeInsets.all(4),
decoration: BoxDecoration(
color: leaveType == LeaveType.ABSENCE
? MyColors.pinkDarkColor
: leaveType == LeaveType.BUSINESS_TRIP
? MyColors.gradiantStartColor
: leaveType == LeaveType.HOLIDAY
? MyColors.gradiantEndColor
: MyColors.white,
shape: BoxShape.circle,
border: Border.all(
color: leaveType == LeaveType.ABSENCE
? MyColors.pinkDarkColor
: leaveType == LeaveType.BUSINESS_TRIP
? MyColors.gradiantStartColor
: leaveType == LeaveType.HOLIDAY
? MyColors.gradiantEndColor
: MyColors.black,
width: 2,
),
),
alignment: Alignment.center,
child: Text(
"${details.date.day}",
style: TextStyle(fontSize: 13, fontWeight: FontWeight.w500, color: leaveType == LeaveType.NORMAL ? MyColors.black : MyColors.white),
),
);
},
);
}
List<Meeting> _getDataSource() {
List<Meeting> meetings = <Meeting>[];
return meetings;
}
Widget showText(String title, String value) {
return Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
value.toText18(color: MyColors.gradiantEndColor, isBold: true),
title.toText14(color: MyColors.greyACColor, isBold: false),
],
),
);
}
}
class MeetingDataSource extends CalendarDataSource {
MeetingDataSource(List<Meeting> source) {
appointments = source;
}
@override
DateTime getStartTime(int index) {
return _getMeetingData(index).from;
}
@override
DateTime getEndTime(int index) {
return _getMeetingData(index).to;
}
@override
String getSubject(int index) {
return _getMeetingData(index).eventName;
}
@override
Color getColor(int index) {
return _getMeetingData(index).background;
}
@override
bool isAllDay(int index) {
return _getMeetingData(index).isAllDay;
}
Meeting _getMeetingData(int index) {
dynamic meeting = appointments;
Meeting meetingData;
if (meeting is Meeting) {
meetingData = meeting;
}
return meeting;
}
}
class Meeting {
Meeting(this.eventName, this.from, this.to, this.background, this.isAllDay);
String eventName;
DateTime from;
DateTime to;
Color background;
bool isAllDay;
}

@ -85,8 +85,8 @@ class _MonthlyAttendanceScreenState extends State<MonthlyAttendanceScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Map<String, double> dataMap = { Map<String, double> dataMap = {
"Present": getTimeCardSummaryList?.aTTENDEDDAYS?.toDouble() ?? 0, "Present": getTimeCardSummaryList?.aTTENDEDDAYS?.toDouble() ?? 75,
"Absent": getTimeCardSummaryList?.aBSENTDAYS?.toDouble() ?? 0, "Absent": getTimeCardSummaryList?.aBSENTDAYS?.toDouble() ?? 25,
}; };
return Scaffold( return Scaffold(
backgroundColor: Colors.white, backgroundColor: Colors.white,
@ -112,8 +112,7 @@ class _MonthlyAttendanceScreenState extends State<MonthlyAttendanceScreen> {
], ],
).onPress(() async { ).onPress(() async {
showMonthPicker( showMonthPicker(
context: context, context: context, //locale: EasyLocalization.of(context)?.locale,
//locale: EasyLocalization.of(context)?.locale,
initialDate: formattedDate, initialDate: formattedDate,
firstDate: DateTime(searchYear - 2), firstDate: DateTime(searchYear - 2),
lastDate: DateTime.now(), lastDate: DateTime.now(),
@ -420,211 +419,211 @@ class _MonthlyAttendanceScreenState extends State<MonthlyAttendanceScreen> {
} }
if (details.date!.month == formattedDate.month && details.date!.year == formattedDate.year) { if (details.date!.month == formattedDate.month && details.date!.year == formattedDate.year) {
int val = details.date!.day; int val = details.date!.day;
getDayHoursTypeDetailsList?[val - 1].aTTENDEDFLAG == 'Y' getDayHoursTypeDetailsList?[val - 1].aTTENDEDFLAG == 'Y' ?
? showModalBottomSheet( showModalBottomSheet(
context: context, context: context,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(25)), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(25)),
isScrollControlled: true, isScrollControlled: true,
backgroundColor: MyColors.backgroundBlackColor, backgroundColor: MyColors.backgroundBlackColor,
builder: (_) { builder: (_) {
return DraggableScrollableSheet( return DraggableScrollableSheet(
maxChildSize: 0.9, maxChildSize: 0.9,
expand: false, expand: false,
builder: (_, controller) { builder: (_, controller) {
dynamic dmyString = getScheduleShiftsDetailsList!.sCHEDULEDATE; dynamic dmyString = getScheduleShiftsDetailsList!.sCHEDULEDATE;
DateTime dateTime1 = DateFormat("MM/dd/yyyy hh:mm:ss", "en_US").parse(dmyString); DateTime dateTime1 = DateFormat("MM/dd/yyyy hh:mm:ss").parse(dmyString);
return Column( return Column(
children: [ children: [
Container( Container(
width: 49, width: 49,
height: 7, height: 7,
margin: const EdgeInsets.symmetric(vertical: 10), margin: const EdgeInsets.symmetric(vertical: 10),
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25), borderRadius: BorderRadius.circular(25),
color: MyColors.darkGreyColor, color: MyColors.darkGreyColor,
), ),
), ),
Expanded( Expanded(
child: ListView.builder( child: ListView.builder(
controller: controller, controller: controller,
itemCount: 1, itemCount: 1,
itemBuilder: (_, i) => Container( itemBuilder: (_, i) =>
decoration: const BoxDecoration( Container(
borderRadius: BorderRadius.vertical( decoration: const BoxDecoration(
top: Radius.circular(25.0), borderRadius: BorderRadius.vertical(
), top: Radius.circular(25.0),
color: MyColors.backgroundBlackColor,
), ),
child: Column( color: MyColors.backgroundBlackColor,
children: [ ),
Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, children: [
children: [ Column(
"${DateFormat("MMMM-dd-yyyy").format(dateTime1).replaceAll('-', " ")}".toText24(isBold: true, color: Colors.white), crossAxisAlignment: CrossAxisAlignment.start,
LocaleKeys.attendanceDetails.tr().toText16(color: MyColors.greyACColor), children: [
12.height, "${DateFormat("MMMM-dd-yyyy").format(dateTime1).replaceAll('-', " ")}".toText24(isBold: true, color: Colors.white),
CircularStepProgressBar( LocaleKeys.attendanceDetails.tr().toText16(color: MyColors.greyACColor),
totalSteps: 16 * 4, 12.height,
currentStep: percentage, CircularStepProgressBar(
width: 224, totalSteps: 16 * 4,
height: 236, currentStep: percentage,
selectedColor: MyColors.gradiantEndColor, width: 224,
unselectedColor: MyColors.grey70Color, height: 236,
child: Column( selectedColor: MyColors.gradiantEndColor,
mainAxisSize: MainAxisSize.min, unselectedColor: MyColors.grey70Color,
children: [ child: Column(
"${getScheduleShiftsDetailsList!.pERCENTAGE}".toText44(color: Colors.white, isBold: true), mainAxisSize: MainAxisSize.min,
LocaleKeys.completed.tr().toText11(color: MyColors.greyACColor), children: [
28.height, "${getScheduleShiftsDetailsList!.pERCENTAGE}".toText44(color: Colors.white, isBold: true),
LocaleKeys.shiftTime.tr().toText11(color: MyColors.greyACColor), LocaleKeys.completed.tr().toText11(color: MyColors.greyACColor),
"${getScheduleShiftsDetailsList!.sHTNAME}".toText22(color: Colors.white, isBold: true), 28.height,
], LocaleKeys.shiftTime.tr().toText11(color: MyColors.greyACColor),
).center, "${getScheduleShiftsDetailsList!.sHTNAME}".toText22(color: Colors.white, isBold: true),
],
).center, ).center,
], ).center,
).paddingOnly(left: 21, right: 21, top: 27, bottom: 37), ],
Stack( ).paddingOnly(left: 21, right: 21, top: 27, bottom: 37),
children: [ Stack(
Container( children: [
width: double.infinity, Container(
decoration: const BoxDecoration(borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), color: Colors.white), width: double.infinity,
padding: const EdgeInsets.only(left: 31, right: 31, top: 30, bottom: 29), decoration: const BoxDecoration(borderRadius: BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), color: Colors.white),
child: Column( padding: const EdgeInsets.only(left: 31, right: 31, top: 30, bottom: 29),
children: [ child: Column(
Row( children: [
children: [ Row(
Column( children: [
crossAxisAlignment: CrossAxisAlignment.start, Column(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
LocaleKeys.actualCheckIn.tr().toText11( children: [
color: MyColors.grey67Color, LocaleKeys.actualCheckIn.tr().toText11(
), color: MyColors.grey67Color,
"${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}" != "" ),
? "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}".toText22(color: Colors.black, isBold: true) "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}" != ""
: "__".toText22(color: Colors.black, isBold: true), ? "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}".toText22(color: Colors.black, isBold: true)
], : "__".toText22(color: Colors.black, isBold: true),
).expanded, ],
Column( ).expanded,
crossAxisAlignment: CrossAxisAlignment.start, Column(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
LocaleKeys.actualCheckOut.tr().toText11( children: [
color: MyColors.grey67Color, LocaleKeys.actualCheckOut.tr().toText11(
), color: MyColors.grey67Color,
"${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}" != "" ),
? "${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}".toText22(color: Colors.black, isBold: true) "${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}" != ""
: "__".toText22(color: Colors.black, isBold: true), ? "${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}".toText22(color: Colors.black, isBold: true)
], : "__".toText22(color: Colors.black, isBold: true),
).expanded, ],
], ).expanded,
), ],
25.height, ),
const Divider( 25.height,
height: 1, const Divider(
thickness: 1, height: 1,
color: MyColors.lightGreyEFColor, thickness: 1,
), color: MyColors.lightGreyEFColor,
25.height, ),
Row( 25.height,
children: [ Row(
Column( children: [
crossAxisAlignment: CrossAxisAlignment.start, Column(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
LocaleKeys.approvedCheckIn.tr().toText11( children: [
color: MyColors.grey67Color, LocaleKeys.approvedCheckIn.tr().toText11(
), color: MyColors.grey67Color,
"${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}" != "" ),
? "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}".toText22(color: MyColors.greenColor, isBold: true) "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}" != ""
: "__".toText22(color: MyColors.greenColor, isBold: true), ? "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}".toText22(color: MyColors.greenColor, isBold: true)
], : "__".toText22(color: MyColors.greenColor, isBold: true),
).expanded, ],
Column( ).expanded,
crossAxisAlignment: CrossAxisAlignment.start, Column(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
LocaleKeys.approvedCheckOut.tr().toText11( children: [
color: MyColors.grey67Color, LocaleKeys.approvedCheckOut.tr().toText11(
), color: MyColors.grey67Color,
"${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}" != "" ),
? "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}".toText22(color: MyColors.greenColor, isBold: true) "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}" != ""
: "__".toText22(color: MyColors.greenColor, isBold: true), ? "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}".toText22(color: MyColors.greenColor, isBold: true)
], : "__".toText22(color: MyColors.greenColor, isBold: true),
).expanded, ],
], ).expanded,
), ],
25.height, ),
const Divider( 25.height,
height: 1, const Divider(
thickness: 1, height: 1,
color: MyColors.lightGreyEFColor, thickness: 1,
), color: MyColors.lightGreyEFColor,
25.height, ),
Row( 25.height,
children: [ Row(
Column( children: [
crossAxisAlignment: CrossAxisAlignment.start, Column(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
LocaleKeys.lateIn.tr().toText11( children: [
color: MyColors.grey67Color, LocaleKeys.lateIn.tr().toText11(
), color: MyColors.grey67Color,
"${getDayHoursTypeDetailsList[index].lATEINHRS}".toText22(color: MyColors.redColor, isBold: true), ),
], "${getDayHoursTypeDetailsList[index].lATEINHRS}".toText22(color: MyColors.redColor, isBold: true),
).expanded, ],
Column( ).expanded,
crossAxisAlignment: CrossAxisAlignment.start, Column(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
LocaleKeys.excess.tr().toText11( children: [
color: MyColors.grey67Color, LocaleKeys.excess.tr().toText11(
), color: MyColors.grey67Color,
"${getDayHoursTypeDetailsList[index].eXCESSHRS}".toText22(color: MyColors.backgroundBlackColor, isBold: true), ),
], "${getDayHoursTypeDetailsList[index].eXCESSHRS}".toText22(color: MyColors.backgroundBlackColor, isBold: true),
).expanded, ],
], ).expanded,
), ],
25.height, ),
const Divider( 25.height,
height: 1, const Divider(
thickness: 1, height: 1,
color: MyColors.lightGreyEFColor, thickness: 1,
), color: MyColors.lightGreyEFColor,
25.height, ),
Row( 25.height,
children: [ Row(
Column( children: [
crossAxisAlignment: CrossAxisAlignment.start, Column(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
LocaleKeys.shortage.tr().toText11( children: [
color: MyColors.grey67Color, LocaleKeys.shortage.tr().toText11(
), color: MyColors.grey67Color,
"${getDayHoursTypeDetailsList[index].sHORTAGEHRS}".toText22(color: MyColors.backgroundBlackColor, isBold: true), ),
], "${getDayHoursTypeDetailsList[index].sHORTAGEHRS}".toText22(color: MyColors.backgroundBlackColor, isBold: true),
).expanded, ],
Column( ).expanded,
crossAxisAlignment: CrossAxisAlignment.start, Column(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
LocaleKeys.earlyOut.tr().toText11( children: [
color: MyColors.grey67Color, LocaleKeys.earlyOut.tr().toText11(
), color: MyColors.grey67Color,
"${getDayHoursTypeDetailsList[index].eARLYOUTHRS}".toText22(color: Colors.black, isBold: true), ),
], "${getDayHoursTypeDetailsList[index].eARLYOUTHRS}".toText22(color: Colors.black, isBold: true),
).expanded, ],
], ).expanded,
), ],
], ),
), ],
), ),
], ),
), ],
], ),
), ],
), ),
), ),
), ),
], ),
); ],
}, );
); },
}, );
) },
: null; ):null;
} }
} }

@ -140,7 +140,7 @@ class _VacationRuleScreenState extends State<VacationRuleScreen> {
} }
String getParsedTime(String time) { String getParsedTime(String time) {
DateTime date = DateFormat("MM/dd/yyyy", "en_US").parse(time); DateTime date = DateFormat("MM/dd/yyyy").parse(time);
return DateFormat("d MMM yyyy", "en_US").format(date); return DateFormat("d MMM yyyy").format(date);
} }
} }

@ -10,14 +10,12 @@ import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/main.dart'; import 'package:mohem_flutter_app/main.dart';
import 'package:mohem_flutter_app/models/chat/call.dart'; import 'package:mohem_flutter_app/models/chat/call.dart';
import 'package:mohem_flutter_app/provider/chat_call_provider.dart';
import 'package:provider/provider.dart';
class OutGoingCall extends StatefulWidget { class OutGoingCall extends StatefulWidget {
CallDataModel outGoingCallData; CallDataModel OutGoingCallData;
bool isVideoCall; bool? isVideoCall;
OutGoingCall({Key? key, required this.outGoingCallData, required this.isVideoCall}) : super(key: key); OutGoingCall({Key? key, required this.OutGoingCallData, this.isVideoCall}) : super(key: key);
@override @override
_OutGoingCallState createState() => _OutGoingCallState(); _OutGoingCallState createState() => _OutGoingCallState();
@ -25,25 +23,23 @@ class OutGoingCall extends StatefulWidget {
class _OutGoingCallState extends State<OutGoingCall> with SingleTickerProviderStateMixin { class _OutGoingCallState extends State<OutGoingCall> with SingleTickerProviderStateMixin {
AnimationController? _animationController; AnimationController? _animationController;
late CameraController controller; CameraController? _controller;
late List<CameraDescription> _cameras;
Future<void>? _initializeControllerFuture; Future<void>? _initializeControllerFuture;
bool isCameraReady = false; bool isCameraReady = false;
bool isMicOff = false; bool isMicOff = false;
bool isLoudSpeaker = false; bool isLoudSpeaker = false;
bool isCamOff = false; bool isCamOff = false;
late ChatCallProvider callProviderd;
@override @override
void initState() { void initState() {
callProviderd = Provider.of<ChatCallProvider>(context, listen: false);
_animationController = AnimationController( _animationController = AnimationController(
vsync: this, vsync: this,
duration: const Duration( duration: const Duration(
milliseconds: 500, milliseconds: 500,
), ),
); );
// _runAnimation(); logger.d(jsonEncode(widget.OutGoingCallData));
//_runAnimation();
// connectSignaling(); // connectSignaling();
WidgetsBinding.instance.addPostFrameCallback( WidgetsBinding.instance.addPostFrameCallback(
(_) => _runAnimation(), (_) => _runAnimation(),
@ -62,10 +58,13 @@ class _OutGoingCallState extends State<OutGoingCall> with SingleTickerProviderSt
return Stack( return Stack(
alignment: FractionalOffset.center, alignment: FractionalOffset.center,
children: <Widget>[ children: <Widget>[
if (widget.isVideoCall) if (widget.isVideoCall!)
Positioned.fill( Positioned.fill(
child: CameraPreview( child: AspectRatio(
controller, aspectRatio: _controller!.value.aspectRatio,
child: CameraPreview(
_controller!,
),
), ),
), ),
Positioned.fill( Positioned.fill(
@ -75,7 +74,7 @@ class _OutGoingCallState extends State<OutGoingCall> with SingleTickerProviderSt
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: MyColors.grey57Color.withOpacity( color: MyColors.grey57Color.withOpacity(
0.3, 0.7,
), ),
), ),
child: Column( child: Column(
@ -106,9 +105,9 @@ class _OutGoingCallState extends State<OutGoingCall> with SingleTickerProviderSt
fit: BoxFit.cover, fit: BoxFit.cover,
), ),
10.height, 10.height,
Text( const Text(
widget.outGoingCallData.title, "Aamir Saleem Ahmad",
style: const TextStyle( style: TextStyle(
fontSize: 21, fontSize: 21,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: MyColors.white, color: MyColors.white,
@ -180,7 +179,7 @@ class _OutGoingCallState extends State<OutGoingCall> with SingleTickerProviderSt
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
if (widget.isVideoCall) if (widget.isVideoCall!)
RawMaterialButton( RawMaterialButton(
onPressed: () { onPressed: () {
_camOff(); _camOff();
@ -268,10 +267,13 @@ class _OutGoingCallState extends State<OutGoingCall> with SingleTickerProviderSt
} }
void _runAnimation() async { void _runAnimation() async {
_cameras = await availableCameras(); List<CameraDescription> cameras = await availableCameras();
CameraDescription firstCamera = _cameras[1]; CameraDescription firstCamera = cameras[1];
controller = CameraController(firstCamera, ResolutionPreset.medium); _controller = CameraController(
_initializeControllerFuture = controller.initialize(); firstCamera,
ResolutionPreset.medium,
);
_initializeControllerFuture = _controller!.initialize();
setState(() {}); setState(() {});
// setAudioFile(); // setAudioFile();
for (int i = 0; i < 100; i++) { for (int i = 0; i < 100; i++) {
@ -302,7 +304,7 @@ class _OutGoingCallState extends State<OutGoingCall> with SingleTickerProviderSt
try { try {
// backToHome(); // backToHome();
// final roomModel = RoomModel(name: widget.OutGoingCallData.name, token: widget.OutGoingCallData.sessionId, identity: widget.OutGoingCallData.identity); // final roomModel = RoomModel(name: widget.OutGoingCallData.name, token: widget.OutGoingCallData.sessionId, identity: widget.OutGoingCallData.identity);
await controller?.dispose(); await _controller?.dispose();
// changeCallStatusAPI(4); // changeCallStatusAPI(4);

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

Loading…
Cancel
Save